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:
ronancpl
2019-04-21 21:37:29 -03:00
parent d121ba7d2a
commit bad69dc66f
13 changed files with 186 additions and 17 deletions

View File

@@ -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) {

View File

@@ -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;