|
|
@ -157,8 +157,7 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
this.exp = exp; |
|
|
|
this.exp = exp; |
|
|
|
this.walkMode = true; |
|
|
|
this.walkMode = true; |
|
|
|
this.bindLoc = bindLoc; |
|
|
|
this.bindLoc = bindLoc; |
|
|
|
if (ConfigManager.serverType.equals(Enum.ServerType.WORLDSERVER)) |
|
|
|
; |
|
|
|
this.setLoc(currentLoc); |
|
|
|
|
|
|
|
this.faceDir = faceDir; |
|
|
|
this.faceDir = faceDir; |
|
|
|
this.guild = guild; |
|
|
|
this.guild = guild; |
|
|
|
this.runningTrains = runningTrains; |
|
|
|
this.runningTrains = runningTrains; |
|
|
@ -205,8 +204,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
this.walkMode = true; |
|
|
|
this.walkMode = true; |
|
|
|
|
|
|
|
|
|
|
|
this.bindLoc = bindLoc; |
|
|
|
this.bindLoc = bindLoc; |
|
|
|
if (ConfigManager.serverType.equals(Enum.ServerType.WORLDSERVER)) |
|
|
|
|
|
|
|
this.setLoc(currentLoc); |
|
|
|
|
|
|
|
this.faceDir = faceDir; |
|
|
|
this.faceDir = faceDir; |
|
|
|
this.guild = guild; |
|
|
|
this.guild = guild; |
|
|
|
|
|
|
|
|
|
|
@ -283,11 +280,7 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
this.level = (short) 0; // TODO get this from MobsBase later
|
|
|
|
this.level = (short) 0; // TODO get this from MobsBase later
|
|
|
|
this.exp = 1; |
|
|
|
this.exp = 1; |
|
|
|
this.walkMode = true; |
|
|
|
this.walkMode = true; |
|
|
|
|
|
|
|
|
|
|
|
//this.bindLoc = new Vector3fImmutable(rs.getFloat("spawnX"), rs.getFloat("spawnY"), rs.getFloat("spawnZ"));
|
|
|
|
|
|
|
|
this.bindLoc = Vector3fImmutable.ZERO; |
|
|
|
this.bindLoc = Vector3fImmutable.ZERO; |
|
|
|
//setLoc(this.bindLoc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.faceDir = Vector3fImmutable.ZERO; |
|
|
|
this.faceDir = Vector3fImmutable.ZERO; |
|
|
|
|
|
|
|
|
|
|
|
this.runningTrains = (byte) 0; |
|
|
|
this.runningTrains = (byte) 0; |
|
|
@ -367,9 +360,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
public static void __serializeForClientMsg(AbstractCharacter abstractCharacter, final ByteBufferWriter writer) throws SerializationException { |
|
|
|
public static void __serializeForClientMsg(AbstractCharacter abstractCharacter, final ByteBufferWriter writer) throws SerializationException { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static void serializeForClientMsgOtherPlayer(AbstractCharacter abstractCharacter, final ByteBufferWriter writer) throws SerializationException { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void serializeForClientMsgOtherPlayer(AbstractCharacter abstractCharacter, final ByteBufferWriter writer, final boolean asciiLastName) throws SerializationException { |
|
|
|
public static void serializeForClientMsgOtherPlayer(AbstractCharacter abstractCharacter, final ByteBufferWriter writer, final boolean asciiLastName) throws SerializationException { |
|
|
|
|
|
|
|
|
|
|
|
switch (abstractCharacter.getObjectType()) { |
|
|
|
switch (abstractCharacter.getObjectType()) { |
|
|
@ -405,29 +395,32 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static void runBonusesOnLoad(PlayerCharacter pc) { |
|
|
|
public static void runBonusesOnLoad(PlayerCharacter playerCharacter) { |
|
|
|
|
|
|
|
|
|
|
|
// synchronized with getBonuses()
|
|
|
|
// synchronized with getBonuses()
|
|
|
|
synchronized (pc.bonuses) { |
|
|
|
|
|
|
|
|
|
|
|
synchronized (playerCharacter.bonuses) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
//run until no new bonuses are applied
|
|
|
|
//run until no new bonuses are applied
|
|
|
|
|
|
|
|
|
|
|
|
// clear bonuses and reapply rune bonuses
|
|
|
|
// clear bonuses and reapply rune bonuses
|
|
|
|
if (pc.getObjectType() == GameObjectType.PlayerCharacter) { |
|
|
|
if (playerCharacter.getObjectType() == GameObjectType.PlayerCharacter) { |
|
|
|
pc.bonuses.calculateRuneBaseEffects(pc); |
|
|
|
playerCharacter.bonuses.calculateRuneBaseEffects(playerCharacter); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
pc.bonuses.clearRuneBaseEffects(); |
|
|
|
playerCharacter.bonuses.clearRuneBaseEffects(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// apply effect bonuses
|
|
|
|
// apply effect bonuses
|
|
|
|
for (Effect eff : pc.effects.values()) { |
|
|
|
|
|
|
|
eff.applyBonus(pc); |
|
|
|
for (Effect eff : playerCharacter.effects.values()) { |
|
|
|
|
|
|
|
eff.applyBonus(playerCharacter); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//apply item bonuses for equipped items
|
|
|
|
//apply item bonuses for equipped items
|
|
|
|
ConcurrentHashMap<Integer, Item> equip = null; |
|
|
|
ConcurrentHashMap<Integer, Item> equip = null; |
|
|
|
|
|
|
|
|
|
|
|
if (pc.charItemManager != null) |
|
|
|
if (playerCharacter.charItemManager != null) |
|
|
|
equip = pc.charItemManager.getEquipped(); |
|
|
|
equip = playerCharacter.charItemManager.getEquipped(); |
|
|
|
|
|
|
|
|
|
|
|
if (equip != null) { |
|
|
|
if (equip != null) { |
|
|
|
for (Item item : equip.values()) { |
|
|
|
for (Item item : equip.values()) { |
|
|
@ -436,7 +429,7 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
ConcurrentHashMap<String, Effect> effects = item.getEffects(); |
|
|
|
ConcurrentHashMap<String, Effect> effects = item.getEffects(); |
|
|
|
if (effects != null) { |
|
|
|
if (effects != null) { |
|
|
|
for (Effect eff : effects.values()) { |
|
|
|
for (Effect eff : effects.values()) { |
|
|
|
eff.applyBonus(item, pc); |
|
|
|
eff.applyBonus(item, playerCharacter); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -444,54 +437,23 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//recalculate passive defenses
|
|
|
|
//recalculate passive defenses
|
|
|
|
pc.setPassives(); |
|
|
|
playerCharacter.setPassives(); |
|
|
|
|
|
|
|
|
|
|
|
//flip the active bonus set for synchronization purposes
|
|
|
|
//flip the active bonus set for synchronization purposes
|
|
|
|
//do this after all bonus updates, but before recalculations.
|
|
|
|
//do this after all bonus updates, but before recalculations.
|
|
|
|
// recalculate everything
|
|
|
|
// recalculate everything
|
|
|
|
//calculate item bonuses
|
|
|
|
//calculate item bonuses
|
|
|
|
pc.calculateItemBonuses(); |
|
|
|
playerCharacter.calculateItemBonuses(); |
|
|
|
|
|
|
|
|
|
|
|
//recalculate formulas
|
|
|
|
//recalculate formulas
|
|
|
|
PlayerCharacter.recalculatePlayerStatsOnLoad(pc); |
|
|
|
PlayerCharacter.recalculatePlayerStatsOnLoad(playerCharacter); |
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
} catch (Exception e) { |
|
|
|
Logger.error(e); |
|
|
|
Logger.error(e); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
// TODO remove later, for debugging.
|
|
|
|
|
|
|
|
//this.bonuses.printBonuses();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void SetBuildingLevelRoom(AbstractCharacter character, int buildingID, int buildingLevel, int room, Regions region) { |
|
|
|
|
|
|
|
character.inBuildingID = buildingID; |
|
|
|
|
|
|
|
character.inBuilding = buildingLevel; |
|
|
|
|
|
|
|
character.inFloorID = room; |
|
|
|
|
|
|
|
character.lastRegion = region; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static Regions InsideBuildingRegion(AbstractCharacter player) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Regions currentRegion = null; |
|
|
|
|
|
|
|
HashSet<AbstractWorldObject> buildings = WorldGrid.getObjectsInRangePartial(player, 300, MBServerStatics.MASK_BUILDING); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (AbstractWorldObject awo : buildings) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Building building = (Building) awo; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (building.getBounds() == null) |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (building.getBounds().getRegions() == null) |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (Regions region : building.getBounds().getRegions()) { |
|
|
|
|
|
|
|
//TODO ADD NEW REGION CODE
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return currentRegion; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static Regions InsideBuildingRegionGoingDown(AbstractCharacter player) { |
|
|
|
public static Regions InsideBuildingRegionGoingDown(AbstractCharacter player) { |
|
|
@ -539,10 +501,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static void UpdateRegion(AbstractCharacter worldObject) { |
|
|
|
|
|
|
|
worldObject.region = AbstractWorldObject.GetRegionByWorldObject(worldObject); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void teleport(AbstractCharacter worldObject, final Vector3fImmutable targetLoc) { |
|
|
|
public static void teleport(AbstractCharacter worldObject, final Vector3fImmutable targetLoc) { |
|
|
|
Regions targetRegion = Regions.GetRegionForTeleport(targetLoc); |
|
|
|
Regions targetRegion = Regions.GetRegionForTeleport(targetLoc); |
|
|
|
worldObject.locationLock.writeLock().lock(); |
|
|
|
worldObject.locationLock.writeLock().lock(); |
|
|
@ -627,10 +585,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
return this.unusedStatPoints; |
|
|
|
return this.unusedStatPoints; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public final void setUnusedStatPoints(final short value) { |
|
|
|
|
|
|
|
this.unusedStatPoints = value; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public final CharacterItemManager getCharItemManager() { |
|
|
|
public final CharacterItemManager getCharItemManager() { |
|
|
|
return this.charItemManager; |
|
|
|
return this.charItemManager; |
|
|
|
} |
|
|
|
} |
|
|
@ -757,18 +711,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
return this.timers.get("LastItem"); |
|
|
|
return this.timers.get("LastItem"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public final void setLastItem(final JobContainer jc) { |
|
|
|
|
|
|
|
if (this.timers != null) { |
|
|
|
|
|
|
|
this.timers.put("LastItem", jc); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public final void clearLastItem() { |
|
|
|
|
|
|
|
if (this.timers != null) { |
|
|
|
|
|
|
|
this.timers.remove("LastItem"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public final int getIsSittingAsInt() { |
|
|
|
public final int getIsSittingAsInt() { |
|
|
|
if (!this.isAlive()) { |
|
|
|
if (!this.isAlive()) { |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
@ -830,10 +772,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
this.faceDir = value; |
|
|
|
this.faceDir = value; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public final Vector3fImmutable getStartLoc() { |
|
|
|
|
|
|
|
return this.startLoc; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public final Vector3fImmutable getEndLoc() { |
|
|
|
public final Vector3fImmutable getEndLoc() { |
|
|
|
return this.endLoc; |
|
|
|
return this.endLoc; |
|
|
|
} |
|
|
|
} |
|
|
@ -966,14 +904,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
return this.defenseRating; |
|
|
|
return this.defenseRating; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public final float getRangeHandOne() { |
|
|
|
|
|
|
|
return this.rangeHandOne; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public final float getRangeHandTwo() { |
|
|
|
|
|
|
|
return this.rangeHandTwo; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public final float getSpeedHandOne() { |
|
|
|
public final float getSpeedHandOne() { |
|
|
|
return this.speedHandOne; |
|
|
|
return this.speedHandOne; |
|
|
|
} |
|
|
|
} |
|
|
@ -1049,7 +979,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
public final void setLoc(final Vector3fImmutable value) { |
|
|
|
public final void setLoc(final Vector3fImmutable value) { |
|
|
|
super.setLoc(value); // set the location in the world
|
|
|
|
super.setLoc(value); // set the location in the world
|
|
|
|
this.resetLastSetLocUpdate(); |
|
|
|
this.resetLastSetLocUpdate(); |
|
|
|
//Logger.info("AbstractCharacter", "Setting char location to :" + value.getX() + " " + value.getZ());
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public Vector3fImmutable getMovementLoc() { |
|
|
|
public Vector3fImmutable getMovementLoc() { |
|
|
@ -1940,10 +1869,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public Regions getLastRegion() { |
|
|
|
|
|
|
|
return lastRegion; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public boolean isMovingUp() { |
|
|
|
public boolean isMovingUp() { |
|
|
|
return movingUp; |
|
|
|
return movingUp; |
|
|
|
} |
|
|
|
} |
|
|
|