diff --git a/src/engine/db/handlers/dbMobHandler.java b/src/engine/db/handlers/dbMobHandler.java index 423748ca..1af8a770 100644 --- a/src/engine/db/handlers/dbMobHandler.java +++ b/src/engine/db/handlers/dbMobHandler.java @@ -110,8 +110,8 @@ public class dbMobHandler extends dbHandlerBase { ResultSet rs = preparedStatement.executeQuery(); while (rs.next()) { - String name = rs.getString("name"); - Mob toCreate = Mob.createGuardMob(guardCaptain, guardCaptain.getGuild(), guardCaptain.getParentZone(), guardCaptain.building.getLoc(), guardCaptain.getLevel(), name); + String minionName = rs.getString("name"); + Mob toCreate = Mob.createGuardMinion(guardCaptain, guardCaptain.getLevel(), minionName); if (toCreate == null) return; diff --git a/src/engine/gameManager/NPCManager.java b/src/engine/gameManager/NPCManager.java index 9aa84dca..b3b8916b 100644 --- a/src/engine/gameManager/NPCManager.java +++ b/src/engine/gameManager/NPCManager.java @@ -379,4 +379,31 @@ public enum NPCManager { return buildingSlot; } + + public static int getMaxMinions(Mob guardCaptain) { + + int maxSlots; + + switch (guardCaptain.getRank()) { + case 3: + maxSlots = 2; + break; + case 4: + case 5: + maxSlots = 3; + break; + case 6: + maxSlots = 4; + break; + case 7: + maxSlots = 5; + break; + case 1: + case 2: + default: + maxSlots = 1; + + } + return maxSlots; + } } diff --git a/src/engine/net/client/handlers/MinionTrainingMsgHandler.java b/src/engine/net/client/handlers/MinionTrainingMsgHandler.java index a71a9300..8d489fc2 100644 --- a/src/engine/net/client/handlers/MinionTrainingMsgHandler.java +++ b/src/engine/net/client/handlers/MinionTrainingMsgHandler.java @@ -298,14 +298,14 @@ public class MinionTrainingMsgHandler extends AbstractClientMsgHandler { String pirateName = NPCManager.getPirateName(mobBase); - if (!DbManager.MobQueries.ADD_TO_GUARDS(npc.getObjectUUID(), mobBase, pirateName, npc.getSiegeMinionMap().size() + 1)) - return true; - - Mob toCreate = Mob.createGuardMob(npc, npc.getGuild(), zone, building.getLoc(), npc.getLevel(), pirateName); + Mob toCreate = Mob.createGuardMinion(npc, npc.getLevel(), pirateName); if (toCreate == null) return true; + if (!DbManager.MobQueries.ADD_TO_GUARDS(npc.getObjectUUID(), mobBase, pirateName, npc.getSiegeMinionMap().size() + 1)) + return true; + if (toCreate != null) { toCreate.setDeathTime(System.currentTimeMillis()); toCreate.parentZone.zoneMobSet.add(toCreate); diff --git a/src/engine/objects/Mob.java b/src/engine/objects/Mob.java index 8b00993b..1157e25e 100644 --- a/src/engine/objects/Mob.java +++ b/src/engine/objects/Mob.java @@ -26,7 +26,6 @@ import engine.net.Dispatch; import engine.net.DispatchMessage; import engine.net.client.msg.PetMsg; import engine.net.client.msg.PlaceAssetMsg; -import engine.powers.EffectsBase; import engine.powers.MobPowerEntry; import engine.server.MBServerStatics; import org.joda.time.DateTime; @@ -638,132 +637,64 @@ public class Mob extends AbstractIntelligenceAgent { mob.upgradeDateTime = upgradeDateTime; } - public static synchronized Mob createGuardMob(Mob guardCaptain, Guild guild, Zone parent, Vector3fImmutable loc, short level, String pirateName) { + public static synchronized Mob createGuardMinion(Mob guardCaptain, short level, String minionName) { MobBase minionMobBase; - Mob mob; - int maxSlots; - - switch (guardCaptain.getRank()) { - case 3: - maxSlots = 2; - break; - case 4: - case 5: - maxSlots = 3; - break; - case 6: - maxSlots = 4; - break; - case 7: - maxSlots = 5; - break; - case 1: - case 2: - default: - maxSlots = 1; + Mob minionMobile; - } + int maxSlots = NPCManager.getMaxMinions(guardCaptain); if (guardCaptain.siegeMinionMap.size() == maxSlots) return null; - minionMobBase = guardCaptain.mobBase; - - if (minionMobBase == null) - return null; - - mob = new Mob(minionMobBase, guild, parent, level, new Vector3fImmutable(1, 1, 1), 0, true); - mob.setLevel(level); - if (guardCaptain.equipmentSetID != 0) - mob.equipmentSetID = guardCaptain.equipmentSetID; - - mob.enemy = guardCaptain.enemy; - mob.notEnemy = guardCaptain.notEnemy; - - mob.runAfterLoad(); - mob.despawned = true; - mob.despawn(); + minionMobile = new Mob(); + minionMobile.level = level; + minionMobile.loadID = guardCaptain.loadID; + minionMobile.firstName = minionName; + minionMobile.equipmentSetID = guardCaptain.equipmentSetID; + + minionMobile.runeSet = guardCaptain.runeSet; + minionMobile.enemy = guardCaptain.enemy; + minionMobile.notEnemy = guardCaptain.notEnemy; + + minionMobile.deathTime = System.currentTimeMillis(); + minionMobile.npcOwner = guardCaptain; + minionMobile.spawnTime = (int) (-2.500 * guardCaptain.building.getRank() + 22.5) * 60; + minionMobile.BehaviourType = Enum.MobBehaviourType.GuardMinion; + minionMobile.guardedCity = guardCaptain.guardedCity; + minionMobile.parentZoneUUID = guardCaptain.parentZoneUUID; + MovementManager.translocate(minionMobile, guardCaptain.bindLoc, guardCaptain.region); + minionMobile.bindLoc = guardCaptain.bindLoc; + + minionMobile.runAfterLoad(); + minionMobile.despawned = true; + minionMobile.despawn(); //grab equipment and name from minionbase. - if (guardCaptain.contract != null) { - Enum.MinionType minionType = Enum.MinionType.ContractToMinionMap.get(guardCaptain.contract.getContractID()); - if (minionType != null) { - String rank; - - if (guardCaptain.getRank() < 3) - rank = MBServerStatics.JUNIOR; - else if (guardCaptain.getRank() < 6) - rank = ""; - else if (guardCaptain.getRank() == 6) - rank = MBServerStatics.VETERAN; - else - rank = MBServerStatics.ELITE; - - mob.firstName = NPCManager.getPirateName(mob.getMobBaseID()); - mob.lastName = rank + " " + minionType.getRace() + " " + minionType.getName(); - } - } - - mob.setObjectTypeMask(MBServerStatics.MASK_MOB | mob.getTypeMasks()); - - mob.isPlayerGuard = true; - - DbManager.addToCache(mob); - - RuneBase guardRune = RuneBase.getRuneBase(252621); - - for (MobBaseEffects mbe : guardRune.getEffectsList()) { + Enum.MinionType minionType = Enum.MinionType.ContractToMinionMap.get(guardCaptain.contract.getContractID()); - EffectsBase eb = PowersManager.getEffectByToken(mbe.getToken()); + if (minionType != null) { + String rank; - if (eb == null) { - Logger.info("EffectsBase Null for Token " + mbe.getToken()); - continue; - } - - //check to upgrade effects if needed. - if (mob.effects.containsKey(Integer.toString(eb.getUUID()))) { - if (mbe.getReqLvl() > (int) mob.level) { - continue; - } - - Effect eff = mob.effects.get(Integer.toString(eb.getUUID())); - - if (eff == null) - continue; - - //Current effect is a higher rank, dont apply. - if (eff.getTrains() > mbe.getRank()) - continue; + if (guardCaptain.getRank() < 3) + rank = MBServerStatics.JUNIOR; + else if (guardCaptain.getRank() < 6) + rank = ""; + else if (guardCaptain.getRank() == 6) + rank = MBServerStatics.VETERAN; + else + rank = MBServerStatics.ELITE; - //new effect is of a higher rank. remove old effect and apply new one. - eff.cancelJob(); - mob.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true); - } else { + minionMobile.lastName = rank + " " + minionType.getRace() + " " + minionType.getName(); + } - if (mbe.getReqLvl() > (int) mob.level) - continue; + DbManager.addToCache(minionMobile); - mob.addEffectNoTimer(Integer.toString(eb.getUUID()), eb, mbe.getRank(), true); - } - } + int slot = guardCaptain.siegeMinionMap.size() + 1; + guardCaptain.siegeMinionMap.put(minionMobile, slot); - int slot = 0; - slot += guardCaptain.siegeMinionMap.size() + 1; - - guardCaptain.siegeMinionMap.put(mob, slot); - mob.deathTime = System.currentTimeMillis(); - mob.npcOwner = guardCaptain; - mob.spawnTime = (int) (-2.500 * guardCaptain.building.getRank() + 22.5) * 60; - mob.BehaviourType = Enum.MobBehaviourType.GuardMinion; - mob.guardedCity = guardCaptain.guardedCity; - mob.parentZone = parent; - parent.zoneMobSet.add(mob); - MovementManager.translocate(mob, guardCaptain.bindLoc, guardCaptain.region); - mob.bindLoc = guardCaptain.bindLoc; - return mob; + return minionMobile; } public static synchronized Mob createSiegeMob(NPC owner, int loadID, Guild guild, Zone parent, Vector3fImmutable loc, short level) {