Changeset 1003
Author: ATracer
(2010/02/08 20:12) About 2 years ago
small refactoring of despawn functionality and deletion of npcs from the world for one-time spawns (from quests). Despawn of mobs should be tested during regular attack and during campaign quests.
{{mob.getController().onDie();mob.getController().onDelete();{{monster.getAi().stop();monster.getController().onDelete();monster.getController().onDie();{{monster.getController().onDie();monster.getController().onDelete();mob.getController().onDie();mob.getController().onDelete();{{DecayService.getInstance().scheduleDecayTask(owner);owner.getController().onDespawn(true);if(decayTask == null){decayTask = DecayService.getInstance().scheduleDecayTask(this.getOwner());RespawnService.getInstance().scheduleRespawnTask(this.getOwner());}import com.aionemu.gameserver.services.DecayService;import com.aionemu.gameserver.services.RespawnService;if(decayTask == null){decayTask = DecayService.getInstance().scheduleDecayTask(this.getOwner());RespawnService.getInstance().scheduleRespawnTask(this.getOwner());}{{{{{elselog.error("Attempt to remove from world not spawned object");{{@Overridepublic NpcController getController(){return (NpcController) super.getController();}{{* This file is part of aion-unique <aion-unique.smfnew.com>.* This file is part of aion-unique <aion-unique.org>.import com.aionemu.gameserver.ai.events.Event;import com.aionemu.gameserver.network.aion.serverpackets.SM_DELETE;import com.aionemu.gameserver.utils.PacketSendUtility;import com.aionemu.gameserver.world.World;{{final World world = npc.getPosition().getWorld();//TODO separate thread executor for decay/spawns// or schedule separate decay runnable service with queue{{{{if(!npc.isSpawned())npc.getController().onDespawn(false);return;npc.getAi().handleEvent(Event.DESPAWN);PacketSendUtility.broadcastPacket(npc, new SM_DELETE(npc));world.despawn(npc);{{Creature creature = (Creature) world.findAionObject(npcId);Npc npc = (Npc) world.findAionObject(npcId);if(creature != null)if(npc != null){{PacketSendUtility.broadcastPacket(creature, new SM_DELETE(creature));npc.getController().onDespawn(true);//TODO send 7B ??//7B 54 38 00 00 0D 00 00 00 00 00 00// or//7B 54 38 00 00 0E 00 00 00 00 00 00