forked from MagicBane/Server
Merge remote-tracking branch 'origin/char-init-mobwork' into char-init-cleanup
This commit is contained in:
@@ -2636,8 +2636,9 @@ public class Enum {
|
||||
TEMPLEGUARD(1575,1652, MinionClass.MELEE,"Guard","Temple"),
|
||||
TEMPLEMAGE(1577, 1656, MinionClass.MAGE,"Confessor","Temple"),
|
||||
UNDEADGUARD(980100,1674,MinionClass.MELEE,"Guard","Undead"),
|
||||
UNDEADMAGE(980102,1675,MinionClass.MAGE,"Adept","Undead");
|
||||
|
||||
UNDEADMAGE(980102,1675,MinionClass.MAGE,"Adept","Undead"),
|
||||
WEREWOLFGUARD(980104,0,MinionClass.MELEE,"Guard","Werewolf"),
|
||||
WEREBEARGUARD(980103,0,MinionClass.MELEE,"Guard","Werebear");
|
||||
private final int captainContractID;
|
||||
private final int equipSetID;
|
||||
private final MinionClass minionClass;
|
||||
|
||||
@@ -199,7 +199,7 @@ public class MobileFSM {
|
||||
mob.destination = mob.patrolPoints.get(mob.lastPatrolPointIndex);
|
||||
MovementUtilities.aiMove(mob, mob.destination, true);
|
||||
mob.lastPatrolPointIndex += 1;
|
||||
if (mob.isPlayerGuard()) {
|
||||
if (mob.BehaviourType.ordinal() == Enum.MobBehaviourType.GuardCaptain.ordinal()) {
|
||||
for (Entry<Mob, Integer> minion : mob.siegeMinionMap.entrySet()) {
|
||||
//make sure mob is out of combat stance
|
||||
if (minion.getKey().isCombat() && minion.getKey().getCombatTarget() == null) {
|
||||
@@ -320,6 +320,12 @@ public class MobileFSM {
|
||||
if (mob.playerAgroMap.isEmpty())
|
||||
//no players loaded, no need to proceed
|
||||
return;
|
||||
if (mob.isCombat() && mob.getCombatTarget() == null) {
|
||||
mob.setCombat(false);
|
||||
UpdateStateMsg rwss = new UpdateStateMsg();
|
||||
rwss.setPlayer(mob);
|
||||
DispatchMessage.sendToAllInRange(mob, rwss);
|
||||
}
|
||||
CheckToSendMobHome(mob);
|
||||
mob.updateLocation();
|
||||
switch (mob.BehaviourType) {
|
||||
@@ -378,10 +384,16 @@ public class MobileFSM {
|
||||
return;
|
||||
mob.updateLocation();
|
||||
if (mob.BehaviourType != Enum.MobBehaviourType.Pet1) {
|
||||
if (mob.getCombatTarget() == null)
|
||||
if (mob.getCombatTarget() == null) {
|
||||
if (mob.BehaviourType.ordinal() == Enum.MobBehaviourType.GuardMinion.ordinal()) {
|
||||
if (mob.npcOwner.isAlive() == true) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Patrol(mob);
|
||||
else
|
||||
}else {
|
||||
chaseTarget(mob);
|
||||
}
|
||||
} else {
|
||||
//pet logic
|
||||
if (!mob.playerAgroMap.containsKey(mob.getOwner().getObjectUUID())) {
|
||||
@@ -505,11 +517,6 @@ public class MobileFSM {
|
||||
CheckForAttack(mob);
|
||||
}
|
||||
public static void GuardMinionLogic(Mob mob) {
|
||||
if (mob.despawned || !mob.isAlive()) {
|
||||
if (System.currentTimeMillis() > mob.deathTime + (mob.spawnTime * 1000))
|
||||
mob.respawn();
|
||||
return;
|
||||
}
|
||||
if (!mob.npcOwner.isAlive() && mob.getCombatTarget() == null) {
|
||||
CheckForPlayerGuardAggro(mob);
|
||||
return;
|
||||
|
||||
@@ -297,7 +297,7 @@ public enum BuildingManager {
|
||||
for (AbstractCharacter slottedNPC : building.getHirelings().keySet()) {
|
||||
|
||||
if (slottedNPC.getObjectType() == Enum.GameObjectType.NPC)
|
||||
((NPC) slottedNPC).remove();
|
||||
((NPC)slottedNPC).remove();
|
||||
else if (slottedNPC.getObjectType() == Enum.GameObjectType.Mob)
|
||||
NPCManager.removeMobileFromBuilding(((Mob) slottedNPC), building);
|
||||
}
|
||||
@@ -475,7 +475,7 @@ public enum BuildingManager {
|
||||
|
||||
NPC npc = null;
|
||||
|
||||
npc = NPC.createNPC(pirateName, NpcID.getObjectUUID(), NpcLoc, null, false, zone, (short) rank, building);
|
||||
npc = NPC.createNPC(pirateName, NpcID.getObjectUUID(), NpcLoc, null, false, zone, (short)rank, building);
|
||||
|
||||
if (npc == null)
|
||||
return false;
|
||||
@@ -508,7 +508,7 @@ public enum BuildingManager {
|
||||
|
||||
if (NPC.ISWallArcher(contract)) {
|
||||
|
||||
mob = Mob.createMob(contract.getMobbaseID(), Vector3fImmutable.ZERO, contractOwner.getGuild(), true, zone, building, contract.getContractID(), pirateName, rank * 10);
|
||||
mob = Mob.createMob(contract.getMobbaseID(), Vector3fImmutable.ZERO, contractOwner.getGuild(), true, zone, building, contract.getContractID(), pirateName, rank);
|
||||
|
||||
if (mob == null)
|
||||
return false;
|
||||
|
||||
+22
-24
@@ -67,7 +67,6 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
public boolean isPlayerGuard = false;
|
||||
public AbstractCharacter npcOwner;
|
||||
public long deathTime = 0;
|
||||
public String nameOverride = "";
|
||||
public int equipmentSetID = 0;
|
||||
public int runeSet = 0;
|
||||
public int bootySet = 0;
|
||||
@@ -120,7 +119,9 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
|
||||
if (contractID == 0) this.contract = null;
|
||||
else this.contract = DbManager.ContractQueries.GET_CONTRACT(contractID);
|
||||
|
||||
if(building != null && building.getOwner()!= null){
|
||||
this.lastName = "the " + contract.getName();
|
||||
}
|
||||
clearStatic();
|
||||
}
|
||||
|
||||
@@ -253,13 +254,16 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
|
||||
this.notEnemy = EnumBitSet.asEnumBitSet(rs.getLong("notEnemy"), Enum.MonsterType.class);
|
||||
this.enemy = EnumBitSet.asEnumBitSet(rs.getLong("enemy"), Enum.MonsterType.class);
|
||||
|
||||
this.firstName = rs.getString("mob_name");
|
||||
if(this.firstName.isEmpty()){
|
||||
this.firstName = this.mobBase.getFirstName();
|
||||
}
|
||||
if (this.contract != null) {
|
||||
this.equipmentSetID = this.contract.getEquipmentSet();
|
||||
this.nameOverride = this.getContract().getName();
|
||||
this.lastName = this.getContract().getName();
|
||||
} else {
|
||||
this.equipmentSetID = rs.getInt("equipmentSet");
|
||||
this.nameOverride = rs.getString("mob_name");
|
||||
|
||||
}
|
||||
|
||||
if (rs.getString("fsm").length() > 1) this.BehaviourType = MobBehaviourType.valueOf(rs.getString("fsm"));
|
||||
@@ -328,14 +332,11 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
writer.putInt(0xFF665EC3); //Spi
|
||||
writer.putInt(0);
|
||||
|
||||
if (!mob.nameOverride.isEmpty()) {
|
||||
writer.putString(mob.nameOverride);
|
||||
writer.putInt(0);
|
||||
} else {
|
||||
|
||||
writer.putString(mob.firstName);
|
||||
writer.putString(mob.lastName);
|
||||
|
||||
}
|
||||
|
||||
|
||||
writer.putInt(0);
|
||||
writer.putInt(0);
|
||||
@@ -706,10 +707,8 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
else if (guardCaptain.getRank() == 6) rank = MBServerStatics.VETERAN;
|
||||
else rank = MBServerStatics.ELITE;
|
||||
|
||||
if (rank.isEmpty())
|
||||
mob.nameOverride = pirateName + " " + minionType.getRace() + " " + minionType.getName();
|
||||
else
|
||||
mob.nameOverride = pirateName + " " + minionType.getRace() + " " + rank + " " + minionType.getName();
|
||||
mob.firstName = NPC.getPirateName(mob.getMobBaseID());
|
||||
mob.lastName = rank + " " + minionType.getRace() + " " + minionType.getName();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -717,6 +716,7 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
|
||||
// mob.setMob();
|
||||
mob.isPlayerGuard = true;
|
||||
|
||||
DbManager.addToCache(mob);
|
||||
|
||||
RuneBase guardRune = RuneBase.getRuneBase(252621);
|
||||
@@ -762,7 +762,8 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
mob.spawnTime = 900;
|
||||
mob.npcOwner = guardCaptain;
|
||||
mob.BehaviourType = Enum.MobBehaviourType.GuardMinion;
|
||||
|
||||
//add mob to zone set of captain
|
||||
guardCaptain.getParentZone().zoneMobSet.add(mob);
|
||||
return mob;
|
||||
}
|
||||
|
||||
@@ -887,11 +888,6 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
this.mana.set(this.manaMax);
|
||||
this.stamina.set(this.staminaMax);
|
||||
|
||||
if (!this.nameOverride.isEmpty())
|
||||
this.firstName = this.nameOverride;
|
||||
else
|
||||
this.firstName = this.mobBase.getFirstName();
|
||||
|
||||
if (isPet)
|
||||
this.setObjectTypeMask(MBServerStatics.MASK_PET | this.getTypeMasks());
|
||||
|
||||
@@ -916,7 +912,10 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
this.charItemManager.load();
|
||||
|
||||
//load AI for general mobs.
|
||||
|
||||
if(this.contract != null && NPC.ISWallArcher(this.contract)){
|
||||
this.BehaviourType = MobBehaviourType.GuardWallArcher;
|
||||
this.isPlayerGuard = true;
|
||||
}
|
||||
if (isPet || isSiege || (isGuard && this.contract == null)) this.currentID = (--Mob.staticID);
|
||||
else this.currentID = this.dbID;
|
||||
|
||||
@@ -1281,7 +1280,6 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
|
||||
public void respawn() {
|
||||
//Commenting out Mob ID rotation.
|
||||
|
||||
this.despawned = false;
|
||||
this.playerAgroMap.clear();
|
||||
this.setCombatTarget(null);
|
||||
@@ -1300,7 +1298,7 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
this.recalculateStats();
|
||||
|
||||
this.setHealth(this.healthMax);
|
||||
|
||||
this.region = BuildingManager.GetRegion(this.building, bindLoc.x, bindLoc.y, bindLoc.z);
|
||||
if (!this.isSiege && !this.isPlayerGuard && contract == null) loadInventory();
|
||||
|
||||
}
|
||||
@@ -1987,7 +1985,7 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
}
|
||||
|
||||
public String getNameOverride() {
|
||||
return nameOverride;
|
||||
return firstName + " " + lastName;
|
||||
}
|
||||
|
||||
public void processUpgradeMob(PlayerCharacter player) {
|
||||
|
||||
@@ -87,7 +87,6 @@ public class NPC extends AbstractCharacter {
|
||||
public ArrayList<ProducedItem> forgedItems = new ArrayList<>();
|
||||
|
||||
public HashMap<Integer, MobEquipment> equip = null;
|
||||
private String nameOverride = "";
|
||||
private int equipmentSetID = 0;
|
||||
public int runeSetID = 0;
|
||||
|
||||
@@ -240,8 +239,10 @@ public class NPC extends AbstractCharacter {
|
||||
if (this.upgradeDateTime != null)
|
||||
submitUpgradeJob();
|
||||
|
||||
this.name = this.contract.getName();
|
||||
this.nameOverride = rs.getString("npc_name");
|
||||
this.name = rs.getString("npc_name");
|
||||
if(this.building != null && this.building.getOwner().getObjectType().equals(GameObjectType.PlayerCharacter)){
|
||||
this.name += " the " + this.contract.getName();
|
||||
}
|
||||
|
||||
}catch(Exception e){
|
||||
Logger.error(e);
|
||||
@@ -620,23 +621,8 @@ public class NPC extends AbstractCharacter {
|
||||
writer.putInt(0xFF665EC3); //Spi
|
||||
writer.putInt(0);
|
||||
|
||||
if (!npc.nameOverride.isEmpty()){
|
||||
writer.putString(npc.nameOverride);
|
||||
writer.putInt(0);
|
||||
}else
|
||||
if (npc.contract != null) {
|
||||
|
||||
if (npc.contract.isTrainer()) {
|
||||
writer.putString(npc.name + ", " + npc.contract.getName());
|
||||
writer.putString("");
|
||||
} else {
|
||||
writer.putString(npc.name);
|
||||
writer.putString(npc.contract.getName());
|
||||
}
|
||||
} else {
|
||||
writer.putString(npc.name);
|
||||
writer.putString("");
|
||||
}
|
||||
writer.putString(npc.name);
|
||||
writer.putString("");
|
||||
|
||||
writer.putInt(0);
|
||||
writer.putInt(0);
|
||||
@@ -1473,7 +1459,7 @@ public class NPC extends AbstractCharacter {
|
||||
}
|
||||
|
||||
public String getNameOverride() {
|
||||
return nameOverride;
|
||||
return name;
|
||||
}
|
||||
|
||||
public static NPCProfits GetNPCProfits(NPC npc){
|
||||
|
||||
Reference in New Issue
Block a user