Protected Hired Merchant + Buff system patch

Fixed some issues with Fredrick not retrieving the right amount of items
from Hired Merchants. Added concurrency protection for HM. Patched a
minor issue on buff system.
This commit is contained in:
ronancpl
2017-09-26 00:18:14 -03:00
parent 28258530e4
commit de7e686a92
42 changed files with 500 additions and 131 deletions

View File

@@ -2574,7 +2574,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
buffExpires.put(sourceid, expirationtime);
}
private void removeEffectFromItemEffectHolder(Integer sourceid, MapleBuffStat buffStat) {
private boolean removeEffectFromItemEffectHolder(Integer sourceid, MapleBuffStat buffStat) {
Map<MapleBuffStat, MapleBuffStatValueHolder> lbe = buffEffects.get(sourceid);
if(lbe.remove(buffStat) != null) {
@@ -2584,7 +2584,11 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
buffEffects.remove(sourceid);
buffExpires.remove(sourceid);
}
return true;
}
return false;
}
private void removeItemEffectHolder(Integer sourceid) {
@@ -2634,9 +2638,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
private void extractBuffValue(int sourceid, MapleBuffStat stat) {
chrLock.lock();
try {
if(buffEffects.get(sourceid).remove(stat) != null) {
buffEffectsCount.put(stat, (byte)(buffEffectsCount.get(stat) - 1));
}
removeEffectFromItemEffectHolder(sourceid, stat);
} finally {
chrLock.unlock();
}
@@ -2755,7 +2757,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
for (Entry<MapleBuffStat, MapleBuffStatValueHolder> stat : stats.entrySet()) {
int sourceid = stat.getValue().effect.getBuffSourceId();
if(buffEffects.get(sourceid) == null) {
if(!buffEffects.containsKey(sourceid)) {
buffExpires.remove(sourceid);
}
@@ -6537,10 +6539,15 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
}
public void addMerchantMesos(int add) {
int newAmount;
try {
newAmount = (int)Math.min((long)merchantmeso + add, Integer.MAX_VALUE);
System.out.println("adding" + add + " now" + newAmount);
Connection con = DatabaseConnection.getConnection();
try (PreparedStatement ps = con.prepareStatement("UPDATE characters SET MerchantMesos = ? WHERE id = ?", Statement.RETURN_GENERATED_KEYS)) {
ps.setInt(1, merchantmeso + add);
ps.setInt(1, newAmount);
ps.setInt(2, id);
ps.executeUpdate();
}
@@ -6550,7 +6557,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
e.printStackTrace();
return;
}
merchantmeso += add;
merchantmeso = newAmount;
}
public void setMerchantMeso(int set) {