Rename MapleBuffStatValueHolder
This commit is contained in:
@@ -183,10 +183,10 @@ public class Character extends AbstractCharacterObject {
|
|||||||
private final Map<Skill, SkillEntry> skills = new LinkedHashMap<>();
|
private final Map<Skill, SkillEntry> skills = new LinkedHashMap<>();
|
||||||
private final Map<Integer, Integer> activeCoupons = new LinkedHashMap<>();
|
private final Map<Integer, Integer> activeCoupons = new LinkedHashMap<>();
|
||||||
private final Map<Integer, Integer> activeCouponRates = new LinkedHashMap<>();
|
private final Map<Integer, Integer> activeCouponRates = new LinkedHashMap<>();
|
||||||
private final EnumMap<BuffStat, MapleBuffStatValueHolder> effects = new EnumMap<>(BuffStat.class);
|
private final EnumMap<BuffStat, BuffStatValueHolder> effects = new EnumMap<>(BuffStat.class);
|
||||||
private final Map<BuffStat, Byte> buffEffectsCount = new LinkedHashMap<>();
|
private final Map<BuffStat, Byte> buffEffectsCount = new LinkedHashMap<>();
|
||||||
private final Map<Disease, Long> diseaseExpires = new LinkedHashMap<>();
|
private final Map<Disease, Long> diseaseExpires = new LinkedHashMap<>();
|
||||||
private final Map<Integer, Map<BuffStat, MapleBuffStatValueHolder>> buffEffects = new LinkedHashMap<>(); // non-overriding buffs thanks to Ronan
|
private final Map<Integer, Map<BuffStat, BuffStatValueHolder>> buffEffects = new LinkedHashMap<>(); // non-overriding buffs thanks to Ronan
|
||||||
private final Map<Integer, Long> buffExpires = new LinkedHashMap<>();
|
private final Map<Integer, Long> buffExpires = new LinkedHashMap<>();
|
||||||
private final Map<Integer, KeyBinding> keymap = new LinkedHashMap<>();
|
private final Map<Integer, KeyBinding> keymap = new LinkedHashMap<>();
|
||||||
private final Map<Integer, Summon> summons = new LinkedHashMap<>();
|
private final Map<Integer, Summon> summons = new LinkedHashMap<>();
|
||||||
@@ -859,8 +859,8 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void cancelMagicDoor() {
|
public void cancelMagicDoor() {
|
||||||
List<MapleBuffStatValueHolder> mbsvhList = getAllStatups();
|
List<BuffStatValueHolder> mbsvhList = getAllStatups();
|
||||||
for (MapleBuffStatValueHolder mbsvh : mbsvhList) {
|
for (BuffStatValueHolder mbsvh : mbsvhList) {
|
||||||
if (mbsvh.effect.isMagicDoor()) {
|
if (mbsvh.effect.isMagicDoor()) {
|
||||||
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
|
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
|
||||||
break;
|
break;
|
||||||
@@ -1435,13 +1435,15 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> mbs : effects.entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> mbs : effects.entrySet()) {
|
||||||
if (mbs.getKey() == BuffStat.MAP_PROTECTION) {
|
if (mbs.getKey() == BuffStat.MAP_PROTECTION) {
|
||||||
byte value = (byte) mbs.getValue().value;
|
byte value = (byte) mbs.getValue().value;
|
||||||
|
|
||||||
if (value == 1 && ((returnMapid == 211000000 && thisMapid != 200082300) || returnMapid == 193000000)) {
|
if (value == 1 && ((returnMapid == 211000000 && thisMapid != 200082300) || returnMapid == 193000000)) {
|
||||||
return true; //protection from cold
|
return true; //protection from cold
|
||||||
} else return value == 2 && (returnMapid == 230000000 || thisMapid == 200082300); //breathing underwater
|
} else {
|
||||||
|
return value == 2 && (returnMapid == 230000000 || thisMapid == 200082300); //breathing underwater
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -2525,8 +2527,8 @@ public class Character extends AbstractCharacterObject {
|
|||||||
|
|
||||||
public void dispel() {
|
public void dispel() {
|
||||||
if (!(YamlConfig.config.server.USE_UNDISPEL_HOLY_SHIELD && this.hasActiveBuff(Bishop.HOLY_SHIELD))) {
|
if (!(YamlConfig.config.server.USE_UNDISPEL_HOLY_SHIELD && this.hasActiveBuff(Bishop.HOLY_SHIELD))) {
|
||||||
List<MapleBuffStatValueHolder> mbsvhList = getAllStatups();
|
List<BuffStatValueHolder> mbsvhList = getAllStatups();
|
||||||
for (MapleBuffStatValueHolder mbsvh : mbsvhList) {
|
for (BuffStatValueHolder mbsvh : mbsvhList) {
|
||||||
if (mbsvh.effect.isSkill()) {
|
if (mbsvh.effect.isSkill()) {
|
||||||
if (mbsvh.effect.getBuffSourceId() != Aran.COMBO_ABILITY) { // check discovered thanks to Croosade dev team
|
if (mbsvh.effect.getBuffSourceId() != Aran.COMBO_ABILITY) { // check discovered thanks to Croosade dev team
|
||||||
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
|
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
|
||||||
@@ -2715,8 +2717,8 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void dispelSkill(int skillid) {
|
public void dispelSkill(int skillid) {
|
||||||
List<MapleBuffStatValueHolder> allBuffs = getAllStatups();
|
List<BuffStatValueHolder> allBuffs = getAllStatups();
|
||||||
for (MapleBuffStatValueHolder mbsvh : allBuffs) {
|
for (BuffStatValueHolder mbsvh : allBuffs) {
|
||||||
if (skillid == 0) {
|
if (skillid == 0) {
|
||||||
if (mbsvh.effect.isSkill() && (mbsvh.effect.getSourceId() % 10000000 == 1004 || dispelSkills(mbsvh.effect.getSourceId()))) {
|
if (mbsvh.effect.isSkill() && (mbsvh.effect.getSourceId() % 10000000 == 1004 || dispelSkills(mbsvh.effect.getSourceId()))) {
|
||||||
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
|
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
|
||||||
@@ -2851,7 +2853,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Set<Entry<Integer, Long>> es;
|
Set<Entry<Integer, Long>> es;
|
||||||
List<MapleBuffStatValueHolder> toCancel = new ArrayList<>();
|
List<BuffStatValueHolder> toCancel = new ArrayList<>();
|
||||||
|
|
||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
@@ -2869,7 +2871,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.unlock();
|
effLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MapleBuffStatValueHolder mbsvh : toCancel) {
|
for (BuffStatValueHolder mbsvh : toCancel) {
|
||||||
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
|
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3291,7 +3293,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(effect);
|
BuffStatValueHolder mbsvh = effects.get(effect);
|
||||||
if (mbsvh == null) {
|
if (mbsvh == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -3306,7 +3308,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(effect);
|
BuffStatValueHolder mbsvh = effects.get(effect);
|
||||||
if (mbsvh == null) {
|
if (mbsvh == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -3321,7 +3323,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(stat);
|
BuffStatValueHolder mbsvh = effects.get(stat);
|
||||||
if (mbsvh == null) {
|
if (mbsvh == null) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -3336,7 +3338,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(stat);
|
BuffStatValueHolder mbsvh = effects.get(stat);
|
||||||
if (mbsvh == null) {
|
if (mbsvh == null) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
@@ -3359,13 +3361,13 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<MapleBuffStatValueHolder> getAllStatups() {
|
private List<BuffStatValueHolder> getAllStatups() {
|
||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
List<MapleBuffStatValueHolder> ret = new ArrayList<>();
|
List<BuffStatValueHolder> ret = new ArrayList<>();
|
||||||
for (Map<BuffStat, MapleBuffStatValueHolder> bel : buffEffects.values()) {
|
for (Map<BuffStat, BuffStatValueHolder> bel : buffEffects.values()) {
|
||||||
for (MapleBuffStatValueHolder mbsvh : bel.values()) {
|
for (BuffStatValueHolder mbsvh : bel.values()) {
|
||||||
ret.add(mbsvh);
|
ret.add(mbsvh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3383,8 +3385,8 @@ public class Character extends AbstractCharacterObject {
|
|||||||
long curtime = Server.getInstance().getCurrentTime();
|
long curtime = Server.getInstance().getCurrentTime();
|
||||||
|
|
||||||
Map<Integer, PlayerBuffValueHolder> ret = new LinkedHashMap<>();
|
Map<Integer, PlayerBuffValueHolder> ret = new LinkedHashMap<>();
|
||||||
for (Map<BuffStat, MapleBuffStatValueHolder> bel : buffEffects.values()) {
|
for (Map<BuffStat, BuffStatValueHolder> bel : buffEffects.values()) {
|
||||||
for (MapleBuffStatValueHolder mbsvh : bel.values()) {
|
for (BuffStatValueHolder mbsvh : bel.values()) {
|
||||||
int srcid = mbsvh.effect.getBuffSourceId();
|
int srcid = mbsvh.effect.getBuffSourceId();
|
||||||
if (!ret.containsKey(srcid)) {
|
if (!ret.containsKey(srcid)) {
|
||||||
ret.put(srcid, new PlayerBuffValueHolder((int) (curtime - mbsvh.startTime), mbsvh.effect));
|
ret.put(srcid, new PlayerBuffValueHolder((int) (curtime - mbsvh.startTime), mbsvh.effect));
|
||||||
@@ -3404,7 +3406,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
try {
|
try {
|
||||||
List<Pair<BuffStat, Integer>> ret = new ArrayList<>();
|
List<Pair<BuffStat, Integer>> ret = new ArrayList<>();
|
||||||
for (BuffStat mbs : effects.keySet()) {
|
for (BuffStat mbs : effects.keySet()) {
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(mbs);
|
BuffStatValueHolder mbsvh = effects.get(mbs);
|
||||||
ret.add(new Pair<>(mbs, mbsvh.value));
|
ret.add(new Pair<>(mbs, mbsvh.value));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@@ -3426,7 +3428,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasActiveBuff(int sourceid) {
|
public boolean hasActiveBuff(int sourceid) {
|
||||||
LinkedList<MapleBuffStatValueHolder> allBuffs;
|
LinkedList<BuffStatValueHolder> allBuffs;
|
||||||
|
|
||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
@@ -3437,7 +3439,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.unlock();
|
effLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MapleBuffStatValueHolder mbsvh : allBuffs) {
|
for (BuffStatValueHolder mbsvh : allBuffs) {
|
||||||
if (mbsvh.effect.getBuffSourceId() == sourceid) {
|
if (mbsvh.effect.getBuffSourceId() == sourceid) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -3448,9 +3450,9 @@ public class Character extends AbstractCharacterObject {
|
|||||||
private List<Pair<BuffStat, Integer>> getActiveStatupsFromSourceid(int sourceid) { // already under effLock & chrLock
|
private List<Pair<BuffStat, Integer>> getActiveStatupsFromSourceid(int sourceid) { // already under effLock & chrLock
|
||||||
List<Pair<BuffStat, Integer>> ret = new ArrayList<>();
|
List<Pair<BuffStat, Integer>> ret = new ArrayList<>();
|
||||||
List<Pair<BuffStat, Integer>> singletonStatups = new ArrayList<>();
|
List<Pair<BuffStat, Integer>> singletonStatups = new ArrayList<>();
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> bel : buffEffects.get(sourceid).entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> bel : buffEffects.get(sourceid).entrySet()) {
|
||||||
BuffStat mbs = bel.getKey();
|
BuffStat mbs = bel.getKey();
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(bel.getKey());
|
BuffStatValueHolder mbsvh = effects.get(bel.getKey());
|
||||||
|
|
||||||
Pair<BuffStat, Integer> p;
|
Pair<BuffStat, Integer> p;
|
||||||
if (mbsvh != null) {
|
if (mbsvh != null) {
|
||||||
@@ -3487,13 +3489,13 @@ public class Character extends AbstractCharacterObject {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addItemEffectHolder(Integer sourceid, long expirationtime, Map<BuffStat, MapleBuffStatValueHolder> statups) {
|
private void addItemEffectHolder(Integer sourceid, long expirationtime, Map<BuffStat, BuffStatValueHolder> statups) {
|
||||||
buffEffects.put(sourceid, statups);
|
buffEffects.put(sourceid, statups);
|
||||||
buffExpires.put(sourceid, expirationtime);
|
buffExpires.put(sourceid, expirationtime);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean removeEffectFromItemEffectHolder(Integer sourceid, BuffStat buffStat) {
|
private boolean removeEffectFromItemEffectHolder(Integer sourceid, BuffStat buffStat) {
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> lbe = buffEffects.get(sourceid);
|
Map<BuffStat, BuffStatValueHolder> lbe = buffEffects.get(sourceid);
|
||||||
|
|
||||||
if (lbe.remove(buffStat) != null) {
|
if (lbe.remove(buffStat) != null) {
|
||||||
buffEffectsCount.put(buffStat, (byte) (buffEffectsCount.get(buffStat) - 1));
|
buffEffectsCount.put(buffStat, (byte) (buffEffectsCount.get(buffStat) - 1));
|
||||||
@@ -3510,9 +3512,9 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void removeItemEffectHolder(Integer sourceid) {
|
private void removeItemEffectHolder(Integer sourceid) {
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> be = buffEffects.remove(sourceid);
|
Map<BuffStat, BuffStatValueHolder> be = buffEffects.remove(sourceid);
|
||||||
if (be != null) {
|
if (be != null) {
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> bei : be.entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> bei : be.entrySet()) {
|
||||||
buffEffectsCount.put(bei.getKey(), (byte) (buffEffectsCount.get(bei.getKey()) - 1));
|
buffEffectsCount.put(bei.getKey(), (byte) (buffEffectsCount.get(bei.getKey()) - 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3523,8 +3525,8 @@ public class Character extends AbstractCharacterObject {
|
|||||||
private void dropWorstEffectFromItemEffectHolder(BuffStat mbs) {
|
private void dropWorstEffectFromItemEffectHolder(BuffStat mbs) {
|
||||||
Integer min = Integer.MAX_VALUE;
|
Integer min = Integer.MAX_VALUE;
|
||||||
Integer srcid = -1;
|
Integer srcid = -1;
|
||||||
for (Entry<Integer, Map<BuffStat, MapleBuffStatValueHolder>> bpl : buffEffects.entrySet()) {
|
for (Entry<Integer, Map<BuffStat, BuffStatValueHolder>> bpl : buffEffects.entrySet()) {
|
||||||
MapleBuffStatValueHolder mbsvh = bpl.getValue().get(mbs);
|
BuffStatValueHolder mbsvh = bpl.getValue().get(mbs);
|
||||||
if (mbsvh != null) {
|
if (mbsvh != null) {
|
||||||
if (mbsvh.value < min) {
|
if (mbsvh.value < min) {
|
||||||
min = mbsvh.value;
|
min = mbsvh.value;
|
||||||
@@ -3536,11 +3538,11 @@ public class Character extends AbstractCharacterObject {
|
|||||||
removeEffectFromItemEffectHolder(srcid, mbs);
|
removeEffectFromItemEffectHolder(srcid, mbs);
|
||||||
}
|
}
|
||||||
|
|
||||||
private MapleBuffStatValueHolder fetchBestEffectFromItemEffectHolder(BuffStat mbs) {
|
private BuffStatValueHolder fetchBestEffectFromItemEffectHolder(BuffStat mbs) {
|
||||||
Pair<Integer, Integer> max = new Pair<>(Integer.MIN_VALUE, 0);
|
Pair<Integer, Integer> max = new Pair<>(Integer.MIN_VALUE, 0);
|
||||||
MapleBuffStatValueHolder mbsvh = null;
|
BuffStatValueHolder mbsvh = null;
|
||||||
for (Entry<Integer, Map<BuffStat, MapleBuffStatValueHolder>> bpl : buffEffects.entrySet()) {
|
for (Entry<Integer, Map<BuffStat, BuffStatValueHolder>> bpl : buffEffects.entrySet()) {
|
||||||
MapleBuffStatValueHolder mbsvhi = bpl.getValue().get(mbs);
|
BuffStatValueHolder mbsvhi = bpl.getValue().get(mbs);
|
||||||
if (mbsvhi != null) {
|
if (mbsvhi != null) {
|
||||||
if (!mbsvhi.effect.isActive(this)) {
|
if (!mbsvhi.effect.isActive(this)) {
|
||||||
continue;
|
continue;
|
||||||
@@ -3582,9 +3584,9 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
System.out.println("-------------------");
|
System.out.println("-------------------");
|
||||||
System.out.println("CACHED BUFFS: ");
|
System.out.println("CACHED BUFFS: ");
|
||||||
for (Entry<Integer, Map<BuffStat, MapleBuffStatValueHolder>> bpl : buffEffects.entrySet()) {
|
for (Entry<Integer, Map<BuffStat, BuffStatValueHolder>> bpl : buffEffects.entrySet()) {
|
||||||
System.out.print(bpl.getKey() + ": ");
|
System.out.print(bpl.getKey() + ": ");
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> pble : bpl.getValue().entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> pble : bpl.getValue().entrySet()) {
|
||||||
System.out.print(pble.getKey().name() + pble.getValue().value + ", ");
|
System.out.print(pble.getKey().name() + pble.getValue().value + ", ");
|
||||||
}
|
}
|
||||||
System.out.println();
|
System.out.println();
|
||||||
@@ -3592,7 +3594,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
System.out.println("-------------------");
|
System.out.println("-------------------");
|
||||||
|
|
||||||
System.out.println("IN ACTION:");
|
System.out.println("IN ACTION:");
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> bpl : effects.entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> bpl : effects.entrySet()) {
|
||||||
System.out.println(bpl.getKey().name() + " -> " + ItemInformationProvider.getInstance().getName(bpl.getValue().effect.getSourceId()));
|
System.out.println(bpl.getKey().name() + " -> " + ItemInformationProvider.getInstance().getName(bpl.getValue().effect.getSourceId()));
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -3638,8 +3640,8 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
for (Entry<Integer, Map<BuffStat, MapleBuffStatValueHolder>> bpl : buffEffects.entrySet()) {
|
for (Entry<Integer, Map<BuffStat, BuffStatValueHolder>> bpl : buffEffects.entrySet()) {
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> mbse : bpl.getValue().entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> mbse : bpl.getValue().entrySet()) {
|
||||||
mseBuffs.put(mbse.getValue().effect, mbse.getValue().startTime);
|
mseBuffs.put(mbse.getValue().effect, mbse.getValue().startTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3654,8 +3656,8 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dropBuffStats(List<Pair<BuffStat, MapleBuffStatValueHolder>> effectsToCancel) {
|
private void dropBuffStats(List<Pair<BuffStat, BuffStatValueHolder>> effectsToCancel) {
|
||||||
for (Pair<BuffStat, MapleBuffStatValueHolder> cancelEffectCancelTasks : effectsToCancel) {
|
for (Pair<BuffStat, BuffStatValueHolder> cancelEffectCancelTasks : effectsToCancel) {
|
||||||
//boolean nestedCancel = false;
|
//boolean nestedCancel = false;
|
||||||
|
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
@@ -3679,11 +3681,11 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Pair<BuffStat, MapleBuffStatValueHolder>> deregisterBuffStats(Map<BuffStat, MapleBuffStatValueHolder> stats) {
|
private List<Pair<BuffStat, BuffStatValueHolder>> deregisterBuffStats(Map<BuffStat, BuffStatValueHolder> stats) {
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
List<Pair<BuffStat, MapleBuffStatValueHolder>> effectsToCancel = new ArrayList<>(stats.size());
|
List<Pair<BuffStat, BuffStatValueHolder>> effectsToCancel = new ArrayList<>(stats.size());
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> stat : stats.entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> stat : stats.entrySet()) {
|
||||||
int sourceid = stat.getValue().effect.getBuffSourceId();
|
int sourceid = stat.getValue().effect.getBuffSourceId();
|
||||||
|
|
||||||
if (!buffEffects.containsKey(sourceid)) {
|
if (!buffEffects.containsKey(sourceid)) {
|
||||||
@@ -3693,7 +3695,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
BuffStat mbs = stat.getKey();
|
BuffStat mbs = stat.getKey();
|
||||||
effectsToCancel.add(new Pair<>(mbs, stat.getValue()));
|
effectsToCancel.add(new Pair<>(mbs, stat.getValue()));
|
||||||
|
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(mbs);
|
BuffStatValueHolder mbsvh = effects.get(mbs);
|
||||||
if (mbsvh != null && mbsvh.effect.getBuffSourceId() == sourceid) {
|
if (mbsvh != null && mbsvh.effect.getBuffSourceId() == sourceid) {
|
||||||
mbsvh.bestApplied = true;
|
mbsvh.bestApplied = true;
|
||||||
effects.remove(mbs);
|
effects.remove(mbs);
|
||||||
@@ -3786,7 +3788,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static StatEffect getEffectFromBuffSource(Map<BuffStat, MapleBuffStatValueHolder> buffSource) {
|
private static StatEffect getEffectFromBuffSource(Map<BuffStat, BuffStatValueHolder> buffSource) {
|
||||||
try {
|
try {
|
||||||
return buffSource.entrySet().iterator().next().getValue().effect;
|
return buffSource.entrySet().iterator().next().getValue().effect;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -3814,11 +3816,11 @@ public class Character extends AbstractCharacterObject {
|
|||||||
Set<BuffStat> updatedBuffs = new LinkedHashSet<>();
|
Set<BuffStat> updatedBuffs = new LinkedHashSet<>();
|
||||||
Set<StatEffect> activeEffects = new LinkedHashSet<>();
|
Set<StatEffect> activeEffects = new LinkedHashSet<>();
|
||||||
|
|
||||||
for (MapleBuffStatValueHolder mse : effects.values()) {
|
for (BuffStatValueHolder mse : effects.values()) {
|
||||||
activeEffects.add(mse.effect);
|
activeEffects.add(mse.effect);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Map<BuffStat, MapleBuffStatValueHolder> buff : buffEffects.values()) {
|
for (Map<BuffStat, BuffStatValueHolder> buff : buffEffects.values()) {
|
||||||
StatEffect mse = getEffectFromBuffSource(buff);
|
StatEffect mse = getEffectFromBuffSource(buff);
|
||||||
if (isUpdatingEffect(activeEffects, mse)) {
|
if (isUpdatingEffect(activeEffects, mse)) {
|
||||||
for (Pair<BuffStat, Integer> p : mse.getStatups()) {
|
for (Pair<BuffStat, Integer> p : mse.getStatups()) {
|
||||||
@@ -3846,7 +3848,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
for (BuffStat mbs : removedStats) {
|
for (BuffStat mbs : removedStats) {
|
||||||
fetchBestEffectFromItemEffectHolder(mbs);
|
fetchBestEffectFromItemEffectHolder(mbs);
|
||||||
|
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(mbs);
|
BuffStatValueHolder mbsvh = effects.get(mbs);
|
||||||
if (mbsvh != null) {
|
if (mbsvh != null) {
|
||||||
for (Pair<BuffStat, Integer> statup : mbsvh.effect.getStatups()) {
|
for (Pair<BuffStat, Integer> statup : mbsvh.effect.getStatups()) {
|
||||||
retrievedStats.add(statup.getLeft());
|
retrievedStats.add(statup.getLeft());
|
||||||
@@ -3870,13 +3872,13 @@ public class Character extends AbstractCharacterObject {
|
|||||||
return !removedStats.isEmpty();
|
return !removedStats.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Pair<BuffStat, MapleBuffStatValueHolder>> cancelEffectInternal(StatEffect effect, boolean overwrite, long startTime, Set<BuffStat> removedStats) {
|
private List<Pair<BuffStat, BuffStatValueHolder>> cancelEffectInternal(StatEffect effect, boolean overwrite, long startTime, Set<BuffStat> removedStats) {
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> buffstats = null;
|
Map<BuffStat, BuffStatValueHolder> buffstats = null;
|
||||||
BuffStat ombs;
|
BuffStat ombs;
|
||||||
if (!overwrite) { // is removing the source effect, meaning every effect from this srcid is being purged
|
if (!overwrite) { // is removing the source effect, meaning every effect from this srcid is being purged
|
||||||
buffstats = extractCurrentBuffStats(effect);
|
buffstats = extractCurrentBuffStats(effect);
|
||||||
} else if ((ombs = getSingletonStatupFromEffect(effect)) != null) { // removing all effects of a buff having non-shareable buff stat.
|
} else if ((ombs = getSingletonStatupFromEffect(effect)) != null) { // removing all effects of a buff having non-shareable buff stat.
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(ombs);
|
BuffStatValueHolder mbsvh = effects.get(ombs);
|
||||||
if (mbsvh != null) {
|
if (mbsvh != null) {
|
||||||
buffstats = extractCurrentBuffStats(mbsvh.effect);
|
buffstats = extractCurrentBuffStats(mbsvh.effect);
|
||||||
}
|
}
|
||||||
@@ -3890,7 +3892,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
stopChairTask();
|
stopChairTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Pair<BuffStat, MapleBuffStatValueHolder>> toCancel = deregisterBuffStats(buffstats);
|
List<Pair<BuffStat, BuffStatValueHolder>> toCancel = deregisterBuffStats(buffstats);
|
||||||
if (effect.isMonsterRiding()) {
|
if (effect.isMonsterRiding()) {
|
||||||
this.getClient().getWorldServer().unregisterMountHunger(this);
|
this.getClient().getWorldServer().unregisterMountHunger(this);
|
||||||
this.getMount().setActive(false);
|
this.getMount().setActive(false);
|
||||||
@@ -3904,7 +3906,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void cancelEffectFromBuffStat(BuffStat stat) {
|
public void cancelEffectFromBuffStat(BuffStat stat) {
|
||||||
MapleBuffStatValueHolder effect;
|
BuffStatValueHolder effect;
|
||||||
|
|
||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
@@ -3922,12 +3924,12 @@ public class Character extends AbstractCharacterObject {
|
|||||||
public void cancelBuffStats(BuffStat stat) {
|
public void cancelBuffStats(BuffStat stat) {
|
||||||
effLock.lock();
|
effLock.lock();
|
||||||
try {
|
try {
|
||||||
List<Pair<Integer, MapleBuffStatValueHolder>> cancelList = new LinkedList<>();
|
List<Pair<Integer, BuffStatValueHolder>> cancelList = new LinkedList<>();
|
||||||
|
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
for (Entry<Integer, Map<BuffStat, MapleBuffStatValueHolder>> bel : this.buffEffects.entrySet()) {
|
for (Entry<Integer, Map<BuffStat, BuffStatValueHolder>> bel : this.buffEffects.entrySet()) {
|
||||||
MapleBuffStatValueHolder beli = bel.getValue().get(stat);
|
BuffStatValueHolder beli = bel.getValue().get(stat);
|
||||||
if (beli != null) {
|
if (beli != null) {
|
||||||
cancelList.add(new Pair<>(bel.getKey(), beli));
|
cancelList.add(new Pair<>(bel.getKey(), beli));
|
||||||
}
|
}
|
||||||
@@ -3936,8 +3938,8 @@ public class Character extends AbstractCharacterObject {
|
|||||||
chrLock.unlock();
|
chrLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> buffStatList = new LinkedHashMap<>();
|
Map<BuffStat, BuffStatValueHolder> buffStatList = new LinkedHashMap<>();
|
||||||
for (Pair<Integer, MapleBuffStatValueHolder> p : cancelList) {
|
for (Pair<Integer, BuffStatValueHolder> p : cancelList) {
|
||||||
buffStatList.put(stat, p.getRight());
|
buffStatList.put(stat, p.getRight());
|
||||||
extractBuffValue(p.getLeft(), stat);
|
extractBuffValue(p.getLeft(), stat);
|
||||||
dropBuffStats(deregisterBuffStats(buffStatList));
|
dropBuffStats(deregisterBuffStats(buffStatList));
|
||||||
@@ -3949,14 +3951,14 @@ public class Character extends AbstractCharacterObject {
|
|||||||
cancelPlayerBuffs(Arrays.asList(stat));
|
cancelPlayerBuffs(Arrays.asList(stat));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<BuffStat, MapleBuffStatValueHolder> extractCurrentBuffStats(StatEffect effect) {
|
private Map<BuffStat, BuffStatValueHolder> extractCurrentBuffStats(StatEffect effect) {
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> stats = new LinkedHashMap<>();
|
Map<BuffStat, BuffStatValueHolder> stats = new LinkedHashMap<>();
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> buffList = buffEffects.remove(effect.getBuffSourceId());
|
Map<BuffStat, BuffStatValueHolder> buffList = buffEffects.remove(effect.getBuffSourceId());
|
||||||
|
|
||||||
if (buffList != null) {
|
if (buffList != null) {
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> stateffect : buffList.entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> stateffect : buffList.entrySet()) {
|
||||||
stats.put(stateffect.getKey(), stateffect.getValue());
|
stats.put(stateffect.getKey(), stateffect.getValue());
|
||||||
buffEffectsCount.put(stateffect.getKey(), (byte) (buffEffectsCount.get(stateffect.getKey()) - 1));
|
buffEffectsCount.put(stateffect.getKey(), (byte) (buffEffectsCount.get(stateffect.getKey()) - 1));
|
||||||
}
|
}
|
||||||
@@ -3968,16 +3970,16 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<BuffStat, MapleBuffStatValueHolder> extractLeastRelevantStatEffectsIfFull(StatEffect effect) {
|
private Map<BuffStat, BuffStatValueHolder> extractLeastRelevantStatEffectsIfFull(StatEffect effect) {
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> extractedStatBuffs = new LinkedHashMap<>();
|
Map<BuffStat, BuffStatValueHolder> extractedStatBuffs = new LinkedHashMap<>();
|
||||||
|
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
Map<BuffStat, Byte> stats = new LinkedHashMap<>();
|
Map<BuffStat, Byte> stats = new LinkedHashMap<>();
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> minStatBuffs = new LinkedHashMap<>();
|
Map<BuffStat, BuffStatValueHolder> minStatBuffs = new LinkedHashMap<>();
|
||||||
|
|
||||||
for (Entry<Integer, Map<BuffStat, MapleBuffStatValueHolder>> mbsvhi : buffEffects.entrySet()) {
|
for (Entry<Integer, Map<BuffStat, BuffStatValueHolder>> mbsvhi : buffEffects.entrySet()) {
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> mbsvhe : mbsvhi.getValue().entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> mbsvhe : mbsvhi.getValue().entrySet()) {
|
||||||
BuffStat mbs = mbsvhe.getKey();
|
BuffStat mbs = mbsvhe.getKey();
|
||||||
Byte b = stats.get(mbs);
|
Byte b = stats.get(mbs);
|
||||||
|
|
||||||
@@ -4002,9 +4004,9 @@ public class Character extends AbstractCharacterObject {
|
|||||||
boolean uniqueBuff = isSingletonStatup(it.getKey());
|
boolean uniqueBuff = isSingletonStatup(it.getKey());
|
||||||
|
|
||||||
if (it.getValue() >= (!uniqueBuff ? YamlConfig.config.server.MAX_MONITORED_BUFFSTATS : 1) && effectStatups.contains(it.getKey())) {
|
if (it.getValue() >= (!uniqueBuff ? YamlConfig.config.server.MAX_MONITORED_BUFFSTATS : 1) && effectStatups.contains(it.getKey())) {
|
||||||
MapleBuffStatValueHolder mbsvh = minStatBuffs.get(it.getKey());
|
BuffStatValueHolder mbsvh = minStatBuffs.get(it.getKey());
|
||||||
|
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> lpbe = buffEffects.get(mbsvh.effect.getBuffSourceId());
|
Map<BuffStat, BuffStatValueHolder> lpbe = buffEffects.get(mbsvh.effect.getBuffSourceId());
|
||||||
lpbe.remove(it.getKey());
|
lpbe.remove(it.getKey());
|
||||||
buffEffectsCount.put(it.getKey(), (byte) (buffEffectsCount.get(it.getKey()) - 1));
|
buffEffectsCount.put(it.getKey(), (byte) (buffEffectsCount.get(it.getKey()) - 1));
|
||||||
|
|
||||||
@@ -4168,22 +4170,22 @@ public class Character extends AbstractCharacterObject {
|
|||||||
|
|
||||||
private List<Pair<Integer, Pair<StatEffect, Long>>> propagatePriorityBuffEffectUpdates(Set<BuffStat> retrievedStats) {
|
private List<Pair<Integer, Pair<StatEffect, Long>>> propagatePriorityBuffEffectUpdates(Set<BuffStat> retrievedStats) {
|
||||||
List<Pair<Integer, Pair<StatEffect, Long>>> priorityUpdateEffects = new LinkedList<>();
|
List<Pair<Integer, Pair<StatEffect, Long>>> priorityUpdateEffects = new LinkedList<>();
|
||||||
Map<MapleBuffStatValueHolder, StatEffect> yokeStats = new LinkedHashMap<>();
|
Map<BuffStatValueHolder, StatEffect> yokeStats = new LinkedHashMap<>();
|
||||||
|
|
||||||
// priority buffsources: override buffstats for the client to perceive those as "currently buffed"
|
// priority buffsources: override buffstats for the client to perceive those as "currently buffed"
|
||||||
Set<MapleBuffStatValueHolder> mbsvhList = new LinkedHashSet<>();
|
Set<BuffStatValueHolder> mbsvhList = new LinkedHashSet<>();
|
||||||
for (MapleBuffStatValueHolder mbsvh : getAllStatups()) {
|
for (BuffStatValueHolder mbsvh : getAllStatups()) {
|
||||||
mbsvhList.add(mbsvh);
|
mbsvhList.add(mbsvh);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MapleBuffStatValueHolder mbsvh : mbsvhList) {
|
for (BuffStatValueHolder mbsvh : mbsvhList) {
|
||||||
StatEffect mse = mbsvh.effect;
|
StatEffect mse = mbsvh.effect;
|
||||||
int buffSourceId = mse.getBuffSourceId();
|
int buffSourceId = mse.getBuffSourceId();
|
||||||
if (isPriorityBuffSourceid(buffSourceId) && !hasActiveBuff(buffSourceId)) {
|
if (isPriorityBuffSourceid(buffSourceId) && !hasActiveBuff(buffSourceId)) {
|
||||||
for (Pair<BuffStat, Integer> ps : mse.getStatups()) {
|
for (Pair<BuffStat, Integer> ps : mse.getStatups()) {
|
||||||
BuffStat mbs = ps.getLeft();
|
BuffStat mbs = ps.getLeft();
|
||||||
if (retrievedStats.contains(mbs)) {
|
if (retrievedStats.contains(mbs)) {
|
||||||
MapleBuffStatValueHolder mbsvhe = effects.get(mbs);
|
BuffStatValueHolder mbsvhe = effects.get(mbs);
|
||||||
|
|
||||||
// this shouldn't even be null...
|
// this shouldn't even be null...
|
||||||
//if (mbsvh != null) {
|
//if (mbsvh != null) {
|
||||||
@@ -4194,8 +4196,8 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Entry<MapleBuffStatValueHolder, StatEffect> e : yokeStats.entrySet()) {
|
for (Entry<BuffStatValueHolder, StatEffect> e : yokeStats.entrySet()) {
|
||||||
MapleBuffStatValueHolder mbsvhPriority = e.getKey();
|
BuffStatValueHolder mbsvhPriority = e.getKey();
|
||||||
StatEffect mseActive = e.getValue();
|
StatEffect mseActive = e.getValue();
|
||||||
|
|
||||||
priorityUpdateEffects.add(new Pair<>(mseActive.getBuffSourceId(), new Pair<>(mbsvhPriority.effect, mbsvhPriority.startTime)));
|
priorityUpdateEffects.add(new Pair<>(mseActive.getBuffSourceId(), new Pair<>(mbsvhPriority.effect, mbsvhPriority.startTime)));
|
||||||
@@ -4212,7 +4214,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
|
|
||||||
Map<BuffStat, Pair<Integer, StatEffect>> maxBuffValue = new LinkedHashMap<>();
|
Map<BuffStat, Pair<Integer, StatEffect>> maxBuffValue = new LinkedHashMap<>();
|
||||||
for (BuffStat mbs : retrievedStats) {
|
for (BuffStat mbs : retrievedStats) {
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(mbs);
|
BuffStatValueHolder mbsvh = effects.get(mbs);
|
||||||
if (mbsvh != null) {
|
if (mbsvh != null) {
|
||||||
retrievedEffects.put(mbsvh.effect.getBuffSourceId(), new Pair<>(mbsvh.effect, mbsvh.startTime));
|
retrievedEffects.put(mbsvh.effect.getBuffSourceId(), new Pair<>(mbsvh.effect, mbsvh.startTime));
|
||||||
}
|
}
|
||||||
@@ -4488,11 +4490,11 @@ public class Character extends AbstractCharacterObject {
|
|||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
Integer sourceid = effect.getBuffSourceId();
|
Integer sourceid = effect.getBuffSourceId();
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> toDeploy;
|
Map<BuffStat, BuffStatValueHolder> toDeploy;
|
||||||
Map<BuffStat, MapleBuffStatValueHolder> appliedStatups = new LinkedHashMap<>();
|
Map<BuffStat, BuffStatValueHolder> appliedStatups = new LinkedHashMap<>();
|
||||||
|
|
||||||
for (Pair<BuffStat, Integer> ps : effect.getStatups()) {
|
for (Pair<BuffStat, Integer> ps : effect.getStatups()) {
|
||||||
appliedStatups.put(ps.getLeft(), new MapleBuffStatValueHolder(effect, starttime, ps.getRight()));
|
appliedStatups.put(ps.getLeft(), new BuffStatValueHolder(effect, starttime, ps.getRight()));
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean active = effect.isActive(this);
|
boolean active = effect.isActive(this);
|
||||||
@@ -4500,9 +4502,9 @@ public class Character extends AbstractCharacterObject {
|
|||||||
toDeploy = new LinkedHashMap<>();
|
toDeploy = new LinkedHashMap<>();
|
||||||
Map<Integer, Pair<StatEffect, Long>> retrievedEffects = new LinkedHashMap<>();
|
Map<Integer, Pair<StatEffect, Long>> retrievedEffects = new LinkedHashMap<>();
|
||||||
Set<BuffStat> retrievedStats = new LinkedHashSet<>();
|
Set<BuffStat> retrievedStats = new LinkedHashSet<>();
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> statup : appliedStatups.entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> statup : appliedStatups.entrySet()) {
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(statup.getKey());
|
BuffStatValueHolder mbsvh = effects.get(statup.getKey());
|
||||||
MapleBuffStatValueHolder statMbsvh = statup.getValue();
|
BuffStatValueHolder statMbsvh = statup.getValue();
|
||||||
|
|
||||||
if (active) {
|
if (active) {
|
||||||
if (mbsvh == null || mbsvh.value < statMbsvh.value || (mbsvh.value == statMbsvh.value && mbsvh.effect.getStatups().size() <= statMbsvh.effect.getStatups().size())) {
|
if (mbsvh == null || mbsvh.value < statMbsvh.value || (mbsvh.value == statMbsvh.value && mbsvh.effect.getStatups().size() <= statMbsvh.effect.getStatups().size())) {
|
||||||
@@ -4521,7 +4523,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
|
|
||||||
// should also propagate update from buffs shared with priority sourceids
|
// should also propagate update from buffs shared with priority sourceids
|
||||||
Set<BuffStat> updated = appliedStatups.keySet();
|
Set<BuffStat> updated = appliedStatups.keySet();
|
||||||
for (MapleBuffStatValueHolder mbsvh : this.getAllStatups()) {
|
for (BuffStatValueHolder mbsvh : this.getAllStatups()) {
|
||||||
if (isPriorityBuffSourceid(mbsvh.effect.getBuffSourceId())) {
|
if (isPriorityBuffSourceid(mbsvh.effect.getBuffSourceId())) {
|
||||||
for (Pair<BuffStat, Integer> p : mbsvh.effect.getStatups()) {
|
for (Pair<BuffStat, Integer> p : mbsvh.effect.getStatups()) {
|
||||||
if (updated.contains(p.getLeft())) {
|
if (updated.contains(p.getLeft())) {
|
||||||
@@ -4533,7 +4535,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
|
|
||||||
if (!isSilent) {
|
if (!isSilent) {
|
||||||
addItemEffectHolder(sourceid, expirationtime, appliedStatups);
|
addItemEffectHolder(sourceid, expirationtime, appliedStatups);
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> statup : toDeploy.entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> statup : toDeploy.entrySet()) {
|
||||||
effects.put(statup.getKey(), statup.getValue());
|
effects.put(statup.getKey(), statup.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4544,15 +4546,15 @@ public class Character extends AbstractCharacterObject {
|
|||||||
propagateBuffEffectUpdates(retrievedEffects, retrievedStats, new LinkedHashSet<BuffStat>());
|
propagateBuffEffectUpdates(retrievedEffects, retrievedStats, new LinkedHashSet<BuffStat>());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> statup : appliedStatups.entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> statup : appliedStatups.entrySet()) {
|
||||||
addItemEffectHolderCount(statup.getKey());
|
addItemEffectHolderCount(statup.getKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
toDeploy = (active ? appliedStatups : new LinkedHashMap<BuffStat, MapleBuffStatValueHolder>());
|
toDeploy = (active ? appliedStatups : new LinkedHashMap<BuffStat, BuffStatValueHolder>());
|
||||||
}
|
}
|
||||||
|
|
||||||
addItemEffectHolder(sourceid, expirationtime, appliedStatups);
|
addItemEffectHolder(sourceid, expirationtime, appliedStatups);
|
||||||
for (Entry<BuffStat, MapleBuffStatValueHolder> statup : toDeploy.entrySet()) {
|
for (Entry<BuffStat, BuffStatValueHolder> statup : toDeploy.entrySet()) {
|
||||||
effects.put(statup.getKey(), statup.getValue());
|
effects.put(statup.getKey(), statup.getValue());
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -5852,7 +5854,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(effect);
|
BuffStatValueHolder mbsvh = effects.get(effect);
|
||||||
if (mbsvh == null) {
|
if (mbsvh == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -6148,7 +6150,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(stat);
|
BuffStatValueHolder mbsvh = effects.get(stat);
|
||||||
if (mbsvh == null) {
|
if (mbsvh == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -6811,9 +6813,9 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void dispelBuffCoupons() {
|
public void dispelBuffCoupons() {
|
||||||
List<MapleBuffStatValueHolder> allBuffs = getAllStatups();
|
List<BuffStatValueHolder> allBuffs = getAllStatups();
|
||||||
|
|
||||||
for (MapleBuffStatValueHolder mbsvh : allBuffs) {
|
for (BuffStatValueHolder mbsvh : allBuffs) {
|
||||||
if (ItemConstants.isRateCoupon(mbsvh.effect.getSourceId())) {
|
if (ItemConstants.isRateCoupon(mbsvh.effect.getSourceId())) {
|
||||||
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
|
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
|
||||||
}
|
}
|
||||||
@@ -7470,14 +7472,14 @@ public class Character extends AbstractCharacterObject {
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class MapleBuffStatValueHolder {
|
private static class BuffStatValueHolder {
|
||||||
|
|
||||||
public StatEffect effect;
|
public StatEffect effect;
|
||||||
public long startTime;
|
public long startTime;
|
||||||
public int value;
|
public int value;
|
||||||
public boolean bestApplied;
|
public boolean bestApplied;
|
||||||
|
|
||||||
public MapleBuffStatValueHolder(StatEffect effect, long startTime, int value) {
|
public BuffStatValueHolder(StatEffect effect, long startTime, int value) {
|
||||||
super();
|
super();
|
||||||
this.effect = effect;
|
this.effect = effect;
|
||||||
this.startTime = startTime;
|
this.startTime = startTime;
|
||||||
@@ -8840,7 +8842,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
effLock.lock();
|
effLock.lock();
|
||||||
chrLock.lock();
|
chrLock.lock();
|
||||||
try {
|
try {
|
||||||
MapleBuffStatValueHolder mbsvh = effects.get(effect);
|
BuffStatValueHolder mbsvh = effects.get(effect);
|
||||||
if (mbsvh == null) {
|
if (mbsvh == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user