Stat update & Mob skill animation & Yellow EXP patch + Packet logging
Solved a deadlock case within character stat locks that would sometimes tangle up during stat update dispatch operations. Fixed skill animation being unproperly casted when a mob tries to use a skill even though it couldn't possibly use from its current skillset. Fixed a bug with EXP gain (on where the solo player is on a party) where the EXP would appear in yellow even after soloing a mob. Added packet logging. Happy Easter, folks!
This commit is contained in:
@@ -32,12 +32,14 @@ import net.server.audit.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.MonitoredReentrantReadWriteLock;
|
||||
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||
import server.maps.AbstractAnimatedMapleMapObject;
|
||||
import server.maps.MapleMap;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author RonanLana
|
||||
*/
|
||||
public abstract class AbstractMapleCharacterObject extends AbstractAnimatedMapleMapObject {
|
||||
protected MapleMap map;
|
||||
protected int str, dex, luk, int_, hp, maxhp, mp, maxmp;
|
||||
protected int hpMpApUsed, remainingAp;
|
||||
protected int[] remainingSp = new int[10];
|
||||
@@ -65,6 +67,14 @@ public abstract class AbstractMapleCharacterObject extends AbstractAnimatedMaple
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public void setMap(MapleMap map) {
|
||||
this.map = map;
|
||||
}
|
||||
|
||||
public MapleMap getMap() {
|
||||
return map;
|
||||
}
|
||||
|
||||
public int getStr() {
|
||||
statRlock.lock();
|
||||
try {
|
||||
@@ -202,16 +212,37 @@ public abstract class AbstractMapleCharacterObject extends AbstractAnimatedMaple
|
||||
this.hpMpApUsed = mpApUsed;
|
||||
}
|
||||
|
||||
private void dispatchHpChanged(int oldHp) {
|
||||
listener.onHpChanged(oldHp);
|
||||
private void dispatchHpChanged(final int oldHp) {
|
||||
Runnable r = new Runnable() { // thanks BHB (BHB88) for detecting a deadlock case within player stats.
|
||||
@Override
|
||||
public void run() {
|
||||
listener.onHpChanged(oldHp);
|
||||
}
|
||||
};
|
||||
|
||||
map.registerCharacterStatUpdate(r);
|
||||
}
|
||||
|
||||
private void dispatchHpmpPoolUpdated() {
|
||||
listener.onHpmpPoolUpdate();
|
||||
Runnable r = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
listener.onHpmpPoolUpdate();
|
||||
}
|
||||
};
|
||||
|
||||
map.registerCharacterStatUpdate(r);
|
||||
}
|
||||
|
||||
private void dispatchStatPoolUpdateAnnounced() {
|
||||
listener.onAnnounceStatPoolUpdate();
|
||||
Runnable r = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
listener.onAnnounceStatPoolUpdate();
|
||||
}
|
||||
};
|
||||
|
||||
map.registerCharacterStatUpdate(r);
|
||||
}
|
||||
|
||||
protected void setHp(int newHp) {
|
||||
|
||||
@@ -229,7 +229,6 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
|
||||
private MaplePartyCharacter mpc = null;
|
||||
private MapleInventory[] inventory;
|
||||
private MapleJob job = MapleJob.BEGINNER;
|
||||
private MapleMap map;
|
||||
private MapleMessenger messenger = null;
|
||||
private MapleMiniGame miniGame;
|
||||
private MapleMount maplemount;
|
||||
@@ -4847,10 +4846,6 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
|
||||
}
|
||||
}
|
||||
|
||||
public MapleMap getMap() {
|
||||
return map;
|
||||
}
|
||||
|
||||
public int getMapId() {
|
||||
if (map != null) {
|
||||
return map.getId();
|
||||
@@ -8713,10 +8708,6 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
|
||||
public void setMap(int PmapId) {
|
||||
this.mapid = PmapId;
|
||||
}
|
||||
|
||||
public void setMap(MapleMap newmap) {
|
||||
this.map = newmap;
|
||||
}
|
||||
|
||||
public void setMessenger(MapleMessenger messenger) {
|
||||
this.messenger = messenger;
|
||||
|
||||
Reference in New Issue
Block a user