KerningPQ + some boosts on PQ/event scripting

Added cleaner mechanics for dealing with PQs and events (bonus Exp when
clearing a stage, for instance). Reimplemented KerningPQ.
This commit is contained in:
ronancpl
2017-05-05 00:55:36 -03:00
parent 03ab8be97d
commit da00345aec
45 changed files with 1260 additions and 1030 deletions

View File

@@ -35,28 +35,30 @@ import tools.data.input.SeekableLittleEndianAccessor;
public final class KeymapChangeHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
if (slea.available() >= 8) {
if (slea.available() >= 8) {
int mode = slea.readInt();
if(mode == 0) {
int numChanges = slea.readInt();
for (int i = 0; i < numChanges; i++) {
int key = slea.readInt();
int type = slea.readByte();
int action = slea.readInt();
int action = slea.readInt();
Skill skill = SkillFactory.getSkill(action);
boolean isBanndedSkill = false;
if (skill != null) {
isBanndedSkill = GameConstants.bannedBindSkills(skill.getId());
isBanndedSkill = GameConstants.bannedBindSkills(skill.getId());
if (isBanndedSkill || (!c.getPlayer().isGM() && GameConstants.isGMSkills(skill.getId())) || (!GameConstants.isInJobTree(skill.getId(), c.getPlayer().getJob().getId()) && !c.getPlayer().isGM())) { //for those skills are are "technically" in the beginner tab, like bamboo rain in Dojo or skills you find in PYPQ
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit keymapping.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use skill " + skill.getId() + "\r\n");
c.disconnect(true, false);
return;
}
if (c.getPlayer().getSkillLevel(skill) < 1) {
continue;
}
/* if (c.getPlayer().getSkillLevel(skill) < 1) { HOW WOULD A SKILL EVEN BE AVAILABLE TO KEYBINDING
continue; IF THERE IS NOT EVEN A SINGLE POINT USED INTO IT??
} */ //Nice to know some skills have the same ids as items, heh.
}
c.getPlayer().changeKeybinding(key, new MapleKeyBinding(type, action));
}
} else if(mode == 1) { // Auto HP Potion

View File

@@ -99,10 +99,10 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler {
String name = slea.readMapleAsciiString();
MapleCharacter invited = world.getPlayerStorage().getCharacterByName(name);
if (invited != null) {
if(invited.getLevel() < 10) { //min requirement is level 10
c.announce(MaplePacketCreator.serverNotice(5, "The player you have invited does not meet the requirements."));
return;
}
if(invited.getLevel() < 10) { //min requirement is level 10
c.announce(MaplePacketCreator.serverNotice(5, "The player you have invited does not meet the requirements."));
return;
}
if (invited.getParty() == null) {
if (player.getParty() == null) {
partyplayer = new MaplePartyCharacter(player);

View File

@@ -245,8 +245,8 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
player.checkBerserk();
player.expirationTask();
//player.setRates();
if (GameConstants.hasSPTable(player.getJob()) && player.getJob().getId() != 2001) {
player.createDragon();
if (GameConstants.hasSPTable(player.getJob()) && player.getJob().getId() != 2001) {
player.createDragon();
}
if (newcomer){
/*

View File

@@ -59,18 +59,18 @@ public final class QuestActionHandler extends AbstractMaplePacketHandler {
} else if (action == 4) { // scripted start quest
int npc = slea.readInt();
slea.readInt();
if(quest.canStart(player, npc)) {
QuestScriptManager.getInstance().start(c, questid, npc);
}
if(quest.canStart(player, npc)) {
QuestScriptManager.getInstance().start(c, questid, npc);
}
} else if (action == 5) { // scripted end quests
//System.out.println(slea.toString());
int npc = slea.readInt();
slea.readInt();
if(quest.canComplete(player, npc)) {
QuestScriptManager.getInstance().end(c, questid, npc);
player.getClient().getSession().write(MaplePacketCreator.showSpecialEffect(9)); //show effect when completion
player.getMap().broadcastMessage(player, MaplePacketCreator.showForeignEffect(player.getId(), 9));//show effect around players I guess
QuestScriptManager.getInstance().end(c, questid, npc);
player.getClient().getSession().write(MaplePacketCreator.showSpecialEffect(9)); //show effect when completion
player.getMap().broadcastMessage(player, MaplePacketCreator.showForeignEffect(player.getId(), 9));//show effect around players I guess
}
}
}