From 02786eab63a197a8a20f95b1e7f07adf17107fbe Mon Sep 17 00:00:00 2001 From: P0nk Date: Thu, 9 Sep 2021 22:06:11 +0200 Subject: [PATCH] Rename and clean up MapleMonster --- scripts/event/0_EXAMPLE.js | 2 +- src/main/java/client/Character.java | 18 +- src/main/java/client/Client.java | 4 +- .../command/commands/gm1/BossHpCommand.java | 4 +- .../command/commands/gm1/MobHpCommand.java | 4 +- .../command/commands/gm2/WhereaMiCommand.java | 10 +- .../command/commands/gm3/KillAllCommand.java | 4 +- .../command/commands/gm3/SpawnCommand.java | 4 +- .../command/commands/gm4/CakeCommand.java | 4 +- .../command/commands/gm4/PmobCommand.java | 4 +- .../command/commands/gm5/DebugCommand.java | 4 +- .../handlers/AbstractDealDamageHandler.java | 6 +- .../channel/handlers/AdminCommandHandler.java | 6 +- .../channel/handlers/AutoAggroHandler.java | 4 +- .../handlers/FieldDamageMobHandler.java | 4 +- .../handlers/MobBanishPlayerHandler.java | 4 +- .../handlers/MobDamageMobFriendlyHandler.java | 4 +- .../channel/handlers/MobDamageMobHandler.java | 10 +- .../channel/handlers/MonsterBombHandler.java | 4 +- .../handlers/MonsterCarnivalHandler.java | 4 +- .../channel/handlers/MoveLifeHandler.java | 4 +- .../handlers/PlayerMapTransitionHandler.java | 4 +- .../channel/handlers/SpecialMoveHandler.java | 4 +- .../channel/handlers/SummonDamageHandler.java | 4 +- .../channel/handlers/TakeDamageHandler.java | 6 +- .../channel/handlers/UseCatchItemHandler.java | 4 +- .../world/MonsterAggroCoordinator.java | 18 +- .../scripting/AbstractPlayerInteraction.java | 4 +- .../scripting/event/EventInstanceManager.java | 20 +- .../java/scripting/event/EventManager.java | 4 +- .../reactor/ReactorActionManager.java | 6 +- src/main/java/server/MapleStatEffect.java | 6 +- .../java/server/expeditions/Expedition.java | 4 +- src/main/java/server/life/LifeFactory.java | 4 +- .../server/life/MobAttackInfoFactory.java | 2 +- src/main/java/server/life/MobSkill.java | 14 +- .../life/{MapleMonster.java => Monster.java} | 663 +++++++++--------- src/main/java/server/life/SpawnPoint.java | 6 +- src/main/java/server/maps/MapleMap.java | 130 ++-- .../java/server/maps/MapleMapFactory.java | 4 +- src/main/java/server/maps/MapleMist.java | 8 +- src/main/java/tools/PacketCreator.java | 22 +- 42 files changed, 520 insertions(+), 529 deletions(-) rename src/main/java/server/life/{MapleMonster.java => Monster.java} (91%) diff --git a/scripts/event/0_EXAMPLE.js b/scripts/event/0_EXAMPLE.js index b08814c392..95716edebf 100644 --- a/scripts/event/0_EXAMPLE.js +++ b/scripts/event/0_EXAMPLE.js @@ -104,7 +104,7 @@ function friendlyKilled(mob, eim) { } function allMonstersDead(eim) { - // When invoking unregisterMonster(MapleMonster mob) OR killed + // When invoking unregisterMonster(Monster mob) OR killed // Happens only when size = 0 } diff --git a/src/main/java/client/Character.java b/src/main/java/client/Character.java index 41d38e859e..b66d970ac4 100644 --- a/src/main/java/client/Character.java +++ b/src/main/java/client/Character.java @@ -63,10 +63,10 @@ import server.events.Events; import server.events.RescueGaga; import server.events.gm.Fitness; import server.events.gm.Ola; -import server.life.MapleMonster; import server.life.MaplePlayerNPC; import server.life.MobSkill; import server.life.MobSkillFactory; +import server.life.Monster; import server.maps.*; import server.maps.MapleMiniGame.MiniGameResult; import server.minigame.MapleRockPaperScissor; @@ -177,7 +177,7 @@ public class Character extends AbstractCharacterObject { private final List> lastVisitedMaps = new LinkedList<>(); private WeakReference ownedMap = new WeakReference<>(null); private final Map quests; - private final Set controlled = new LinkedHashSet<>(); + private final Set controlled = new LinkedHashSet<>(); private final Map entered = new LinkedHashMap<>(); private final Set visibleMapObjects = Collections.newSetFromMap(new ConcurrentHashMap<>()); private final Map skills = new LinkedHashMap<>(); @@ -833,7 +833,7 @@ public class Character extends AbstractCharacterObject { } for (MapleMapObject mo : this.getMap().getMonsters()) { - MapleMonster m = (MapleMonster) mo; + Monster m = (Monster) mo; m.aggroUpdateController(); } } else { @@ -1815,7 +1815,7 @@ public class Character extends AbstractCharacterObject { } } - public void controlMonster(MapleMonster monster) { + public void controlMonster(Monster monster) { if (cpnLock.tryLock()) { try { controlled.add(monster); @@ -1825,7 +1825,7 @@ public class Character extends AbstractCharacterObject { } } - public void stopControllingMonster(MapleMonster monster) { + public void stopControllingMonster(Monster monster) { if (cpnLock.tryLock()) { try { controlled.remove(monster); @@ -1844,7 +1844,7 @@ public class Character extends AbstractCharacterObject { } } - public Collection getControlledMonsters() { + public Collection getControlledMonsters() { cpnLock.lock(); try { return new ArrayList<>(controlled); @@ -1854,7 +1854,7 @@ public class Character extends AbstractCharacterObject { } public void releaseControlledMonsters() { - Collection controlledMonsters; + Collection controlledMonsters; cpnLock.lock(); try { @@ -1864,7 +1864,7 @@ public class Character extends AbstractCharacterObject { cpnLock.unlock(); } - for (MapleMonster monster : controlledMonsters) { + for (Monster monster : controlledMonsters) { monster.aggroRedirectController(); } } @@ -9613,7 +9613,7 @@ public class Character extends AbstractCharacterObject { } } - public void showUnderleveledInfo(MapleMonster mob) { + public void showUnderleveledInfo(Monster mob) { long curTime = Server.getInstance().getCurrentTime(); if (nextWarningTime < curTime) { nextWarningTime = curTime + (60 * 1000); // show underlevel info again after 1 minute diff --git a/src/main/java/client/Client.java b/src/main/java/client/Client.java index fb0bc3db07..6277f64422 100644 --- a/src/main/java/client/Client.java +++ b/src/main/java/client/Client.java @@ -58,7 +58,7 @@ import scripting.quest.QuestActionManager; import scripting.quest.QuestScriptManager; import server.ThreadManager; import server.TimerManager; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.FieldLimit; import server.maps.MapleMap; import server.maps.MapleMiniDungeonInfo; @@ -1416,7 +1416,7 @@ public class Client extends ChannelInboundHandlerAdapter { sendPacket(PacketCreator.serverMessage(this.getChannelServer().getServerMessage())); } - public synchronized void announceBossHpBar(MapleMonster mm, final int mobHash, Packet packet) { + public synchronized void announceBossHpBar(Monster mm, final int mobHash, Packet packet) { long timeNow = System.currentTimeMillis(); int targetHash = player.getTargetHpBarHash(); diff --git a/src/main/java/client/command/commands/gm1/BossHpCommand.java b/src/main/java/client/command/commands/gm1/BossHpCommand.java index 18b4ee58bb..930528d2a8 100644 --- a/src/main/java/client/command/commands/gm1/BossHpCommand.java +++ b/src/main/java/client/command/commands/gm1/BossHpCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm1; import client.Character; import client.Client; import client.command.Command; -import server.life.MapleMonster; +import server.life.Monster; public class BossHpCommand extends Command { { @@ -36,7 +36,7 @@ public class BossHpCommand extends Command { @Override public void execute(Client c, String[] params) { Character player = c.getPlayer(); - for(MapleMonster monster : player.getMap().getAllMonsters()) { + for(Monster monster : player.getMap().getAllMonsters()) { if(monster != null && monster.isBoss() && monster.getHp() > 0) { long percent = monster.getHp() * 100L / monster.getMaxHp(); String bar = "["; diff --git a/src/main/java/client/command/commands/gm1/MobHpCommand.java b/src/main/java/client/command/commands/gm1/MobHpCommand.java index dfbdb5db53..9db3a19a4b 100644 --- a/src/main/java/client/command/commands/gm1/MobHpCommand.java +++ b/src/main/java/client/command/commands/gm1/MobHpCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm1; import client.Character; import client.Client; import client.command.Command; -import server.life.MapleMonster; +import server.life.Monster; public class MobHpCommand extends Command { { @@ -36,7 +36,7 @@ public class MobHpCommand extends Command { @Override public void execute(Client c, String[] params) { Character player = c.getPlayer(); - for(MapleMonster monster : player.getMap().getAllMonsters()) { + for(Monster monster : player.getMap().getAllMonsters()) { if (monster != null && monster.getHp() > 0) { player.yellowMessage(monster.getName() + " (" + monster.getId() + ") has " + monster.getHp() + " / " + monster.getMaxHp() + " HP."); diff --git a/src/main/java/client/command/commands/gm2/WhereaMiCommand.java b/src/main/java/client/command/commands/gm2/WhereaMiCommand.java index 948407cf8d..ccf084d531 100644 --- a/src/main/java/client/command/commands/gm2/WhereaMiCommand.java +++ b/src/main/java/client/command/commands/gm2/WhereaMiCommand.java @@ -26,9 +26,9 @@ package client.command.commands.gm2; import client.Character; import client.Client; import client.command.Command; -import server.life.MapleMonster; import server.life.MapleNPC; import server.life.MaplePlayerNPC; +import server.life.Monster; import server.maps.MapleMapObject; import java.util.HashSet; @@ -45,7 +45,7 @@ public class WhereaMiCommand extends Command { HashSet chars = new HashSet<>(); HashSet npcs = new HashSet<>(); HashSet playernpcs = new HashSet<>(); - HashSet mobs = new HashSet<>(); + HashSet mobs = new HashSet<>(); for (MapleMapObject mmo : player.getMap().getMapObjects()) { if (mmo instanceof MapleNPC) { @@ -54,8 +54,8 @@ public class WhereaMiCommand extends Command { } else if (mmo instanceof Character) { Character mc = (Character) mmo; chars.add(mc); - } else if (mmo instanceof MapleMonster) { - MapleMonster mob = (MapleMonster) mmo; + } else if (mmo instanceof Monster) { + Monster mob = (Monster) mmo; if (mob.isAlive()) { mobs.add(mob); } @@ -88,7 +88,7 @@ public class WhereaMiCommand extends Command { if (!mobs.isEmpty()) { player.yellowMessage("Monsters on this map:"); - for (MapleMonster mob : mobs) { + for (Monster mob : mobs) { if (mob.isAlive()) { player.dropMessage(5, ">> " + mob.getName() + " - " + mob.getId() + " - Oid: " + mob.getObjectId()); } diff --git a/src/main/java/client/command/commands/gm3/KillAllCommand.java b/src/main/java/client/command/commands/gm3/KillAllCommand.java index e7c955f8fa..d8a9e879d3 100644 --- a/src/main/java/client/command/commands/gm3/KillAllCommand.java +++ b/src/main/java/client/command/commands/gm3/KillAllCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm3; import client.Character; import client.Client; import client.command.Command; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.MapleMap; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; @@ -46,7 +46,7 @@ public class KillAllCommand extends Command { List monsters = map.getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER)); int count = 0; for (MapleMapObject monstermo : monsters) { - MapleMonster monster = (MapleMonster) monstermo; + Monster monster = (Monster) monstermo; if (!monster.getStats().isFriendly() && !(monster.getId() >= 8810010 && monster.getId() <= 8810018)) { map.damageMonster(player, monster, Integer.MAX_VALUE); count++; diff --git a/src/main/java/client/command/commands/gm3/SpawnCommand.java b/src/main/java/client/command/commands/gm3/SpawnCommand.java index cd43ea1809..cc490d75be 100644 --- a/src/main/java/client/command/commands/gm3/SpawnCommand.java +++ b/src/main/java/client/command/commands/gm3/SpawnCommand.java @@ -27,7 +27,7 @@ import client.Character; import client.Client; import client.command.Command; import server.life.LifeFactory; -import server.life.MapleMonster; +import server.life.Monster; public class SpawnCommand extends Command { { @@ -42,7 +42,7 @@ public class SpawnCommand extends Command { return; } - MapleMonster monster = LifeFactory.getMonster(Integer.parseInt(params[0])); + Monster monster = LifeFactory.getMonster(Integer.parseInt(params[0])); if (monster == null) { return; } diff --git a/src/main/java/client/command/commands/gm4/CakeCommand.java b/src/main/java/client/command/commands/gm4/CakeCommand.java index 366a31994e..670223cd11 100644 --- a/src/main/java/client/command/commands/gm4/CakeCommand.java +++ b/src/main/java/client/command/commands/gm4/CakeCommand.java @@ -27,7 +27,7 @@ import client.Character; import client.Client; import client.command.Command; import server.life.LifeFactory; -import server.life.MapleMonster; +import server.life.Monster; public class CakeCommand extends Command { { @@ -37,7 +37,7 @@ public class CakeCommand extends Command { @Override public void execute(Client c, String[] params) { Character player = c.getPlayer(); - MapleMonster monster = LifeFactory.getMonster(9400606); + Monster monster = LifeFactory.getMonster(9400606); if (params.length == 1) { double mobHp = Double.parseDouble(params[0]); int newHp = (mobHp <= 0) ? Integer.MAX_VALUE : ((mobHp > Integer.MAX_VALUE) ? Integer.MAX_VALUE : (int) mobHp); diff --git a/src/main/java/client/command/commands/gm4/PmobCommand.java b/src/main/java/client/command/commands/gm4/PmobCommand.java index 5b24f724e9..7b918a8d94 100644 --- a/src/main/java/client/command/commands/gm4/PmobCommand.java +++ b/src/main/java/client/command/commands/gm4/PmobCommand.java @@ -28,7 +28,7 @@ import client.Client; import client.command.Command; import net.server.channel.Channel; import server.life.LifeFactory; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.MapleMap; import tools.DatabaseConnection; @@ -60,7 +60,7 @@ public class PmobCommand extends Command { int ypos = checkpos.y; int fh = player.getMap().getFootholds().findBelow(checkpos).getId(); - MapleMonster mob = LifeFactory.getMonster(mobId); + Monster mob = LifeFactory.getMonster(mobId); if (mob != null && !mob.getName().equals("MISSINGNO")) { mob.setPosition(checkpos); mob.setCy(ypos); diff --git a/src/main/java/client/command/commands/gm5/DebugCommand.java b/src/main/java/client/command/commands/gm5/DebugCommand.java index f45afbc08a..f0c6cc2e54 100644 --- a/src/main/java/client/command/commands/gm5/DebugCommand.java +++ b/src/main/java/client/command/commands/gm5/DebugCommand.java @@ -28,7 +28,7 @@ import client.Client; import client.command.Command; import net.server.Server; import server.TimerManager; -import server.life.MapleMonster; +import server.life.Monster; import server.life.SpawnPoint; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; @@ -69,7 +69,7 @@ public class DebugCommand extends Command { case "monster": List monsters = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER)); for (MapleMapObject monstermo : monsters) { - MapleMonster monster = (MapleMonster) monstermo; + Monster monster = (Monster) monstermo; Character controller = monster.getController(); player.message("Monster ID: " + monster.getId() + " Aggro target: " + ((controller != null) ? controller.getName() + " Has aggro: " + monster.isControllerHasAggro() + " Knowns aggro: " + monster.isControllerKnowsAboutAggro() : "")); } diff --git a/src/main/java/net/server/channel/handlers/AbstractDealDamageHandler.java b/src/main/java/net/server/channel/handlers/AbstractDealDamageHandler.java index 6de9f7f16b..42278b2ec4 100644 --- a/src/main/java/net/server/channel/handlers/AbstractDealDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/AbstractDealDamageHandler.java @@ -184,7 +184,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler { } } for (Integer oned : attack.allDamage.keySet()) { - final MapleMonster monster = map.getMonsterByOid(oned); + final Monster monster = map.getMonsterByOid(oned); if (monster != null) { double distance = player.getPosition().distanceSq(monster.getPosition()); double distanceToDetect = 200000.0; @@ -508,7 +508,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler { } } - private static void damageMonsterWithSkill(final Character attacker, final MapleMap map, final MapleMonster monster, final int damage, int skillid, int fixedTime) { + private static void damageMonsterWithSkill(final Character attacker, final MapleMap map, final Monster monster, final int damage, int skillid, int fixedTime) { int animationTime; if(fixedTime == 0) animationTime = SkillFactory.getSkill(skillid).getAnimationTime(); @@ -743,7 +743,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler { int oid = p.readInt(); p.skip(14); List allDamageNumbers = new ArrayList<>(); - MapleMonster monster = chr.getMap().getMonsterByOid(oid); + Monster monster = chr.getMap().getMonsterByOid(oid); if(chr.getBuffEffect(BuffStat.WK_CHARGE) != null) { // Charge, so now we need to check elemental effectiveness diff --git a/src/main/java/net/server/channel/handlers/AdminCommandHandler.java b/src/main/java/net/server/channel/handlers/AdminCommandHandler.java index f88edddd59..2eebcfd3fe 100644 --- a/src/main/java/net/server/channel/handlers/AdminCommandHandler.java +++ b/src/main/java/net/server/channel/handlers/AdminCommandHandler.java @@ -30,7 +30,7 @@ import net.AbstractPacketHandler; import net.packet.InPacket; import server.MapleItemInformationProvider; import server.life.LifeFactory; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; import server.quest.MapleQuest; @@ -128,7 +128,7 @@ public final class AdminCommandHandler extends AbstractPacketHandler { int amount = p.readInt(); List monsterx = c.getPlayer().getMap().getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER)); for (int x = 0; x < amount; x++) { - MapleMonster monster = (MapleMonster) monsterx.get(x); + Monster monster = (Monster) monsterx.get(x); if (monster.getId() == mobToKill) { c.getPlayer().getMap().killMonster(monster, c.getPlayer(), true); } @@ -149,7 +149,7 @@ public final class AdminCommandHandler extends AbstractPacketHandler { c.getPlayer().dropMessage("Monsters HP"); List monsters = c.getPlayer().getMap().getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER)); for (MapleMapObject mobs : monsters) { - MapleMonster monster = (MapleMonster) mobs; + Monster monster = (Monster) mobs; if (monster.getId() == mobHp) { c.getPlayer().dropMessage(monster.getName() + ": " + monster.getHp()); } diff --git a/src/main/java/net/server/channel/handlers/AutoAggroHandler.java b/src/main/java/net/server/channel/handlers/AutoAggroHandler.java index a5fb09ca02..6e74b114fa 100644 --- a/src/main/java/net/server/channel/handlers/AutoAggroHandler.java +++ b/src/main/java/net/server/channel/handlers/AutoAggroHandler.java @@ -25,7 +25,7 @@ import client.Character; import client.Client; import net.AbstractPacketHandler; import net.packet.InPacket; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.MapleMap; public final class AutoAggroHandler extends AbstractPacketHandler { @@ -38,7 +38,7 @@ public final class AutoAggroHandler extends AbstractPacketHandler { MapleMap map = player.getMap(); int oid = p.readInt(); - MapleMonster monster = map.getMonsterByOid(oid); + Monster monster = map.getMonsterByOid(oid); if (monster != null) { monster.aggroAutoAggroUpdate(player); } diff --git a/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java b/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java index 467caa23fe..4da39ebe39 100644 --- a/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java +++ b/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java @@ -24,8 +24,8 @@ import client.Client; import constants.game.GameConstants; import net.AbstractPacketHandler; import net.packet.InPacket; -import server.life.MapleMonster; import server.life.MapleMonsterInformationProvider; +import server.life.Monster; import server.maps.MapleMap; import tools.FilePrinter; import tools.PacketCreator; @@ -45,7 +45,7 @@ public class FieldDamageMobHandler extends AbstractPacketHandler { return; } - MapleMonster mob = map.getMonsterByOid(mobOid); + Monster mob = map.getMonsterByOid(mobOid); if (mob != null) { if (dmg < 0 || dmg > GameConstants.MAX_FIELD_MOB_DAMAGE) { FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use an obstacle on mapid " + map.getId() + " to attack " + MapleMonsterInformationProvider.getInstance().getMobNameFromId(mob.getId()) + " with damage " + dmg); diff --git a/src/main/java/net/server/channel/handlers/MobBanishPlayerHandler.java b/src/main/java/net/server/channel/handlers/MobBanishPlayerHandler.java index 69e4f30081..0c4017d7eb 100644 --- a/src/main/java/net/server/channel/handlers/MobBanishPlayerHandler.java +++ b/src/main/java/net/server/channel/handlers/MobBanishPlayerHandler.java @@ -24,7 +24,7 @@ import client.Client; import net.AbstractPacketHandler; import net.packet.InPacket; import server.life.LifeFactory.BanishInfo; -import server.life.MapleMonster; +import server.life.Monster; public final class MobBanishPlayerHandler extends AbstractPacketHandler { @@ -33,7 +33,7 @@ public final class MobBanishPlayerHandler extends AbstractPacketHandler { int mobid = p.readInt(); // mob banish handling detected thanks to MedicOP Character chr = c.getPlayer(); - MapleMonster mob = chr.getMap().getMonsterById(mobid); + Monster mob = chr.getMap().getMonsterById(mobid); if (mob != null) { BanishInfo banishInfo = mob.getBanish(); diff --git a/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java b/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java index 63f397f4fe..075d05f7ce 100644 --- a/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java +++ b/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java @@ -25,7 +25,7 @@ import client.Client; import net.AbstractPacketHandler; import net.packet.InPacket; import scripting.event.EventInstanceManager; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.MapleMap; import tools.PacketCreator; import tools.Randomizer; @@ -43,7 +43,7 @@ public final class MobDamageMobFriendlyHandler extends AbstractPacketHandler { int damaged = p.readInt(); MapleMap map = c.getPlayer().getMap(); - MapleMonster monster = map.getMonsterByOid(damaged); + Monster monster = map.getMonsterByOid(damaged); if (monster == null || map.getMonsterByOid(attacker) == null) { return; diff --git a/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java b/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java index 35707c96dd..9d9ef5cfd9 100644 --- a/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java +++ b/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java @@ -28,8 +28,8 @@ import client.status.MonsterStatus; import client.status.MonsterStatusEffect; import net.AbstractPacketHandler; import net.packet.InPacket; -import server.life.MapleMonster; import server.life.MapleMonsterInformationProvider; +import server.life.Monster; import server.maps.MapleMap; import tools.FilePrinter; import tools.PacketCreator; @@ -52,8 +52,8 @@ public final class MobDamageMobHandler extends AbstractPacketHandler { Character chr = c.getPlayer(); MapleMap map = chr.getMap(); - MapleMonster attacker = map.getMonsterByOid(from); - MapleMonster damaged = map.getMonsterByOid(to); + Monster attacker = map.getMonsterByOid(from); + Monster damaged = map.getMonsterByOid(to); if (attacker != null && damaged != null) { int maxDmg = calcMaxDamage(attacker, damaged, magic); // thanks Darter (YungMoozi) for reporting unchecked dmg @@ -70,7 +70,7 @@ public final class MobDamageMobHandler extends AbstractPacketHandler { } } - private static int calcMaxDamage(MapleMonster attacker, MapleMonster damaged, boolean magic) { + private static int calcMaxDamage(Monster attacker, Monster damaged, boolean magic) { int attackerAtk, damagedDef, attackerLevel = attacker.getLevel(); double maxDamage; if (magic) { @@ -94,7 +94,7 @@ public final class MobDamageMobHandler extends AbstractPacketHandler { return (int) maxDamage; } - private static int calcModifier(MapleMonster monster, MonsterStatus buff, MonsterStatus nerf) { + private static int calcModifier(Monster monster, MonsterStatus buff, MonsterStatus nerf) { int atkModifier; final Map monsterStati = monster.getStati(); diff --git a/src/main/java/net/server/channel/handlers/MonsterBombHandler.java b/src/main/java/net/server/channel/handlers/MonsterBombHandler.java index 8339e65a07..64354e6817 100644 --- a/src/main/java/net/server/channel/handlers/MonsterBombHandler.java +++ b/src/main/java/net/server/channel/handlers/MonsterBombHandler.java @@ -24,14 +24,14 @@ package net.server.channel.handlers; import client.Client; import net.AbstractPacketHandler; import net.packet.InPacket; -import server.life.MapleMonster; +import server.life.Monster; import tools.PacketCreator; public final class MonsterBombHandler extends AbstractPacketHandler { @Override public final void handlePacket(InPacket p, Client c) { int oid = p.readInt(); - MapleMonster monster = c.getPlayer().getMap().getMonsterByOid(oid); + Monster monster = c.getPlayer().getMap().getMonsterByOid(oid); if (!c.getPlayer().isAlive() || monster == null) { return; } diff --git a/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java b/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java index aa106a10c4..52e44c1ccf 100644 --- a/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java +++ b/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java @@ -29,7 +29,7 @@ import net.packet.InPacket; import net.server.world.Party; import net.server.world.PartyCharacter; import server.life.LifeFactory; -import server.life.MapleMonster; +import server.life.Monster; import server.partyquest.MapleCarnivalFactory; import server.partyquest.MapleCarnivalFactory.MCSkill; import server.partyquest.MonsterCarnival; @@ -62,7 +62,7 @@ public final class MonsterCarnivalHandler extends AbstractPacketHandler { return; } - final MapleMonster mob = LifeFactory.getMonster(mobs.get(num).left); + final Monster mob = LifeFactory.getMonster(mobs.get(num).left); MonsterCarnival mcpq = c.getPlayer().getMonsterCarnival(); if (mcpq != null) { if (!mcpq.canSummonR() && c.getPlayer().getTeam() == 0 || !mcpq.canSummonB() && c.getPlayer().getTeam() == 1) { diff --git a/src/main/java/net/server/channel/handlers/MoveLifeHandler.java b/src/main/java/net/server/channel/handlers/MoveLifeHandler.java index e274bac87d..4b9a9307cc 100644 --- a/src/main/java/net/server/channel/handlers/MoveLifeHandler.java +++ b/src/main/java/net/server/channel/handlers/MoveLifeHandler.java @@ -25,10 +25,10 @@ import client.Character; import client.Client; import config.YamlConfig; import net.packet.InPacket; -import server.life.MapleMonster; import server.life.MapleMonsterInformationProvider; import server.life.MobSkill; import server.life.MobSkillFactory; +import server.life.Monster; import server.maps.MapleMap; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; @@ -64,7 +64,7 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { return; } - MapleMonster monster = (MapleMonster) mmo; + Monster monster = (Monster) mmo; List banishPlayers = null; byte pNibbles = p.readByte(); diff --git a/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java b/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java index b58039c0c1..0178691f5e 100644 --- a/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java @@ -25,7 +25,7 @@ import client.Character; import client.Client; import net.AbstractPacketHandler; import net.packet.InPacket; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.MapleMapObject; import tools.PacketCreator; import tools.Pair; @@ -54,7 +54,7 @@ public final class PlayerMapTransitionHandler extends AbstractPacketHandler { if (!chr.isHidden()) { // thanks Lame (Conrad) for noticing hidden characters controlling mobs for (MapleMapObject mo : chr.getMap().getMonsters()) { // thanks BHB, IxianMace, Jefe for noticing several issues regarding mob statuses (such as freeze) - MapleMonster m = (MapleMonster) mo; + Monster m = (Monster) mo; if (m.getSpawnEffect() == 0 || m.getHp() < m.getMaxHp()) { // avoid effect-spawning mobs if (m.getController() == chr) { c.sendPacket(PacketCreator.stopControllingMonster(m.getObjectId())); diff --git a/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java b/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java index 8a3d506666..0d06e583f4 100644 --- a/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java +++ b/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java @@ -31,7 +31,7 @@ import net.AbstractPacketHandler; import net.packet.InPacket; import net.server.Server; import server.MapleStatEffect; -import server.life.MapleMonster; +import server.life.Monster; import tools.PacketCreator; import java.awt.*; @@ -89,7 +89,7 @@ public final class SpecialMoveHandler extends AbstractPacketHandler { int mobOid = p.readInt(); byte success = p.readByte(); chr.getMap().broadcastMessage(chr, PacketCreator.catchMonster(mobOid, success), false); - MapleMonster monster = chr.getMap().getMonsterByOid(mobOid); + Monster monster = chr.getMap().getMonsterByOid(mobOid); if (monster != null) { if (!monster.isBoss()) { monster.aggroClearDamages(); diff --git a/src/main/java/net/server/channel/handlers/SummonDamageHandler.java b/src/main/java/net/server/channel/handlers/SummonDamageHandler.java index 68462a85a9..8af1c8dfbd 100644 --- a/src/main/java/net/server/channel/handlers/SummonDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/SummonDamageHandler.java @@ -34,8 +34,8 @@ import constants.skills.Outlaw; import net.packet.InPacket; import server.MapleItemInformationProvider; import server.MapleStatEffect; -import server.life.MapleMonster; import server.life.MapleMonsterInformationProvider; +import server.life.Monster; import server.maps.MapleSummon; import tools.FilePrinter; import tools.PacketCreator; @@ -104,7 +104,7 @@ public final class SummonDamageHandler extends AbstractDealDamageHandler { int maxDmg = calcMaxDamage(summonEffect, player, magic); // thanks Darter (YungMoozi) for reporting unchecked max dmg for (SummonAttackEntry attackEntry : allDamage) { int damage = attackEntry.getDamage(); - MapleMonster target = player.getMap().getMonsterByOid(attackEntry.getMonsterOid()); + Monster target = player.getMap().getMonsterByOid(attackEntry.getMonsterOid()); if (target != null) { if (damage > maxDmg) { AutobanFactory.DAMAGE_HACK.alert(c.getPlayer(), "Possible packet editing summon damage exploit."); diff --git a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java index 390135c6d3..0603b6c3b3 100644 --- a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java @@ -64,7 +64,7 @@ public final class TakeDamageHandler extends AbstractPacketHandler { int pos_x = 0, pos_y = 0, fake = 0; boolean is_pgmr = false, is_pg = true, is_deadly = false; int mpattack = 0; - MapleMonster attacker = null; + Monster attacker = null; final MapleMap map = chr.getMap(); if (damagefrom != -3 && damagefrom != -4) { monsteridfrom = p.readInt(); @@ -72,8 +72,8 @@ public final class TakeDamageHandler extends AbstractPacketHandler { try { MapleMapObject mmo = map.getMapObject(oid); - if(mmo instanceof MapleMonster) { - attacker = (MapleMonster) mmo; + if(mmo instanceof Monster) { + attacker = (Monster) mmo; if(attacker.getId() != monsteridfrom) { attacker = null; } diff --git a/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java b/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java index a6d036ca3a..ce5fb15ed2 100644 --- a/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java @@ -31,7 +31,7 @@ import net.AbstractPacketHandler; import net.packet.InPacket; import net.server.Server; import server.MapleItemInformationProvider; -import server.life.MapleMonster; +import server.life.Monster; import tools.PacketCreator; /** @@ -49,7 +49,7 @@ public final class UseCatchItemHandler extends AbstractPacketHandler { int itemId = p.readInt(); int monsterid = p.readInt(); - MapleMonster mob = chr.getMap().getMonsterByOid(monsterid); + Monster mob = chr.getMap().getMonsterByOid(monsterid); if (chr.getInventory(ItemConstants.getInventoryType(itemId)).countById(itemId) <= 0) { return; } diff --git a/src/main/java/net/server/coordinator/world/MonsterAggroCoordinator.java b/src/main/java/net/server/coordinator/world/MonsterAggroCoordinator.java index c4f24fe242..f80a181722 100644 --- a/src/main/java/net/server/coordinator/world/MonsterAggroCoordinator.java +++ b/src/main/java/net/server/coordinator/world/MonsterAggroCoordinator.java @@ -27,7 +27,7 @@ import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredReentrantLock; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import server.TimerManager; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.MapleMap; import tools.Pair; @@ -46,8 +46,8 @@ public class MonsterAggroCoordinator { private ScheduledFuture aggroMonitor = null; - private final Map> mobAggroEntries = new HashMap<>(); - private final Map> mobSortedAggros = new HashMap<>(); + private final Map> mobAggroEntries = new HashMap<>(); + private final Map> mobSortedAggros = new HashMap<>(); private final Set mapPuppetEntries = new HashSet<>(); @@ -144,7 +144,7 @@ public class MonsterAggroCoordinator { } } - public void addAggroDamage(MapleMonster mob, int cid, int damage) { // assumption: should not trigger after dispose() + public void addAggroDamage(Monster mob, int cid, int damage) { // assumption: should not trigger after dispose() if (!mob.isAlive()) { return; } @@ -196,17 +196,17 @@ public class MonsterAggroCoordinator { } private void runAggroUpdate(int deltaTime) { - List>> aggroMobs = new LinkedList<>(); + List>> aggroMobs = new LinkedList<>(); lock.lock(); try { - for (Entry> e : mobAggroEntries.entrySet()) { + for (Entry> e : mobAggroEntries.entrySet()) { aggroMobs.add(new Pair<>(e.getKey(), e.getValue())); } } finally { lock.unlock(); } - for (Pair> am : aggroMobs) { + for (Pair> am : aggroMobs) { Map mobAggro = am.getRight(); List sortedAggro = mobSortedAggros.get(am.getLeft()); @@ -289,7 +289,7 @@ public class MonsterAggroCoordinator { } } - public boolean isLeadingCharacterAggro(MapleMonster mob, Character player) { + public boolean isLeadingCharacterAggro(Monster mob, Character player) { if (mob.isLeadingPuppetInVicinity()) { return false; } else if (mob.isCharacterPuppetInVicinity(player)) { @@ -337,7 +337,7 @@ public class MonsterAggroCoordinator { } } - public void removeAggroEntries(MapleMonster mob) { + public void removeAggroEntries(Monster mob) { lock.lock(); try { mobAggroEntries.remove(mob); diff --git a/src/main/java/scripting/AbstractPlayerInteraction.java b/src/main/java/scripting/AbstractPlayerInteraction.java index 1f3717effc..c3943883df 100644 --- a/src/main/java/scripting/AbstractPlayerInteraction.java +++ b/src/main/java/scripting/AbstractPlayerInteraction.java @@ -961,12 +961,12 @@ public class AbstractPlayerInteraction { } public void spawnMonster(int id, int x, int y) { - MapleMonster monster = LifeFactory.getMonster(id); + Monster monster = LifeFactory.getMonster(id); monster.setPosition(new Point(x, y)); getPlayer().getMap().spawnMonster(monster); } - public MapleMonster getMonsterLifeFactory(int mid) { + public Monster getMonsterLifeFactory(int mid) { return LifeFactory.getMonster(mid); } diff --git a/src/main/java/scripting/event/EventInstanceManager.java b/src/main/java/scripting/event/EventInstanceManager.java index 0cf9343689..33c083516e 100644 --- a/src/main/java/scripting/event/EventInstanceManager.java +++ b/src/main/java/scripting/event/EventInstanceManager.java @@ -42,8 +42,8 @@ import server.ThreadManager; import server.TimerManager; import server.expeditions.Expedition; import server.life.LifeFactory; -import server.life.MapleMonster; import server.life.MapleNPC; +import server.life.Monster; import server.maps.MapleMap; import server.maps.MapleMapManager; import server.maps.MaplePortal; @@ -67,7 +67,7 @@ import java.util.logging.Logger; public class EventInstanceManager { private Map chars = new HashMap<>(); private int leaderId = -1; - private List mobs = new LinkedList<>(); + private List mobs = new LinkedList<>(); private Map killCount = new HashMap<>(); private EventManager em; private EventScriptScheduler ess; @@ -431,7 +431,7 @@ public class EventInstanceManager { } } - public void registerMonster(MapleMonster mob) { + public void registerMonster(Monster mob) { if (!mob.getStats().isFriendly()) { //We cannot register moon bunny mobs.add(mob); } @@ -467,7 +467,7 @@ public class EventInstanceManager { leaderId = ldr.getId(); } - public void monsterKilled(final MapleMonster mob, final boolean hasKiller) { + public void monsterKilled(final Monster mob, final boolean hasKiller) { int scriptResult = 0; sL.lock(); @@ -502,19 +502,19 @@ public class EventInstanceManager { } } - public void friendlyKilled(final MapleMonster mob, final boolean hasKiller) { + public void friendlyKilled(final Monster mob, final boolean hasKiller) { try { invokeScriptFunction("friendlyKilled", mob, EventInstanceManager.this, hasKiller); } catch (ScriptException | NoSuchMethodException ex) {} //optional } - public void friendlyDamaged(final MapleMonster mob) { + public void friendlyDamaged(final Monster mob) { try { invokeScriptFunction("friendlyDamaged", EventInstanceManager.this, mob); } catch (ScriptException | NoSuchMethodException ex) {} // optional } - public void friendlyItemDrop(final MapleMonster mob) { + public void friendlyItemDrop(final Monster mob) { try { invokeScriptFunction("friendlyItemDrop", EventInstanceManager.this, mob); } catch (ScriptException | NoSuchMethodException ex) {} // optional @@ -528,7 +528,7 @@ public class EventInstanceManager { }); } - public void reviveMonster(final MapleMonster mob) { + public void reviveMonster(final Monster mob) { try { invokeScriptFunction("monsterRevive", EventInstanceManager.this, mob); } catch (ScriptException | NoSuchMethodException ex) {} // optional @@ -555,7 +555,7 @@ public class EventInstanceManager { EventRecallCoordinator.getInstance().storeEventInstance(chr.getId(), this); } - public void monsterKilled(Character chr, final MapleMonster mob) { + public void monsterKilled(Character chr, final Monster mob) { try { final int inc = (int) invokeScriptFunction("monsterValue", EventInstanceManager.this, mob.getId()); @@ -876,7 +876,7 @@ public class EventInstanceManager { } } - public MapleMonster getMonster(int mid) { + public Monster getMonster(int mid) { return(LifeFactory.getMonster(mid)); } diff --git a/src/main/java/scripting/event/EventManager.java b/src/main/java/scripting/event/EventManager.java index 68a65a69de..71bd4795f3 100644 --- a/src/main/java/scripting/event/EventManager.java +++ b/src/main/java/scripting/event/EventManager.java @@ -39,7 +39,7 @@ import server.MapleMarriage; import server.ThreadManager; import server.expeditions.Expedition; import server.life.LifeFactory; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.MapleMap; import server.quest.MapleQuest; import tools.exceptions.EventInstanceInProgressException; @@ -737,7 +737,7 @@ public class EventManager { } } - public MapleMonster getMonster(int mid) { + public Monster getMonster(int mid) { return(LifeFactory.getMonster(mid)); } diff --git a/src/main/java/scripting/reactor/ReactorActionManager.java b/src/main/java/scripting/reactor/ReactorActionManager.java index 28e867cd0d..e1f07c3346 100644 --- a/src/main/java/scripting/reactor/ReactorActionManager.java +++ b/src/main/java/scripting/reactor/ReactorActionManager.java @@ -32,7 +32,7 @@ import scripting.AbstractPlayerInteraction; import server.MapleItemInformationProvider; import server.TimerManager; import server.life.LifeFactory; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.MapMonitor; import server.maps.MapleMap; import server.maps.MapleReactor; @@ -287,7 +287,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction { } MapleMap map = reactor.getMap(); - MapleMonster mm = map.getMonsterById(id); + Monster mm = map.getMonsterById(id); if(mm != null) { int damage = (int)Math.ceil(mm.getMaxHp() / hitsToKill); Character chr = this.getPlayer(); @@ -326,7 +326,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction { public void dispelAllMonsters(int num, int team) { //dispels all mobs, cpq final MCSkill skil = MapleCarnivalFactory.getInstance().getGuardian(num); if (skil != null) { - for (MapleMonster mons : getMap().getAllMonsters()) { + for (Monster mons : getMap().getAllMonsters()) { if(mons.getTeam() == team) { mons.dispelSkill(skil.getSkill()); } diff --git a/src/main/java/server/MapleStatEffect.java b/src/main/java/server/MapleStatEffect.java index 0134a0657a..5a41e9088b 100644 --- a/src/main/java/server/MapleStatEffect.java +++ b/src/main/java/server/MapleStatEffect.java @@ -38,9 +38,9 @@ import net.server.world.Party; import net.server.world.PartyCharacter; import provider.Data; import provider.DataTool; -import server.life.MapleMonster; import server.life.MobSkill; import server.life.MobSkillFactory; +import server.life.Monster; import server.maps.*; import server.partyquest.MapleCarnivalFactory; import server.partyquest.MapleCarnivalFactory.MCSkill; @@ -822,7 +822,7 @@ public class MapleStatEffect { if (obj == null || obj.getType() != MapleMapObjectType.MONSTER) { return; } - MapleMonster mob = (MapleMonster) obj; // x is absorb percentage + Monster mob = (Monster) obj; // x is absorb percentage if (!mob.isBoss()) { int absorbMp = Math.min((int) (mob.getMaxMp() * (getX() / 100.0)), mob.getMp()); if (absorbMp > 0) { @@ -1124,7 +1124,7 @@ public class MapleStatEffect { Skill skill_ = SkillFactory.getSkill(sourceid); int i = 0; for (MapleMapObject mo : affected) { - MapleMonster monster = (MapleMonster) mo; + Monster monster = (Monster) mo; if (isDispel()) { monster.debuffMob(skill_.getId()); } else if (isSeal() && monster.isBoss()) { // thanks IxianMace for noticing seal working on bosses diff --git a/src/main/java/server/expeditions/Expedition.java b/src/main/java/server/expeditions/Expedition.java index be7efdf806..fbbfc64e83 100644 --- a/src/main/java/server/expeditions/Expedition.java +++ b/src/main/java/server/expeditions/Expedition.java @@ -31,7 +31,7 @@ import net.server.audit.locks.MonitoredReentrantLock; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.channel.Channel; import server.TimerManager; -import server.life.MapleMonster; +import server.life.Monster; import server.maps.MapleMap; import tools.LogHelper; import tools.PacketCreator; @@ -259,7 +259,7 @@ public class Expedition { } } - public void monsterKilled(Character chr, MapleMonster mob) { + public void monsterKilled(Character chr, Monster mob) { for (int expeditionBoss : EXPEDITION_BOSSES) { if (mob.getId() == expeditionBoss) { //If the monster killed was a boss String timeStamp = new SimpleDateFormat("HH:mm:ss").format(new Date()); diff --git a/src/main/java/server/life/LifeFactory.java b/src/main/java/server/life/LifeFactory.java index 5dfa0a86ae..4ad35efcc8 100644 --- a/src/main/java/server/life/LifeFactory.java +++ b/src/main/java/server/life/LifeFactory.java @@ -237,7 +237,7 @@ public class LifeFactory { return new Pair<>(stats, attackInfos); } - public static MapleMonster getMonster(int mid) { + public static Monster getMonster(int mid) { try { MapleMonsterStats stats = monsterStats.get(mid); if (stats == null) { @@ -247,7 +247,7 @@ public class LifeFactory { monsterStats.put(mid, stats); } - MapleMonster ret = new MapleMonster(mid, stats); + Monster ret = new Monster(mid, stats); return ret; } catch (NullPointerException npe) { System.out.println("[SEVERE] MOB " + mid + " failed to load. Issue: " + npe.getMessage() + "\n\n"); diff --git a/src/main/java/server/life/MobAttackInfoFactory.java b/src/main/java/server/life/MobAttackInfoFactory.java index 45cd960c33..eb680da2d6 100644 --- a/src/main/java/server/life/MobAttackInfoFactory.java +++ b/src/main/java/server/life/MobAttackInfoFactory.java @@ -39,7 +39,7 @@ public class MobAttackInfoFactory { private static Map mobAttacks = new HashMap<>(); private static DataProvider dataSource = DataProviderFactory.getDataProvider(WZFiles.MOB); - public static MobAttackInfo getMobAttackInfo(MapleMonster mob, int attack) { + public static MobAttackInfo getMobAttackInfo(Monster mob, int attack) { MobAttackInfo ret = mobAttacks.get(mob.getId() + "" + attack); if (ret != null) { return ret; diff --git a/src/main/java/server/life/MobSkill.java b/src/main/java/server/life/MobSkill.java index b99d72aafb..69b0ae5ff8 100644 --- a/src/main/java/server/life/MobSkill.java +++ b/src/main/java/server/life/MobSkill.java @@ -106,7 +106,7 @@ public class MobSkill { this.limit = limit; } - public void applyDelayedEffect(final Character player, final MapleMonster monster, final boolean skill, int animationTime) { + public void applyDelayedEffect(final Character player, final Monster monster, final boolean skill, int animationTime) { Runnable toRun = () -> { if (monster.isAlive()) { applyEffect(player, monster, skill, null); @@ -117,7 +117,7 @@ public class MobSkill { service.registerOverallAction(monster.getMap().getId(), toRun, animationTime); } - public void applyEffect(Character player, MapleMonster monster, boolean skill, List banishPlayers) { + public void applyEffect(Character player, Monster monster, boolean skill, List banishPlayers) { Disease disease = null; Map stats = new ArrayMap<>(); List reflection = new LinkedList<>(); @@ -147,7 +147,7 @@ public class MobSkill { List objects = getObjectsInRange(monster, MapleMapObjectType.MONSTER); final int hps = (getX() / 1000) * (int) (950 + 1050 * Math.random()); for (MapleMapObject mons : objects) { - ((MapleMonster) mons).heal(hps, getY()); + ((Monster) mons).heal(hps, getY()); } } else { monster.heal(getX(), getY()); @@ -254,7 +254,7 @@ public class MobSkill { Collections.shuffle(summons); for (Integer mobId : summons.subList(0, summonLimit)) { - MapleMonster toSpawn = LifeFactory.getMonster(mobId); + Monster toSpawn = LifeFactory.getMonster(mobId); if (toSpawn != null) { if (bossRushMap) { toSpawn.disableDrops(); // no littering on BRPQ pls @@ -318,7 +318,7 @@ public class MobSkill { if (stats.size() > 0) { if (lt != null && rb != null && skill) { for (MapleMapObject mons : getObjectsInRange(monster, MapleMapObjectType.MONSTER)) { - ((MapleMonster) mons).applyMonsterBuff(stats, getX(), getSkillId(), getDuration(), this, reflection); + ((Monster) mons).applyMonsterBuff(stats, getX(), getSkillId(), getDuration(), this, reflection); } } else { monster.applyMonsterBuff(stats, getX(), getSkillId(), getDuration(), this, reflection); @@ -345,7 +345,7 @@ public class MobSkill { } } - private List getPlayersInRange(MapleMonster monster) { + private List getPlayersInRange(Monster monster) { return monster.getMap().getPlayersInRange(calculateBoundingBox(monster.getPosition())); } @@ -412,7 +412,7 @@ public class MobSkill { return bounds; } - private List getObjectsInRange(MapleMonster monster, MapleMapObjectType objectType) { + private List getObjectsInRange(Monster monster, MapleMapObjectType objectType) { return monster.getMap().getMapObjectsInBox(calculateBoundingBox(monster.getPosition()), Collections.singletonList(objectType)); } } diff --git a/src/main/java/server/life/MapleMonster.java b/src/main/java/server/life/Monster.java similarity index 91% rename from src/main/java/server/life/MapleMonster.java rename to src/main/java/server/life/Monster.java index 24f109d133..cc00db8ba0 100644 --- a/src/main/java/server/life/MapleMonster.java +++ b/src/main/java/server/life/Monster.java @@ -64,28 +64,28 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; -public class MapleMonster extends AbstractLoadedLife { - +public class Monster extends AbstractLoadedLife { + private ChangeableStats ostats = null; //unused, v83 WZs offers no support for changeable stats. private MapleMonsterStats stats; - private AtomicInteger hp = new AtomicInteger(1); - private AtomicLong maxHpPlusHeal = new AtomicLong(1); + private final AtomicInteger hp = new AtomicInteger(1); + private final AtomicLong maxHpPlusHeal = new AtomicLong(1); private int mp; private WeakReference controller = new WeakReference<>(null); private boolean controllerHasAggro, controllerKnowsAboutAggro, controllerHasPuppet; - private Collection listeners = new LinkedList<>(); - private EnumMap stati = new EnumMap<>(MonsterStatus.class); - private ArrayList alreadyBuffed = new ArrayList<>(); + private final Collection listeners = new LinkedList<>(); + private final EnumMap stati = new EnumMap<>(MonsterStatus.class); + private final ArrayList alreadyBuffed = new ArrayList<>(); private MapleMap map; private int VenomMultiplier = 0; private boolean fake = false; private boolean dropsDisabled = false; - private List> usedSkills = new ArrayList<>(); - private Map, Integer> skillsUsed = new HashMap<>(); - private Set usedAttacks = new HashSet<>(); + private final List> usedSkills = new ArrayList<>(); + private final Map, Integer> skillsUsed = new HashMap<>(); + private final Set usedAttacks = new HashSet<>(); private Set calledMobOids = null; - private WeakReference callerMob = new WeakReference<>(null); - private List stolenItems = new ArrayList<>(5); + private WeakReference callerMob = new WeakReference<>(null); + private final List stolenItems = new ArrayList<>(5); private int team; private int parentMobOid = 0; private int spawnEffect = 0; @@ -98,22 +98,22 @@ public class MapleMonster extends AbstractLoadedLife { private MonitoredReentrantLock monsterLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB, true); private MonitoredReentrantLock statiLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_STATI); private MonitoredReentrantLock animationLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_ANI); - private MonitoredReentrantLock aggroUpdateLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_AGGRO); + private final MonitoredReentrantLock aggroUpdateLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_AGGRO); - public MapleMonster(int id, MapleMonsterStats stats) { + public Monster(int id, MapleMonsterStats stats) { super(id); initWithStats(stats); } - public MapleMonster(MapleMonster monster) { + public Monster(Monster monster) { super(monster); initWithStats(monster.stats); } - + public void lockMonster() { externalLock.lock(); } - + public void unlockMonster() { externalLock.unlock(); } @@ -123,14 +123,14 @@ public class MapleMonster extends AbstractLoadedLife { this.stats = baseStats.copy(); hp.set(stats.getHp()); mp = stats.getMp(); - + maxHpPlusHeal.set(hp.get()); } - + public void setSpawnEffect(int effect) { spawnEffect = effect; } - + public int getSpawnEffect() { return spawnEffect; } @@ -142,7 +142,7 @@ public class MapleMonster extends AbstractLoadedLife { public void enableDrops() { this.dropsDisabled = false; } - + public boolean dropsDisabled() { return dropsDisabled; } @@ -150,7 +150,7 @@ public class MapleMonster extends AbstractLoadedLife { public void setMap(MapleMap map) { this.map = map; } - + public int getParentMobOid() { return parentMobOid; } @@ -158,73 +158,73 @@ public class MapleMonster extends AbstractLoadedLife { public void setParentMobOid(int parentMobId) { this.parentMobOid = parentMobId; } - + public int countAvailableMobSummons(int summonsSize, int skillLimit) { // limit prop for summons has another conotation, found thanks to MedicOP int summonsCount; - + Set calledOids = this.calledMobOids; - if(calledOids != null) { + if (calledOids != null) { summonsCount = calledOids.size(); } else { summonsCount = 0; } - + return Math.min(summonsSize, skillLimit - summonsCount); } - - public void addSummonedMob(MapleMonster mob) { + + public void addSummonedMob(Monster mob) { Set calledOids = this.calledMobOids; if (calledOids == null) { calledOids = Collections.synchronizedSet(new HashSet<>()); this.calledMobOids = calledOids; } - + calledOids.add(mob.getObjectId()); mob.setSummonerMob(this); } - + private void removeSummonedMob(int mobOid) { Set calledOids = this.calledMobOids; if (calledOids != null) { calledOids.remove(mobOid); } } - - private void setSummonerMob(MapleMonster mob) { + + private void setSummonerMob(Monster mob) { this.callerMob = new WeakReference<>(mob); } - + private void dispatchClearSummons() { - MapleMonster caller = this.callerMob.get(); + Monster caller = this.callerMob.get(); if (caller != null) { caller.removeSummonedMob(this.getObjectId()); } - + this.calledMobOids = null; } - + public void pushRemoveAfterAction(Runnable run) { this.removeAfterAction = run; } - + public Runnable popRemoveAfterAction() { Runnable r = this.removeAfterAction; this.removeAfterAction = null; - + return r; } - + public int getHp() { return hp.get(); } - + public synchronized void addHp(int hp) { if (this.hp.get() <= 0) { return; } this.hp.addAndGet(hp); } - + public synchronized void setStartingHp(int hp) { stats.setHp(hp); // refactored mob stats after non-static HP pool suggestion thanks to twigs this.hp.set(hp); @@ -304,22 +304,22 @@ public class MapleMonster extends AbstractLoadedLife { public void setHpZero() { // force HP = 0 applyAndGetHpDamage(Integer.MAX_VALUE, false); } - + private boolean applyAnimationIfRoaming(int attackPos, MobSkill skill) { // roam: not casting attack or skill animations if (!animationLock.tryLock()) { return false; } - + try { long animationTime; - - if(skill == null) { + + if (skill == null) { animationTime = MapleMonsterInformationProvider.getInstance().getMobAttackAnimationTime(this.getId(), attackPos); } else { animationTime = MapleMonsterInformationProvider.getInstance().getMobSkillAnimationTime(skill); } - if(animationTime > 0) { + if (animationTime > 0) { MobAnimationService service = (MobAnimationService) map.getChannelServer().getServiceAccess(ChannelServices.MOB_ANIMATION); return service.registerMobOnAnimationEffect(map.getId(), this.hashCode(), animationTime); } else { @@ -329,39 +329,39 @@ public class MapleMonster extends AbstractLoadedLife { animationLock.unlock(); } } - + public synchronized Integer applyAndGetHpDamage(int delta, boolean stayAlive) { int curHp = hp.get(); if (curHp <= 0) { // this monster is already dead return null; } - - if(delta >= 0) { + + if (delta >= 0) { if (stayAlive) { curHp--; } int trueDamage = Math.min(curHp, delta); - + hp.addAndGet(-trueDamage); return trueDamage; } else { int trueHeal = -delta; int hp2Heal = curHp + trueHeal; int maxHp = getMaxHp(); - + if (hp2Heal > maxHp) { trueHeal -= (hp2Heal - maxHp); } - + hp.addAndGet(trueHeal); return trueHeal; } } - + public synchronized void disposeMapObject() { // mob is no longer associated with the map it was in hp.set(-1); } - + public void broadcastMobHpBar(Character from) { if (hasBossHPBar()) { from.setPlayerAggro(this.hashCode()); @@ -381,10 +381,10 @@ public class MapleMonster extends AbstractLoadedLife { } } } - + public boolean damage(Character attacker, int damage, boolean stayAlive) { boolean lastHit = false; - + this.lockMonster(); try { if (!this.isAlive()) { @@ -423,13 +423,12 @@ public class MapleMonster extends AbstractLoadedLife { } finally { this.unlockMonster(); } - + return lastHit; } - + /** - * - * @param from the player that dealt the damage + * @param from the player that dealt the damage * @param damage * @param stayAlive */ @@ -438,15 +437,15 @@ public class MapleMonster extends AbstractLoadedLife { if (trueDamage == null) { return; } - + if (YamlConfig.config.server.USE_DEBUG) { from.dropMessage(5, "Hitted MOB " + this.getId() + ", OID " + this.getObjectId()); } - + if (!fake) { dispatchMonsterDamaged(from, trueDamage); } - + if (!takenDamage.containsKey(from.getId())) { takenDamage.put(from.getId(), new AtomicLong(trueDamage)); } else { @@ -455,28 +454,28 @@ public class MapleMonster extends AbstractLoadedLife { broadcastMobHpBar(from); } - + public void applyFakeDamage(Character from, int damage, boolean stayAlive) { applyDamage(from, damage, stayAlive, true); } - + public void heal(int hp, int mp) { Integer hpHealed = applyAndGetHpDamage(-hp, false); if (hpHealed == null) { return; } - + int mp2Heal = getMp() + mp; int maxMp = getMaxMp(); if (mp2Heal >= maxMp) { mp2Heal = maxMp; } setMp(mp2Heal); - + if (hp > 0) { getMap().broadcastMessage(PacketCreator.healMonster(getObjectId(), hp, getHp(), getMaxHp())); } - + maxHpPlusHeal.addAndGet(hpHealed); dispatchMonsterHealed(hpHealed); } @@ -484,68 +483,70 @@ public class MapleMonster extends AbstractLoadedLife { public boolean isAttackedBy(Character chr) { return takenDamage.containsKey(chr.getId()); } - + private static boolean isWhiteExpGain(Character chr, Map personalRatio, double sdevRatio) { Float pr = personalRatio.get(chr.getId()); if (pr == null) { return false; } - + return pr >= sdevRatio; } - + private static double calcExperienceStandDevThreshold(List entryExpRatio, int totalEntries) { float avgExpReward = 0.0f; for (Float exp : entryExpRatio) { avgExpReward += exp; } - + // thanks Simon (HarborMS) for finding an issue with solo party player gaining yellow EXP when soloing mobs avgExpReward /= totalEntries; - + float varExpReward = 0.0f; for (Float exp : entryExpRatio) { varExpReward += Math.pow(exp - avgExpReward, 2); } varExpReward /= entryExpRatio.size(); - + return avgExpReward + Math.sqrt(varExpReward); } - + private void distributePlayerExperience(Character chr, float exp, float partyBonusMod, int totalPartyLevel, boolean highestPartyDamager, boolean whiteExpGain, boolean hasPartySharers) { float playerExp = (YamlConfig.config.server.EXP_SPLIT_COMMON_MOD * chr.getLevel()) / totalPartyLevel; - if (highestPartyDamager) playerExp += YamlConfig.config.server.EXP_SPLIT_MVP_MOD; - + if (highestPartyDamager) { + playerExp += YamlConfig.config.server.EXP_SPLIT_MVP_MOD; + } + playerExp *= exp; float bonusExp = partyBonusMod * playerExp; - + this.giveExpToCharacter(chr, playerExp, bonusExp, whiteExpGain, hasPartySharers); giveFamilyRep(chr.getFamilyEntry()); } - + private void distributePartyExperience(Map partyParticipation, float expPerDmg, Set underleveled, Map personalRatio, double sdevRatio) { IntervalBuilder leechInterval = new IntervalBuilder(); leechInterval.addInterval(this.getLevel() - YamlConfig.config.server.EXP_SPLIT_LEVEL_INTERVAL, this.getLevel() + YamlConfig.config.server.EXP_SPLIT_LEVEL_INTERVAL); - + long maxDamage = 0, partyDamage = 0; Character participationMvp = null; for (Entry e : partyParticipation.entrySet()) { long entryDamage = e.getValue(); partyDamage += entryDamage; - + if (maxDamage < entryDamage) { maxDamage = entryDamage; participationMvp = e.getKey(); } - + // thanks Thora for pointing out leech level limitation int chrLevel = e.getKey().getLevel(); leechInterval.addInterval(chrLevel - YamlConfig.config.server.EXP_SPLIT_LEECH_INTERVAL, chrLevel + YamlConfig.config.server.EXP_SPLIT_LEECH_INTERVAL); } - + List expMembers = new LinkedList<>(); int totalPartyLevel = 0; - + // thanks G h o s t, Alfred, Vcoc, BHB for poiting out a bug in detecting party members after membership transactions in a party took place if (YamlConfig.config.server.USE_ENFORCE_MOB_LEVEL_RANGE) { for (Character member : partyParticipation.keySet().iterator().next().getPartyMembersOnSameMap()) { @@ -563,46 +564,46 @@ public class MapleMonster extends AbstractLoadedLife { expMembers.add(member); } } - + int membersSize = expMembers.size(); float participationExp = partyDamage * expPerDmg; - + // thanks Crypter for reporting an insufficiency on party exp bonuses boolean hasPartySharers = membersSize > 1; float partyBonusMod = hasPartySharers ? 0.05f * membersSize : 0.0f; - + for (Character mc : expMembers) { distributePlayerExperience(mc, participationExp, partyBonusMod, totalPartyLevel, mc == participationMvp, isWhiteExpGain(mc, personalRatio, sdevRatio), hasPartySharers); giveFamilyRep(mc.getFamilyEntry()); } } - + private void distributeExperience(int killerId) { if (isAlive()) { return; } - + Map> partyExpDist = new HashMap<>(); Map soloExpDist = new HashMap<>(); - + Map mapPlayers = map.getMapAllPlayers(); - + int totalEntries = 0; // counts "participant parties", players who no longer are available in the map is an "independent party" for (Entry e : takenDamage.entrySet()) { Character chr = mapPlayers.get(e.getKey()); if (chr != null) { long damage = e.getValue().longValue(); - + Party p = chr.getParty(); if (p != null) { Map partyParticipation = partyExpDist.get(p); if (partyParticipation == null) { partyParticipation = new HashMap<>(6); partyExpDist.put(p, partyParticipation); - + totalEntries += 1; } - + partyParticipation.put(chr, damage); } else { soloExpDist.put(chr, damage); @@ -612,47 +613,47 @@ public class MapleMonster extends AbstractLoadedLife { totalEntries += 1; } } - + long totalDamage = maxHpPlusHeal.get(); int mobExp = getExp(); float expPerDmg = ((float) mobExp) / totalDamage; - + Map personalRatio = new HashMap<>(); List entryExpRatio = new LinkedList<>(); for (Entry e : soloExpDist.entrySet()) { float ratio = ((float) e.getValue()) / totalDamage; - + personalRatio.put(e.getKey().getId(), ratio); entryExpRatio.add(ratio); } - + for (Map m : partyExpDist.values()) { float ratio = 0.0f; for (Entry e : m.entrySet()) { float chrRatio = ((float) e.getValue()) / totalDamage; - + personalRatio.put(e.getKey().getId(), chrRatio); ratio += chrRatio; } - + entryExpRatio.add(ratio); } - + double sdevRatio = calcExperienceStandDevThreshold(entryExpRatio, totalEntries); - + // GMS-like player and party split calculations found thanks to Russt, KaidaTan, Dusk, AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory_calculator_formula/ Set underleveled = new HashSet<>(); for (Entry chrParticipation : soloExpDist.entrySet()) { float exp = chrParticipation.getValue() * expPerDmg; Character chr = chrParticipation.getKey(); - + distributePlayerExperience(chr, exp, 0.0f, chr.getLevel(), true, isWhiteExpGain(chr, personalRatio, sdevRatio), false); } - + for (Map partyParticipation : partyExpDist.values()) { distributePartyExperience(partyParticipation, expPerDmg, underleveled, personalRatio, sdevRatio); } - + EventInstanceManager eim = getMap().getEventInstance(); if (eim != null) { Character chr = mapPlayers.get(killerId); @@ -660,16 +661,16 @@ public class MapleMonster extends AbstractLoadedLife { eim.monsterKilled(chr, this); } } - - for(Character mc : underleveled) { + + for (Character mc : underleveled) { mc.showUnderleveledInfo(this); } - + } - + private float getStatusExpMultiplier(Character attacker, boolean hasPartySharers) { float multiplier = 1.0f; - + // thanks Prophecy & Aika for finding out Holy Symbol not being applied on party bonuses Integer holySymbol = attacker.getBuffedValue(BuffStat.HOLY_SYMBOL); if (holySymbol != null) { @@ -689,20 +690,20 @@ public class MapleMonster extends AbstractLoadedLife { } finally { statiLock.unlock(); } - + return multiplier; } - + private static int expValueToInteger(double exp) { if (exp > Integer.MAX_VALUE) { exp = Integer.MAX_VALUE; } else if (exp < Integer.MIN_VALUE) { exp = Integer.MIN_VALUE; } - + return (int) Math.round(exp); // operations on float point are not point-precise... thanks IxianMace for noticing -1 EXP gains } - + private void giveExpToCharacter(Character attacker, Float personalExp, Float partyExp, boolean white, boolean hasPartySharers) { if (attacker.isAlive()) { if (personalExp != null) { @@ -711,14 +712,14 @@ public class MapleMonster extends AbstractLoadedLife { } else { personalExp = 0.0f; } - + Integer expBonus = attacker.getBuffedValue(BuffStat.EXP_INCREASE); if (expBonus != null) { // exp increase player buff found thanks to HighKey21 personalExp += expBonus; } int _personalExp = expValueToInteger(personalExp); // assuming no negative xp here - + if (partyExp != null) { partyExp *= getStatusExpMultiplier(attacker, hasPartySharers); partyExp *= attacker.getExpRate(); @@ -726,22 +727,22 @@ public class MapleMonster extends AbstractLoadedLife { } else { partyExp = 0.0f; } - + int _partyExp = expValueToInteger(partyExp); - + attacker.gainExp(_personalExp, _partyExp, true, false, white); attacker.increaseEquipExp(_personalExp); attacker.raiseQuestMobCount(getId()); } } - + public List retrieveRelevantDrops() { if (this.getStats().isFriendly()) { // thanks Conrad for noticing friendly mobs not spawning loots after a recent update return MapleMonsterInformationProvider.getInstance().retrieveEffectiveDrop(this.getId()); } - + Map pchars = map.getMapAllPlayers(); - + List lootChars = new LinkedList<>(); for (Integer cid : takenDamage.keySet()) { Character chr = pchars.get(cid); @@ -749,13 +750,13 @@ public class MapleMonster extends AbstractLoadedLife { lootChars.add(chr); } } - + return MapleLootManager.retrieveRelevantDrops(this.getId(), lootChars); } - + public Character killBy(final Character killer) { distributeExperience(killer != null ? killer.getId() : 0); - + final Pair lastController = aggroRemoveController(); final List toSpawn = this.getRevives(); if (toSpawn != null) { @@ -770,16 +771,16 @@ public class MapleMonster extends AbstractLoadedLife { reviveMap.broadcastMessage(PacketCreator.serverNotice(6, timeMob.getRight())); } } - - if(toSpawn.size() > 0) { + + if (toSpawn.size() > 0) { final EventInstanceManager eim = this.getMap().getEventInstance(); - + TimerManager.getInstance().schedule(() -> { Character controller = lastController.getLeft(); boolean aggro = lastController.getRight(); for (Integer mid : toSpawn) { - final MapleMonster mob = LifeFactory.getMonster(mid); + final Monster mob = LifeFactory.getMonster(mid); mob.setPosition(getPosition()); mob.setFh(getFh()); mob.setParentMobOid(getObjectId()); @@ -791,9 +792,9 @@ public class MapleMonster extends AbstractLoadedLife { if (mob.getId() >= 8810010 && mob.getId() <= 8810017 && reviveMap.isHorntailDefeated()) { boolean htKilled = false; - MapleMonster ht = reviveMap.getMonsterById(8810018); + Monster ht = reviveMap.getMonsterById(8810018); - if(ht != null) { + if (ht != null) { ht.lockMonster(); try { htKilled = ht.isAlive(); @@ -802,19 +803,19 @@ public class MapleMonster extends AbstractLoadedLife { ht.unlockMonster(); } - if(htKilled) { + if (htKilled) { reviveMap.killMonster(ht, killer, true); } } - for(int i = 8810017; i >= 8810010; i--) { + for (int i = 8810017; i >= 8810010; i--) { reviveMap.killMonster(reviveMap.getMonsterById(i), killer, true); } } else if (controller != null) { mob.aggroSwitchController(controller, aggro); } - if(eim != null) { + if (eim != null) { eim.reviveMonster(mob); } } @@ -823,13 +824,13 @@ public class MapleMonster extends AbstractLoadedLife { } else { // is this even necessary? System.out.println("[CRITICAL LOSS] toSpawn is null for " + this.getName()); } - + Character looter = map.getCharacterById(getHighestDamagerId()); return looter != null ? looter : killer; } - + public void dropFromFriendlyMonster(long delay) { - final MapleMonster m = this; + final Monster m = this; monsterItemDrop = TimerManager.getInstance().register(() -> { if (!m.isAlive()) { if (monsterItemDrop != null) { @@ -853,28 +854,28 @@ public class MapleMonster extends AbstractLoadedLife { } }, delay, delay); } - + private void dispatchRaiseQuestMobCount() { Set attackerChrids = takenDamage.keySet(); - if(!attackerChrids.isEmpty()) { + if (!attackerChrids.isEmpty()) { Map mapChars = map.getMapPlayers(); - if(!mapChars.isEmpty()) { + if (!mapChars.isEmpty()) { int mobid = getId(); - + for (Integer chrid : attackerChrids) { Character chr = mapChars.get(chrid); - if(chr != null && chr.isLoggedinWorld()) { + if (chr != null && chr.isLoggedinWorld()) { chr.raiseQuestMobCount(mobid); } } } } } - + public void dispatchMonsterKilled(boolean hasKiller) { processMonsterKilled(hasKiller); - + EventInstanceManager eim = getMap().getEventInstance(); if (eim != null) { if (!this.getStats().isFriendly()) { @@ -884,15 +885,15 @@ public class MapleMonster extends AbstractLoadedLife { } } } - + private synchronized void processMonsterKilled(boolean hasKiller) { - if(!hasKiller) { // players won't gain EXP from a mob that has no killer, but a quest count they should + if (!hasKiller) { // players won't gain EXP from a mob that has no killer, but a quest count they should dispatchRaiseQuestMobCount(); } - + this.aggroClearDamages(); this.dispatchClearSummons(); - + MonsterListener[] listenersList; statiLock.lock(); try { @@ -900,11 +901,11 @@ public class MapleMonster extends AbstractLoadedLife { } finally { statiLock.unlock(); } - + for (MonsterListener listener : listenersList) { listener.monsterKilled(getAnimationTime("die1")); } - + statiLock.lock(); try { stati.clear(); @@ -914,7 +915,7 @@ public class MapleMonster extends AbstractLoadedLife { statiLock.unlock(); } } - + private void dispatchMonsterDamaged(Character from, int trueDmg) { MonsterListener[] listenersList; statiLock.lock(); @@ -923,12 +924,12 @@ public class MapleMonster extends AbstractLoadedLife { } finally { statiLock.unlock(); } - + for (MonsterListener listener : listenersList) { listener.monsterDamaged(from, trueDmg); } } - + private void dispatchMonsterHealed(int trueHeal) { MonsterListener[] listenersList; statiLock.lock(); @@ -937,16 +938,18 @@ public class MapleMonster extends AbstractLoadedLife { } finally { statiLock.unlock(); } - + for (MonsterListener listener : listenersList) { listener.monsterHealed(trueHeal); } } - + private void giveFamilyRep(FamilyEntry entry) { - if(entry != null) { + if (entry != null) { int repGain = isBoss() ? YamlConfig.config.server.FAMILY_REP_PER_BOSS_KILL : YamlConfig.config.server.FAMILY_REP_PER_KILL; - if(getMaxHp() <= 1) repGain = 0; //don't count trash mobs + if (getMaxHp() <= 1) { + repGain = 0; //don't count trash mobs + } entry.giveReputationToSenior(repGain, true); } } @@ -966,7 +969,7 @@ public class MapleMonster extends AbstractLoadedLife { public boolean isAlive() { return this.hp.get() > 0; } - + public void addListener(MonsterListener listener) { statiLock.lock(); try { @@ -983,9 +986,9 @@ public class MapleMonster extends AbstractLoadedLife { private void setController(Character controller) { this.controller = new WeakReference<>(controller); } - + public boolean isControllerHasAggro() { - return fake ? false : controllerHasAggro; + return !fake && controllerHasAggro; } private void setControllerHasAggro(boolean controllerHasAggro) { @@ -995,7 +998,7 @@ public class MapleMonster extends AbstractLoadedLife { } public boolean isControllerKnowsAboutAggro() { - return fake ? false : controllerKnowsAboutAggro; + return !fake && controllerKnowsAboutAggro; } private void setControllerKnowsAboutAggro(boolean controllerKnowsAboutAggro) { @@ -1003,7 +1006,7 @@ public class MapleMonster extends AbstractLoadedLife { this.controllerKnowsAboutAggro = controllerKnowsAboutAggro; } } - + private void setControllerHasPuppet(boolean controllerHasPuppet) { this.controllerHasPuppet = controllerHasPuppet; } @@ -1015,7 +1018,7 @@ public class MapleMonster extends AbstractLoadedLife { public boolean hasBossHPBar() { return isBoss() && getTagColor() > 0; } - + @Override public void sendSpawnData(Client client) { if (hp.get() <= 0) { // mustn't monsterLock this function @@ -1026,7 +1029,7 @@ public class MapleMonster extends AbstractLoadedLife { } else { client.sendPacket(PacketCreator.spawnMonster(this, false)); } - + if (hasBossHPBar()) { client.announceBossHpBar(this, this.hashCode(), makeBossHPBarPacket()); } @@ -1053,10 +1056,10 @@ public class MapleMonster extends AbstractLoadedLife { if (fixedStance != 0) { return Math.abs(fixedStance) % 2 == 1; } - + return super.isFacingLeft(); } - + public ElementalEffectiveness getElementalEffectiveness(Element e) { statiLock.lock(); try { @@ -1066,10 +1069,10 @@ public class MapleMonster extends AbstractLoadedLife { } finally { statiLock.unlock(); } - + return getMonsterEffectiveness(e); } - + private ElementalEffectiveness getMonsterEffectiveness(Element e) { monsterLock.lock(); try { @@ -1081,31 +1084,31 @@ public class MapleMonster extends AbstractLoadedLife { private Character getActiveController() { Character chr = getController(); - + if (chr != null && chr.isLoggedinWorld() && chr.getMap() == this.getMap()) { return chr; } else { return null; } } - + private void broadcastMonsterStatusMessage(Packet packet) { map.broadcastMessage(packet, getPosition()); - + Character chrController = getActiveController(); - if (chrController != null && !chrController.isMapObjectVisible(MapleMonster.this)) { + if (chrController != null && !chrController.isMapObjectVisible(Monster.this)) { chrController.sendPacket(packet); } } - + private int broadcastStatusEffect(final MonsterStatusEffect status) { int animationTime = status.getSkill().getAnimationTime(); Packet packet = PacketCreator.applyMonsterStatus(getObjectId(), status, null); broadcastMonsterStatusMessage(packet); - + return animationTime; } - + public boolean applyStatus(Character from, final MonsterStatusEffect status, boolean poison, long duration) { return applyStatus(from, status, poison, duration, false); } @@ -1155,7 +1158,7 @@ public class MapleMonster extends AbstractLoadedLife { final Channel ch = map.getChannelServer(); final int mapid = map.getId(); - if(statis.size() > 0) { + if (statis.size() > 0) { statiLock.lock(); try { for (MonsterStatus stat : statis.keySet()) { @@ -1172,7 +1175,7 @@ public class MapleMonster extends AbstractLoadedLife { statiLock.unlock(); } } - + final Runnable cancelTask = () -> { if (isAlive()) { Packet packet = PacketCreator.cancelMonsterStatus(getObjectId(), status.getStati()); @@ -1190,17 +1193,17 @@ public class MapleMonster extends AbstractLoadedLife { setVenomMulti(0); }; - + Runnable overtimeAction = null; int overtimeDelay = -1; - + int animationTime; if (poison) { int poisonLevel = from.getSkillLevel(status.getSkill()); int poisonDamage = Math.min(Short.MAX_VALUE, (int) (getMaxHp() / (70.0 - poisonLevel) + 0.999)); status.setValue(MonsterStatus.POISON, poisonDamage); animationTime = broadcastStatusEffect(status); - + overtimeAction = new DamageTask(poisonDamage, from, status, 0); overtimeDelay = 1000; } else if (venom) { @@ -1227,7 +1230,7 @@ public class MapleMonster extends AbstractLoadedLife { status.setValue(MonsterStatus.VENOMOUS_WEAPON, poisonDamage); status.setValue(MonsterStatus.POISON, poisonDamage); animationTime = broadcastStatusEffect(status); - + overtimeAction = new DamageTask(poisonDamage, from, status, 0); overtimeDelay = 1000; } else { @@ -1246,16 +1249,16 @@ public class MapleMonster extends AbstractLoadedLife { final Skill skill = SkillFactory.getSkill(status.getSkill().getId()); final byte level = from.getSkillLevel(skill); final int damage = (int) ((from.getStr() + from.getLuk()) * ((3.7 * skill.getEffect(level).getDamage()) / 100)); - + status.setValue(MonsterStatus.NINJA_AMBUSH, damage); animationTime = broadcastStatusEffect(status); - + overtimeAction = new DamageTask(damage, from, status, 2); overtimeDelay = 1000; } else { animationTime = broadcastStatusEffect(status); } - + statiLock.lock(); try { for (MonsterStatus stat : status.getStati().keySet()) { @@ -1265,12 +1268,12 @@ public class MapleMonster extends AbstractLoadedLife { } finally { statiLock.unlock(); } - + MobStatusService service = (MobStatusService) map.getChannelServer().getServiceAccess(ChannelServices.MOB_STATUS); service.registerMobStatus(mapid, status, cancelTask, duration + animationTime - 100, overtimeAction, overtimeDelay); return true; } - + public final void dispelSkill(final MobSkill skillId) { List toCancel = new ArrayList<>(); for (Entry effects : stati.entrySet()) { @@ -1283,7 +1286,7 @@ public class MapleMonster extends AbstractLoadedLife { debuffMobStat(stat); } } - + public void applyMonsterBuff(final Map stats, final int x, int skillId, long duration, MobSkill skill, final List reflection) { final Runnable cancelTask = () -> { if (isAlive()) { @@ -1303,7 +1306,7 @@ public class MapleMonster extends AbstractLoadedLife { final MonsterStatusEffect effect = new MonsterStatusEffect(stats, null, skill, true); Packet packet = PacketCreator.applyMonsterStatus(getObjectId(), effect, reflection); broadcastMonsterStatusMessage(packet); - + statiLock.lock(); try { for (MonsterStatus stat : stats.keySet()) { @@ -1313,22 +1316,22 @@ public class MapleMonster extends AbstractLoadedLife { } finally { statiLock.unlock(); } - + MobStatusService service = (MobStatusService) map.getChannelServer().getServiceAccess(ChannelServices.MOB_STATUS); service.registerMobStatus(map.getId(), effect, cancelTask, duration); } - + public void refreshMobPosition() { resetMobPosition(getPosition()); } - + public void resetMobPosition(Point newPoint) { aggroRemoveController(); - + setPosition(newPoint); map.broadcastMessage(PacketCreator.moveMonster(this.getObjectId(), false, -1, 0, 0, 0, this.getPosition(), this.getIdleMovement(), AbstractAnimatedMapleMapObject.IDLE_MOVEMENT_PACKET_LENGTH)); map.moveMonster(this, this.getPosition()); - + aggroUpdateController(); } @@ -1340,42 +1343,42 @@ public class MapleMonster extends AbstractLoadedLife { } finally { statiLock.unlock(); } - + if (oldEffect != null) { Packet packet = PacketCreator.cancelMonsterStatus(getObjectId(), oldEffect.getStati()); broadcastMonsterStatusMessage(packet); } } - + public void debuffMob(int skillid) { MonsterStatus[] statups = {MonsterStatus.WEAPON_ATTACK_UP, MonsterStatus.WEAPON_DEFENSE_UP, MonsterStatus.MAGIC_ATTACK_UP, MonsterStatus.MAGIC_DEFENSE_UP}; statiLock.lock(); try { - if(skillid == Hermit.SHADOW_MESO) { + if (skillid == Hermit.SHADOW_MESO) { debuffMobStat(statups[1]); debuffMobStat(statups[3]); - } else if(skillid == Priest.DISPEL) { - for(MonsterStatus ms : statups) { + } else if (skillid == Priest.DISPEL) { + for (MonsterStatus ms : statups) { debuffMobStat(ms); } } else { // is a crash skill int i = (skillid == Crusader.ARMOR_CRASH ? 1 : (skillid == WhiteKnight.MAGIC_CRASH ? 2 : 0)); debuffMobStat(statups[i]); - if(YamlConfig.config.server.USE_ANTI_IMMUNITY_CRASH) { + if (YamlConfig.config.server.USE_ANTI_IMMUNITY_CRASH) { if (skillid == Crusader.ARMOR_CRASH) { - if(!isBuffed(MonsterStatus.WEAPON_REFLECT)) { + if (!isBuffed(MonsterStatus.WEAPON_REFLECT)) { debuffMobStat(MonsterStatus.WEAPON_IMMUNITY); } - if(!isBuffed(MonsterStatus.MAGIC_REFLECT)) { + if (!isBuffed(MonsterStatus.MAGIC_REFLECT)) { debuffMobStat(MonsterStatus.MAGIC_IMMUNITY); } } else if (skillid == WhiteKnight.MAGIC_CRASH) { - if(!isBuffed(MonsterStatus.MAGIC_REFLECT)) { + if (!isBuffed(MonsterStatus.MAGIC_REFLECT)) { debuffMobStat(MonsterStatus.MAGIC_IMMUNITY); } } else { - if(!isBuffed(MonsterStatus.WEAPON_REFLECT)) { + if (!isBuffed(MonsterStatus.WEAPON_REFLECT)) { debuffMobStat(MonsterStatus.WEAPON_IMMUNITY); } } @@ -1416,11 +1419,11 @@ public class MapleMonster extends AbstractLoadedLife { public MapleMap getMap() { return map; } - + public MonsterAggroCoordinator getMapAggroCoordinator() { return map.getAggroCoordinator(); } - + public List> getSkills() { return stats.getSkills(); } @@ -1428,32 +1431,32 @@ public class MapleMonster extends AbstractLoadedLife { public boolean hasSkill(int skillId, int level) { return stats.hasSkill(skillId, level); } - + public int getSkillPos(int skillId, int level) { int pos = 0; for (Pair ms : this.getSkills()) { if (ms.getLeft() == skillId && ms.getRight() == level) { return pos; } - + pos++; } - + return -1; } - + public boolean canUseSkill(MobSkill toUse, boolean apply) { if (toUse == null) { return false; } - + int useSkillid = toUse.getSkillId(); if (useSkillid >= 143 && useSkillid <= 145) { if (this.isBuffed(MonsterStatus.WEAPON_REFLECT) || this.isBuffed(MonsterStatus.MAGIC_REFLECT)) { return false; } } - + monsterLock.lock(); try { for (Pair skill : usedSkills) { // thanks OishiiKawaiiDesu for noticing an issue with mobskill cooldown @@ -1461,7 +1464,7 @@ public class MapleMonster extends AbstractLoadedLife { return false; } } - + int mpCon = toUse.getMpCon(); if (mp < mpCon) { return false; @@ -1472,28 +1475,28 @@ public class MapleMonster extends AbstractLoadedLife { return false; } */ - + if (apply) { this.usedSkill(toUse); } } finally { monsterLock.unlock(); } - + return true; } private void usedSkill(MobSkill skill) { final int skillId = skill.getSkillId(), level = skill.getSkillLevel(); long cooltime = skill.getCoolTime(); - + monsterLock.lock(); try { mp -= skill.getMpCon(); - + Pair skillKey = new Pair<>(skillId, level); this.usedSkills.add(skillKey); - + Integer useCount = this.skillsUsed.remove(skillKey); if (useCount != null) { this.skillsUsed.put(skillKey, useCount + 1); @@ -1503,11 +1506,11 @@ public class MapleMonster extends AbstractLoadedLife { } finally { monsterLock.unlock(); } - - final MapleMonster mons = this; + + final Monster mons = this; MapleMap mmap = mons.getMap(); Runnable r = () -> mons.clearSkill(skillId, level); - + MobClearSkillService service = (MobClearSkillService) map.getChannelServer().getServiceAccess(ChannelServices.MOB_CLEAR_SKILL); service.registerMobClearSkillAction(mmap.getId(), r, cooltime); } @@ -1529,7 +1532,7 @@ public class MapleMonster extends AbstractLoadedLife { monsterLock.unlock(); } } - + public int canUseAttack(int attackPos, boolean isSkill) { monsterLock.lock(); try { @@ -1538,12 +1541,12 @@ public class MapleMonster extends AbstractLoadedLife { return -1; } */ - + Pair attackInfo = MapleMonsterInformationProvider.getInstance().getMobAttackInfo(this.getId(), attackPos); if (attackInfo == null) { return -1; } - + int mpCon = attackInfo.getLeft(); if (mp < mpCon) { return -1; @@ -1554,31 +1557,31 @@ public class MapleMonster extends AbstractLoadedLife { return -1; } */ - + usedAttack(attackPos, mpCon, attackInfo.getRight()); return 1; } finally { monsterLock.unlock(); } } - + private void usedAttack(final int attackPos, int mpCon, int cooltime) { monsterLock.lock(); try { mp -= mpCon; usedAttacks.add(attackPos); - final MapleMonster mons = this; + final Monster mons = this; MapleMap mmap = mons.getMap(); Runnable r = () -> mons.clearAttack(attackPos); - + MobClearSkillService service = (MobClearSkillService) map.getChannelServer().getServiceAccess(ChannelServices.MOB_CLEAR_SKILL); service.registerMobClearSkillAction(mmap.getId(), r, cooltime); } finally { monsterLock.unlock(); } } - + private void clearAttack(int attackPos) { monsterLock.lock(); try { @@ -1587,7 +1590,7 @@ public class MapleMonster extends AbstractLoadedLife { monsterLock.unlock(); } } - + public int getNoSkills() { return this.stats.getNoSkills(); } @@ -1619,12 +1622,12 @@ public class MapleMonster extends AbstractLoadedLife { @Override public void run() { int curHp = hp.get(); - if(curHp <= 1) { + if (curHp <= 1) { MobStatusService service = (MobStatusService) map.getChannelServer().getServiceAccess(ChannelServices.MOB_STATUS); service.interruptMobStatus(map.getId(), status); return; } - + int damage = dealDamage; if (damage >= curHp) { damage = curHp - 1; @@ -1640,11 +1643,11 @@ public class MapleMonster extends AbstractLoadedLife { } finally { unlockMonster(); } - + if (type == 1) { map.broadcastMessage(PacketCreator.damageMonster(getObjectId(), damage), getPosition()); } else if (type == 2) { - if(damage < dealDamage) { // ninja ambush (type 2) is already displaying DOT to the caster + if (damage < dealDamage) { // ninja ambush (type 2) is already displaying DOT to the caster map.broadcastMessage(PacketCreator.damageMonster(getObjectId(), damage), getPosition()); } } @@ -1671,7 +1674,7 @@ public class MapleMonster extends AbstractLoadedLife { final ElementalEffectiveness fEE = stats.getEffectiveness(e); if (!fEE.equals(ElementalEffectiveness.WEAK)) { stats.setEffectiveness(e, ee); - + MapleMap mmap = this.getMap(); Runnable r = () -> { monsterLock.lock(); @@ -1682,7 +1685,7 @@ public class MapleMonster extends AbstractLoadedLife { monsterLock.unlock(); } }; - + MobClearSkillService service = (MobClearSkillService) mmap.getChannelServer().getServiceAccess(ChannelServices.MOB_CLEAR_SKILL); service.registerMobClearSkillAction(mmap.getId(), r, milli); } @@ -1724,7 +1727,7 @@ public class MapleMonster extends AbstractLoadedLife { statiLock.unlock(); } } - + public MonsterStatusEffect getStati(MonsterStatus ms) { statiLock.lock(); try { @@ -1733,11 +1736,11 @@ public class MapleMonster extends AbstractLoadedLife { statiLock.unlock(); } } - + // ---- one can always have fun trying these pieces of codes below in-game rofl ---- - + public final ChangeableStats getChangedStats() { - return ostats; + return ostats; } public final int getMobMaxHp() { @@ -1746,13 +1749,13 @@ public class MapleMonster extends AbstractLoadedLife { } return stats.getHp(); } - + public final void setOverrideStats(final OverrideMonsterStats ostats) { this.ostats = new ChangeableStats(stats, ostats); this.hp.set(ostats.getHp()); this.mp = ostats.getMp(); } - + public final void changeLevel(final int newLevel) { changeLevel(newLevel, true); } @@ -1765,38 +1768,38 @@ public class MapleMonster extends AbstractLoadedLife { this.hp.set(ostats.getHp()); this.mp = ostats.getMp(); } - + private float getDifficultyRate(final int difficulty) { - switch(difficulty) { + switch (difficulty) { case 6: - return(7.7f); + return (7.7f); case 5: - return(5.6f); + return (5.6f); case 4: - return(3.2f); + return (3.2f); case 3: - return(2.1f); + return (2.1f); case 2: - return(1.4f); + return (1.4f); } - - return(1.0f); + + return (1.0f); } - + private void changeLevelByDifficulty(final int difficulty, boolean pqMob) { - changeLevel((int)(this.getLevel() * getDifficultyRate(difficulty)), pqMob); + changeLevel((int) (this.getLevel() * getDifficultyRate(difficulty)), pqMob); } - + public final void changeDifficulty(final int difficulty, boolean pqMob) { changeLevelByDifficulty(difficulty, pqMob); } - + // --------------------------------------------------------------------------------- - + private boolean isPuppetInVicinity(MapleSummon summon) { return summon.getPosition().distanceSq(this.getPosition()) < 177777; } - + public boolean isCharacterPuppetInVicinity(Character chr) { MapleStatEffect mse = chr.getBuffEffect(BuffStat.PUPPET); if (mse != null) { @@ -1804,38 +1807,34 @@ public class MapleMonster extends AbstractLoadedLife { // check whether mob is currently under a puppet's field of action or not if (summon != null) { - if (isPuppetInVicinity(summon)) { - return true; - } + return isPuppetInVicinity(summon); } else { map.getAggroCoordinator().removePuppetAggro(chr.getId()); } } - + return false; } - + public boolean isLeadingPuppetInVicinity() { Character chrController = this.getActiveController(); - + if (chrController != null) { - if (this.isCharacterPuppetInVicinity(chrController)) { - return true; - } + return this.isCharacterPuppetInVicinity(chrController); } - + return false; } - + private Character getNextControllerCandidate() { int mincontrolled = Integer.MAX_VALUE; Character newController = null; - + int mincontrolleddead = Integer.MAX_VALUE; Character newControllerDead = null; - + Character newControllerWithPuppet = null; - + for (Character chr : getMap().getAllPlayers()) { if (!chr.isHidden()) { int ctrlMonsSize = chr.getNumControlledMonsters(); @@ -1856,7 +1855,7 @@ public class MapleMonster extends AbstractLoadedLife { } } } - + if (newControllerWithPuppet != null) { return newControllerWithPuppet; } else if (newController != null) { @@ -1865,39 +1864,39 @@ public class MapleMonster extends AbstractLoadedLife { return newControllerDead; } } - + /** * Removes controllability status from the current controller of this mob. - * */ public Pair aggroRemoveController() { Character chrController; boolean hadAggro; - + aggroUpdateLock.lock(); try { chrController = getActiveController(); hadAggro = isControllerHasAggro(); - + this.setController(null); this.setControllerHasAggro(false); this.setControllerKnowsAboutAggro(false); } finally { aggroUpdateLock.unlock(); } - + if (chrController != null) { // this can/should only happen when a hidden gm attacks the monster - if (!this.isFake()) chrController.sendPacket(PacketCreator.stopControllingMonster(this.getObjectId())); + if (!this.isFake()) { + chrController.sendPacket(PacketCreator.stopControllingMonster(this.getObjectId())); + } chrController.stopControllingMonster(this); } - + return new Pair<>(chrController, hadAggro); } - + /** * Pass over the mob controllability and updates aggro status on the new * player controller. - * */ public void aggroSwitchController(Character newController, boolean immediateAggro) { if (aggroUpdateLock.tryLock()) { @@ -1906,12 +1905,12 @@ public class MapleMonster extends AbstractLoadedLife { if (prevController == newController) { return; } - + aggroRemoveController(); if (!(newController != null && newController.isLoggedinWorld() && newController.getMap() == this.getMap())) { return; } - + this.setController(newController); this.setControllerHasAggro(immediateAggro); this.setControllerKnowsAboutAggro(false); @@ -1919,63 +1918,61 @@ public class MapleMonster extends AbstractLoadedLife { } finally { aggroUpdateLock.unlock(); } - + this.aggroUpdatePuppetVisibility(); aggroMonsterControl(newController.getClient(), this, immediateAggro); newController.controlMonster(this); } } - + public void aggroAddPuppet(Character player) { MonsterAggroCoordinator mmac = map.getAggroCoordinator(); mmac.addPuppetAggro(player); - + aggroUpdatePuppetController(player); - + if (this.isControllerHasAggro()) { this.aggroUpdatePuppetVisibility(); } } - + public void aggroRemovePuppet(Character player) { MonsterAggroCoordinator mmac = map.getAggroCoordinator(); mmac.removePuppetAggro(player.getId()); - + aggroUpdatePuppetController(null); - + if (this.isControllerHasAggro()) { this.aggroUpdatePuppetVisibility(); } } - + /** * Automagically finds a new controller for the given monster from the chars * on the map it is from... - * */ public void aggroUpdateController() { Character chrController = this.getActiveController(); if (chrController != null && chrController.isAlive()) { return; } - + Character newController = getNextControllerCandidate(); if (newController == null) { // was a new controller found? (if not no one is on the map) return; } - + this.aggroSwitchController(newController, false); } - + /** * Finds a new controller for the given monster from the chars with deployed * puppet nearby on the map it is from... - * */ private void aggroUpdatePuppetController(Character newController) { Character chrController = this.getActiveController(); boolean updateController = false; - + if (chrController != null && chrController.isAlive()) { if (isCharacterPuppetInVicinity(chrController)) { return; @@ -1983,13 +1980,13 @@ public class MapleMonster extends AbstractLoadedLife { } else { updateController = true; } - + if (newController == null || !isCharacterPuppetInVicinity(newController)) { MonsterAggroCoordinator mmac = map.getAggroCoordinator(); - + List puppetOwners = mmac.getPuppetAggroList(); List toRemovePuppets = new LinkedList<>(); - + for (Integer cid : puppetOwners) { Character chr = map.getCharacterById(cid); @@ -2006,35 +2003,33 @@ public class MapleMonster extends AbstractLoadedLife { for (Integer cid : toRemovePuppets) { mmac.removePuppetAggro(cid); } - + if (newController == null) { // was a new controller found? (if not there's no puppet nearby) if (updateController) { aggroUpdateController(); } - + return; } } else if (chrController == newController) { this.aggroUpdatePuppetVisibility(); } - + this.aggroSwitchController(newController, this.isControllerHasAggro()); } - + /** * Ensures controllability removal of the current player controller, and * fetches for any player on the map to start controlling in place. - * */ public void aggroRedirectController() { this.aggroRemoveController(); // don't care if new controller not found, at least remove current controller this.aggroUpdateController(); } - + /** * Returns the current aggro status on the specified player, or null if the * specified player is currently not this mob's controller. - * */ public Boolean aggroMoveLifeUpdate(Character player) { Character chrController = getController(); @@ -2043,21 +2038,20 @@ public class MapleMonster extends AbstractLoadedLife { if (aggro) { this.setControllerKnowsAboutAggro(true); } - + return aggro; } else { return null; } } - + /** * Refreshes auto aggro for the player passed as parameter, does nothing if * there is already an active controller for this mob. - * */ public void aggroAutoAggroUpdate(Character player) { Character chrController = this.getActiveController(); - + if (chrController == null) { this.aggroSwitchController(player, true); } else if (chrController.getId() == player.getId()) { @@ -2067,16 +2061,15 @@ public class MapleMonster extends AbstractLoadedLife { } } } - + /** * Applied damage input for this mob, enough damage taken implies an aggro * target update for the attacker shortly. - * */ public void aggroMonsterDamage(Character attacker, int damage) { MonsterAggroCoordinator mmac = this.getMapAggroCoordinator(); mmac.addAggroDamage(this, attacker.getId(), damage); - + Character chrController = this.getController(); // aggro based on DPS rather than first-come-first-served, now live after suggestions thanks to MedicOP, Thora, Vcoc if (chrController != attacker) { if (this.getMapAggroCoordinator().isLeadingCharacterAggro(this, attacker)) { @@ -2100,42 +2093,42 @@ public class MapleMonster extends AbstractLoadedLife { this.aggroUpdatePuppetVisibility(); } } - - private static void aggroMonsterControl(Client c, MapleMonster mob, boolean immediateAggro) { + + private static void aggroMonsterControl(Client c, Monster mob, boolean immediateAggro) { c.sendPacket(PacketCreator.controlMonster(mob, false, immediateAggro)); } - + private void aggroRefreshPuppetVisibility(Character chrController, MapleSummon puppet) { // lame patch for client to redirect all aggro to the puppet - - List puppetControlled = new LinkedList<>(); - for (MapleMonster mob : chrController.getControlledMonsters()) { + + List puppetControlled = new LinkedList<>(); + for (Monster mob : chrController.getControlledMonsters()) { if (mob.isPuppetInVicinity(puppet)) { puppetControlled.add(mob); } } - - for (MapleMonster mob : puppetControlled) { + + for (Monster mob : puppetControlled) { chrController.sendPacket(PacketCreator.stopControllingMonster(mob.getObjectId())); } chrController.sendPacket(PacketCreator.removeSummon(puppet, false)); - + Client c = chrController.getClient(); - for (MapleMonster mob : puppetControlled) { // thanks BHB for noticing puppets disrupting mobstatuses for bowmans + for (Monster mob : puppetControlled) { // thanks BHB for noticing puppets disrupting mobstatuses for bowmans aggroMonsterControl(c, mob, mob.isControllerKnowsAboutAggro()); } chrController.sendPacket(PacketCreator.spawnSummon(puppet, false)); } - + public void aggroUpdatePuppetVisibility() { if (!availablePuppetUpdate) { return; } - + availablePuppetUpdate = false; Runnable r = () -> { try { - Character chrController = MapleMonster.this.getActiveController(); + Character chrController = Monster.this.getActiveController(); if (chrController == null) { return; } @@ -2154,23 +2147,22 @@ public class MapleMonster extends AbstractLoadedLife { if (controllerHasPuppet) { controllerHasPuppet = false; - chrController.sendPacket(PacketCreator.stopControllingMonster(MapleMonster.this.getObjectId())); - aggroMonsterControl(chrController.getClient(), MapleMonster.this, MapleMonster.this.isControllerHasAggro()); + chrController.sendPacket(PacketCreator.stopControllingMonster(Monster.this.getObjectId())); + aggroMonsterControl(chrController.getClient(), Monster.this, Monster.this.isControllerHasAggro()); } } finally { availablePuppetUpdate = true; } }; - + // had to schedule this since mob wouldn't stick to puppet aggro who knows why OverallService service = (OverallService) this.getMap().getChannelServer().getServiceAccess(ChannelServices.OVERALL); service.registerOverallAction(this.getMap().getId(), r, YamlConfig.config.server.UPDATE_INTERVAL); } - + /** * Clears all applied damage input for this mob, doesn't refresh target * aggro. - * */ public void aggroClearDamages() { this.getMapAggroCoordinator().removeAggroEntries(this); @@ -2178,7 +2170,6 @@ public class MapleMonster extends AbstractLoadedLife { /** * Clears this mob aggro on the current controller. - * */ public void aggroResetAggro() { aggroUpdateLock.lock(); @@ -2189,24 +2180,24 @@ public class MapleMonster extends AbstractLoadedLife { aggroUpdateLock.unlock(); } } - + public final int getRemoveAfter() { return stats.removeAfter(); } - + public void dispose() { if (monsterItemDrop != null) { monsterItemDrop.cancel(false); } - + this.getMap().dismissRemoveAfter(this); disposeLocks(); } - + private void disposeLocks() { LockCollector.getInstance().registerDisposeAction(() -> emptyLocks()); } - + private void emptyLocks() { externalLock = externalLock.dispose(); monsterLock = monsterLock.dispose(); diff --git a/src/main/java/server/life/SpawnPoint.java b/src/main/java/server/life/SpawnPoint.java index 5afd74025c..c6f901ee1a 100644 --- a/src/main/java/server/life/SpawnPoint.java +++ b/src/main/java/server/life/SpawnPoint.java @@ -35,7 +35,7 @@ public class SpawnPoint { private AtomicInteger spawnedMonsters = new AtomicInteger(0); private boolean immobile, denySpawn = false; - public SpawnPoint(final MapleMonster monster, Point pos, boolean immobile, int mobTime, int mobInterval, int team) { + public SpawnPoint(final Monster monster, Point pos, boolean immobile, int mobTime, int mobInterval, int team) { this.monster = monster.getId(); this.pos = new Point(pos); this.mobTime = mobTime; @@ -74,8 +74,8 @@ public class SpawnPoint { return true; } - public MapleMonster getMonster() { - MapleMonster mob = new MapleMonster(LifeFactory.getMonster(monster)); + public Monster getMonster() { + Monster mob = new Monster(LifeFactory.getMonster(monster)); mob.setPosition(new Point(pos)); mob.setTeam(team); mob.setFh(fh); diff --git a/src/main/java/server/maps/MapleMap.java b/src/main/java/server/maps/MapleMap.java index 1d26bc6037..905c13821b 100644 --- a/src/main/java/server/maps/MapleMap.java +++ b/src/main/java/server/maps/MapleMap.java @@ -373,7 +373,7 @@ public class MapleMap { } } - public void addSelfDestructive(MapleMonster mob) { + public void addSelfDestructive(Monster mob) { if (mob.getStats().selfDestruction() != null) { this.selfDestructives.add(mob.getObjectId()); } @@ -624,7 +624,7 @@ public class MapleMap { } } - private byte dropItemsFromMonsterOnMap(List dropEntry, Point pos, byte d, int chRate, byte droptype, int mobpos, Character chr, MapleMonster mob) { + private byte dropItemsFromMonsterOnMap(List dropEntry, Point pos, byte d, int chRate, byte droptype, int mobpos, Character chr, Monster mob) { if(dropEntry.isEmpty()) { return d; } @@ -673,7 +673,7 @@ public class MapleMap { return d; } - private byte dropGlobalItemsFromMonsterOnMap(List globalEntry, Point pos, byte d, byte droptype, int mobpos, Character chr, MapleMonster mob) { + private byte dropGlobalItemsFromMonsterOnMap(List globalEntry, Point pos, byte d, byte droptype, int mobpos, Character chr, Monster mob) { Collections.shuffle(globalEntry); Item idrop; @@ -701,7 +701,7 @@ public class MapleMap { return d; } - private void dropFromMonster(final Character chr, final MapleMonster mob, final boolean useBaseRate) { + private void dropFromMonster(final Character chr, final Monster mob, final boolean useBaseRate) { if (mob.dropsDisabled() || !dropsOn) { return; } @@ -738,7 +738,7 @@ public class MapleMap { registerMobItemDrops(droptype, mobpos, chRate, pos, dropEntry, visibleQuestEntry, otherQuestEntry, globalEntry, chr, mob); } - public void dropItemsFromMonster(List list, final Character chr, final MapleMonster mob) { + public void dropItemsFromMonster(List list, final Character chr, final Monster mob) { if (mob.dropsDisabled() || !dropsOn) { return; } @@ -752,7 +752,7 @@ public class MapleMap { dropItemsFromMonsterOnMap(list, pos, d, chRate, droptype, mobpos, chr, mob); } - public void dropFromFriendlyMonster(final Character chr, final MapleMonster mob) { + public void dropFromFriendlyMonster(final Character chr, final Monster mob) { dropFromMonster(chr, mob, true); } @@ -935,7 +935,7 @@ public class MapleMap { } } - private void registerMobItemDrops(byte droptype, int mobpos, int chRate, Point pos, List dropEntry, List visibleQuestEntry, List otherQuestEntry, List globalEntry, Character chr, MapleMonster mob) { + private void registerMobItemDrops(byte droptype, int mobpos, int chRate, Point pos, List dropEntry, List visibleQuestEntry, List otherQuestEntry, List globalEntry, Character chr, Monster mob) { MobLootEntry mle = new MobLootEntry(droptype, mobpos, chRate, pos, dropEntry, visibleQuestEntry, otherQuestEntry, globalEntry, chr, mob); if(YamlConfig.config.server.USE_SPAWN_LOOT_ON_ANIMATION) { @@ -1154,13 +1154,13 @@ public class MapleMap { } } - public MapleMonster getMonsterById(int id) { + public Monster getMonsterById(int id) { objectRLock.lock(); try { for (MapleMapObject obj : mapobjects.values()) { if (obj.getType() == MapleMapObjectType.MONSTER) { - if (((MapleMonster) obj).getId() == id) { - return (MapleMonster) obj; + if (((Monster) obj).getId() == id) { + return (Monster) obj; } } } @@ -1177,7 +1177,7 @@ public class MapleMap { public int countMonster(int minid, int maxid) { int count = 0; for (MapleMapObject m : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) { - MapleMonster mob = (MapleMonster) m; + Monster mob = (Monster) m; if (mob.getId() >= minid && mob.getId() <= maxid) { count++; } @@ -1210,10 +1210,10 @@ public class MapleMap { return list; } - public final List getAllMonsters() { - List list = new LinkedList<>(); + public final List getAllMonsters() { + List list = new LinkedList<>(); for (MapleMapObject mmo : getMonsters()) { - list.add((MapleMonster) mmo); + list.add((Monster) mmo); } return list; @@ -1287,7 +1287,7 @@ public class MapleMap { public int countBosses() { int count = 0; - for(MapleMonster mob: getAllMonsters()) { + for(Monster mob: getAllMonsters()) { if (mob.isBoss()) { count++; } @@ -1296,10 +1296,10 @@ public class MapleMap { return count; } - public boolean damageMonster(final Character chr, final MapleMonster monster, final int damage) { + public boolean damageMonster(final Character chr, final Monster monster, final int damage) { if (monster.getId() == 8800000) { for (MapleMapObject object : chr.getMap().getMapObjects()) { - MapleMonster mons = chr.getMap().getMonsterByOid(object.getObjectId()); + Monster mons = chr.getMap().getMonsterByOid(object.getObjectId()); if (mons != null) { if (mons.getId() >= 8800003 && mons.getId() <= 8800010) { return true; @@ -1341,7 +1341,7 @@ public class MapleMap { getWorldServer().dropMessage(6, "[Victory] In a swift stroke of sorts, the crew that has attempted Pink Bean at channel " + channel + " has ultimately defeated it. The Temple of Time shines radiantly once again, the day finally coming back, as the crew that managed to finally conquer it returns victoriously from the battlefield!!"); } - private boolean removeKilledMonsterObject(MapleMonster monster) { + private boolean removeKilledMonsterObject(Monster monster) { monster.lockMonster(); try { if(monster.getHp() < 0) { @@ -1361,11 +1361,11 @@ public class MapleMap { } } - public void killMonster(final MapleMonster monster, final Character chr, final boolean withDrops) { + public void killMonster(final Monster monster, final Character chr, final boolean withDrops) { killMonster(monster, chr, withDrops, 1); } - public void killMonster(final MapleMonster monster, final Character chr, final boolean withDrops, int animation) { + public void killMonster(final Monster monster, final Character chr, final boolean withDrops, int animation) { if (monster == null) { return; } @@ -1412,7 +1412,7 @@ public class MapleMap { boolean makeZakReal = true; Collection objects = getMapObjects(); for (MapleMapObject object : objects) { - MapleMonster mons = getMonsterByOid(object.getObjectId()); + Monster mons = getMonsterByOid(object.getObjectId()); if (mons != null) { if (mons.getId() >= 8800003 && mons.getId() <= 8800010) { makeZakReal = false; @@ -1424,7 +1424,7 @@ public class MapleMap { MapleMap map = chr.getMap(); for (MapleMapObject object : objects) { - MapleMonster mons = map.getMonsterByOid(object.getObjectId()); + Monster mons = map.getMonsterByOid(object.getObjectId()); if (mons != null) { if (mons.getId() == 8800000) { makeMonsterReal(mons); @@ -1460,15 +1460,15 @@ public class MapleMap { } } - public void killFriendlies(MapleMonster mob) { + public void killFriendlies(Monster mob) { this.killMonster(mob, (Character) getPlayers().get(0), false); } public void killMonster(int mobId) { Character chr = (Character) getPlayers().get(0); - List mobList = getAllMonsters(); + List mobList = getAllMonsters(); - for (MapleMonster mob : mobList) { + for (Monster mob : mobList) { if (mob.getId() == mobId) { this.killMonster(mob, chr, false); } @@ -1480,9 +1480,9 @@ public class MapleMap { if(!mapChars.isEmpty()) { Character defaultChr = mapChars.entrySet().iterator().next().getValue(); - List mobList = getAllMonsters(); + List mobList = getAllMonsters(); - for (MapleMonster mob : mobList) { + for (Monster mob : mobList) { if (mob.getId() == mobId) { Character chr = mapChars.get(mob.getHighestDamagerId()); if (chr == null) { @@ -1499,7 +1499,7 @@ public class MapleMap { closeMapSpawnPoints(); for (MapleMapObject monstermo : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) { - MapleMonster monster = (MapleMonster) monstermo; + Monster monster = (Monster) monstermo; if (monster.getStats().isFriendly()) { continue; } @@ -1514,7 +1514,7 @@ public class MapleMap { closeMapSpawnPoints(); for (MapleMapObject monstermo : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) { - MapleMonster monster = (MapleMonster) monstermo; + Monster monster = (Monster) monstermo; if (monster.getStats().isFriendly()) { continue; } @@ -1527,7 +1527,7 @@ public class MapleMap { closeMapSpawnPoints(); for (MapleMapObject monstermo : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) { - MapleMonster monster = (MapleMonster) monstermo; + Monster monster = (Monster) monstermo; killMonster(monster, null, false, 1); } @@ -1749,9 +1749,9 @@ public class MapleMap { * @param oid * @return */ - public MapleMonster getMonsterByOid(int oid) { + public Monster getMonsterByOid(int oid) { MapleMapObject mmo = getMapObject(oid); - return (mmo != null && mmo.getType() == MapleMapObjectType.MONSTER) ? (MapleMonster) mmo : null; + return (mmo != null && mmo.getType() == MapleMapObjectType.MONSTER) ? (Monster) mmo : null; } public MapleReactor getReactorByOid(int oid) { @@ -1813,11 +1813,11 @@ public class MapleMap { } public void spawnMonsterOnGroundBelow(int id, int x, int y) { - MapleMonster mob = LifeFactory.getMonster(id); + Monster mob = LifeFactory.getMonster(id); spawnMonsterOnGroundBelow(mob, new Point(x, y)); } - public void spawnMonsterOnGroundBelow(MapleMonster mob, Point pos) { + public void spawnMonsterOnGroundBelow(Monster mob, Point pos) { Point spos = new Point(pos.x, pos.y - 1); spos = calcPointBelow(spos); spos.y--; @@ -1825,7 +1825,7 @@ public class MapleMap { spawnMonster(mob); } - public void spawnCPQMonster(MapleMonster mob, Point pos, int team) { + public void spawnCPQMonster(Monster mob, Point pos, int team) { Point spos = new Point(pos.x, pos.y - 1); spos = calcPointBelow(spos); spos.y--; @@ -1834,11 +1834,11 @@ public class MapleMap { spawnMonster(mob); } - private void monsterItemDrop(final MapleMonster m, long delay) { + private void monsterItemDrop(final Monster m, long delay) { m.dropFromFriendlyMonster(delay); } - public void spawnFakeMonsterOnGroundBelow(MapleMonster mob, Point pos) { + public void spawnFakeMonsterOnGroundBelow(Monster mob, Point pos) { Point spos = getGroundBelow(pos); mob.setPosition(spos); spawnFakeMonster(mob); @@ -1855,7 +1855,7 @@ public class MapleMap { return calcPointBelow(pos); } - public void spawnRevives(final MapleMonster monster) { + public void spawnRevives(final Monster monster) { monster.setMap(this); if (getEventInstance() != null) { getEventInstance().registerMonster(monster); @@ -1871,7 +1871,7 @@ public class MapleMap { applyRemoveAfter(monster); } - private void applyRemoveAfter(final MapleMonster monster) { + private void applyRemoveAfter(final Monster monster) { final selfDestruction selfDestruction = monster.getStats().selfDestruction(); if (monster.getStats().removeAfter() > 0 || selfDestruction != null && selfDestruction.getHp() < 0) { Runnable removeAfterAction; @@ -1890,7 +1890,7 @@ public class MapleMap { } } - public void dismissRemoveAfter(final MapleMonster monster) { + public void dismissRemoveAfter(final Monster monster) { Runnable removeAfterAction = monster.popRemoveAfterAction(); if (removeAfterAction != null) { OverallService service = (OverallService) this.getChannelServer().getServiceAccess(ChannelServices.OVERALL); @@ -1932,11 +1932,11 @@ public class MapleMap { } } - public void spawnMonster(final MapleMonster monster) { + public void spawnMonster(final Monster monster) { spawnMonster(monster, 1, false); } - public void spawnMonster(final MapleMonster monster, int difficulty, boolean isPq) { + public void spawnMonster(final Monster monster, int difficulty, boolean isPq) { if (mobCapacity != -1 && mobCapacity == spawnedMonstersOnMap.get()) { return;//PyPQ } @@ -1988,12 +1988,12 @@ public class MapleMap { applyRemoveAfter(monster); // thanks LightRyuzaki for pointing issues with spawned CWKPQ mobs not applying this } - public void spawnDojoMonster(final MapleMonster monster) { + public void spawnDojoMonster(final Monster monster) { Point[] pts = {new Point(140, 0), new Point(190, 7), new Point(187, 7)}; spawnMonsterWithEffect(monster, 15, pts[Randomizer.nextInt(3)]); } - public void spawnMonsterWithEffect(final MapleMonster monster, final int effect, Point pos) { + public void spawnMonsterWithEffect(final Monster monster, final int effect, Point pos) { monster.setMap(this); Point spos = new Point(pos.x, pos.y - 1); spos = calcPointBelow(spos); @@ -2019,7 +2019,7 @@ public class MapleMap { applyRemoveAfter(monster); } - public void spawnFakeMonster(final MapleMonster monster) { + public void spawnFakeMonster(final Monster monster) { monster.setMap(this); monster.setFake(true); spawnAndAddRangedMapObject(monster, c -> c.sendPacket(PacketCreator.spawnFakeMonster(monster, 0))); @@ -2028,7 +2028,7 @@ public class MapleMap { addSelfDestructive(monster); } - public void makeMonsterReal(final MapleMonster monster) { + public void makeMonsterReal(final Monster monster) { monster.setFake(false); broadcastMessage(PacketCreator.makeMonsterReal(monster)); monster.aggroUpdateController(); @@ -2079,7 +2079,7 @@ public class MapleMap { for (MapleMapObject mo : affectedMonsters) { if (mist.makeChanceResult()) { MonsterStatusEffect poisonEffect = new MonsterStatusEffect(Collections.singletonMap(MonsterStatus.POISON, 1), mist.getSourceSkill(), null, false); - ((MapleMonster) mo).applyStatus(mist.getOwner(), poisonEffect, true, duration); + ((Monster) mo).applyStatus(mist.getOwner(), poisonEffect, true, duration); } } }; @@ -2650,13 +2650,13 @@ public class MapleMap { */ public void addPlayerPuppet(Character player) { - for (MapleMonster mm : this.getAllMonsters()) { + for (Monster mm : this.getAllMonsters()) { mm.aggroAddPuppet(player); } } public void removePlayerPuppet(Character player) { - for (MapleMonster mm : this.getAllMonsters()) { + for (Monster mm : this.getAllMonsters()) { mm.aggroRemovePuppet(player); } } @@ -2787,7 +2787,7 @@ public class MapleMap { } } - private void updateBossSpawn(MapleMonster monster) { + private void updateBossSpawn(Monster monster) { if (monster.hasBossHPBar()) { broadcastBossHpMessage(monster, monster.hashCode(), monster.makeBossHPBarPacket(), monster.getPosition()); } @@ -2802,15 +2802,15 @@ public class MapleMap { } } - public void broadcastBossHpMessage(MapleMonster mm, int bossHash, Packet packet) { + public void broadcastBossHpMessage(Monster mm, int bossHash, Packet packet) { broadcastBossHpMessage(mm, bossHash, null, packet, Double.POSITIVE_INFINITY, null); } - public void broadcastBossHpMessage(MapleMonster mm, int bossHash, Packet packet, Point rangedFrom) { + public void broadcastBossHpMessage(Monster mm, int bossHash, Packet packet, Point rangedFrom) { broadcastBossHpMessage(mm, bossHash, null, packet, getRangedDistance(), rangedFrom); } - private void broadcastBossHpMessage(MapleMonster mm, int bossHash, Character source, Packet packet, double rangeSq, Point rangedFrom) { + private void broadcastBossHpMessage(Monster mm, int bossHash, Character source, Packet packet, double rangeSq, Point rangedFrom) { chrRLock.lock(); try { for (Character chr : characters) { @@ -2966,7 +2966,7 @@ public class MapleMap { chr.addVisibleMapObject(o); if (o.getType() == MapleMapObjectType.MONSTER) { - ((MapleMonster) o).aggroUpdateController(); + ((Monster) o).aggroUpdateController(); } } } @@ -3062,7 +3062,7 @@ public class MapleMap { * @param monster * @param mobTime */ - public void addMonsterSpawn(MapleMonster monster, int mobTime, int team) { + public void addMonsterSpawn(Monster monster, int mobTime, int team) { Point newpos = calcPointBelow(monster.getPosition()); newpos.y -= 1; SpawnPoint sp = new SpawnPoint(monster, newpos, !monster.isMobile(), mobTime, mobInterval, team); @@ -3072,7 +3072,7 @@ public class MapleMap { } } - public void addAllMonsterSpawn(MapleMonster monster, int mobTime, int team) { + public void addAllMonsterSpawn(Monster monster, int mobTime, int team) { Point newpos = calcPointBelow(monster.getPosition()); newpos.y -= 1; SpawnPoint sp = new SpawnPoint(monster, newpos, !monster.isMobile(), mobTime, mobInterval, team); @@ -3182,7 +3182,7 @@ public class MapleMap { } } - public void moveMonster(MapleMonster monster, Point reportedPos) { + public void moveMonster(Monster monster, Point reportedPos) { monster.setPosition(reportedPos); for (Character chr : getAllPlayers()) { updateMapObjectVisibility(chr, monster); @@ -3378,9 +3378,9 @@ public class MapleMap { private List otherQuestEntry; private List globalEntry; private Character chr; - private MapleMonster mob; + private Monster mob; - protected MobLootEntry(byte droptype, int mobpos, int chRate, Point pos, List dropEntry, List visibleQuestEntry, List otherQuestEntry, List globalEntry, Character chr, MapleMonster mob) { + protected MobLootEntry(byte droptype, int mobpos, int chRate, Point pos, List dropEntry, List visibleQuestEntry, List otherQuestEntry, List globalEntry, Character chr, Monster mob) { this.droptype = droptype; this.mobpos = mobpos; this.chRate = chRate; @@ -3620,7 +3620,7 @@ public class MapleMap { } public void mobMpRecovery() { - for (MapleMonster mob : this.getAllMonsters()) { + for (Monster mob : this.getAllMonsters()) { if (mob.isAlive()) { mob.heal(0, mob.getLevel()); } @@ -4039,10 +4039,10 @@ public class MapleMap { } public void spawnHorntailOnGroundBelow(final Point targetPoint) { // ayy lmao - MapleMonster htIntro = LifeFactory.getMonster(8810026); + Monster htIntro = LifeFactory.getMonster(8810026); spawnMonsterOnGroundBelow(htIntro, targetPoint); // htintro spawn animation converting into horntail detected thanks to Arnah - final MapleMonster ht = LifeFactory.getMonster(8810018); + final Monster ht = LifeFactory.getMonster(8810018); ht.setParentMobOid(htIntro.getObjectId()); ht.addListener(new MonsterListener() { @Override @@ -4061,7 +4061,7 @@ public class MapleMap { spawnMonsterOnGroundBelow(ht, targetPoint); for (int x = 8810002; x <= 8810009; x++) { - MapleMonster m = LifeFactory.getMonster(x); + Monster m = LifeFactory.getMonster(x); m.setParentMobOid(htIntro.getObjectId()); m.addListener(new MonsterListener() { @@ -4323,7 +4323,7 @@ public class MapleMap { } for (MapleMapObject mmo : this.mapobjects.values()) { if (mmo.getType() == MapleMapObjectType.MONSTER) { - MapleMonster mob = (MapleMonster) mmo; + Monster mob = (Monster) mmo; if (mob.getTeam() == team) { skill.getSkill().applyEffect(null, mob, false, null); } @@ -4395,7 +4395,7 @@ public class MapleMap { } public void dispose() { - for(MapleMonster mm : this.getAllMonsters()) { + for(Monster mm : this.getAllMonsters()) { mm.dispose(); } diff --git a/src/main/java/server/maps/MapleMapFactory.java b/src/main/java/server/maps/MapleMapFactory.java index ea104bbfcc..a895875133 100644 --- a/src/main/java/server/maps/MapleMapFactory.java +++ b/src/main/java/server/maps/MapleMapFactory.java @@ -110,8 +110,8 @@ public class MapleMapFactory { private static void loadLifeRaw(MapleMap map, int id, String type, int cy, int f, int fh, int rx0, int rx1, int x, int y, int hide, int mobTime, int team) { AbstractLoadedLife myLife = loadLife(id, type, cy, f, fh, rx0, rx1, x, y, hide); - if (myLife instanceof MapleMonster) { - MapleMonster monster = (MapleMonster) myLife; + if (myLife instanceof Monster) { + Monster monster = (Monster) myLife; if (mobTime == -1) { //does not respawn, force spawn once map.spawnMonster(monster); diff --git a/src/main/java/server/maps/MapleMist.java b/src/main/java/server/maps/MapleMist.java index d9afc65adf..456eb99615 100644 --- a/src/main/java/server/maps/MapleMist.java +++ b/src/main/java/server/maps/MapleMist.java @@ -28,8 +28,8 @@ import client.SkillFactory; import constants.skills.*; import net.packet.Packet; import server.MapleStatEffect; -import server.life.MapleMonster; import server.life.MobSkill; +import server.life.Monster; import tools.PacketCreator; import java.awt.*; @@ -41,13 +41,13 @@ import java.awt.*; public class MapleMist extends AbstractMapleMapObject { private Rectangle mistPosition; private Character owner = null; - private MapleMonster mob = null; + private Monster mob = null; private MapleStatEffect source; private MobSkill skill; private boolean isMobMist, isPoisonMist, isRecoveryMist; private int skillDelay; - public MapleMist(Rectangle mistPosition, MapleMonster mob, MobSkill skill) { + public MapleMist(Rectangle mistPosition, Monster mob, MobSkill skill) { this.mistPosition = mistPosition; this.mob = mob; this.skill = skill; @@ -112,7 +112,7 @@ public class MapleMist extends AbstractMapleMapObject { return skillDelay; } - public MapleMonster getMobOwner() { + public Monster getMobOwner() { return mob; } diff --git a/src/main/java/tools/PacketCreator.java b/src/main/java/tools/PacketCreator.java index 1ddac131c5..0e5458d4ee 100644 --- a/src/main/java/tools/PacketCreator.java +++ b/src/main/java/tools/PacketCreator.java @@ -61,10 +61,10 @@ import server.CashShop.CashItemFactory; import server.CashShop.SpecialCashItem; import server.*; import server.events.gm.Snowball; -import server.life.MapleMonster; import server.life.MapleNPC; import server.life.MaplePlayerNPC; import server.life.MobSkill; +import server.life.Monster; import server.maps.*; import server.maps.MapleMiniGame.MiniGameResult; import server.movement.LifeMovementFragment; @@ -1327,7 +1327,7 @@ public class PacketCreator { * @param newSpawn Is it a new spawn? * @return The spawn monster packet. */ - public static Packet spawnMonster(MapleMonster life, boolean newSpawn) { + public static Packet spawnMonster(Monster life, boolean newSpawn) { return spawnMonsterInternal(life, false, newSpawn, false, 0, false); } @@ -1339,7 +1339,7 @@ public class PacketCreator { * @param effect The spawn effect. * @return The spawn monster packet. */ - public static Packet spawnMonster(MapleMonster life, boolean newSpawn, int effect) { + public static Packet spawnMonster(Monster life, boolean newSpawn, int effect) { return spawnMonsterInternal(life, false, newSpawn, false, effect, false); } @@ -1351,7 +1351,7 @@ public class PacketCreator { * @param aggro Aggressive monster? * @return The monster control packet. */ - public static Packet controlMonster(MapleMonster life, boolean newSpawn, boolean aggro) { + public static Packet controlMonster(Monster life, boolean newSpawn, boolean aggro) { return spawnMonsterInternal(life, true, newSpawn, aggro, 0, false); } @@ -1361,7 +1361,7 @@ public class PacketCreator { * @param life * @return */ - public static Packet removeMonsterInvisibility(MapleMonster life) { + public static Packet removeMonsterInvisibility(Monster life) { final OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); p.writeByte(1); p.writeInt(life.getObjectId()); @@ -1374,7 +1374,7 @@ public class PacketCreator { * @param life * @return */ - public static Packet makeMonsterInvisible(MapleMonster life) { + public static Packet makeMonsterInvisible(Monster life) { return spawnMonsterInternal(life, true, false, false, 0, true); } @@ -1444,7 +1444,7 @@ public class PacketCreator { * @param effect The spawn effect to use. * @return The spawn/control packet. */ - private static Packet spawnMonsterInternal(MapleMonster life, boolean requestController, boolean newSpawn, boolean aggro, int effect, boolean makeInvis) { + private static Packet spawnMonsterInternal(Monster life, boolean requestController, boolean newSpawn, boolean aggro, int effect, boolean makeInvis) { if (makeInvis) { OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); p.writeByte(0); @@ -1485,7 +1485,7 @@ public class PacketCreator { */ if (life.getParentMobOid() != 0) { - MapleMonster parentMob = life.getMap().getMonsterByOid(life.getParentMobOid()); + Monster parentMob = life.getMap().getMonsterByOid(life.getParentMobOid()); if (parentMob != null && parentMob.isAlive()) { p.writeByte(effect != 0 ? effect : -3); p.writeInt(life.getParentMobOid()); @@ -1508,7 +1508,7 @@ public class PacketCreator { * @param effect The effect to show when spawning. * @return The packet to spawn the mob as non-targettable. */ - public static Packet spawnFakeMonster(MapleMonster life, int effect) { + public static Packet spawnFakeMonster(Monster life, int effect) { OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); p.writeByte(1); p.writeInt(life.getObjectId()); @@ -1536,7 +1536,7 @@ public class PacketCreator { * @param life The mob to make targettable. * @return The packet to make the mob targettable. */ - public static Packet makeMonsterReal(MapleMonster life) { + public static Packet makeMonsterReal(Monster life) { OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER); p.writeInt(life.getObjectId()); p.writeByte(5); @@ -6692,7 +6692,7 @@ public class PacketCreator { return builder.toString(); } - public static Packet MobDamageMobFriendly(MapleMonster mob, int damage, int remainingHp) { + public static Packet MobDamageMobFriendly(Monster mob, int damage, int remainingHp) { final OutPacket p = OutPacket.create(SendOpcode.DAMAGE_MONSTER); p.writeInt(mob.getObjectId()); p.writeByte(1); // direction ?