WK charges fix + Job level cap + MapleQuestItemFetcher
Fixed WK charges not overriding one another and some concurrency issues within MapleMap and EventInstanceManager. New feature: job level cap, limits EXP gain until job advancement is done. New tool: MapleQuestItemFetcher, searches through the server files for missing quest items and reports the results.
This commit is contained in:
@@ -1129,7 +1129,6 @@ public class MapleItemInformationProvider {
|
||||
return isQuestItemCache.get(itemId);
|
||||
}
|
||||
MapleData data = getItemData(itemId);
|
||||
System.out.println(data);
|
||||
boolean questItem = MapleDataTool.getIntConvert("info/quest", data, 0) == 1;
|
||||
isQuestItemCache.put(itemId, questItem);
|
||||
return questItem;
|
||||
|
||||
@@ -455,9 +455,10 @@ public class MapleStatEffect {
|
||||
case Marksman.SHARP_EYES:
|
||||
statups.add(new Pair<>(MapleBuffStat.SHARP_EYES, Integer.valueOf(ret.x << 8 | ret.y)));
|
||||
break;
|
||||
// THIEF
|
||||
case Rogue.DARK_SIGHT:
|
||||
case WindArcher.WIND_WALK:
|
||||
statups.add(new Pair<>(MapleBuffStat.WIND_WALK, Integer.valueOf(x)));
|
||||
break;
|
||||
case Rogue.DARK_SIGHT:
|
||||
case NightWalker.DARK_SIGHT:
|
||||
statups.add(new Pair<>(MapleBuffStat.DARKSIGHT, Integer.valueOf(x)));
|
||||
break;
|
||||
@@ -1099,6 +1100,9 @@ public class MapleStatEffect {
|
||||
} else if (isDs()) {
|
||||
List<Pair<MapleBuffStat, Integer>> dsstat = Collections.singletonList(new Pair<>(MapleBuffStat.DARKSIGHT, 0));
|
||||
mbuff = MaplePacketCreator.giveForeignBuff(applyto.getId(), dsstat);
|
||||
} else if (isWw()) {
|
||||
List<Pair<MapleBuffStat, Integer>> dsstat = Collections.singletonList(new Pair<>(MapleBuffStat.WIND_WALK, 0));
|
||||
mbuff = MaplePacketCreator.giveForeignBuff(applyto.getId(), dsstat);
|
||||
} else if (isCombo()) {
|
||||
mbuff = MaplePacketCreator.giveForeignBuff(applyto.getId(), statups);
|
||||
} else if (isMonsterRiding()) {
|
||||
@@ -1353,7 +1357,11 @@ public class MapleStatEffect {
|
||||
}
|
||||
|
||||
private boolean isDs() {
|
||||
return skill && (sourceid == Rogue.DARK_SIGHT || sourceid == WindArcher.WIND_WALK || sourceid == NightWalker.DARK_SIGHT);
|
||||
return skill && (sourceid == Rogue.DARK_SIGHT || sourceid == NightWalker.DARK_SIGHT);
|
||||
}
|
||||
|
||||
private boolean isWw() {
|
||||
return skill && (sourceid == WindArcher.WIND_WALK);
|
||||
}
|
||||
|
||||
private boolean isCombo() {
|
||||
|
||||
@@ -287,7 +287,7 @@ public class MapleMonster extends AbstractLoadedMapleLife {
|
||||
}
|
||||
|
||||
int partyLevel = 0;
|
||||
int leechMinLevel = (ServerConstants.USE_UNDERLEVELED_EXP_BLOCK) ? getLevel() - ServerConstants.MIN_UNDERLEVEL_TO_EXP_GAIN : 0; //NO EXP WILL BE GIVEN for those who are underleveled!
|
||||
int leechMinLevel = (ServerConstants.USE_ENFORCE_MOB_LEVEL_RANGE) ? getLevel() - ServerConstants.MIN_UNDERLEVEL_TO_EXP_GAIN : 0; //NO EXP WILL BE GIVEN for those who are underleveled!
|
||||
|
||||
int leechCount = 0;
|
||||
for (MapleCharacter mc : members) {
|
||||
@@ -347,7 +347,7 @@ public class MapleMonster extends AbstractLoadedMapleLife {
|
||||
long pXP = (long)xp + (partyExp.containsKey(pID) ? partyExp.get(pID) : 0);
|
||||
partyExp.put(pID, (int)Math.min(pXP, Integer.MAX_VALUE));
|
||||
} else {
|
||||
if(!ServerConstants.USE_UNDERLEVELED_EXP_BLOCK || mc.getLevel() >= getLevel() - ServerConstants.MIN_UNDERLEVEL_TO_EXP_GAIN) {
|
||||
if(!ServerConstants.USE_ENFORCE_MOB_LEVEL_RANGE || mc.getLevel() >= getLevel() - ServerConstants.MIN_UNDERLEVEL_TO_EXP_GAIN) {
|
||||
//NO EXP WILL BE GIVEN for those who are underleveled!
|
||||
giveExpToCharacter(mc, xp, isKiller, 1);
|
||||
} else {
|
||||
@@ -1021,8 +1021,7 @@ public class MapleMonster extends AbstractLoadedMapleLife {
|
||||
}
|
||||
|
||||
final MapleMonster mons = this;
|
||||
TimerManager tMan = TimerManager.getInstance();
|
||||
tMan.schedule(
|
||||
TimerManager.getInstance().schedule(
|
||||
new Runnable() {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -602,6 +602,8 @@ public class MapleMap {
|
||||
private void startItemMonitor() {
|
||||
chrWLock.lock();
|
||||
try {
|
||||
if(itemMonitor != null) return;
|
||||
|
||||
itemMonitor = TimerManager.getInstance().register(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -1093,14 +1095,13 @@ public class MapleMap {
|
||||
|
||||
public void destroyReactor(int oid) {
|
||||
final MapleReactor reactor = getReactorByOid(oid);
|
||||
TimerManager tMan = TimerManager.getInstance();
|
||||
broadcastMessage(MaplePacketCreator.destroyReactor(reactor));
|
||||
reactor.cancelReactorTimeout();
|
||||
reactor.setAlive(false);
|
||||
removeMapObject(reactor);
|
||||
|
||||
if (reactor.getDelay() > 0) {
|
||||
tMan.schedule(new Runnable() {
|
||||
TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
respawnReactor(reactor);
|
||||
@@ -1879,9 +1880,12 @@ public class MapleMap {
|
||||
}
|
||||
|
||||
public void addPlayer(final MapleCharacter chr) {
|
||||
int chrSize;
|
||||
chrWLock.lock();
|
||||
try {
|
||||
characters.add(chr);
|
||||
chrSize = characters.size();
|
||||
|
||||
addPartyMemberInternal(chr);
|
||||
} finally {
|
||||
chrWLock.unlock();
|
||||
@@ -1889,7 +1893,7 @@ public class MapleMap {
|
||||
chr.setMapId(mapid);
|
||||
|
||||
itemMonitorTimeout = 1;
|
||||
if (getCharacters().size() <= 1) {
|
||||
if (chrSize == 1) {
|
||||
if(!hasItemMonitor()) startItemMonitor();
|
||||
|
||||
if (onFirstUserEnter.length() != 0 && !chr.hasEntered(onFirstUserEnter, mapid) && MapScriptManager.getInstance().scriptExists(onFirstUserEnter, true)) {
|
||||
|
||||
Reference in New Issue
Block a user