root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/controllers/NpcController.java

9651003
18
18
19
import java.util.concurrent.Future;
19
import java.util.concurrent.Future;
20
20
21
import com.aionemu.gameserver.ai.events.Event;
21
import com.aionemu.gameserver.model.gameobjects.Npc;
22
import com.aionemu.gameserver.model.gameobjects.Npc;
22
import com.aionemu.gameserver.model.gameobjects.player.Player;
23
import com.aionemu.gameserver.model.gameobjects.player.Player;
23
import com.aionemu.gameserver.model.gameobjects.state.CreatureState;
24
import com.aionemu.gameserver.model.gameobjects.state.CreatureState;
24
import com.aionemu.gameserver.model.gameobjects.stats.NpcLifeStats;
25
import com.aionemu.gameserver.model.gameobjects.stats.NpcLifeStats;
26
import com.aionemu.gameserver.network.aion.serverpackets.SM_DELETE;
25
import com.aionemu.gameserver.network.aion.serverpackets.SM_DIALOG_WINDOW;
27
import com.aionemu.gameserver.network.aion.serverpackets.SM_DIALOG_WINDOW;
26
import com.aionemu.gameserver.questEngine.QuestEngine;
28
import com.aionemu.gameserver.questEngine.QuestEngine;
27
import com.aionemu.gameserver.questEngine.model.QuestEnv;
29
import com.aionemu.gameserver.questEngine.model.QuestEnv;
30
import com.aionemu.gameserver.services.DecayService;
28
import com.aionemu.gameserver.services.DropService;
31
import com.aionemu.gameserver.services.DropService;
32
import com.aionemu.gameserver.services.RespawnService;
29
import com.aionemu.gameserver.utils.PacketSendUtility;
33
import com.aionemu.gameserver.utils.PacketSendUtility;
30
34
31
/**
35
/**
...
...
53
		this.getOwner().setState(CreatureState.NPC_IDLE);
57
		this.getOwner().setState(CreatureState.NPC_IDLE);
54
		this.getOwner().setLifeStats(new NpcLifeStats(getOwner()));
58
		this.getOwner().setLifeStats(new NpcLifeStats(getOwner()));
55
	}
59
	}
60
	
61
	public void onDespawn(boolean forced)
62
	{
63
		if(forced && decayTask != null)
64
			decayTask.cancel(true);
65
		
66
		Npc owner = getOwner();
67
		if(owner == null || !owner.isSpawned())
68
			return;
69
			
70
		PacketSendUtility.broadcastPacket(owner, new SM_DELETE(owner));
71
		owner.getAi().handleEvent(Event.DESPAWN);
72
		owner.getPosition().getWorld().despawn(owner);	
73
		decayTask = null;
74
	}
75
	
76
	@Override
77
	public void onDie()
78
	{
79
		super.onDie();
80
		if(decayTask == null)
81
		{
82
			decayTask = DecayService.getInstance().scheduleDecayTask(this.getOwner());
83
		}		
84
		int instanceId = getOwner().getInstanceId();
85
		if(getOwner().getSpawn().isRespawn(instanceId))
86
		{
87
			RespawnService.getInstance().scheduleRespawnTask(this.getOwner());
88
		}
89
	}
56
90
57
	@Override
91
	@Override
58
	public Npc getOwner()
92
	public Npc getOwner()
...
...
69
		PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10));
103
		PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10));
70
	}
104
	}
71
	
105
	
106
	/**
107
	 * This method should be caleed to make forced despawn of NPC and delete it from the world
108
	 */
109
	public void onDelete()
110
	{
111
		this.onDespawn(true);
112
		this.delete();
113
	}
72
}
114
}