From 80103efae25399486829d99edbfd551f089ac8af Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Thu, 12 Apr 2018 11:43:06 +0000 Subject: [PATCH] Better handling for NPC removal. --- .../gameserver/model/actor/L2Character.java | 22 +++++++++++++++++-- .../gameserver/model/actor/L2Character.java | 22 +++++++++++++++++-- .../gameserver/model/actor/L2Character.java | 22 +++++++++++++++++-- .../gameserver/model/actor/L2Character.java | 22 +++++++++++++++++-- .../gameserver/model/actor/L2Character.java | 22 +++++++++++++++++-- .../gameserver/model/actor/L2Character.java | 22 +++++++++++++++++-- .../gameserver/model/actor/L2Character.java | 22 +++++++++++++++++-- 7 files changed, 140 insertions(+), 14 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 1bb16faf77..9bdd7bbbef 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -65,6 +65,7 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.instancemanager.QuestManager; import com.l2jmobius.gameserver.instancemanager.TimersManager; +import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.CharEffectList; import com.l2jmobius.gameserver.model.CreatureContainer; @@ -73,6 +74,7 @@ import com.l2jmobius.gameserver.model.L2AccessLevel; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Party; +import com.l2jmobius.gameserver.model.L2Spawn; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; import com.l2jmobius.gameserver.model.Location; @@ -3021,17 +3023,33 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } else if (isServitor()) { - ((L2ServitorInstance) this).unSummon(((L2ServitorInstance) this).getOwner()); + final L2ServitorInstance servitor = (L2ServitorInstance) this; + servitor.unSummon(servitor.getOwner()); } else if (isNpc()) { - LOGGER.warning("Deleting npc " + getName() + " NPCID[" + ((L2Npc) this).getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); + final L2Npc npc = (L2Npc) this; + LOGGER.warning("Deleting npc " + getName() + " NPCID[" + npc.getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + WalkingManager.getInstance().onDeath(npc); + final L2Character summoner = getSummoner(); + if ((summoner != null) && summoner.isNpc()) + { + ((L2Npc) summoner).removeSummonedNpc(getObjectId()); + } + L2World.getInstance().removeObject(this); + final L2Spawn spawn = npc.getSpawn(); + if ((spawn != null) && spawn.isRespawnEnabled()) + { + spawn.decreaseCount(npc); + spawn.doSpawn(); + } } else { LOGGER.warning("Deleting object " + getName() + " OID[" + getObjectId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + L2World.getInstance().removeObject(this); } } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 1bb16faf77..9bdd7bbbef 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -65,6 +65,7 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.instancemanager.QuestManager; import com.l2jmobius.gameserver.instancemanager.TimersManager; +import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.CharEffectList; import com.l2jmobius.gameserver.model.CreatureContainer; @@ -73,6 +74,7 @@ import com.l2jmobius.gameserver.model.L2AccessLevel; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Party; +import com.l2jmobius.gameserver.model.L2Spawn; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; import com.l2jmobius.gameserver.model.Location; @@ -3021,17 +3023,33 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } else if (isServitor()) { - ((L2ServitorInstance) this).unSummon(((L2ServitorInstance) this).getOwner()); + final L2ServitorInstance servitor = (L2ServitorInstance) this; + servitor.unSummon(servitor.getOwner()); } else if (isNpc()) { - LOGGER.warning("Deleting npc " + getName() + " NPCID[" + ((L2Npc) this).getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); + final L2Npc npc = (L2Npc) this; + LOGGER.warning("Deleting npc " + getName() + " NPCID[" + npc.getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + WalkingManager.getInstance().onDeath(npc); + final L2Character summoner = getSummoner(); + if ((summoner != null) && summoner.isNpc()) + { + ((L2Npc) summoner).removeSummonedNpc(getObjectId()); + } + L2World.getInstance().removeObject(this); + final L2Spawn spawn = npc.getSpawn(); + if ((spawn != null) && spawn.isRespawnEnabled()) + { + spawn.decreaseCount(npc); + spawn.doSpawn(); + } } else { LOGGER.warning("Deleting object " + getName() + " OID[" + getObjectId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + L2World.getInstance().removeObject(this); } } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 1bb16faf77..9bdd7bbbef 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -65,6 +65,7 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.instancemanager.QuestManager; import com.l2jmobius.gameserver.instancemanager.TimersManager; +import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.CharEffectList; import com.l2jmobius.gameserver.model.CreatureContainer; @@ -73,6 +74,7 @@ import com.l2jmobius.gameserver.model.L2AccessLevel; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Party; +import com.l2jmobius.gameserver.model.L2Spawn; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; import com.l2jmobius.gameserver.model.Location; @@ -3021,17 +3023,33 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } else if (isServitor()) { - ((L2ServitorInstance) this).unSummon(((L2ServitorInstance) this).getOwner()); + final L2ServitorInstance servitor = (L2ServitorInstance) this; + servitor.unSummon(servitor.getOwner()); } else if (isNpc()) { - LOGGER.warning("Deleting npc " + getName() + " NPCID[" + ((L2Npc) this).getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); + final L2Npc npc = (L2Npc) this; + LOGGER.warning("Deleting npc " + getName() + " NPCID[" + npc.getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + WalkingManager.getInstance().onDeath(npc); + final L2Character summoner = getSummoner(); + if ((summoner != null) && summoner.isNpc()) + { + ((L2Npc) summoner).removeSummonedNpc(getObjectId()); + } + L2World.getInstance().removeObject(this); + final L2Spawn spawn = npc.getSpawn(); + if ((spawn != null) && spawn.isRespawnEnabled()) + { + spawn.decreaseCount(npc); + spawn.doSpawn(); + } } else { LOGGER.warning("Deleting object " + getName() + " OID[" + getObjectId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + L2World.getInstance().removeObject(this); } } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 1bb16faf77..9bdd7bbbef 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -65,6 +65,7 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.instancemanager.QuestManager; import com.l2jmobius.gameserver.instancemanager.TimersManager; +import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.CharEffectList; import com.l2jmobius.gameserver.model.CreatureContainer; @@ -73,6 +74,7 @@ import com.l2jmobius.gameserver.model.L2AccessLevel; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Party; +import com.l2jmobius.gameserver.model.L2Spawn; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; import com.l2jmobius.gameserver.model.Location; @@ -3021,17 +3023,33 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } else if (isServitor()) { - ((L2ServitorInstance) this).unSummon(((L2ServitorInstance) this).getOwner()); + final L2ServitorInstance servitor = (L2ServitorInstance) this; + servitor.unSummon(servitor.getOwner()); } else if (isNpc()) { - LOGGER.warning("Deleting npc " + getName() + " NPCID[" + ((L2Npc) this).getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); + final L2Npc npc = (L2Npc) this; + LOGGER.warning("Deleting npc " + getName() + " NPCID[" + npc.getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + WalkingManager.getInstance().onDeath(npc); + final L2Character summoner = getSummoner(); + if ((summoner != null) && summoner.isNpc()) + { + ((L2Npc) summoner).removeSummonedNpc(getObjectId()); + } + L2World.getInstance().removeObject(this); + final L2Spawn spawn = npc.getSpawn(); + if ((spawn != null) && spawn.isRespawnEnabled()) + { + spawn.decreaseCount(npc); + spawn.doSpawn(); + } } else { LOGGER.warning("Deleting object " + getName() + " OID[" + getObjectId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + L2World.getInstance().removeObject(this); } } } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/L2Character.java index cb0399ddaa..abdb74bc3f 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -55,12 +55,14 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.InstanceManager; import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.instancemanager.TerritoryWarManager; +import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.CharEffectList; import com.l2jmobius.gameserver.model.L2AccessLevel; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Party; +import com.l2jmobius.gameserver.model.L2Spawn; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; import com.l2jmobius.gameserver.model.Location; @@ -4016,17 +4018,33 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } else if (isServitor()) { - ((L2ServitorInstance) this).unSummon(((L2ServitorInstance) this).getOwner()); + final L2ServitorInstance servitor = (L2ServitorInstance) this; + servitor.unSummon(servitor.getOwner()); } else if (isNpc()) { - LOGGER.warning("Deleting npc " + getName() + " NPCID[" + ((L2Npc) this).getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); + final L2Npc npc = (L2Npc) this; + LOGGER.warning("Deleting npc " + getName() + " NPCID[" + npc.getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + WalkingManager.getInstance().onDeath(npc); + final L2Character summoner = getSummoner(); + if ((summoner != null) && summoner.isNpc()) + { + ((L2Npc) summoner).removeSummonedNpc(getObjectId()); + } + L2World.getInstance().removeObject(this); + final L2Spawn spawn = npc.getSpawn(); + if ((spawn != null) && spawn.isRespawnEnabled()) + { + spawn.decreaseCount(npc); + spawn.doSpawn(); + } } else { LOGGER.warning("Deleting object " + getName() + " OID[" + getObjectId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + L2World.getInstance().removeObject(this); } } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 1bb16faf77..9bdd7bbbef 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -65,6 +65,7 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.instancemanager.QuestManager; import com.l2jmobius.gameserver.instancemanager.TimersManager; +import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.CharEffectList; import com.l2jmobius.gameserver.model.CreatureContainer; @@ -73,6 +74,7 @@ import com.l2jmobius.gameserver.model.L2AccessLevel; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Party; +import com.l2jmobius.gameserver.model.L2Spawn; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; import com.l2jmobius.gameserver.model.Location; @@ -3021,17 +3023,33 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } else if (isServitor()) { - ((L2ServitorInstance) this).unSummon(((L2ServitorInstance) this).getOwner()); + final L2ServitorInstance servitor = (L2ServitorInstance) this; + servitor.unSummon(servitor.getOwner()); } else if (isNpc()) { - LOGGER.warning("Deleting npc " + getName() + " NPCID[" + ((L2Npc) this).getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); + final L2Npc npc = (L2Npc) this; + LOGGER.warning("Deleting npc " + getName() + " NPCID[" + npc.getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + WalkingManager.getInstance().onDeath(npc); + final L2Character summoner = getSummoner(); + if ((summoner != null) && summoner.isNpc()) + { + ((L2Npc) summoner).removeSummonedNpc(getObjectId()); + } + L2World.getInstance().removeObject(this); + final L2Spawn spawn = npc.getSpawn(); + if ((spawn != null) && spawn.isRespawnEnabled()) + { + spawn.decreaseCount(npc); + spawn.doSpawn(); + } } else { LOGGER.warning("Deleting object " + getName() + " OID[" + getObjectId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + L2World.getInstance().removeObject(this); } } } diff --git a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 1bb16faf77..9bdd7bbbef 100644 --- a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -65,6 +65,7 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.instancemanager.QuestManager; import com.l2jmobius.gameserver.instancemanager.TimersManager; +import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.CharEffectList; import com.l2jmobius.gameserver.model.CreatureContainer; @@ -73,6 +74,7 @@ import com.l2jmobius.gameserver.model.L2AccessLevel; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Party; +import com.l2jmobius.gameserver.model.L2Spawn; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; import com.l2jmobius.gameserver.model.Location; @@ -3021,17 +3023,33 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } else if (isServitor()) { - ((L2ServitorInstance) this).unSummon(((L2ServitorInstance) this).getOwner()); + final L2ServitorInstance servitor = (L2ServitorInstance) this; + servitor.unSummon(servitor.getOwner()); } else if (isNpc()) { - LOGGER.warning("Deleting npc " + getName() + " NPCID[" + ((L2Npc) this).getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); + final L2Npc npc = (L2Npc) this; + LOGGER.warning("Deleting npc " + getName() + " NPCID[" + npc.getId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + WalkingManager.getInstance().onDeath(npc); + final L2Character summoner = getSummoner(); + if ((summoner != null) && summoner.isNpc()) + { + ((L2Npc) summoner).removeSummonedNpc(getObjectId()); + } + L2World.getInstance().removeObject(this); + final L2Spawn spawn = npc.getSpawn(); + if ((spawn != null) && spawn.isRespawnEnabled()) + { + spawn.decreaseCount(npc); + spawn.doSpawn(); + } } else { LOGGER.warning("Deleting object " + getName() + " OID[" + getObjectId() + "] from invalid location X:" + getX() + " Y:" + getY() + " Z:" + getZ()); deleteMe(); + L2World.getInstance().removeObject(this); } } }