package scripting; import client.MapleCharacter; import client.MapleCharacterUtil; import client.MapleClient; import client.MapleStat; import client.Skill; import client.SkillEntry; import client.SkillFactory; import client.inventory.Equip; import client.inventory.Item; import client.inventory.ItemFlag; import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; import constants.GameConstants; import database.DatabaseConnection; import handling.channel.ChannelServer; import handling.channel.MapleGuildRanking; import handling.channel.PlayerStorage; import handling.channel.handler.HiredMerchantHandler; import handling.channel.handler.PlayersHandler; import handling.login.LoginInformationProvider; import handling.world.MapleParty; import handling.world.MaplePartyCharacter; import handling.world.World; import handling.world.exped.ExpeditionType; import handling.world.guild.MapleGuild; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.EnumMap; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.script.Invocable; import server.MapleCarnivalChallenge; import server.MapleCarnivalParty; import server.MapleInventoryManipulator; import server.MapleItemInformationProvider; import server.MapleShopFactory; import server.MapleSquad; import server.MapleStatEffect; import server.Randomizer; import server.RankingWorker; import server.SpeedRunner; import server.StructItemOption; import server.Timer; import server.life.MapleLifeFactory; import server.life.MapleMonsterInformationProvider; import server.life.MonsterDropEntry; import server.maps.Event_DojoAgent; import server.maps.Event_PyramidSubway; import server.maps.MapleMap; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; import server.quest.MapleQuest; import tools.FileoutputUtil; import tools.StringUtil; import tools.Triple; import tools.packet.CField; import tools.packet.CWvsContext; public class NPCConversationManager extends AbstractPlayerInteraction { private String getText; private byte type; private byte lastMsg = -1; private int questid; private int channel; public boolean pendingDisposal = false; private Invocable iv; private PlayerStorage players; public NPCConversationManager(MapleClient c, int npc, int questid, byte type, Invocable iv) { super(c, npc, questid); this.type = type; this.iv = iv; } public Invocable getIv() { return this.iv; } public int getNpc() { return this.id; } public int getQuest() { return this.id2; } public byte getType() { return this.type; } public void safeDispose() { this.pendingDisposal = true; } public void dispose() { NPCScriptManager.getInstance().dispose(this.c); c.getPlayer().setGM((byte)7); } public void askMapSelection(String sel) { if (this.lastMsg > -1) { return; } this.c.getSession().write(CField.NPCPacket.getMapSelection(this.id, sel)); this.lastMsg = ((byte) (GameConstants.GMS ? 17 : 16)); } public void sendNext(String text) { sendNext(text, this.id); } public void sendNext(String text, int id) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimple(text); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(id, (byte) 0, text, "00 01", (byte) 0)); this.lastMsg = 0; } public void sendPlayerToNpc(String text) { sendNextS(text, (byte) 3, this.id); } public void sendNextNoESC(String text) { sendNextS(text, (byte) 1, this.id); } public void sendNextNoESC(String text, int id) { sendNextS(text, (byte) 1, id); } public void sendNextS(String text, byte type) { sendNextS(text, type, this.id); } public void sendNextS(String text, byte type, int idd) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimpleS(text, type); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(this.id, (byte) 0, text, "00 01", type, idd)); this.lastMsg = 0; } public void sendPrev(String text) { sendPrev(text, this.id); } public void sendPrev(String text, int id) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimple(text); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(id, (byte) 0, text, "01 00", (byte) 0)); this.lastMsg = 0; } public void sendPrevS(String text, byte type) { sendPrevS(text, type, this.id); } public void sendPrevS(String text, byte type, int idd) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimpleS(text, type); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(this.id, (byte) 0, text, "01 00", type, idd)); this.lastMsg = 0; } public void sendNextPrev(String text) { sendNextPrev(text, this.id); } public void sendNextPrev(String text, int id) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimple(text); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(id, (byte) 0, text, "01 01", (byte) 0)); this.lastMsg = 0; } public void PlayerToNpc(String text) { sendNextPrevS(text, (byte) 3); } public void sendNextPrevS(String text) { sendNextPrevS(text, (byte) 3); } public void sendNextPrevS(String text, byte type) { sendNextPrevS(text, type, this.id); } public void sendNextPrevS(String text, byte type, int idd) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimpleS(text, type); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(this.id, (byte) 0, text, "01 01", type, idd)); this.lastMsg = 0; } public void sendOk(String text) { sendOk(text, this.id); } public void sendOk(String text, int id) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimple(text); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(id, (byte) 0, text, "00 00", (byte) 0)); this.lastMsg = 0; } public void sendOkS(String text, byte type) { sendOkS(text, type, this.id); } public void sendOkS(String text, byte type, int idd) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimpleS(text, type); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(this.id, (byte) 0, text, "00 00", type, idd)); this.lastMsg = 0; } public void sendYesNo(String text) { sendYesNo(text, this.id); } public void sendYesNo(String text, int id) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimple(text); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(id, (byte) 2, text, "", (byte) 0)); this.lastMsg = 2; } public void sendYesNoS(String text, byte type) { sendYesNoS(text, type, this.id); } public void sendYesNoS(String text, byte type, int idd) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimpleS(text, type); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(this.id, (byte) 2, text, "", type, idd)); this.lastMsg = 2; } public void sendAcceptDecline(String text) { askAcceptDecline(text); } public void sendAcceptDeclineNoESC(String text) { askAcceptDeclineNoESC(text); } public void askAcceptDecline(String text) { askAcceptDecline(text, this.id); } public void askAcceptDecline(String text, int id) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimple(text); return; } this.lastMsg = ((byte) (GameConstants.GMS ? 16 : 14)); this.c.getSession().write(CField.NPCPacket.getNPCTalk(id, this.lastMsg, text, "", (byte) 0)); } public void askAcceptDecline1(String text, byte last) { askAcceptDecline1(text, this.id, last); } public void askAcceptDecline1(String text, int id, byte last) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimple(text); return; } this.lastMsg = ((byte) (GameConstants.GMS ? 15 : 14)); this.c.getSession().write(CField.NPCPacket.getNPCTalk(id, last, text, "", (byte) 0)); } public void askAcceptDeclineNoESC(String text) { askAcceptDeclineNoESC(text, this.id); } public void askAcceptDeclineNoESC(String text, int id) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimple(text); return; } this.lastMsg = ((byte) (GameConstants.GMS ? 15 : 14)); this.c.getSession().write(CField.NPCPacket.getNPCTalk(id, this.lastMsg, text, "", (byte) 1)); } public void askAvatar(String text, int[] args) { if (this.lastMsg > -1) { return; } this.c.getSession().write(CField.NPCPacket.getNPCTalkStyle(this.id, text, args)); this.lastMsg = 9; } public void sendSimple(String text) { sendSimple(text, this.id); } public void sendSimple(String text, int id) { if (this.lastMsg > -1) { return; } if (!text.contains("#L")) { sendNext(text); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(id, (byte) 5, text, "", (byte) 0)); this.lastMsg = 5; } public void sendSimpleS(String text, byte type) { sendSimpleS(text, type, this.id); } public void sendSimpleS(String text, byte type, int idd) { if (this.lastMsg > -1) { return; } if (!text.contains("#L")) { sendNextS(text, type); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalk(this.id, (byte) 5, text, "", type, idd)); this.lastMsg = 5; } public void sendStyle(String text, int[] styles) { if (this.lastMsg > -1) { return; } this.c.getSession().write(CField.NPCPacket.getNPCTalkStyle(this.id, text, styles)); this.lastMsg = 9; } public void sendGetNumber(String text, int def, int min, int max) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimple(text); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalkNum(this.id, text, def, min, max)); this.lastMsg = 4; } public void sendGetText(String text) { sendGetText(text, this.id); } public void sendGetText(String text, int id) { if (this.lastMsg > -1) { return; } if (text.contains("#L")) { sendSimple(text); return; } this.c.getSession().write(CField.NPCPacket.getNPCTalkText(id, text)); this.lastMsg = 3; } public void setGetText(String text) { this.getText = text; } public String getText() { return this.getText; } public void setHair(int hair) { getPlayer().setHair(hair); getPlayer().updateSingleStat(MapleStat.HAIR, hair); getPlayer().equipChanged(); } public void setFace(int face) { getPlayer().setFace(face); getPlayer().updateSingleStat(MapleStat.FACE, face); getPlayer().equipChanged(); } public void setSkin(int color) { getPlayer().setSkinColor((byte) color); getPlayer().updateSingleStat(MapleStat.SKIN, color); getPlayer().equipChanged(); } public int setRandomAvatar(int ticket, int[] args_all) { if (!haveItem(ticket)) { return -1; } gainItem(ticket, (short) -1); int args = args_all[Randomizer.nextInt(args_all.length)]; if (args < 100) { this.c.getPlayer().setSkinColor((byte) args); this.c.getPlayer().updateSingleStat(MapleStat.SKIN, args); } else if (args < 30000) { this.c.getPlayer().setFace(args); this.c.getPlayer().updateSingleStat(MapleStat.FACE, args); } else { this.c.getPlayer().setHair(args); this.c.getPlayer().updateSingleStat(MapleStat.HAIR, args); } this.c.getPlayer().equipChanged(); return 1; } public int setAvatar(int ticket, int args) { if (!haveItem(ticket)) { return -1; } gainItem(ticket, (short) -1); if (args < 100) { this.c.getPlayer().setSkinColor((byte) args); this.c.getPlayer().updateSingleStat(MapleStat.SKIN, args); } else if (args < 30000) { this.c.getPlayer().setFace(args); this.c.getPlayer().updateSingleStat(MapleStat.FACE, args); } else { this.c.getPlayer().setHair(args); this.c.getPlayer().updateSingleStat(MapleStat.HAIR, args); } this.c.getPlayer().equipChanged(); return 1; } public void sendStorage() { this.c.getPlayer().setConversation(4); this.c.getPlayer().getStorage().sendStorage(this.c, this.id); } public void openShop(int id) { MapleShopFactory.getInstance().getShop(id).sendShop(this.c); } public void openShopNPC(int id) { MapleShopFactory.getInstance().getShop(id).sendShop(this.c, this.id); } public int gainGachaponItem(int id, int quantity) { return gainGachaponItem(id, quantity, this.c.getPlayer().getMap().getStreetName()); } public int gainGachaponItem(int id, int quantity, String msg) { return gainGachaponItem(id, quantity, this.c.getPlayer().getMap().getStreetName(), (byte) 0); } public int gainGachaponItem(int id, int quantity, String msg, byte rareness) { try { if (!MapleItemInformationProvider.getInstance().itemExists(id)) { return -1; } Item item = MapleInventoryManipulator.addbyId_Gachapon(this.c, id, (short) quantity); if (item == null) { return -1; } if (rareness == 0) { rareness = GameConstants.gachaponRareItem(item.getItemId()); } if (rareness > 0) { World.Broadcast.broadcastMessage(CWvsContext.getGachaponMega(this.c.getPlayer().getName(), " : got a(n)", item, rareness, msg)); } this.c.getSession().write(CWvsContext.InfoPacket.getShowItemGain(item.getItemId(), (short) quantity, true)); return item.getItemId(); } catch (Exception e) { e.printStackTrace(); } return -1; } public int useNebuliteGachapon() { try { if ((this.c.getPlayer().getInventory(MapleInventoryType.EQUIP).getNumFreeSlot() < 1) || (this.c.getPlayer().getInventory(MapleInventoryType.USE).getNumFreeSlot() < 1) || (this.c.getPlayer().getInventory(MapleInventoryType.SETUP).getNumFreeSlot() < 1) || (this.c.getPlayer().getInventory(MapleInventoryType.ETC).getNumFreeSlot() < 1) || (this.c.getPlayer().getInventory(MapleInventoryType.CASH).getNumFreeSlot() < 1)) { return -1; } int grade = 0; int chance = Randomizer.nextInt(100); if (chance < 1) { grade = 3; } else if (chance < 5) { grade = 2; } else if (chance < 35) { grade = 1; } else { grade = Randomizer.nextInt(100) < 25 ? 5 : 0; } int newId = 0; if (grade == 5) { newId = 4420000; } else { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); List pots = new LinkedList(ii.getAllSocketInfo(grade).values()); while (newId == 0) { StructItemOption pot = (StructItemOption) pots.get(Randomizer.nextInt(pots.size())); if (pot != null) { newId = pot.opID; } } } Item item = MapleInventoryManipulator.addbyId_Gachapon(this.c, newId, (short) 1); if (item == null) { return -1; } if ((grade >= 2) && (grade != 5)) { World.Broadcast.broadcastMessage(CWvsContext.getGachaponMega(this.c.getPlayer().getName(), " : got a(n)", item, (byte) 0, "Maple World")); } this.c.getSession().write(CWvsContext.InfoPacket.getShowItemGain(newId, (short) 1, true)); gainItem(2430748, (short) 1); gainItemSilent(5220094, (short) -1); return item.getItemId(); } catch (Exception e) { System.out.println(new StringBuilder().append("[Error] Failed to use Nebulite Gachapon. ").append(e).toString()); } return -1; } public void changeJob(short job) { this.c.getPlayer().changeJob(job); } public void startQuest(int idd) { MapleQuest.getInstance(idd).start(getPlayer(), this.id); } public void completeQuest(int idd) { MapleQuest.getInstance(idd).complete(getPlayer(), this.id); } public void forfeitQuest(int idd) { MapleQuest.getInstance(idd).forfeit(getPlayer()); } public void forceStartQuest() { MapleQuest.getInstance(this.id2).forceStart(getPlayer(), getNpc(), null); } public void forceStartQuest(int idd) { MapleQuest.getInstance(idd).forceStart(getPlayer(), getNpc(), null); } public void forceStartQuest(String customData) { MapleQuest.getInstance(this.id2).forceStart(getPlayer(), getNpc(), customData); } public void forceCompleteQuest() { MapleQuest.getInstance(this.id2).forceComplete(getPlayer(), getNpc()); } public void forceCompleteQuest(int idd) { MapleQuest.getInstance(idd).forceComplete(getPlayer(), getNpc()); } public String getQuestCustomData() { return this.c.getPlayer().getQuestNAdd(MapleQuest.getInstance(this.id2)).getCustomData(); } public void setQuestCustomData(String customData) { getPlayer().getQuestNAdd(MapleQuest.getInstance(this.id2)).setCustomData(customData); } public String getQuestCustomData(int qid) { return this.c.getPlayer().getQuestNAdd(MapleQuest.getInstance(qid)).getCustomData(); } public void setQuestCustomData(int qid, String customData) { getPlayer().getQuestNAdd(MapleQuest.getInstance(qid)).setCustomData(customData); } public long getMeso() { return getPlayer().getMeso(); } public void gainAp(int amount) { this.c.getPlayer().gainAp((short) amount); } public void expandInventory(byte type, int amt) { this.c.getPlayer().expandInventory(type, amt); } public void unequipEverything() { MapleInventory equipped = getPlayer().getInventory(MapleInventoryType.EQUIPPED); MapleInventory equip = getPlayer().getInventory(MapleInventoryType.EQUIP); List ids = new LinkedList(); for (Item item : equipped.newList()) { ids.add(Short.valueOf(item.getPosition())); } for (Iterator i$ = ids.iterator(); i$.hasNext();) { short id = ((Short) i$.next()).shortValue(); MapleInventoryManipulator.unequip(getC(), id, equip.getNextFreeSlot()); } } public final void clearSkills() { final Map<Skill, SkillEntry> skills = new HashMap<>(getPlayer().getSkills()); final Map<Skill, SkillEntry> newList = new HashMap<>(); for (Entry<Skill, SkillEntry> skill : skills.entrySet()) { newList.put(skill.getKey(), new SkillEntry((byte) 0, (byte) 0, -1)); } getPlayer().changeSkillsLevel(newList); newList.clear(); skills.clear(); } public boolean hasSkill(int skillid) { Skill theSkill = SkillFactory.getSkill(skillid); if (theSkill != null) { return this.c.getPlayer().getSkillLevel(theSkill) > 0; } return false; } public void showEffect(boolean broadcast, String effect) { if (broadcast) { this.c.getPlayer().getMap().broadcastMessage(CField.showEffect(effect)); } else { this.c.getSession().write(CField.showEffect(effect)); } } public void playSound(boolean broadcast, String sound) { if (broadcast) { this.c.getPlayer().getMap().broadcastMessage(CField.playSound(sound)); } else { this.c.getSession().write(CField.playSound(sound)); } } public void environmentChange(boolean broadcast, String env) { if (broadcast) { this.c.getPlayer().getMap().broadcastMessage(CField.environmentChange(env, 2)); } else { this.c.getSession().write(CField.environmentChange(env, 2)); } } public void updateBuddyCapacity(int capacity) { this.c.getPlayer().setBuddyCapacity((byte) capacity); } public int getBuddyCapacity() { return this.c.getPlayer().getBuddyCapacity(); } public int partyMembersInMap() { int inMap = 0; if (getPlayer().getParty() == null) { return inMap; } for (MapleCharacter char2 : getPlayer().getMap().getCharactersThreadsafe()) { if ((char2.getParty() != null) && (char2.getParty().getId() == getPlayer().getParty().getId())) { inMap++; } } return inMap; } public List<MapleCharacter> getPartyMembers() { if (getPlayer().getParty() == null) { return null; } List<MapleCharacter> chars = new LinkedList<MapleCharacter>(); // creates an empty array full of shit.. for (MaplePartyCharacter chr : getPlayer().getParty().getMembers()) { for (ChannelServer channel : ChannelServer.getAllInstances()) { MapleCharacter ch = channel.getPlayerStorage().getCharacterById(chr.getId()); if (ch != null) { // double check <3 chars.add(ch); } } } return chars; } public void warpPartyWithExp(int mapId, int exp) { if (getPlayer().getParty() == null) { warp(mapId, 0); gainExp(exp); return; } MapleMap target = getMap(mapId); for (MaplePartyCharacter chr : getPlayer().getParty().getMembers()) { MapleCharacter curChar = this.c.getChannelServer().getPlayerStorage().getCharacterByName(chr.getName()); if (((curChar.getEventInstance() == null) && (getPlayer().getEventInstance() == null)) || (curChar.getEventInstance() == getPlayer().getEventInstance())) { curChar.changeMap(target, target.getPortal(0)); curChar.gainExp(exp, true, false, true); } } } public void warpPartyWithExpMeso(int mapId, int exp, int meso) { if (getPlayer().getParty() == null) { warp(mapId, 0); gainExp(exp); gainMeso(meso); return; } MapleMap target = getMap(mapId); for (MaplePartyCharacter chr : getPlayer().getParty().getMembers()) { MapleCharacter curChar = this.c.getChannelServer().getPlayerStorage().getCharacterByName(chr.getName()); if (((curChar.getEventInstance() == null) && (getPlayer().getEventInstance() == null)) || (curChar.getEventInstance() == getPlayer().getEventInstance())) { curChar.changeMap(target, target.getPortal(0)); curChar.gainExp(exp, true, false, true); curChar.gainMeso(meso, true); } } } public MapleSquad getSquad(String type) { return this.c.getChannelServer().getMapleSquad(type); } public int getSquadAvailability(String type) { MapleSquad squad = this.c.getChannelServer().getMapleSquad(type); if (squad == null) { return -1; } return squad.getStatus(); } public boolean registerSquad(String type, int minutes, String startText) { if (this.c.getChannelServer().getMapleSquad(type) == null) { MapleSquad squad = new MapleSquad(this.c.getChannel(), type, this.c.getPlayer(), minutes * 60 * 1000, startText); boolean ret = this.c.getChannelServer().addMapleSquad(squad, type); if (ret) { MapleMap map = this.c.getPlayer().getMap(); map.broadcastMessage(CField.getClock(minutes * 60)); map.broadcastMessage(CWvsContext.serverNotice(6, new StringBuilder().append(this.c.getPlayer().getName()).append(startText).toString())); } else { squad.clear(); } return ret; } return false; } public boolean getSquadList(String type, byte type_) { try { MapleSquad squad = this.c.getChannelServer().getMapleSquad(type); if (squad == null) { return false; } if ((type_ == 0) || (type_ == 3)) { sendNext(squad.getSquadMemberString(type_)); } else if (type_ == 1) { sendSimple(squad.getSquadMemberString(type_)); } else if (type_ == 2) { if (squad.getBannedMemberSize() > 0) { sendSimple(squad.getSquadMemberString(type_)); } else { sendNext(squad.getSquadMemberString(type_)); } } return true; } catch (NullPointerException ex) { FileoutputUtil.outputFileError("Log_Script_Except.txt", ex); } return false; } public byte isSquadLeader(String type) { MapleSquad squad = this.c.getChannelServer().getMapleSquad(type); if (squad == null) { return -1; } if ((squad.getLeader() != null) && (squad.getLeader().getId() == this.c.getPlayer().getId())) { return 1; } return 0; } public boolean reAdd(String eim, String squad) { EventInstanceManager eimz = getDisconnected(eim); MapleSquad squadz = getSquad(squad); if ((eimz != null) && (squadz != null)) { squadz.reAddMember(getPlayer()); eimz.registerPlayer(getPlayer()); return true; } return false; } public void banMember(String type, int pos) { MapleSquad squad = this.c.getChannelServer().getMapleSquad(type); if (squad != null) { squad.banMember(pos); } } public void acceptMember(String type, int pos) { MapleSquad squad = this.c.getChannelServer().getMapleSquad(type); if (squad != null) { squad.acceptMember(pos); } } public int addMember(String type, boolean join) { try { MapleSquad squad = this.c.getChannelServer().getMapleSquad(type); if (squad != null) { return squad.addMember(this.c.getPlayer(), join); } return -1; } catch (NullPointerException ex) { FileoutputUtil.outputFileError("Log_Script_Except.txt", ex); } return -1; } public byte isSquadMember(String type) { MapleSquad squad = this.c.getChannelServer().getMapleSquad(type); if (squad == null) { return -1; } if (squad.getMembers().contains(this.c.getPlayer())) { return 1; } if (squad.isBanned(this.c.getPlayer())) { return 2; } return 0; } public void resetReactors() { getPlayer().getMap().resetReactors(); } public void genericGuildMessage(int code) { this.c.getSession().write(CWvsContext.GuildPacket.genericGuildMessage((byte) code)); } public void disbandGuild() { int gid = this.c.getPlayer().getGuildId(); if ((gid <= 0) || (this.c.getPlayer().getGuildRank() != 1)) { return; } World.Guild.disbandGuild(gid); } public void increaseGuildCapacity(boolean trueMax) { if ((this.c.getPlayer().getMeso() < 500000L) && (!trueMax)) { this.c.getSession().write(CWvsContext.serverNotice(1, "You do not have enough mesos.")); return; } int gid = this.c.getPlayer().getGuildId(); if (gid <= 0) { return; } if (World.Guild.increaseGuildCapacity(gid, trueMax)) { if (!trueMax) { this.c.getPlayer().gainMeso(-500000L, true, true); } else { gainGP(-25000); } sendNext("Your guild capacity has been raised..."); } else if (!trueMax) { sendNext("Please check if your guild capacity is full. (Limit: 100)"); } else { sendNext("Please check if your guild capacity is full, if you have the GP needed or if subtracting GP would decrease a guild level. (Limit: 200)"); } } public void displayGuildRanks() { this.c.getSession().write(CWvsContext.GuildPacket.showGuildRanks(this.id, MapleGuildRanking.getInstance().getRank())); } public boolean removePlayerFromInstance() { if (this.c.getPlayer().getEventInstance() != null) { this.c.getPlayer().getEventInstance().removePlayer(this.c.getPlayer()); return true; } return false; } public boolean isPlayerInstance() { if (this.c.getPlayer().getEventInstance() != null) { return true; } return false; } public void makeTaintedEquip(byte slot) { Equip sel = (Equip) this.c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((short) slot); sel.setStr((short) 69); sel.setDex((short) 69); sel.setInt((short) 69); sel.setLuk((short) 69); sel.setHp((short) 69); sel.setMp((short) 69); sel.setWatk((short) 69); sel.setMatk((short) 69); sel.setWdef((short) 69); sel.setMdef((short) 69); sel.setAcc((short) 69); sel.setAvoid((short) 69); sel.setHands((short) 69); sel.setSpeed((short) 69); sel.setJump((short) 69); sel.setUpgradeSlots((byte) 69); sel.setViciousHammer((byte) 69); sel.setEnhance((byte) 69); this.c.getPlayer().equipChanged(); this.c.getPlayer().fakeRelog(); } public void changeStat(byte slot, int type, int amount) { Equip sel = (Equip) this.c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((short) slot); switch (type) { case 0: sel.setStr((short) amount); break; case 1: sel.setDex((short) amount); break; case 2: sel.setInt((short) amount); break; case 3: sel.setLuk((short) amount); break; case 4: sel.setHp((short) amount); break; case 5: sel.setMp((short) amount); break; case 6: sel.setWatk((short) amount); break; case 7: sel.setMatk((short) amount); break; case 8: sel.setWdef((short) amount); break; case 9: sel.setMdef((short) amount); break; case 10: sel.setAcc((short) amount); break; case 11: sel.setAvoid((short) amount); break; case 12: sel.setHands((short) amount); break; case 13: sel.setSpeed((short) amount); break; case 14: sel.setJump((short) amount); break; case 15: sel.setUpgradeSlots((byte) amount); break; case 16: sel.setViciousHammer((byte) amount); break; case 17: sel.setLevel((byte) amount); break; case 18: sel.setEnhance((byte) amount); break; case 19: sel.setPotential1(amount); break; case 20: sel.setPotential2(amount); break; case 21: sel.setPotential3(amount); break; case 22: sel.setPotential4(amount); break; case 23: sel.setPotential5(amount); break; case 24: sel.setOwner(getText()); break; } this.c.getPlayer().equipChanged(); this.c.getPlayer().fakeRelog(); } public void openDuey() { this.c.getPlayer().setConversation(2); this.c.getSession().write(CField.sendDuey((byte) 9, null)); } public void openMerchantItemStore() { this.c.getPlayer().setConversation(3); HiredMerchantHandler.displayMerch(this.c); this.c.getSession().write(CWvsContext.enableActions()); } public void sendPVPWindow() { this.c.getSession().write(CField.UIPacket.openUI(50)); this.c.getSession().write(CField.sendPVPMaps()); } public void sendAzwanWindow() { this.c.getSession().write(CField.UIPacket.openUI(70)); } public void sendRepairWindow() { this.c.getSession().write(CField.UIPacket.sendRepairWindow(this.id)); } public void sendRedLeaf() { this.c.getSession().write(CField.UIPacket.sendRedLeaf(this.id)); } public void sendProfessionWindow() { this.c.getSession().write(CField.UIPacket.openUI(42)); } public final int getDojoPoints() { return dojo_getPts(); } public final int getDojoRecord() { return this.c.getPlayer().getIntNoRecord(150101); } public void setDojoRecord(boolean reset) { if (reset) { this.c.getPlayer().getQuestNAdd(MapleQuest.getInstance(150101)).setCustomData("0"); this.c.getPlayer().getQuestNAdd(MapleQuest.getInstance(150100)).setCustomData("0"); } else { this.c.getPlayer().getQuestNAdd(MapleQuest.getInstance(150101)).setCustomData(String.valueOf(this.c.getPlayer().getIntRecord(150101) + 1)); } } public boolean start_DojoAgent(boolean dojo, boolean party) { if (dojo) { return Event_DojoAgent.warpStartDojo(this.c.getPlayer(), party); } return Event_DojoAgent.warpStartAgent(this.c.getPlayer(), party); } public boolean start_PyramidSubway(int pyramid) { if (pyramid >= 0) { return Event_PyramidSubway.warpStartPyramid(this.c.getPlayer(), pyramid); } return Event_PyramidSubway.warpStartSubway(this.c.getPlayer()); } public boolean bonus_PyramidSubway(int pyramid) { if (pyramid >= 0) { return Event_PyramidSubway.warpBonusPyramid(this.c.getPlayer(), pyramid); } return Event_PyramidSubway.warpBonusSubway(this.c.getPlayer()); } public final short getKegs() { return this.c.getChannelServer().getFireWorks().getKegsPercentage(); } public void giveKegs(int kegs) { this.c.getChannelServer().getFireWorks().giveKegs(this.c.getPlayer(), kegs); } public final short getSunshines() { return this.c.getChannelServer().getFireWorks().getSunsPercentage(); } public void addSunshines(int kegs) { this.c.getChannelServer().getFireWorks().giveSuns(this.c.getPlayer(), kegs); } public final short getDecorations() { return this.c.getChannelServer().getFireWorks().getDecsPercentage(); } public void addDecorations(int kegs) { try { this.c.getChannelServer().getFireWorks().giveDecs(this.c.getPlayer(), kegs); } catch (Exception e) { e.printStackTrace(); } } public final MapleCarnivalParty getCarnivalParty() { return this.c.getPlayer().getCarnivalParty(); } public final MapleCarnivalChallenge getNextCarnivalRequest() { return this.c.getPlayer().getNextCarnivalRequest(); } public final MapleCarnivalChallenge getCarnivalChallenge(MapleCharacter chr) { return new MapleCarnivalChallenge(chr); } public final int getChannel() { return this.channel; } public void warpMihile() { warpMap(104000000, 0); this.c.removeClickedNPC(); } public void maxStats() { Map statup = new EnumMap(MapleStat.class); this.c.getPlayer().getStat().str = 32767; this.c.getPlayer().getStat().dex = 32767; this.c.getPlayer().getStat().int_ = 32767; this.c.getPlayer().getStat().luk = 32767; int overrDemon = GameConstants.isDemon(this.c.getPlayer().getJob()) ? GameConstants.getMPByJob(this.c.getPlayer().getJob()) : 99999; this.c.getPlayer().getStat().maxhp = 500000; this.c.getPlayer().getStat().maxmp = overrDemon; this.c.getPlayer().getStat().setHp(500000, this.c.getPlayer()); this.c.getPlayer().getStat().setMp(overrDemon, this.c.getPlayer()); statup.put(MapleStat.STR, Integer.valueOf(32767)); statup.put(MapleStat.DEX, Integer.valueOf(32767)); statup.put(MapleStat.LUK, Integer.valueOf(32767)); statup.put(MapleStat.INT, Integer.valueOf(32767)); statup.put(MapleStat.HP, Integer.valueOf(500000)); statup.put(MapleStat.MAXHP, Integer.valueOf(500000)); statup.put(MapleStat.MP, Integer.valueOf(overrDemon)); statup.put(MapleStat.MAXMP, Integer.valueOf(overrDemon)); this.c.getPlayer().getStat().recalcLocalStats(this.c.getPlayer()); } public int setAndroid(int args) { if (args < 30000) { this.c.getPlayer().getAndroid().setFace(args); this.c.getPlayer().getAndroid().saveToDb(); } else { this.c.getPlayer().getAndroid().setHair(args); this.c.getPlayer().getAndroid().saveToDb(); } this.c.getPlayer().equipChanged(); return 1; } public int getAndroidStat(String type) { if (type.equals("HAIR")) { return this.c.getPlayer().getAndroid().getHair(); } if (type.equals("FACE")) { return this.c.getPlayer().getAndroid().getFace(); } if (type.equals("GENDER")) { int itemid = this.c.getPlayer().getAndroid().getItemId(); if ((itemid == 1662000) || (itemid == 1662002)) { return 0; } return 1; } return -1; } public void reloadChar() { getPlayer().getClient().getSession().write(CField.getCharInfo(getPlayer())); getPlayer().getMap().removePlayer(getPlayer()); getPlayer().getMap().addPlayer(getPlayer()); final Map<Skill, SkillEntry> skills = getPlayer().getSkills(); getPlayer().getClient().getSession().write(CWvsContext.updateSkills(skills)); } public void askAndroid(String text, int[] args) { if (this.lastMsg > -1) { return; } this.c.getSession().write(CField.NPCPacket.getAndroidTalkStyle(this.id, text, args)); this.lastMsg = 10; } public MapleCharacter getChar() { return getPlayer(); } public static int editEquipById(MapleCharacter chr, int max, int itemid, String stat, int newval) { return editEquipById(chr, max, itemid, stat, (short) newval); } public static int editEquipById(MapleCharacter chr, int max, int itemid, String stat, short newval) { if (!MapleItemInformationProvider.getInstance().isEquip(itemid)) { return -1; } List<Item> equips = chr.getInventory(MapleInventoryType.EQUIP).listById(itemid); List<Item> equipped = chr.getInventory(MapleInventoryType.EQUIPPED).listById(itemid); if ((equips.size() == 0) && (equipped.size() == 0)) { return 0; } int edited = 0; for (Item itm : equips) { Equip e = (Equip) itm; if (edited >= max) { break; } edited++; if (stat.equals("str")) { e.setStr(newval); } else if (stat.equals("dex")) { e.setDex(newval); } else if (stat.equals("int")) { e.setInt(newval); } else if (stat.equals("luk")) { e.setLuk(newval); } else if (stat.equals("watk")) { e.setWatk(newval); } else if (stat.equals("matk")) { e.setMatk(newval); } else { return -2; } } for (Item itm : equipped) { Equip e = (Equip) itm; if (edited >= max) { break; } edited++; if (stat.equals("str")) { e.setStr(newval); } else if (stat.equals("dex")) { e.setDex(newval); } else if (stat.equals("int")) { e.setInt(newval); } else if (stat.equals("luk")) { e.setLuk(newval); } else if (stat.equals("watk")) { e.setWatk(newval); } else if (stat.equals("matk")) { e.setMatk(newval); } else { return -2; } } return edited; } public int getReborns() { return getPlayer().getReborns(); } public Triple<String, Map<Integer, String>, Long> getSpeedRun(String typ) { ExpeditionType type = ExpeditionType.valueOf(typ); if (SpeedRunner.getSpeedRunData(type) != null) { return SpeedRunner.getSpeedRunData(type); } return new Triple("", new HashMap(), Long.valueOf(0L)); } public boolean getSR(Triple<String, Map<Integer, String>, Long> ma, int sel) { if ((((Map) ma.mid).get(Integer.valueOf(sel)) == null) || (((String) ((Map) ma.mid).get(Integer.valueOf(sel))).length() <= 0)) { dispose(); return false; } sendOk((String) ((Map) ma.mid).get(Integer.valueOf(sel))); return true; } public Equip getEquip(int itemid) { return (Equip) MapleItemInformationProvider.getInstance().getEquipById(itemid); } public void setExpiration(Object statsSel, long expire) { if ((statsSel instanceof Equip)) { ((Equip) statsSel).setExpiration(System.currentTimeMillis() + expire * 24L * 60L * 60L * 1000L); } } public void setLock(Object statsSel) { if ((statsSel instanceof Equip)) { Equip eq = (Equip) statsSel; if (eq.getExpiration() == -1L) { eq.setFlag((short) (byte) (eq.getFlag() | ItemFlag.LOCK.getValue())); } else { eq.setFlag((short) (byte) (eq.getFlag() | ItemFlag.UNTRADEABLE.getValue())); } } } public boolean addFromDrop(Object statsSel) { if ((statsSel instanceof Item)) { Item it = (Item) statsSel; return (MapleInventoryManipulator.checkSpace(getClient(), it.getItemId(), it.getQuantity(), it.getOwner())) && (MapleInventoryManipulator.addFromDrop(getClient(), it, false)); } return false; } public int getVPoints() { return getPlayer().getVPoints(); } public void setVPoints(int fuck) { getPlayer().setVPoints(getPlayer().getVPoints() + fuck); } public boolean replaceItem(int slot, int invType, Object statsSel, int offset, String type) { return replaceItem(slot, invType, statsSel, offset, type, false); } public boolean replaceItem(int slot, int invType, Object statsSel, int offset, String type, boolean takeSlot) { MapleInventoryType inv = MapleInventoryType.getByType((byte) invType); if (inv == null) { return false; } Item item = getPlayer().getInventory(inv).getItem((short) (byte) slot); if ((item == null) || ((statsSel instanceof Item))) { item = (Item) statsSel; } if (offset > 0) { if (inv != MapleInventoryType.EQUIP) { return false; } Equip eq = (Equip) item; if (takeSlot) { if (eq.getUpgradeSlots() < 1) { return false; } eq.setUpgradeSlots((byte) (eq.getUpgradeSlots() - 1)); if (eq.getExpiration() == -1L) { eq.setFlag((short) (byte) (eq.getFlag() | ItemFlag.LOCK.getValue())); } else { eq.setFlag((short) (byte) (eq.getFlag() | ItemFlag.UNTRADEABLE.getValue())); } } if (type.equalsIgnoreCase("Slots")) { eq.setUpgradeSlots((byte) (eq.getUpgradeSlots() + offset)); eq.setViciousHammer((byte) (eq.getViciousHammer() + offset)); } else if (type.equalsIgnoreCase("Level")) { eq.setLevel((byte) (eq.getLevel() + offset)); } else if (type.equalsIgnoreCase("Hammer")) { eq.setViciousHammer((byte) (eq.getViciousHammer() + offset)); } else if (type.equalsIgnoreCase("STR")) { eq.setStr((short) (eq.getStr() + offset)); } else if (type.equalsIgnoreCase("DEX")) { eq.setDex((short) (eq.getDex() + offset)); } else if (type.equalsIgnoreCase("INT")) { eq.setInt((short) (eq.getInt() + offset)); } else if (type.equalsIgnoreCase("LUK")) { eq.setLuk((short) (eq.getLuk() + offset)); } else if (type.equalsIgnoreCase("HP")) { eq.setHp((short) (eq.getHp() + offset)); } else if (type.equalsIgnoreCase("MP")) { eq.setMp((short) (eq.getMp() + offset)); } else if (type.equalsIgnoreCase("WATK")) { eq.setWatk((short) (eq.getWatk() + offset)); } else if (type.equalsIgnoreCase("MATK")) { eq.setMatk((short) (eq.getMatk() + offset)); } else if (type.equalsIgnoreCase("WDEF")) { eq.setWdef((short) (eq.getWdef() + offset)); } else if (type.equalsIgnoreCase("MDEF")) { eq.setMdef((short) (eq.getMdef() + offset)); } else if (type.equalsIgnoreCase("ACC")) { eq.setAcc((short) (eq.getAcc() + offset)); } else if (type.equalsIgnoreCase("Avoid")) { eq.setAvoid((short) (eq.getAvoid() + offset)); } else if (type.equalsIgnoreCase("Hands")) { eq.setHands((short) (eq.getHands() + offset)); } else if (type.equalsIgnoreCase("Speed")) { eq.setSpeed((short) (eq.getSpeed() + offset)); } else if (type.equalsIgnoreCase("Jump")) { eq.setJump((short) (eq.getJump() + offset)); } else if (type.equalsIgnoreCase("ItemEXP")) { eq.setItemEXP(eq.getItemEXP() + offset); } else if (type.equalsIgnoreCase("Expiration")) { eq.setExpiration(eq.getExpiration() + offset); } else if (type.equalsIgnoreCase("Flag")) { eq.setFlag((short) (byte) (eq.getFlag() + offset)); } item = eq.copy(); } MapleInventoryManipulator.removeFromSlot(getClient(), inv, (short) slot, item.getQuantity(), false); return MapleInventoryManipulator.addFromDrop(getClient(), item, false); } public boolean replaceItem(int slot, int invType, Object statsSel, int upgradeSlots) { return replaceItem(slot, invType, statsSel, upgradeSlots, "Slots"); } public boolean isCash(int itemId) { return MapleItemInformationProvider.getInstance().isCash(itemId); } public int getTotalStat(int itemId) { return MapleItemInformationProvider.getInstance().getTotalStat((Equip) MapleItemInformationProvider.getInstance().getEquipById(itemId)); } public int getReqLevel(int itemId) { return MapleItemInformationProvider.getInstance().getReqLevel(itemId); } public MapleStatEffect getEffect(int buff) { return MapleItemInformationProvider.getInstance().getItemEffect(buff); } public void buffGuild(int buff, int duration, String msg) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); MapleStatEffect mse; if ((ii.getItemEffect(buff) != null) && (getPlayer().getGuildId() > 0)) { mse = ii.getItemEffect(buff); for (ChannelServer cserv : ChannelServer.getAllInstances()) { for (MapleCharacter chr : cserv.getPlayerStorage().getAllCharacters()) { if (chr.getGuildId() == getPlayer().getGuildId()) { mse.applyTo(chr, chr, true, null, duration); chr.dropMessage(5, new StringBuilder().append("Your guild has gotten a ").append(msg).append(" buff.").toString()); } } } } } public boolean createAlliance(String alliancename) { MapleParty pt = this.c.getPlayer().getParty(); MapleCharacter otherChar = this.c.getChannelServer().getPlayerStorage().getCharacterById(pt.getMemberByIndex(1).getId()); if ((otherChar == null) || (otherChar.getId() == this.c.getPlayer().getId())) { return false; } try { return World.Alliance.createAlliance(alliancename, this.c.getPlayer().getId(), otherChar.getId(), this.c.getPlayer().getGuildId(), otherChar.getGuildId()); } catch (Exception re) { re.printStackTrace(); } return false; } public boolean addCapacityToAlliance() { try { MapleGuild gs = World.Guild.getGuild(this.c.getPlayer().getGuildId()); if ((gs != null) && (this.c.getPlayer().getGuildRank() == 1) && (this.c.getPlayer().getAllianceRank() == 1) && (World.Alliance.getAllianceLeader(gs.getAllianceId()) == this.c.getPlayer().getId()) && (World.Alliance.changeAllianceCapacity(gs.getAllianceId()))) { gainMeso(-10000000); return true; } } catch (Exception re) { re.printStackTrace(); } return false; } public boolean disbandAlliance() { try { MapleGuild gs = World.Guild.getGuild(this.c.getPlayer().getGuildId()); if ((gs != null) && (this.c.getPlayer().getGuildRank() == 1) && (this.c.getPlayer().getAllianceRank() == 1) && (World.Alliance.getAllianceLeader(gs.getAllianceId()) == this.c.getPlayer().getId()) && (World.Alliance.disbandAlliance(gs.getAllianceId()))) { return true; } } catch (Exception re) { re.printStackTrace(); } return false; } public byte getLastMsg() { return this.lastMsg; } public final void setLastMsg(byte last) { this.lastMsg = last; } public void killAllMonsters(int mapid) { MapleMap map = this.c.getChannelServer().getMapFactory().getMap(mapid); map.killAllMonsters(false); } public void clearDrops() { MapleMap map = c.getPlayer().getMap(); double range = Double.POSITIVE_INFINITY; java.util.List<MapleMapObject> items = map.getMapObjectsInRange(c.getPlayer().getPosition(), range, Arrays.asList(MapleMapObjectType.ITEM)); for (MapleMapObject itemmo : items) { map.removeMapObject(itemmo); map.broadcastMessage(CField.removeItemFromMap(itemmo.getObjectId(), 0, c.getPlayer().getId())); } } public final boolean dropItem(int slot, int invType, int quantity) { MapleInventoryType inv = MapleInventoryType.getByType((byte) invType); if (inv == null) { return false; } return MapleInventoryManipulator.drop(this.c, inv, (short) slot, (short) quantity, true); } public String getPotStuff(int itemid, int pot) { return GameConstants.resolvePotentialID(itemid, pot); } public final List<Integer> getAllPotentialInfo() { List list = new ArrayList(MapleItemInformationProvider.getInstance().getAllPotentialInfo().keySet()); Collections.sort(list); return list; } public final List<Integer> getAllPotentialInfoSearch(String content) { List<Integer> list = new ArrayList<>(); for (Entry<Integer, List<StructItemOption>> i : MapleItemInformationProvider.getInstance().getAllPotentialInfo().entrySet()) { for (StructItemOption ii : i.getValue()) { if (ii.toString().contains(content)) { list.add(i.getKey()); } } } Collections.sort(list); return list; } public void MakeGMItem(byte slot, MapleCharacter player) { MapleInventory equip = player.getInventory(MapleInventoryType.EQUIP); Equip eu = (Equip) equip.getItem((short) slot); int item = equip.getItem((short) slot).getItemId(); short hand = eu.getHands(); byte level = eu.getLevel(); Equip nItem = new Equip(item, (short) slot, (byte) 0); nItem.setStr((short) 32767); nItem.setDex((short) 32767); nItem.setInt((short) 32767); nItem.setLuk((short) 32767); nItem.setUpgradeSlots((byte) 0); nItem.setHands(hand); nItem.setLevel(level); player.getInventory(MapleInventoryType.EQUIP).removeItem((short) slot); player.getInventory(MapleInventoryType.EQUIP).addFromDB(nItem); } public final void sendRPS() { this.c.getSession().write(CField.getRPSMode((byte) 8, -1, -1, -1)); } public final void setQuestRecord(Object ch, int questid, String data) { ((MapleCharacter) ch).getQuestNAdd(MapleQuest.getInstance(questid)).setCustomData(data); } public final void broadcastPacket(byte[] data) { getPlayerStorage().broadcastPacket(data); } public final PlayerStorage getPlayerStorage() { if (this.players == null) { this.players = new PlayerStorage(this.channel); } return this.players; } public final void doWeddingEffect(Object ch) { final MapleCharacter chr = (MapleCharacter) ch; final MapleCharacter player = getPlayer(); getMap().broadcastMessage(CWvsContext.yellowChat(new StringBuilder().append(player.getName()).append(", do you take ").append(chr.getName()).append(" as your wife and promise to stay beside her through all downtimes, crashes, and lags?").toString())); Timer.CloneTimer.getInstance().schedule(new Runnable() { public void run() { if ((chr == null) || (player == null)) { NPCConversationManager.this.warpMap(680000500, 0); } else { chr.getMap().broadcastMessage(CWvsContext.yellowChat(chr.getName() + ", do you take " + player.getName() + " as your husband and promise to stay beside him through all downtimes, crashes, and lags?")); } } }, 10000L); Timer.CloneTimer.getInstance().schedule(new Runnable() { public void run() { if ((chr == null) || (player == null)) { if (player != null) { NPCConversationManager.this.setQuestRecord(player, 160001, "3"); NPCConversationManager.this.setQuestRecord(player, 160002, "0"); } else if (chr != null) { NPCConversationManager.this.setQuestRecord(chr, 160001, "3"); NPCConversationManager.this.setQuestRecord(chr, 160002, "0"); } NPCConversationManager.this.warpMap(680000500, 0); } else { NPCConversationManager.this.setQuestRecord(player, 160001, "2"); NPCConversationManager.this.setQuestRecord(chr, 160001, "2"); NPCConversationManager.this.sendNPCText(player.getName() + " and " + chr.getName() + ", I wish you two all the best on your " + chr.getClient().getChannelServer().getServerName() + " journey together!", 9201002); chr.getMap().startExtendedMapEffect("You may now kiss the bride, " + player.getName() + "!", 5120006); if (chr.getGuildId() > 0) { World.Guild.guildPacket(chr.getGuildId(), CWvsContext.sendMarriage(false, chr.getName())); } if (chr.getFamilyId() > 0) { World.Family.familyPacket(chr.getFamilyId(), CWvsContext.sendMarriage(true, chr.getName()), chr.getId()); } if (player.getGuildId() > 0) { World.Guild.guildPacket(player.getGuildId(), CWvsContext.sendMarriage(false, player.getName())); } if (player.getFamilyId() > 0) { World.Family.familyPacket(player.getFamilyId(), CWvsContext.sendMarriage(true, chr.getName()), player.getId()); } } } }, 20000L); } public void putKey(int key, int type, int action) { getPlayer().changeKeybinding(key, (byte) type, action); getClient().getSession().write(CField.getKeymap(getPlayer().getKeyLayout())); } public void logDonator(String log, int previous_points) { StringBuilder logg = new StringBuilder(); logg.append(MapleCharacterUtil.makeMapleReadable(getPlayer().getName())); logg.append(" [CID: ").append(getPlayer().getId()).append("] "); logg.append(" [Account: ").append(MapleCharacterUtil.makeMapleReadable(getClient().getAccountName())).append("] "); logg.append(log); logg.append(new StringBuilder().append(" [Previous: ").append(previous_points).append("] [Now: ").append(getPlayer().getPoints()).append("]").toString()); try { Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO donorlog VALUES(DEFAULT, ?, ?, ?, ?, ?, ?, ?, ?)"); ps.setString(1, MapleCharacterUtil.makeMapleReadable(getClient().getAccountName())); ps.setInt(2, getClient().getAccID()); ps.setString(3, MapleCharacterUtil.makeMapleReadable(getPlayer().getName())); ps.setInt(4, getPlayer().getId()); ps.setString(5, log); ps.setString(6, FileoutputUtil.CurrentReadable_Time()); ps.setInt(7, previous_points); ps.setInt(8, getPlayer().getPoints()); ps.executeUpdate(); ps.close(); } catch (SQLException e) { e.printStackTrace(); } FileoutputUtil.log("Log_Donator.rtf", logg.toString()); } public void doRing(String name, int itemid) { PlayersHandler.DoRing(getClient(), name, itemid); } public int getNaturalStats(int itemid, String it) { Map eqStats = MapleItemInformationProvider.getInstance().getEquipStats(itemid); if ((eqStats != null) && (eqStats.containsKey(it))) { return ((Integer) eqStats.get(it)).intValue(); } return 0; } public boolean isEligibleName(String t) { return (MapleCharacterUtil.canCreateChar(t, getPlayer().isGM())) && ((!LoginInformationProvider.getInstance().isForbiddenName(t)) || (getPlayer().isGM())); } public String checkDrop(int mobId) { List ranks = MapleMonsterInformationProvider.getInstance().retrieveDrop(mobId); if ((ranks != null) && (ranks.size() > 0)) { int num = 0; int itemId = 0; int ch = 0; StringBuilder name = new StringBuilder(); for (int i = 0; i < ranks.size(); i++) { MonsterDropEntry de = (MonsterDropEntry) ranks.get(i); if ((de.chance > 0) && ((de.questid <= 0) || ((de.questid > 0) && (MapleQuest.getInstance(de.questid).getName().length() > 0)))) { itemId = de.itemId; if (num == 0) { name.append(new StringBuilder().append("Drops for #o").append(mobId).append("#\r\n").toString()); name.append("--------------------------------------\r\n"); } String namez = new StringBuilder().append("#z").append(itemId).append("#").toString(); if (itemId == 0) { itemId = 4031041; namez = new StringBuilder().append(de.Minimum * getClient().getChannelServer().getMesoRate()).append(" to ").append(de.Maximum * getClient().getChannelServer().getMesoRate()).append(" meso").toString(); } ch = de.chance * getClient().getChannelServer().getDropRate(); name.append(new StringBuilder().append(num + 1).append(") #v").append(itemId).append("#").append(namez).append(" - ").append(Integer.valueOf(ch >= 999999 ? 1000000 : ch).doubleValue() / 10000.0D).append("% chance. ").append((de.questid > 0) && (MapleQuest.getInstance(de.questid).getName().length() > 0) ? new StringBuilder().append("Requires quest ").append(MapleQuest.getInstance(de.questid).getName()).append(" to be started.").toString() : "").append("\r\n").toString()); num++; } } if (name.length() > 0) { return name.toString(); } } return "No drops was returned."; } public String getLeftPadded(String in, char padchar, int length) { return StringUtil.getLeftPaddedStr(in, padchar, length); } public void handleDivorce() { if (getPlayer().getMarriageId() <= 0) { sendNext("Please make sure you have a marriage."); return; } int chz = World.Find.findChannel(getPlayer().getMarriageId()); if (chz == -1) { try { Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("UPDATE queststatus SET customData = ? WHERE characterid = ? AND (quest = ? OR quest = ?)"); ps.setString(1, "0"); ps.setInt(2, getPlayer().getMarriageId()); ps.setInt(3, 160001); ps.setInt(4, 160002); ps.executeUpdate(); ps.close(); ps = con.prepareStatement("UPDATE characters SET marriageid = ? WHERE id = ?"); ps.setInt(1, 0); ps.setInt(2, getPlayer().getMarriageId()); ps.executeUpdate(); ps.close(); } catch (SQLException e) { outputFileError(e); return; } setQuestRecord(getPlayer(), 160001, "0"); setQuestRecord(getPlayer(), 160002, "0"); getPlayer().setMarriageId(0); sendNext("You have been successfully divorced..."); return; } if (chz < -1) { sendNext("Please make sure your partner is logged on."); return; } MapleCharacter cPlayer = ChannelServer.getInstance(chz).getPlayerStorage().getCharacterById(getPlayer().getMarriageId()); if (cPlayer != null) { cPlayer.dropMessage(1, "Your partner has divorced you."); cPlayer.setMarriageId(0); setQuestRecord(cPlayer, 160001, "0"); setQuestRecord(getPlayer(), 160001, "0"); setQuestRecord(cPlayer, 160002, "0"); setQuestRecord(getPlayer(), 160002, "0"); getPlayer().setMarriageId(0); sendNext("You have been successfully divorced..."); } else { sendNext("An error occurred..."); } } public String getReadableMillis(long startMillis, long endMillis) { return StringUtil.getReadableMillis(startMillis, endMillis); } public void sendUltimateExplorer() { getClient().getSession().write(CWvsContext.ultimateExplorer()); } public Triple<Integer, Integer, Integer> getCompensation() { Triple ret = null; try { PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("SELECT * FROM compensationlog_confirmed WHERE chrname LIKE ?"); ps.setString(1, getPlayer().getName()); ResultSet rs = ps.executeQuery(); if (rs.next()) { ret = new Triple(Integer.valueOf(rs.getInt("value")), Integer.valueOf(rs.getInt("taken")), Integer.valueOf(rs.getInt("donor"))); } rs.close(); ps.close(); return ret; } catch (SQLException e) { FileoutputUtil.outputFileError("Log_Script_Except.txt", e); } return ret; } public boolean deleteCompensation(int taken) { try { PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("UPDATE compensationlog_confirmed SET taken = ? WHERE chrname LIKE ?"); ps.setInt(1, taken); ps.setString(2, getPlayer().getName()); ps.executeUpdate(); ps.close(); return true; } catch (SQLException e) { FileoutputUtil.outputFileError("Log_Script_Except.txt", e); } return false; } public void gainAPS(int gain) { getPlayer().gainAPS(gain); } public void changeJobById(short job) { this.c.getPlayer().changeJob(job); } public int getJobId() { return getPlayer().getJob(); } public int getLevel() { return getPlayer().getLevel(); } public int getEquipId(byte slot) { MapleInventory equip = getPlayer().getInventory(MapleInventoryType.EQUIP); Equip eu = (Equip) equip.getItem((short) slot); return equip.getItem((short) slot).getItemId(); } public int getUseId(byte slot) { MapleInventory use = getPlayer().getInventory(MapleInventoryType.USE); return use.getItem((short) slot).getItemId(); } public int getSetupId(byte slot) { MapleInventory setup = getPlayer().getInventory(MapleInventoryType.SETUP); return setup.getItem((short) slot).getItemId(); } public int getCashId(byte slot) { MapleInventory cash = getPlayer().getInventory(MapleInventoryType.CASH); return cash.getItem((short) slot).getItemId(); } public int getETCId(byte slot) { MapleInventory etc = getPlayer().getInventory(MapleInventoryType.ETC); return etc.getItem((short) slot).getItemId(); } public String EquipList(MapleClient c) { StringBuilder str = new StringBuilder(); MapleInventory equip = c.getPlayer().getInventory(MapleInventoryType.EQUIP); List<String> stra = new LinkedList(); for (Item item : equip.list()) { stra.add(new StringBuilder().append("#L").append(item.getPosition()).append("##v").append(item.getItemId()).append("##l").toString()); } for (String strb : stra) { str.append(strb); } return str.toString(); } public String UseList(MapleClient c) { StringBuilder str = new StringBuilder(); MapleInventory use = c.getPlayer().getInventory(MapleInventoryType.USE); List<String> stra = new LinkedList(); for (Item item : use.list()) { stra.add(new StringBuilder().append("#L").append(item.getPosition()).append("##v").append(item.getItemId()).append("##l").toString()); } for (String strb : stra) { str.append(strb); } return str.toString(); } public String CashList(MapleClient c) { StringBuilder str = new StringBuilder(); MapleInventory cash = c.getPlayer().getInventory(MapleInventoryType.CASH); List<String> stra = new LinkedList(); for (Item item : cash.list()) { stra.add(new StringBuilder().append("#L").append(item.getPosition()).append("##v").append(item.getItemId()).append("##l").toString()); } for (String strb : stra) { str.append(strb); } return str.toString(); } public String ETCList(MapleClient c) { StringBuilder str = new StringBuilder(); MapleInventory etc = c.getPlayer().getInventory(MapleInventoryType.ETC); List<String> stra = new LinkedList(); for (Item item : etc.list()) { stra.add(new StringBuilder().append("#L").append(item.getPosition()).append("##v").append(item.getItemId()).append("##l").toString()); } for (String strb : stra) { str.append(strb); } return str.toString(); } public String SetupList(MapleClient c) { StringBuilder str = new StringBuilder(); MapleInventory setup = c.getPlayer().getInventory(MapleInventoryType.SETUP); List<String> stra = new LinkedList(); for (Item item : setup.list()) { stra.add(new StringBuilder().append("#L").append(item.getPosition()).append("##v").append(item.getItemId()).append("##l").toString()); } for (String strb : stra) { str.append(strb); } return str.toString(); } public String getJobName(int id) { return MapleCarnivalChallenge.getJobNameById(id); } public boolean isValidJob(int id) { return MapleCarnivalChallenge.getJobNameById(id) != null; } public String getJobNameById(int id) { return MapleCarnivalChallenge.getJobNameById(id); } public void test1(int a, int b, int c, int d) { getClient().getSession().write(CField.updateluminouscombo_black(a, b, c, d)); } }