Antibanish mechanics + Limited drops on map + SQL tidy-up

Added antibanish mechanics: as like other "diseases" that can be treated
with some useable items, banish will be able to be recovered as well.
Fixed some SQL issues introduced on the last commit, as well as
lingering inexistent ids on drop data. Fixed some concurrency issues
with MapleMapFactory. Set a ceiling for simultaneous items available per
map, where old ones are promptly discarded. Patched MWLB attack block
for higher level GMs.
This commit is contained in:
ronancpl
2017-08-05 19:38:07 -03:00
parent 0a2e382c3b
commit f78defec1f
112 changed files with 441 additions and 112 deletions

View File

@@ -21,8 +21,10 @@
*/
package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
import server.life.MapleMonster;
import server.life.MobSkill;
@@ -38,6 +40,8 @@ import tools.data.input.SeekableLittleEndianAccessor;
public final class MoveLifeHandler extends AbstractMovementPacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
List<MapleCharacter> banishPlayers = new ArrayList<>();
int objectid = slea.readInt();
short moveid = slea.readShort();
MapleMapObject mmo = c.getPlayer().getMap().getMapObject(objectid);
@@ -66,7 +70,7 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
if ((skill_1 >= 100 && skill_1 <= 200) && monster.hasSkill(skill_1, skill_2)) {
MobSkill skillData = MobSkillFactory.getMobSkill(skill_1, skill_2);
if (skillData != null && monster.canUseSkill(skillData)) {
skillData.applyEffect(c.getPlayer(), monster, true);
skillData.applyEffect(c.getPlayer(), monster, true, banishPlayers);
}
}
slea.readByte();
@@ -99,5 +103,9 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
updatePosition(res, monster, -1);
c.getPlayer().getMap().moveMonster(monster, monster.getPosition());
}
for (MapleCharacter chr : banishPlayers) {
chr.changeMapBanish(monster.getBanish().getMap(), monster.getBanish().getPortal(), monster.getBanish().getMsg());
}
}
}