@ -96,7 +96,6 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -96,7 +96,6 @@ public class Mob extends AbstractIntelligenceAgent {
private long lastAttackTime = 0 ;
private int lastMobPowerToken = 0 ;
private HashMap < Integer , MobEquipment > equip = null ;
private final Regions lastRegion = null ;
private DeferredPowerJob weaponPower ;
private DateTime upgradeDateTime = null ;
private boolean lootSync = false ;
@ -120,10 +119,8 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -120,10 +119,8 @@ public class Mob extends AbstractIntelligenceAgent {
if ( building ! = null ) this . buildingID = building . getObjectUUID ( ) ;
else this . buildingID = 0 ;
if ( contractID = = 0 )
this . contract = null ;
else
this . contract = DbManager . ContractQueries . GET_CONTRACT ( contractID ) ;
if ( contractID = = 0 ) this . contract = null ;
else this . contract = DbManager . ContractQueries . GET_CONTRACT ( contractID ) ;
clearStatic ( ) ;
}
@ -217,10 +214,8 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -217,10 +214,8 @@ public class Mob extends AbstractIntelligenceAgent {
int contractID = rs . getInt ( "mob_contractID" ) ;
if ( contractID = = 0 )
this . contract = null ;
else
this . contract = DbManager . ContractQueries . GET_CONTRACT ( contractID ) ;
if ( contractID = = 0 ) this . contract = null ;
else this . contract = DbManager . ContractQueries . GET_CONTRACT ( contractID ) ;
if ( this . contract ! = null & & NPC . ISGuardCaptain ( contract . getContractID ( ) ) ) {
this . spawnTime = 60 * 15 ;
@ -229,18 +224,15 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -229,18 +224,15 @@ public class Mob extends AbstractIntelligenceAgent {
int guildID = rs . getInt ( "mob_guildUID" ) ;
if ( this . building ! = null )
this . guild = this . building . getGuild ( ) ;
else
this . guild = Guild . getGuild ( guildID ) ;
if ( this . building ! = null ) this . guild = this . building . getGuild ( ) ;
else this . guild = Guild . getGuild ( guildID ) ;
if ( this . guild = = null ) this . guild = Guild . getErrantGuild ( ) ;
java . util . Date sqlDateTime ;
sqlDateTime = rs . getTimestamp ( "upgradeDate" ) ;
if ( sqlDateTime ! = null )
upgradeDateTime = new DateTime ( sqlDateTime ) ;
if ( sqlDateTime ! = null ) upgradeDateTime = new DateTime ( sqlDateTime ) ;
else upgradeDateTime = null ;
// Submit upgrade job if NPC is currently set to rank.
@ -251,8 +243,7 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -251,8 +243,7 @@ public class Mob extends AbstractIntelligenceAgent {
this . setObjectTypeMask ( MBServerStatics . MASK_MOB | this . getTypeMasks ( ) ) ;
if ( this . mobBase ! = null & & this . spawnTime = = 0 )
this . spawnTime = this . mobBase . getSpawnTime ( ) ;
if ( this . mobBase ! = null & & this . spawnTime = = 0 ) this . spawnTime = this . mobBase . getSpawnTime ( ) ;
this . bindLoc = new Vector3fImmutable ( this . statLat , this . statAlt , this . statLon ) ;
@ -272,11 +263,10 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -272,11 +263,10 @@ public class Mob extends AbstractIntelligenceAgent {
this . nameOverride = rs . getString ( "mob_name" ) ;
}
if ( rs . getString ( "fsm" ) . length ( ) > 1 )
this . BehaviourType = MobBehaviourType . valueOf ( rs . getString ( "fsm" ) ) ;
if ( rs . getString ( "fsm" ) . length ( ) > 1 ) this . BehaviourType = MobBehaviourType . valueOf ( rs . getString ( "fsm" ) ) ;
} catch ( Exception e ) {
Logger . error ( e + " " + this . dbID ) ;
Logger . error ( e + " " + this . dbID ) ;
}
try {
@ -512,8 +502,7 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -512,8 +502,7 @@ public class Mob extends AbstractIntelligenceAgent {
if ( parent ! = null )
mobWithoutID . setRelPos ( parent , spawn . x - parent . absX , spawn . y - parent . absY , spawn . z - parent . absZ ) ;
if ( mobWithoutID . mobBase = = null )
return null ;
if ( mobWithoutID . mobBase = = null ) return null ;
mobWithoutID . level = ( short ) level ;
@ -681,18 +670,15 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -681,18 +670,15 @@ public class Mob extends AbstractIntelligenceAgent {
}
if ( guardCaptain . siegeMinionMap . size ( ) = = maxSlots )
return null ;
if ( guardCaptain . siegeMinionMap . size ( ) = = maxSlots ) return null ;
minionMobBase = guardCaptain . mobBase ;
if ( minionMobBase = = null )
return null ;
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 ;
if ( guardCaptain . equipmentSetID ! = 0 ) mob . equipmentSetID = guardCaptain . equipmentSetID ;
mob . runAfterLoad ( ) ;
mob . despawned = true ;
@ -702,14 +688,10 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -702,14 +688,10 @@ public class Mob extends AbstractIntelligenceAgent {
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 ;
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 ;
if ( rank . isEmpty ( ) )
mob . nameOverride = pirateName + " " + minionType . getRace ( ) + " " + minionType . getName ( ) ;
@ -718,8 +700,7 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -718,8 +700,7 @@ public class Mob extends AbstractIntelligenceAgent {
}
}
if ( parent ! = null )
mob . setRelPos ( parent , loc . x - parent . absX , loc . y - parent . absY , loc . z - parent . absZ ) ;
if ( parent ! = null ) mob . setRelPos ( parent , loc . x - parent . absX , loc . y - parent . absY , loc . z - parent . absZ ) ;
mob . setObjectTypeMask ( MBServerStatics . MASK_MOB | mob . getTypeMasks ( ) ) ;
@ -747,20 +728,17 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -747,20 +728,17 @@ public class Mob extends AbstractIntelligenceAgent {
Effect eff = mob . effects . get ( Integer . toString ( eb . getUUID ( ) ) ) ;
if ( eff = = null )
continue ;
if ( eff = = null ) continue ;
//Current effect is a higher rank, dont apply.
if ( eff . getTrains ( ) > mbe . getRank ( ) )
continue ;
if ( eff . getTrains ( ) > mbe . getRank ( ) ) continue ;
//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 {
if ( mbe . getReqLvl ( ) > ( int ) mob . level )
continue ;
if ( mbe . getReqLvl ( ) > ( int ) mob . level ) continue ;
mob . addEffectNoTimer ( Integer . toString ( eb . getUUID ( ) ) , eb , mbe . getRank ( ) , true ) ;
}
@ -787,21 +765,18 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -787,21 +765,18 @@ public class Mob extends AbstractIntelligenceAgent {
MobBase minionMobBase ;
Mob mob ;
if ( owner . getSiegeMinionMap ( ) . size ( ) = = 3 )
return null ;
if ( owner . getSiegeMinionMap ( ) . size ( ) = = 3 ) return null ;
minionMobBase = MobBase . getMobBase ( loadID ) ;
if ( minionMobBase = = null )
return null ;
if ( minionMobBase = = null ) return null ;
mob = new Mob ( minionMobBase , guild , parent , level , new Vector3fImmutable ( 1 , 1 , 1 ) , 0 , false ) ;
mob . runAfterLoad ( ) ;
mob . despawned = true ;
DbManager . addToCache ( mob ) ;
if ( parent ! = null )
mob . setRelPos ( parent , loc . x - parent . absX , loc . y - parent . absY , loc . z - parent . absZ ) ;
if ( parent ! = null ) mob . setRelPos ( parent , loc . x - parent . absX , loc . y - parent . absY , loc . z - parent . absZ ) ;
mob . setObjectTypeMask ( MBServerStatics . MASK_MOB | mob . getTypeMasks ( ) ) ;
@ -811,10 +786,8 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -811,10 +786,8 @@ public class Mob extends AbstractIntelligenceAgent {
int slot = 0 ;
if ( ! owner . getSiegeMinionMap ( ) . containsValue ( 1 ) )
slot = 1 ;
else if ( ! owner . getSiegeMinionMap ( ) . containsValue ( 2 ) )
slot = 2 ;
if ( ! owner . getSiegeMinionMap ( ) . containsValue ( 1 ) ) slot = 1 ;
else if ( ! owner . getSiegeMinionMap ( ) . containsValue ( 2 ) ) slot = 2 ;
owner . getSiegeMinionMap ( ) . put ( mob , slot ) ;
mob . setInBuildingLoc ( owner . building , owner ) ;
@ -842,8 +815,53 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -842,8 +815,53 @@ public class Mob extends AbstractIntelligenceAgent {
private void initializeMob ( boolean isPet , boolean isSiege , boolean isGuard ) {
if ( this . mobBase ! = null ) {
int slot ;
Vector3fImmutable slotLocation ;
if ( ConfigManager . serverType . equals ( ServerType . LOGINSERVER ) ) return ;
// Configure parent zone adding this NPC to the
// zone collection
this . parentZone = ZoneManager . getZoneByUUID ( this . parentZoneID ) ;
this . parentZone . zoneMobSet . remove ( this ) ;
this . parentZone . zoneMobSet . add ( this ) ;
// Setup location for this Mobile
this . bindLoc = new Vector3fImmutable ( this . statLat , this . statAlt , this . statLon ) ;
this . bindLoc = this . parentZone . getLoc ( ) . add ( this . bindLoc ) ;
this . loc = new Vector3fImmutable ( bindLoc ) ;
this . endLoc = new Vector3fImmutable ( bindLoc ) ;
// Handle Mobiles within buildings
if ( this . building ! = null & & this . contract ! = null ) {
// Get next available slot for this Mobile and then
// add it to the building's hireling list
slot = BuildingManager . getAvailableSlot ( building ) ;
if ( slot = = - 1 ) Logger . error ( "No available slot for Mobile: " + this . getObjectUUID ( ) ) ;
building . getHirelings ( ) . put ( this , slot ) ;
// Override bind and location for this npc derived
// from BuildingManager slot location data.
slotLocation = BuildingManager . getSlotLocation ( building , slot ) ;
this . bindLoc = building . getLoc ( ) . add ( slotLocation ) ;
this . loc = building . getLoc ( ) . add ( slotLocation ) ;
this . endLoc = bindLoc ;
// Configure region and floor/level for this Mobile
this . region = BuildingManager . GetRegion ( this . building , bindLoc . x , bindLoc . y , bindLoc . z ) ;
}
if ( this . mobBase ! = null ) {
this . gridObjectType = GridObjectType . DYNAMIC ;
this . healthMax = this . mobBase . getHealthMax ( ) ;
this . manaMax = 0 ;
@ -857,17 +875,12 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -857,17 +875,12 @@ public class Mob extends AbstractIntelligenceAgent {
if ( isPet ) {
this . setObjectTypeMask ( MBServerStatics . MASK_PET | this . getTypeMasks ( ) ) ;
if ( ConfigManager . serverType . equals ( ServerType . LOGINSERVER ) )
this . setLoc ( this . getLoc ( ) ) ;
if ( ConfigManager . serverType . equals ( ServerType . LOGINSERVER ) ) this . setLoc ( this . getLoc ( ) ) ;
}
if ( this . contract = = null )
this . level = ( short ) this . mobBase . getLevel ( ) ;
if ( this . contract = = null ) this . level = ( short ) this . mobBase . getLevel ( ) ;
}
if ( this . building ! = null & & this . contract ! = null )
slotMobInBuilding ( ) ; // picks first available free slot
//set bonuses
this . bonuses = new PlayerBonuses ( this ) ;
@ -886,24 +899,15 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -886,24 +899,15 @@ public class Mob extends AbstractIntelligenceAgent {
//load AI for general mobs.
if ( isPet | | isSiege | | ( isGuard & & this . contract = = null ) )
this . currentID = ( - - Mob . staticID ) ;
if ( isPet | | isSiege | | ( isGuard & & this . contract = = null ) ) this . currentID = ( - - Mob . staticID ) ;
else this . currentID = this . dbID ;
if ( ! isPet & & ! isSiege & & ! this . isPlayerGuard )
loadInventory ( ) ;
if ( ! isPet & & ! isSiege & & ! this . isPlayerGuard ) loadInventory ( ) ;
//store mobs by Database ID
if ( ! isPet & & ! isSiege ) Mob . mobMapByDBID . put ( this . dbID , this ) ;
if ( this . building ! = null & & this . building . getBlueprint ( ) ! = null & & this . isPlayerGuard ( ) ) {
int maxSlots = 10 ;
for ( int slot = 1 ; slot < maxSlots + 1 ; slot + + )
if ( ! this . building . getHirelings ( ) . containsValue ( slot ) ) {
this . building . getHirelings ( ) . put ( this , slot ) ;
break ;
}
}
}
/ *
@ -953,8 +957,7 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -953,8 +957,7 @@ public class Mob extends AbstractIntelligenceAgent {
}
public String getSpawnTimeAsString ( ) {
if ( this . spawnTime = = 0 )
return MBServerStatics . DEFAULT_SPAWN_TIME_MS / 1000 + " seconds (Default)" ;
if ( this . spawnTime = = 0 ) return MBServerStatics . DEFAULT_SPAWN_TIME_MS / 1000 + " seconds (Default)" ;
else return this . spawnTime + " seconds" ;
}
@ -966,8 +969,7 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -966,8 +969,7 @@ public class Mob extends AbstractIntelligenceAgent {
public int getMobBaseID ( ) {
if ( this . mobBase ! = null )
return this . mobBase . getObjectUUID ( ) ;
if ( this . mobBase ! = null ) return this . mobBase . getObjectUUID ( ) ;
return 0 ;
}
@ -1107,9 +1109,8 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -1107,9 +1109,8 @@ public class Mob extends AbstractIntelligenceAgent {
else return Guards . HumanArcher . getRunSpeed ( ) * bonus ;
case 14103 :
if ( this . isWalk ( ) )
if ( this . isCombat ( ) ) return Guards . UndeadArcher . getWalkCombatSpeed ( ) * bonus ;
else return Guards . UndeadArcher . getWalkSpeed ( ) * bonus ;
if ( this . isWalk ( ) ) if ( this . isCombat ( ) ) return Guards . UndeadArcher . getWalkCombatSpeed ( ) * bonus ;
else return Guards . UndeadArcher . getWalkSpeed ( ) * bonus ;
else return Guards . UndeadArcher . getRunSpeed ( ) * bonus ;
}
//return combat speeds
@ -1269,8 +1270,7 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -1269,8 +1270,7 @@ public class Mob extends AbstractIntelligenceAgent {
//cleanup effects
playerAgroMap . clear ( ) ;
if ( ! this . isPlayerGuard & & this . equip ! = null )
LootManager . GenerateMobLoot ( this , true ) ;
if ( ! this . isPlayerGuard & & this . equip ! = null ) LootManager . GenerateMobLoot ( this , true ) ;
}
try {
@ -1613,8 +1613,7 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -1613,8 +1613,7 @@ public class Mob extends AbstractIntelligenceAgent {
boolean noWeapon = false ;
ItemBase wb = null ;
if ( weapon = = null )
noWeapon = true ;
if ( weapon = = null ) noWeapon = true ;
else {
@ -1773,11 +1772,9 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -1773,11 +1772,9 @@ public class Mob extends AbstractIntelligenceAgent {
Mob mob = null ;
NPC npc = null ;
if ( ac . getObjectType ( ) . equals ( GameObjectType . Mob ) )
mob = ( Mob ) ac ;
if ( ac . getObjectType ( ) . equals ( GameObjectType . Mob ) ) mob = ( Mob ) ac ;
else if ( ac . getObjectType ( ) . equals ( GameObjectType . NPC ) )
npc = ( NPC ) ac ;
else if ( ac . getObjectType ( ) . equals ( GameObjectType . NPC ) ) npc = ( NPC ) ac ;
BuildingModelBase buildingModel = BuildingModelBase . getModelBase ( inBuilding . getMeshUUID ( ) ) ;
@ -1791,11 +1788,9 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -1791,11 +1788,9 @@ public class Mob extends AbstractIntelligenceAgent {
//-1 slot means no slot available in building.
if ( npc ! = null ) {
if ( npc . getSiegeMinionMap ( ) . containsKey ( this ) )
putSlot = npc . getSiegeMinionMap ( ) . get ( this ) ;
if ( npc . getSiegeMinionMap ( ) . containsKey ( this ) ) putSlot = npc . getSiegeMinionMap ( ) . get ( this ) ;
} else if ( mob ! = null ) {
if ( mob . building . getHirelings ( ) . containsKey ( this ) )
putSlot = mob . building . getHirelings ( ) . get ( this ) ;
if ( mob . building . getHirelings ( ) . containsKey ( this ) ) putSlot = mob . building . getHirelings ( ) . get ( this ) ;
//putSlot = mob.building.getHirelings().size();
}
int count = 0 ;
@ -1805,8 +1800,7 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -1805,8 +1800,7 @@ public class Mob extends AbstractIntelligenceAgent {
buildingLocation = buildingModel . getSlotLocation ( ( count ) - putSlot ) ;
if ( buildingLocation ! = null )
slotLocation = buildingLocation . getLoc ( ) ;
if ( buildingLocation ! = null ) slotLocation = buildingLocation . getLoc ( ) ;
}
@ -1815,34 +1809,30 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -1815,34 +1809,30 @@ public class Mob extends AbstractIntelligenceAgent {
public ItemBase getWeaponItemBase ( boolean mainHand ) {
if ( this . equipmentSetID ! = 0 )
if ( equip ! = null ) {
MobEquipment me ;
if ( this . equipmentSetID ! = 0 ) if ( equip ! = null ) {
MobEquipment me ;
if ( mainHand ) me = equip . get ( 1 ) ; //mainHand
else me = equip . get ( 2 ) ; //offHand
if ( mainHand ) me = equip . get ( 1 ) ; //mainHand
else me = equip . get ( 2 ) ; //offHand
if ( me ! = null ) {
if ( me ! = null ) {
ItemBase ib = me . getItemBase ( ) ;
ItemBase ib = me . getItemBase ( ) ;
if ( ib ! = null )
return ib ;
if ( ib ! = null ) return ib ;
}
}
}
MobBase mb = this . mobBase ;
if ( mb ! = null ) if ( equip ! = null ) {
MobEquipment me ;
if ( mainHand )
me = equip . get ( 1 ) ; //mainHand
if ( mainHand ) me = equip . get ( 1 ) ; //mainHand
else me = equip . get ( 2 ) ; //offHand
if ( me ! = null )
return me . getItemBase ( ) ;
if ( me ! = null ) return me . getItemBase ( ) ;
}
return null ;
}
@ -1867,11 +1857,9 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -1867,11 +1857,9 @@ public class Mob extends AbstractIntelligenceAgent {
this . equip = new HashMap < > ( 0 ) ;
}
// Combine mobbase and mob aggro arrays into one bitvector
if ( this . getMobBase ( ) . notEnemy . size ( ) > 0 )
this . notEnemy . addAll ( this . getMobBase ( ) . notEnemy ) ;
if ( this . getMobBase ( ) . notEnemy . size ( ) > 0 ) this . notEnemy . addAll ( this . getMobBase ( ) . notEnemy ) ;
if ( this . getMobBase ( ) . enemy . size ( ) > 0 )
this . enemy . addAll ( this . getMobBase ( ) . enemy ) ;
if ( this . getMobBase ( ) . enemy . size ( ) > 0 ) this . enemy . addAll ( this . getMobBase ( ) . enemy ) ;
try {
NPCManager . applyRuneSetEffects ( this ) ;
@ -1899,12 +1887,11 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -1899,12 +1887,11 @@ public class Mob extends AbstractIntelligenceAgent {
this . patrolPoints . add ( newPatrolPoint ) ;
}
}
if ( this . BehaviourType = = null )
this . BehaviourType = this . getMobBase ( ) . fsm ;
if ( this . BehaviourType = = null ) this . BehaviourType = this . getMobBase ( ) . fsm ;
if ( this . isPlayerGuard ( ) & & this . contract ! = null ) if ( NPC . ISWallArcher ( this . getContract ( ) ) )
this . BehaviourType = MobBehaviourType . GuardWallArcher ;
else this . BehaviourType = MobBehaviourType . GuardCaptain ;
if ( this . isPlayerGuard ( ) & & this . contract ! = null )
if ( NPC . ISWallArcher ( this . getContract ( ) ) ) this . BehaviourType = MobBehaviourType . GuardWallArcher ;
else this . BehaviourType = MobBehaviourType . GuardCaptain ;
this . deathTime = 0 ;
} catch ( Exception e ) {
@ -2143,14 +2130,13 @@ public class Mob extends AbstractIntelligenceAgent {
@@ -2143,14 +2130,13 @@ public class Mob extends AbstractIntelligenceAgent {
Dispatch dispatch = Dispatch . borrow ( owner , pm ) ;
DispatchMessage . dispatchMsgDispatch ( dispatch , Enum . DispatchChannel . SECONDARY ) ;
if ( pet ! = null & & pet . getObjectUUID ( ) = = this . getObjectUUID ( ) )
owner . setPet ( null ) ;
if ( pet ! = null & & pet . getObjectUUID ( ) = = this . getObjectUUID ( ) ) owner . setPet ( null ) ;
if ( this . getObjectType ( ) . equals ( GameObjectType . Mob ) )
this . setOwner ( null ) ;
if ( this . getObjectType ( ) . equals ( GameObjectType . Mob ) ) this . setOwner ( null ) ;
}
}
}
private void slotMobInBuilding ( ) {
int maxSlots = 10 ;