Clean up Monster usedSkills

This commit is contained in:
P0nk
2022-09-03 14:31:43 +02:00
parent a6ec6adbb5
commit 9e0479fe9f

View File

@@ -82,8 +82,7 @@ public class Monster extends AbstractLoadedLife {
private int VenomMultiplier = 0; private int VenomMultiplier = 0;
private boolean fake = false; private boolean fake = false;
private boolean dropsDisabled = false; private boolean dropsDisabled = false;
private final List<Pair<Integer, Integer>> usedSkills = new ArrayList<>(); // TODO: change to Set<MobSkillId> private final Set<MobSkillId> usedSkills = new HashSet<>();
private final Map<Pair<Integer, Integer>, Integer> skillsUsed = new HashMap<>();
private final Set<Integer> usedAttacks = new HashSet<>(); private final Set<Integer> usedAttacks = new HashSet<>();
private Set<Integer> calledMobOids = null; private Set<Integer> calledMobOids = null;
private WeakReference<Monster> callerMob = new WeakReference<>(null); private WeakReference<Monster> callerMob = new WeakReference<>(null);
@@ -1447,11 +1446,8 @@ public class Monster extends AbstractLoadedLife {
monsterLock.lock(); monsterLock.lock();
try { try {
for (Pair<Integer, Integer> skill : usedSkills) { // thanks OishiiKawaiiDesu for noticing an issue with mobskill cooldown if (usedSkills.contains(toUse.getId())) {
MobSkillId msId = toUse.getId(); return false;
if (skill.getLeft() == msId.type().getId() && skill.getRight() == msId.level()) {
return false;
}
} }
int mpCon = toUse.getMpCon(); int mpCon = toUse.getMpCon();
@@ -1483,48 +1479,28 @@ public class Monster extends AbstractLoadedLife {
} }
private void usedSkill(MobSkill skill) { private void usedSkill(MobSkill skill) {
final int skillId = skill.getId().type().getId(); final MobSkillId msId = skill.getId();
final int level = skill.getId().level();
long cooltime = skill.getCoolTime();
monsterLock.lock(); monsterLock.lock();
try { try {
mp -= skill.getMpCon(); mp -= skill.getMpCon();
Pair<Integer, Integer> skillKey = new Pair<>(skillId, level); this.usedSkills.add(msId);
this.usedSkills.add(skillKey);
Integer useCount = this.skillsUsed.remove(skillKey);
if (useCount != null) {
this.skillsUsed.put(skillKey, useCount + 1);
} else {
this.skillsUsed.put(skillKey, 1);
}
} finally { } finally {
monsterLock.unlock(); monsterLock.unlock();
} }
final Monster mons = this; final Monster mons = this;
MapleMap mmap = mons.getMap(); MapleMap mmap = mons.getMap();
Runnable r = () -> mons.clearSkill(skillId, level); Runnable r = () -> mons.clearSkill(skill.getId());
MobClearSkillService service = (MobClearSkillService) map.getChannelServer().getServiceAccess(ChannelServices.MOB_CLEAR_SKILL); MobClearSkillService service = (MobClearSkillService) map.getChannelServer().getServiceAccess(ChannelServices.MOB_CLEAR_SKILL);
service.registerMobClearSkillAction(mmap.getId(), r, cooltime); service.registerMobClearSkillAction(mmap.getId(), r, skill.getCoolTime());
} }
private void clearSkill(int skillId, int level) { private void clearSkill(MobSkillId msId) {
monsterLock.lock(); monsterLock.lock();
try { try {
int index = -1; usedSkills.remove(msId);
for (Pair<Integer, Integer> skill : usedSkills) {
if (skill.getLeft() == skillId && skill.getRight() == level) {
index = usedSkills.indexOf(skill);
break;
}
}
if (index != -1) {
usedSkills.remove(index);
}
} finally { } finally {
monsterLock.unlock(); monsterLock.unlock();
} }