NPCConversationManager.java
上传用户:gwt600
上传日期:2021-06-03
资源大小:704k
文件大小:77k
源码类别:

游戏

开发平台:

Java

  1. /*
  2. This file is part of the OdinMS Maple Story Server
  3. Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
  4. Matthias Butz <matze@odinms.de>
  5. Jan Christian Meyer <vimes@odinms.de>
  6. This program is free software: you can redistribute it and/or modify
  7. it under the terms of the GNU Affero General Public License version 3
  8. as published by the Free Software Foundation. You may not use, modify
  9. or distribute this program under any other version of the
  10. GNU Affero General Public License.
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU Affero General Public License for more details.
  15. You should have received a copy of the GNU Affero General Public License
  16. along with this program.  If not, see <http://www.gnu.org/licenses/>.
  17.  */
  18. package net.sf.odinms.scripting.npc;
  19. import java.awt.Point;
  20. import java.sql.*;
  21. import net.sf.odinms.database.*;
  22. import java.awt.Point;
  23. import net.sf.odinms.database.DatabaseConnection;
  24. import java.rmi.RemoteException;
  25. import java.sql.Connection;
  26. import java.sql.PreparedStatement;
  27. import java.sql.ResultSet;
  28. import net.sf.odinms.server.maps.FakeCharacter;
  29. import net.sf.odinms.server.MapleInventoryManipulator;
  30. import java.sql.SQLException;
  31. import java.util.Iterator;
  32. import net.sf.odinms.net.MaplePacket;
  33. import net.sf.odinms.client.MapleInventory;
  34. import net.sf.odinms.net.channel.ChannelServer;
  35. import net.sf.odinms.client.MapleBuffStat;
  36. import net.sf.odinms.net.world.MapleParty;
  37. import net.sf.odinms.server.maps.MapleMapFactory;
  38. import java.util.Arrays;
  39. import net.sf.odinms.server.maps.MapleMapObject;
  40. import net.sf.odinms.server.maps.MapleMapObjectType;
  41. import java.util.ArrayList;
  42. import java.util.Arrays;
  43. import java.util.Calendar;
  44. import java.util.LinkedList;
  45. import java.util.List;
  46. import net.sf.odinms.client.IItem;
  47. import net.sf.odinms.client.Item;
  48. import net.sf.odinms.client.MapleCharacter;
  49. import net.sf.odinms.client.MapleClient;
  50. import net.sf.odinms.client.MapleInventoryType;
  51. import net.sf.odinms.client.MapleJob;
  52. import net.sf.odinms.client.SkillFactory;
  53. import net.sf.odinms.scripting.AbstractPlayerInteraction;
  54. import net.sf.odinms.scripting.event.EventManager;
  55. import net.sf.odinms.server.MapleItemInformationProvider;
  56. import net.sf.odinms.server.MapleShopFactory;
  57. import net.sf.odinms.server.quest.MapleQuest;
  58. import net.sf.odinms.tools.MaplePacketCreator;
  59. import net.sf.odinms.client.MapleStat;
  60. import net.sf.odinms.net.world.guild.MapleGuild;
  61. import net.sf.odinms.server.MapleSquad;
  62. import net.sf.odinms.server.MapleSquadType;
  63. import net.sf.odinms.server.maps.MapleMap;
  64. import java.util.Map;
  65. import java.util.Map.Entry;
  66. import java.util.Random;
  67. import net.sf.odinms.client.Equip;
  68. import net.sf.odinms.client.ExpTable;
  69. import net.sf.odinms.client.ISkill;
  70. import net.sf.odinms.client.MapleKeyBinding;
  71. import net.sf.odinms.client.MaplePet;
  72. import net.sf.odinms.database.DatabaseConnection;
  73. import net.sf.odinms.net.channel.ChannelServer;
  74. import net.sf.odinms.net.world.MaplePartyCharacter;
  75. import net.sf.odinms.server.ClanHolder;
  76. import net.sf.odinms.server.MapleInventoryManipulator;
  77. import net.sf.odinms.server.MaplePortal;
  78. import net.sf.odinms.server.MapleStatEffect;
  79. import net.sf.odinms.server.TimerManager;
  80. import net.sf.odinms.server.life.MapleLifeFactory;
  81. import net.sf.odinms.server.life.MapleMonster;
  82. import net.sf.odinms.server.life.MapleMonsterStats;
  83. import net.sf.odinms.server.life.MapleNPC;
  84. import net.sf.odinms.server.maps.MapleMapObject;
  85. import net.sf.odinms.server.maps.MapleMapObjectType;
  86. import net.sf.odinms.tools.Pair;
  87. /**
  88.  *
  89.  * @author Matze
  90.  */
  91. public class NPCConversationManager extends AbstractPlayerInteraction {
  92.     private MapleClient c;
  93.     private int npc;
  94.     private String fileName = null;
  95.     private List<MaplePartyCharacter> otherParty;
  96.         private ChannelServer cserv;
  97.     private String getText;
  98.     private MapleCharacter chr;
  99.         public NPCConversationManager(MapleClient c, int npc) {
  100.         super(c);
  101.         this.c = c;
  102.         this.npc = npc;
  103.     }
  104.         public void giveClone() {
  105.             FakeCharacter fc = new FakeCharacter(c.getPlayer(), c.getPlayer().getId() + c.getPlayer().getFakeChars().size() + 1);
  106.                         c.getPlayer().addFakeChar(fc);
  107.         }
  108.          public void callGM(String Text) {
  109.                         for (ChannelServer cservs : ChannelServer.getAllInstances()) {
  110.                             for (MapleCharacter players : cservs.getPlayerStorage().getAllCharacters()) {
  111.                                 if (players.isGM()) {
  112.                                     players.getClient().getSession().write(MaplePacketCreator.serverNotice(6, c.getPlayer().getName() + " sent you a message : " + Text));
  113.                                 }
  114.                             }
  115.                         }
  116.                 }
  117.          public void openDuey() {
  118. c.getSession().write(MaplePacketCreator.sendDueyAction((byte) 8));
  119. }
  120.              public NPCConversationManager(MapleClient c, int npc, MapleCharacter chr) {
  121.         super(c);
  122.         this.c = c;
  123.         this.npc = npc;
  124.         this.chr = chr;
  125.     }
  126.              public String zakumSquadMembers(String Members) {
  127.         Connection con = DatabaseConnection.getConnection();
  128.         try {
  129.             PreparedStatement ps = con.prepareStatement(Members);
  130.             ps.executeUpdate();
  131.             ps.close();
  132.         } catch (SQLException se) {
  133.             return "" + se;
  134.         }
  135.         return "Member was added succefully";
  136.     }
  137.                  public int getCharQuantity(int ismap) {
  138. MapleMap map = c.getChannelServer().getMapFactory().getMap(ismap) ;
  139. double range = Double.POSITIVE_INFINITY;
  140. List<MapleMapObject> players = map.getMapObjectsInRange(c.getPlayer().getPosition (), range, Arrays.asList(MapleMapObjectType.PLAYER));
  141. return players.size();
  142. }
  143.                      public void closePortal(int mapid, String pName) {
  144.         getClient().getChannelServer().getMapFactory().getMap(mapid).getPortal(pName).setPortalState(false);
  145.     }
  146.                          public void openPortal(int mapid, String pName) {
  147.         getClient().getChannelServer().getMapFactory().getMap(mapid).getPortal(pName).setPortalState(true);
  148.     }
  149.                              public void closeDoor(int mapid) {
  150.         getClient().getChannelServer().getMapFactory().getMap(mapid).setReactorState();
  151.     }
  152.                                  public void openDoor(int mapid) {
  153.         getClient().getChannelServer().getMapFactory().getMap(mapid).resetReactors();
  154.     }
  155.                                      public boolean isPartyAllHere() {
  156.         int num = 0;
  157.         int myparty = 0;
  158.         while (getPlayer().getParty().getMembers().iterator().hasNext()) {
  159.             MaplePartyCharacter curChar = getPlayer().getParty().getMembers().iterator().next();
  160.             if (curChar.isOnline()) {
  161.                 num += 1;
  162.             }
  163.         }
  164.         while (getPlayer().getMap().getCharacters().iterator().hasNext()) {
  165.             MapleCharacter curChar2 = getPlayer().getMap().getCharacters().iterator().next();
  166.             if (curChar2.getParty() == getPlayer().getParty()) {
  167.                 myparty += 1;
  168.             }
  169.         }
  170.         if (num == myparty) {
  171.             return true;
  172.         } else {
  173.             return false;
  174.         }
  175.     }
  176.     public void warpPartyWithExp(int mapId, int exp) {
  177.         MapleMap target = getMap(mapId);
  178.         for (MaplePartyCharacter chr : getPlayer().getParty().getMembers()) {
  179.             MapleCharacter curChar = c.getChannelServer().getPlayerStorage().getCharacterByName(chr.getName());
  180.             if ((curChar.getEventInstance() == null && c.getPlayer().getEventInstance() == null) || curChar.getEventInstance() == getPlayer().getEventInstance()) {
  181.                 curChar.changeMap(target, target.getPortal(0));
  182.                 curChar.gainExp(exp, true, false, true);
  183.             }
  184.         }
  185.     }
  186.         public void warpPartyWithExpMeso(int mapId, int exp, int meso) {
  187.         MapleMap target = getMap(mapId);
  188.         for (MaplePartyCharacter chr : getPlayer().getParty().getMembers()) {
  189.             MapleCharacter curChar = c.getChannelServer().getPlayerStorage().getCharacterByName(chr.getName());
  190.             if ((curChar.getEventInstance() == null && c.getPlayer().getEventInstance() == null) || curChar.getEventInstance() == getPlayer().getEventInstance()) {
  191.                 curChar.changeMap(target, target.getPortal(0));
  192.                 curChar.gainExp(exp, true, false, true);
  193.                 curChar.gainMeso(meso, true);
  194.             }
  195.         }
  196.     }
  197.             public void giveWonkyBuff(MapleCharacter chr) {
  198.         long what = Math.round(Math.random() * 4);
  199.         int what1 = (int) what;
  200.         int Buffs[] = {2022090, 2022091, 2022092, 2022093};
  201.         int buffToGive = Buffs[what1];
  202.         MapleItemInformationProvider mii = MapleItemInformationProvider.getInstance();
  203.         MapleStatEffect statEffect = mii.getItemEffect(buffToGive);
  204.         //for (MapleMapObject mmo =  this.getParty()) {
  205.         MapleCharacter character = (MapleCharacter) chr;
  206.         statEffect.applyTo(character);
  207.     //}
  208.     }
  209.                 public void WarpTo(String player) {
  210.         MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(player);
  211.         MapleMap target = victim.getMap();
  212.         c.getPlayer().changeMap(target, target.findClosestSpawnpoint(victim.getPosition()));
  213.     }
  214.                     public void resetStats() {
  215.         List<Pair<MapleStat, Integer>> statup = new ArrayList<Pair<MapleStat, Integer>>(5);
  216.         int totAp = getPlayer().getRemainingAp() + getPlayer().getStr() + getPlayer().getDex() + getPlayer().getInt() + getPlayer().getLuk();
  217.         getPlayer().setStr(4);
  218.         getPlayer().setDex(4);
  219.         getPlayer().setInt(4);
  220.         getPlayer().setLuk(4);
  221.         getPlayer().setRemainingAp(totAp - 16);
  222.         statup.add(new Pair<MapleStat, Integer>(MapleStat.STR, Integer.valueOf(4)));
  223.         statup.add(new Pair<MapleStat, Integer>(MapleStat.DEX, Integer.valueOf(4)));
  224.         statup.add(new Pair<MapleStat, Integer>(MapleStat.LUK, Integer.valueOf(4)));
  225.         statup.add(new Pair<MapleStat, Integer>(MapleStat.INT, Integer.valueOf(4)));
  226.         statup.add(new Pair<MapleStat, Integer>(MapleStat.AVAILABLEAP, Integer.valueOf(getPlayer().getRemainingAp())));
  227.         getPlayer().getClient().getSession().write(MaplePacketCreator.updatePlayerStats(statup));
  228.     }
  229.                         public void changeSex() {
  230.         getPlayer().setGender(1 - getPlayer().getGender());
  231.         getClient().getSession().write(MaplePacketCreator.updateCharLook(getPlayer()));
  232.     }
  233.                             public boolean eventOn() {
  234.         return getPlayer().getClient().getChannelServer().eventOn;
  235.     }
  236.                                 public void doEvent() {
  237.         if (eventOn()) {
  238.             this.warp(getPlayer().getClient().getChannelServer().eventMap);
  239.             getClient().getSession().write(MaplePacketCreator.serverNotice(5, "You have been warped to the event map!"));
  240.         }
  241.     }
  242.                                     public int getPetLevel() {
  243.         for (MaplePet pet : getPlayer().getPets()) {
  244.             return pet.getLevel();
  245.         }
  246.         return 0;
  247.     }
  248.                                         public int getFullness() {
  249.         for (MaplePet pet : getPlayer().getPets()) {
  250.             return pet.getFullness();
  251.         }
  252.         return 0;
  253.     }
  254.     public String getPetName() {
  255.         for (MaplePet pet : getPlayer().getPets()) {
  256.             return pet.getName();
  257.         }
  258.         return "";
  259.     }
  260.     public void setPetName(String petname) {
  261.         for (MaplePet pet : getPlayer().getPets()) {
  262.             pet.setName(petname);
  263.         }
  264.     }
  265.     public ChannelServer getChannelServer() {
  266.         return cserv;
  267.     }
  268.     public void startQuest(int id, MapleClient cg) {
  269.         MapleQuest.getInstance(id).start(cg.getPlayer(), npc);
  270.     }
  271.     public void completeQuest(int id, MapleClient cg) {
  272.         MapleQuest.getInstance(id).complete(cg.getPlayer(), npc);
  273.     }
  274.     public void modifyNx(int amount) {
  275.         getPlayer().modifyCSPoints(1, amount);
  276.         if (amount > 0) {
  277.             getPlayer().dropMessage(5, "You have gained " + amount + " NX points.");
  278.         } else {
  279.             getPlayer().dropMessage(5, "You have lost " + amount + " NX points.");
  280.         }
  281.     }
  282.         public void voteMSG(){
  283.             sendOk("你好啊!");
  284.         }
  285.         public int getJobId(){
  286.             return getJob().getId();
  287.         }
  288.             public void ZreHylvl() {
  289.         MapleGuild.ZreHylvl(getClient(), npc);
  290.     }
  291.     public void ZreHyfame() {
  292.         MapleGuild.ZreHyfame(getClient(), npc);
  293.     }
  294.    public void gainvip(int amount) {
  295.     getPlayer().gainvip(amount);
  296.     MaplePacket packet = MaplePacketCreator.serverNotice(6, "[VIP升级公告]" + getPlayer().getName() + "成为本服的正式VIP会员,它的等级为:[" + getPlayer().getVip() + "]会员.");
  297.    }
  298.        public void makeVip() {
  299.     getPlayer().makeVip();
  300.   }
  301.          public void makeVip2()
  302.   {
  303.     getPlayer().makeVip2();
  304.   }
  305.   public void makeVip3() {
  306.     getPlayer().makeVip3();
  307.   }
  308.   public void makeVip4() {
  309.     getPlayer().makeVip4();
  310.   }
  311.     public void unVip() {
  312.     getPlayer().unVip();
  313.   }
  314.     
  315.        public MapleJob getJobName(int id) {
  316.         return MapleJob.getById(id);
  317.     }
  318.          public void charNotice(String Text) {
  319.         getPlayer().getClient().getSession().write(MaplePacketCreator.serverNotice(6, Text));
  320.     }
  321.             public void spawnMonster(int mobid, String name, int HP, int MP, int level, int EXP, int boss, int undead, int amount, int x, int y) {
  322.     int i;
  323.     MapleMonsterStats newStats = new MapleMonsterStats();
  324.     Point spawnPos = new Point(x, y);
  325.     if (!(name.equals("0")))
  326.       newStats.setName(name);
  327.     if (HP >= 0)
  328.       newStats.setHp(HP);
  329.     if (MP >= 0)
  330.       newStats.setMp(MP);
  331.     if (level >= 0)
  332.       newStats.setLevel(level);
  333.     if (EXP >= 0)
  334.       newStats.setExp(EXP);
  335.     if (boss == 1)
  336.       newStats.setBoss(true);
  337.     if (undead == 1)
  338.       newStats.setUndead(true);
  339.     if (amount == 1) {
  340.       MapleMonster npcmob = MapleLifeFactory.getMonster(mobid);
  341.       npcmob.setOverrideStats(newStats);
  342.       npcmob.setHp(npcmob.getMaxHp());
  343.       npcmob.setMp(npcmob.getMaxMp());
  344.       getPlayer().getMap().spawnMonsterOnGroundBelow(npcmob, spawnPos);
  345.     } else {
  346.       for (i = 0; i < amount; ++i) {
  347.         MapleMonster npcmob = MapleLifeFactory.getMonster(mobid);
  348.         npcmob.setOverrideStats(newStats);
  349.         npcmob.setHp(npcmob.getMaxHp());
  350.         npcmob.setMp(npcmob.getMaxMp());
  351.         getPlayer().getMap().spawnMonsterOnGroundBelow(npcmob, spawnPos);
  352.       }
  353.     }
  354.   }
  355.     public String getRankings(String job) {
  356.         try {
  357.             int int1 = 0;
  358.             int int2 = 0;
  359.             Connection con = DatabaseConnection.getConnection();
  360.             PreparedStatement ps = con.prepareStatement("SELECT * FROM characters WHERE job >= ? AND job <= ? AND gm = 0 ORDER BY level,reborns DESC LIMIT 10");
  361.             if (job.equals("warrior")) {
  362.                 int1 = 100;
  363.                 int2 = 132;
  364.             } else if (job.equals("magician")) {
  365.                 int1 = 200;
  366.                 int2 = 232;
  367.             } else if (job.equals("bowman")) {
  368.                 int1 = 300;
  369.                 int2 = 322;
  370.             } else if (job.equals("thief")) {
  371.                 int1 = 400;
  372.                 int2 = 422;
  373.             } else if (job.equals("pirate")) {
  374.                 int1 = 500;
  375.                 int2 = 522;
  376.             } else if (job.equals("beginner")) {
  377.                 int1 = 0;
  378.                 int2 = 0;
  379.             } else if (job.equals("me")) {
  380.                 PreparedStatement ps2 = con.prepareStatement("SELECT name FROM characters ORDER BY level,reborns DESC");
  381.                 ResultSet rs = ps2.executeQuery();
  382.                 int i = 0;
  383.                 int lol = 0;
  384.                 while (rs.next()) {
  385.                     i++;
  386.                     if (rs.getString("name").equals(c.getPlayer().getName())) {
  387.                         lol = i;
  388.                         break;
  389.                     }
  390.                 }
  391.                 rs.close();
  392.                 ps2.close();
  393.                 ps.close();
  394.                 return ("Your current rank is: " + lol);
  395.             } else {
  396.                 ps.close();
  397.                 return "";
  398.             }
  399.             ps.setInt(1, int1);
  400.             ps.setInt(2, int2);
  401.             ResultSet rs = ps.executeQuery();
  402.             int i = 0;
  403.             StringBuffer buf = new StringBuffer();
  404.             buf.append("");
  405.             while (rs.next()) {
  406.                 i++;
  407.                 buf.append(i + ") " + rs.getString("name") + ", level: " + rs.getInt("level") + ", reborns: " + rs.getInt("reborns") + "rn");
  408.             }
  409.             rs.close();
  410.             ps.close();
  411.             return buf.toString();
  412.         } catch (SQLException e) {
  413.             return "管理员脚本";
  414.         }
  415.             }
  416.     public void ZreHymeso() {
  417.         MapleGuild.ZreHymeso(getClient(), npc);
  418.     }
  419.      public void ZreHyzs() {
  420.         MapleGuild.ZreHyzs(getClient(), npc);
  421.     }
  422.     public void ZreHypvpkills() {
  423.         MapleGuild.ZreHypvpkills(getClient(), npc);
  424.     }
  425.     public void ZreHypvpdeaths() {
  426.         MapleGuild.ZreHypvpdeaths(getClient(), npc);
  427.     }
  428.     public void forfeitQuest(int id, MapleClient cg) {
  429.         MapleQuest.getInstance(id).forfeit(cg.getPlayer());
  430.     }
  431.     @Override
  432.     public MapleParty getParty() {
  433.         return getPlayer().getParty();
  434.     }
  435.     @Override
  436.     public void changeMusic(String songName) {
  437.         getPlayer().getMap().broadcastMessage(MaplePacketCreator.musicChange(songName));
  438.     }
  439.     public void levelUp() {
  440.         getPlayer().levelUp();
  441.         int newexp = getPlayer().getExp();
  442.         if (newexp < 0) {
  443.             getPlayer().gainExp(-newexp, false, false);
  444.         }
  445.     }
  446.     public void setAP(int AP) {
  447.         getPlayer().setRemainingAp(AP);
  448.         getPlayer().updateSingleStat(MapleStat.AVAILABLEAP, Integer.valueOf(AP));
  449.     }
  450.     public void gainAP(int g) {
  451.         getPlayer().setRemainingAp(g + getPlayer().getRemainingAp());
  452.         getPlayer().updateSingleStat(MapleStat.AVAILABLEAP, Integer.valueOf(g + getPlayer().getRemainingAp()));
  453.     }
  454.     public void setStr(int str) {
  455.         getPlayer().setStr(str);
  456.         getPlayer().updateSingleStat(MapleStat.STR, Integer.valueOf(str));
  457.     }
  458.     public void setDex(int dex) {
  459.         getPlayer().setDex(dex);
  460.         getPlayer().updateSingleStat(MapleStat.DEX, Integer.valueOf(dex));
  461.     }
  462.     public void setInt(int inte) {
  463.         getPlayer().setInt(inte);
  464.         getPlayer().updateSingleStat(MapleStat.INT, Integer.valueOf(inte));
  465.     }
  466.     public void setLuk(int luk) {
  467.         getPlayer().setLuk(luk);
  468.         getPlayer().updateSingleStat(MapleStat.LUK, Integer.valueOf(luk));
  469.     }
  470.     public boolean isPartyLeader() {
  471.         return getPlayer().isPartyLeader();
  472.     }
  473.     public void setFame(int fame) {
  474.         getPlayer().setFame(fame);
  475.         getPlayer().updateSingleStat(MapleStat.FAME, Integer.valueOf(fame));
  476.     }
  477.     public void setExp(int exp) {
  478.         getPlayer().updateSingleStat(MapleStat.EXP, Integer.valueOf(exp));
  479.     }
  480.     public void resetMap(int mapid) {
  481.         ChannelServer cserv = getClient().getChannelServer();
  482.         MapleMap map = cserv.getMapFactory().getMap(mapid);
  483.         map.resetReactors();
  484.     }
  485.     public void environmentChange(String env, int mode) {
  486.         getPlayer().getMap().broadcastMessage(MaplePacketCreator.environmentChange(env, mode));
  487.     }
  488.     public int getCharsOnMap() {
  489.         return getPlayer().getMap().getCharacters().size();
  490.     }
  491.     public int getHour() {
  492.         Calendar cal = Calendar.getInstance();
  493.         int hour = cal.get(Calendar.HOUR_OF_DAY);
  494.         return hour;
  495.     }
  496.     public int getMin() {
  497.         Calendar cal = Calendar.getInstance();
  498.         int min = cal.get(Calendar.MINUTE);
  499.         return min;
  500.     }
  501.     public int getSec() {
  502.         Calendar cal = Calendar.getInstance();
  503.         int sec = cal.get(Calendar.SECOND);
  504.         return sec;
  505.     }
  506.     public void giveBuff(int buff, int level) {
  507.         SkillFactory.getSkill(buff).getEffect(level).applyTo(getPlayer());
  508.     }
  509.     public int getDay() {
  510.         Calendar cal = Calendar.getInstance();
  511.         int day = cal.get(Calendar.DAY_OF_WEEK);
  512.         return day;
  513.     }
  514.     public int getDonatorPoints() {
  515.         return getPlayer().getDonatorPoints();
  516.     }
  517.     public void gainDonatorPoints(int gain) {
  518.         getPlayer().gainDonatorPoints(gain);
  519.     }
  520.         public void setGMLevel(int l) {
  521.         getPlayer().setGMLevel(l);
  522.     }
  523.             public void reloadChar() {
  524.         getPlayer().getClient().getSession().write(MaplePacketCreator.getCharInfo(getPlayer()));
  525.         getPlayer().getMap().removePlayer(getPlayer());
  526.         getPlayer().getMap().addPlayer(getPlayer());
  527.     }
  528.                 public boolean isMorphed() {
  529.         boolean morph = false;
  530.         Integer morphed = getPlayer().getBuffedValue(MapleBuffStat.MORPH);
  531.         if (morphed != null) {
  532.             morph = true;
  533.         }
  534.         return morph;
  535.     }
  536.                     public int getMorphValue() { // 1= mushroom, 2= pig, 3= alien, 4= cornian, 5= arab retard
  537.         try {
  538.             int morphid = getPlayer().getBuffedValue(MapleBuffStat.MORPH).intValue();
  539.             return morphid;
  540.         } catch (NullPointerException n) {
  541.             return -1;
  542.         }
  543.     }
  544.                         public MapleSquad getSquad(MapleSquadType Type) {
  545.         return c.getChannelServer().getMapleSquad(Type);
  546.     }
  547.                             public void setHp(int hp) {
  548.         c.getPlayer().setHp(hp);
  549.     }
  550.                                 public void setMp(int mp) {
  551.         c.getPlayer().setMp(mp);
  552.     }
  553.                                     public void killPlayer() {
  554.         c.getPlayer().setHp(0);
  555.     }
  556.                                         public void addHp(int hp) {
  557.         c.getPlayer().addHP(hp);
  558.     }
  559.                                             public void addMp(int mp) {
  560.         c.getPlayer().addMP(mp);
  561.     }
  562.                                             public boolean flwBTitem(int id, int hardcore) {
  563.         MapleItemInformationProvider ii =
  564. MapleItemInformationProvider.getInstance();
  565.         IItem item = ii.getEquipById(id);
  566.         MapleInventoryType type = ii.getInventoryType(id);
  567.         if (type.equals(MapleInventoryType.EQUIP)) {
  568.             MapleInventoryManipulator.addFromDrop(c, ii.hardcoreItem((Equip)
  569. item, (short) hardcore));
  570.                      return true;
  571.         } else {
  572.             return false;
  573.         }
  574.     }
  575.                                                 public void addCloseness(int increase) {
  576.         MaplePet pet = c.getPlayer().getPet(0);
  577.         if (pet.getCloseness() < 30000) {
  578.             int newCloseness = pet.getCloseness() + increase;
  579.             if (newCloseness > 30000) {
  580.                 newCloseness = 30000;
  581.             }
  582.             pet.setCloseness(newCloseness);
  583.             if (newCloseness >= ExpTable.getClosenessNeededForLevel(pet.getLevel() + 1)) {
  584.                 pet.setLevel(pet.getLevel() + 1);
  585.                 c.getSession().write(MaplePacketCreator.showPetLevelUp(c.getPlayer(), 0));
  586.             }
  587.             c.getSession().write(MaplePacketCreator.updatePet(pet, true));
  588.         }
  589.     }
  590.                                                     public int countReactor() {
  591.         List<MapleMapObject> reactors = c.getPlayer().getMap().getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.REACTOR));
  592.         return reactors.size();
  593.     }
  594.     public void giveNPCBuff(MapleCharacter chr, int itemID) {
  595.         MapleItemInformationProvider mii = MapleItemInformationProvider.getInstance();
  596.         MapleStatEffect statEffect = mii.getItemEffect(itemID);
  597.         statEffect.applyTo(chr);
  598.     }
  599.     public int getjuankuan() {
  600.         return getPlayer().getjuankuan();
  601.     }
  602.     public int getDropmeso() {
  603.         return getPlayer().getDropmeso();
  604.     }
  605.     public int getPvpKills() {
  606.         return getPlayer().getPvpKills();
  607.     }
  608.     public int getPvpDeaths() {
  609.         return getPlayer().getPvpDeaths();
  610.     }
  611.     public void MapleMSlvl() {
  612.         MapleGuild.MapleMSlvl(getClient(), npc);
  613.     }
  614.     public void MapleMSfame() {
  615.         MapleGuild.MapleMSfame(getClient(), npc);
  616.     } public void MapleMSmeso() {
  617.         MapleGuild.MapleMSmeso(getClient(), npc);
  618.     }
  619.      public void MapleMSzs() {
  620.         MapleGuild.MapleMSzs(getClient(), npc);
  621.     }
  622.      public void MapleMSjk() {
  623.         MapleGuild.MapleMSjk(getClient(), npc);
  624.     }
  625.     public void MapleMSpvpkills() {
  626.         MapleGuild.MapleMSpvpkills(getClient(), npc);
  627.     } public void MapleMSpvpdeaths() {
  628.         MapleGuild.MapleMSpvpdeaths(getClient(), npc);
  629.     }
  630.     public void setSP(int SP) {
  631.         getPlayer().setRemainingSp(SP);
  632.         getPlayer().updateSingleStat(MapleStat.AVAILABLESP, Integer.valueOf(SP));
  633.     }
  634.     public NPCConversationManager(MapleClient c, int npc, MapleCharacter chr, String fileName) {
  635.         super(c);
  636.         this.c = c;
  637.         this.npc = npc;
  638.         this.chr = chr;
  639.         this.fileName = fileName;
  640.     }
  641.     public void dispose() {
  642.         NPCScriptManager.getInstance().dispose(this);
  643.     }
  644.     public void sendNext(String text) {
  645.         getClient().getSession().write(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "00 01"));
  646.     }
  647.     public void sendPrev(String text) {
  648.         getClient().getSession().write(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "01 00"));
  649.     }
  650.     public void sendNextPrev(String text) {
  651.         getClient().getSession().write(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "01 01"));
  652.     }
  653.     public void sendOk(String text) {
  654.         getClient().getSession().write(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "00 00"));
  655.     }
  656.     public void sendYesNo(String text) {
  657.         getClient().getSession().write(MaplePacketCreator.getNPCTalk(npc, (byte) 1, text, ""));
  658.     }
  659.     public void sendAcceptDecline(String text) {
  660.         getClient().getSession().write(MaplePacketCreator.getNPCTalk(npc, (byte) 0x0C, text, ""));
  661.     }
  662.     public void sendSimple(String text) {
  663.         getClient().getSession().write(MaplePacketCreator.getNPCTalk(npc, (byte) 4, text, ""));
  664.     }
  665.     public void sendStyle(String text, int styles[]) {
  666.         getClient().getSession().write(MaplePacketCreator.getNPCTalkStyle(npc, text, styles));
  667.     }
  668.     public void sendGetNumber(String text, int def, int min, int max) {
  669.         getClient().getSession().write(MaplePacketCreator.getNPCTalkNum(npc, text, def, min, max));
  670.     }
  671.     public void sendGetText(String text) {
  672.         getClient().getSession().write(MaplePacketCreator.getNPCTalkText(npc, text));
  673.     }
  674.     public void setGetText(String text) {
  675.         this.getText = text;
  676.     }
  677.     public String getText() {
  678.         return this.getText;
  679.     }
  680.     public void openShop(int id) {
  681.         MapleShopFactory.getInstance().getShop(id).sendShop(getClient());
  682.     }
  683.     @Override
  684.     public void openNpc(int id) {
  685.         dispose();
  686.         NPCScriptManager.getInstance().start(getClient(), id, null, null);
  687.     }
  688.     public void changeJob(MapleJob job) {
  689.         getPlayer().changeJob(job);
  690.     }
  691.     public MapleJob getJob() {
  692.         return getPlayer().getJob();
  693.     }
  694.     public void startQuest(int id) {
  695.         MapleQuest.getInstance(id).start(getPlayer(), npc);
  696.     }
  697.     public void completeQuest(int id) {
  698.         MapleQuest.getInstance(id).complete(getPlayer(), npc);
  699.     }
  700.     public void forfeitQuest(int id) {
  701.         MapleQuest.getInstance(id).forfeit(getPlayer());
  702.     }
  703.     public int getpaypalNX() {
  704.         return getPlayer().getpaypalNX();
  705.     }
  706.     /**
  707.      * use getPlayer().getMeso() instead
  708.      * @return
  709.      */
  710.     @Deprecated
  711.     public int getMeso() {
  712.         return getPlayer().getMeso();
  713.     }
  714.     public int getmPoints() {
  715.         return getPlayer().getmPoints();
  716.     }
  717.     public void gainMeso(int gain) {
  718.         getPlayer().gainMeso(gain, true, false, true);
  719.     }
  720.     public void gainExp(int gain) {
  721.         getPlayer().gainExp(gain, true, true);
  722.     }
  723.     public void gainup(int gain) {
  724.         getPlayer().levelUp();
  725.         int newexp = getPlayer().getExp();
  726.         if (newexp < 0) {
  727.             getPlayer().gainExp(-newexp, false, false);
  728.     }
  729.             }
  730.     public int getNpc() {
  731.         return npc;
  732.     }
  733.     public String getFileName() {
  734.         return fileName;
  735.     }
  736.     /**
  737.      * use getPlayer().getLevel() instead
  738.      * @return
  739.      */
  740.     @Deprecated
  741.     public int getLevel() {
  742.         return getPlayer().getLevel();
  743.     }
  744.     public void unequipEverything() {
  745.         getPlayer().unequipEverything();
  746.     }
  747.     public void teachSkill(int id, int level, int masterlevel) {
  748.         getPlayer().changeSkillLevel(SkillFactory.getSkill(id), level, masterlevel);
  749.     }
  750.     public void clearSkills() {
  751.         Map<ISkill, MapleCharacter.SkillEntry> skills = getPlayer().getSkills();
  752.         for (Entry<ISkill, MapleCharacter.SkillEntry> skill : skills.entrySet()) {
  753.             getPlayer().changeSkillLevel(skill.getKey(), 0, 0);
  754.         }
  755.     }
  756.     /**
  757.      * Use getPlayer() instead (for consistency with MapleClient)
  758.      * @return
  759.      */
  760.     @Deprecated
  761.     public MapleCharacter getChar() {
  762.         return getPlayer();
  763.     }
  764.     public MapleClient getC() {
  765.         return getClient();
  766.     }
  767.     public void rechargeStars() {
  768.         MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
  769.         IItem stars = getChar().getInventory(MapleInventoryType.USE).getItem((byte) 1);
  770.         if (ii.isThrowingStar(stars.getItemId()) || ii.isBullet(stars.getItemId())) {
  771.             stars.setQuantity(ii.getSlotMax(getClient(), stars.getItemId()));
  772.             getC().getSession().write(MaplePacketCreator.updateInventorySlot(MapleInventoryType.USE, (Item) stars));
  773.         }
  774.     }
  775.     public EventManager getEventManager(String event) {
  776.         return getClient().getChannelServer().getEventSM().getEventManager(event);
  777.     }
  778.     public void showEffect(String effect) {
  779.         getPlayer().getMap().broadcastMessage(MaplePacketCreator.showEffect(effect));
  780.     }
  781.     public void playSound(String sound) {
  782.         getPlayer().getMap().broadcastMessage(MaplePacketCreator.playSound(sound));
  783.     }
  784.     @Override
  785.     public String toString() {
  786.         return "Conversation with NPC: " + npc;
  787.     }
  788.     public void updateBuddyCapacity(int capacity) {
  789.         getPlayer().setBuddyCapacity(capacity);
  790.     }
  791.     public int getBuddyCapacity() {
  792.         return getPlayer().getBuddyCapacity();
  793.     }
  794.     public void setHair(int hair) {
  795.         getPlayer().setHair(hair);
  796.         getPlayer().updateSingleStat(MapleStat.HAIR, hair);
  797.         getPlayer().equipChanged();
  798.     }
  799.     public void setFace(int face) {
  800.         getPlayer().setFace(face);
  801.         getPlayer().updateSingleStat(MapleStat.FACE, face);
  802.         getPlayer().equipChanged();
  803.     }
  804.     @SuppressWarnings("static-access")
  805.     public void setSkin(int color) {
  806.         getPlayer().setSkinColor(c.getPlayer().getSkinColor().getById(color));
  807.         getPlayer().updateSingleStat(MapleStat.SKIN, color);
  808.         getPlayer().equipChanged();
  809.     }
  810.     public void warpParty(int mapId) {
  811.         warpParty(mapId, 0, 0);
  812.     }
  813.     public void warpParty(int mapId, int exp, int meso) {
  814.         for (MaplePartyCharacter chr_ : getPlayer().getParty().getMembers()) {
  815.             MapleCharacter curChar = c.getChannelServer().getPlayerStorage().getCharacterByName(chr_.getName());
  816.             if ((curChar.getEventInstance() == null && c.getPlayer().getEventInstance() == null) || curChar.getEventInstance() == getPlayer().getEventInstance()) {
  817.                 curChar.changeMap(mapId);
  818.                 if (exp > 0) {
  819.                     curChar.gainExp(exp, true, false, true);
  820.                 }
  821.                 if (meso > 0) {
  822.                     curChar.gainMeso(meso, true);
  823.                 }
  824.             }
  825.         }
  826.     }
  827.     public void warpRandom(int mapid) {
  828.         MapleMap target = c.getChannelServer().getMapFactory().getMap(mapid);
  829.         Random rand = new Random();
  830.         MaplePortal portal = target.getPortal(rand.nextInt(target.getPortals().size())); //generate random portal
  831.         getPlayer().changeMap(target, portal);
  832.     }
  833.     public int itemQuantity(int itemid) {
  834.         int possesed = getPlayer().getItemQuantity(itemid, false);
  835.         return possesed;
  836.     }
  837.     public MapleSquad createMapleSquad(MapleSquadType type) {
  838.         MapleSquad squad = new MapleSquad(c.getChannel(), getPlayer());
  839.         if (getSquadState(type) == 0) {
  840.             c.getChannelServer().addMapleSquad(squad, type);
  841.         } else {
  842.             return null;
  843.         }
  844.         return squad;
  845.     }
  846.     public MapleCharacter getSquadMember(MapleSquadType type, int index) {
  847.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  848.         MapleCharacter ret = null;
  849.         if (squad != null) {
  850.             ret = squad.getMembers().get(index);
  851.         }
  852.         return ret;
  853.     }
  854.     public int getSquadState(MapleSquadType type) {
  855.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  856.         if (squad != null) {
  857.             return squad.getStatus();
  858.         } else {
  859.             return 0;
  860.         }
  861.     }
  862.     public void setSquadState(MapleSquadType type, int state) {
  863.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  864.         if (squad != null) {
  865.             squad.setStatus(state);
  866.         }
  867.     }
  868.     public boolean checkSquadLeader(MapleSquadType type) {
  869.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  870.         if (squad != null) {
  871.             if (squad.getLeader().getId() == getPlayer().getId()) {
  872.                 return true;
  873.             } else {
  874.                 return false;
  875.             }
  876.         } else {
  877.             return false;
  878.         }
  879.     }
  880.     public int getzb() {
  881.     int money = 0;
  882.     try {
  883.       int cid = getPlayer().getAccountID();
  884.       Connection con = DatabaseConnection.getConnection();
  885.       PreparedStatement limitCheck = con.prepareStatement("SELECT * FROM accounts WHERE id=" + cid + "");
  886.       ResultSet rs = limitCheck.executeQuery();
  887.       if (rs.next())
  888.       {
  889.         money = rs.getInt("money");
  890.       }
  891.       limitCheck.close();
  892.       rs.close();
  893.     } catch (SQLException ex) {
  894.     }
  895.     return money;
  896.  }
  897.     public void setzb(int slot) {
  898.     try {
  899.       int cid = getPlayer().getAccountID();
  900.       Connection con = DatabaseConnection.getConnection();
  901.       PreparedStatement ps = con.prepareStatement("UPDATE accounts SET money =money+ " + slot + " WHERE id = " + cid + "");
  902.       ps.executeUpdate();
  903.       ps.close(); } catch (SQLException ex) {
  904.     }
  905.   }
  906.     public void removeMapleSquad(MapleSquadType type) {
  907.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  908.         if (squad != null) {
  909.             if (squad.getLeader().getId() == getPlayer().getId()) {
  910.                 squad.clear();
  911.                 c.getChannelServer().removeMapleSquad(squad, type);
  912.             }
  913.         }
  914.     }
  915.     public int numSquadMembers(MapleSquadType type) {
  916.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  917.         int ret = 0;
  918.         if (squad != null) {
  919.             ret = squad.getSquadSize();
  920.         }
  921.         return ret;
  922.     }
  923.     public boolean isSquadMember(MapleSquadType type) {
  924.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  925.         boolean ret = false;
  926.         if (squad.containsMember(getPlayer())) {
  927.             ret = true;
  928.         }
  929.         return ret;
  930.     }
  931.     public void addSquadMember(MapleSquadType type) {
  932.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  933.         if (squad != null) {
  934.             squad.addMember(getPlayer());
  935.         }
  936.     }
  937.     public void removeSquadMember(MapleSquadType type, MapleCharacter chr, boolean ban) {
  938.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  939.         if (squad != null) {
  940.             squad.banMember(chr, ban);
  941.         }
  942.     }
  943.     public void removeSquadMember(MapleSquadType type, int index, boolean ban) {
  944.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  945.         if (squad != null) {
  946.             MapleCharacter chr = squad.getMembers().get(index);
  947.             squad.banMember(chr, ban);
  948.         }
  949.     }
  950.     public boolean canAddSquadMember(MapleSquadType type) {
  951.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  952.         if (squad != null) {
  953.             if (squad.isBanned(getPlayer())) {
  954.                 return false;
  955.             } else {
  956.                 return true;
  957.             }
  958.         }
  959.         return false;
  960.     }
  961.     public void warpSquadMembers(MapleSquadType type, int mapId) {
  962.         MapleSquad squad = c.getChannelServer().getMapleSquad(type);
  963.         MapleMap map = c.getChannelServer().getMapFactory().getMap(mapId);
  964.         if (squad != null) {
  965.             if (checkSquadLeader(type)) {
  966.                 for (MapleCharacter chr : squad.getMembers()) {
  967.                     chr.changeMap(map, map.getPortal(0));
  968.                 }
  969.             }
  970.         }
  971.     }
  972.     public String searchItem(String item) {
  973.         StringBuilder message = new StringBuilder("Choose the item you want:");
  974.         getPlayer().getMap().broadcastMessage(getPlayer(), MaplePacketCreator.showJobChange(getPlayer().getId()), false);
  975.         for (Pair<Integer, String> itemPair : MapleItemInformationProvider.getInstance().getAllItems()) {
  976.             if (itemPair.getRight().toLowerCase().contains(item.toLowerCase())) {
  977.                 message.append("rn#L" + itemPair.getLeft() + "##i" + itemPair.getLeft() + "# - #b" + itemPair.getRight() + "#k#l");
  978.             }
  979.         }
  980.         if (!message.toString().contains("#L")) {
  981.             return "没有找到此物品!";
  982.         }
  983.         return message.toString();
  984.     }
  985.     public int makeRing(String partner, int ringId) {
  986.         return makeRing(getCharByName(partner), ringId);
  987.     }
  988.     public int makeRing(MapleCharacter partner, int ringId) {
  989.         int ret = net.sf.odinms.client.MapleRing.createRing(ringId, getPlayer(), partner);
  990.         return ret;
  991.     }
  992.     public void resetReactors() {
  993.         getPlayer().getMap().resetReactors();
  994.     }
  995.     public void displayGuildRanks() {
  996.         MapleGuild.displayGuildRanks(getClient(), npc);
  997.     }
  998.     public boolean sendMessage(String recipient, String message) {
  999.         MapleCharacter chr_ = getCharByName(recipient);
  1000.         if (chr_ != null) {
  1001.             chr_.dropMessage(6, getPlayer().getName() + ": " + message);
  1002.             return true;
  1003.         }
  1004.         return false;
  1005.     }
  1006.     public void gainFame(int amount) {
  1007.         getPlayer().addFame(amount);
  1008.         if (amount > 0) {
  1009.             getPlayer().dropMessage(1, "你获得了 " + amount + " 点人气值.");
  1010.         } else {
  1011.             getPlayer().dropMessage(1, "你失去了 " + amount + " 点人气值.");
  1012.         }
  1013.     }
  1014.     public void maxSkills() {
  1015.         getPlayer().maxAllSkills();
  1016.     }
  1017.     public int getSkillLevel(int skillid) {
  1018.         int skilllevel = getPlayer().getSkillLevel(SkillFactory.getSkill(skillid));
  1019.         return skilllevel;
  1020.     }
  1021.     public int getVip() {
  1022.         return getPlayer().getVip();
  1023.     }
  1024.     public int getGm() {
  1025.         return getPlayer().getGm();
  1026.     }
  1027.     public void gainVip(int amount) {
  1028.         getPlayer().gainVip(amount);
  1029.         getPlayer().getClient().getSession().write(MaplePacketCreator.serverNotice(6, "你的VIP等级提升了:" + amount));
  1030.         getPlayer().getClient().getSession().write(MaplePacketCreator.serverNotice(6, "你现在的VIP等级为:" + getPlayer().getVip()));
  1031.     }
  1032.     public void setVip(int amount) {
  1033.         getPlayer().setVip(amount);
  1034.         getPlayer().getClient().getSession().write(MaplePacketCreator.serverNotice(6, "你现在的VIP等级为:" + getPlayer().getVip()));
  1035.     }
  1036.     public void giveBuff(int skillid) {
  1037.         MapleItemInformationProvider mii = MapleItemInformationProvider.getInstance();
  1038.         MapleStatEffect statEffect = mii.getItemEffect(skillid);
  1039.         statEffect.applyTo(getPlayer());
  1040.     }
  1041.     public int partyMembersInMap() {
  1042.         int inMap = 0;
  1043.         for (MapleCharacter char2 : getPlayer().getMap().getCharacters()) {
  1044.             if (char2.getParty() == getPlayer().getParty()) {
  1045.                 inMap++;
  1046.             }
  1047.         }
  1048.         return inMap;
  1049.     }
  1050.     public void modifyNX(int amount, int type) {
  1051.         getPlayer().modifyCSPoints(type, amount);
  1052.         if (amount > 0) {
  1053.             getClient().getSession().write(MaplePacketCreator.serverNotice(5, "你获得了点卷 (+" + amount + ")."));
  1054.         } else {
  1055.             getClient().getSession().write(MaplePacketCreator.serverNotice(5, "你失去了点卷 (" + (amount) + ")."));
  1056.         }
  1057.     }
  1058.     public void gainNX(int nxcash) {
  1059.         getPlayer().gainNX(nxcash);
  1060.     }
  1061.     public int getReborns() {
  1062.         return getPlayer().getReborns();
  1063.     }
  1064.     public void gainReborns(int amount) {
  1065.         getPlayer().gainReborns(amount);
  1066.         getPlayer().getClient().getSession().write(MaplePacketCreator.serverNotice(6, "恭喜你转生了:" + getPlayer().getReborns() + "次!"));
  1067.     }
  1068.     public void setReborns(int amount) {
  1069.         getPlayer().setReborns(amount);
  1070.         getPlayer().getClient().getSession().write(MaplePacketCreator.serverNotice(6, "你现在已经转生的次数为: " + amount));
  1071.     }
  1072.     public int getTime(String type) {
  1073.         Calendar cal = Calendar.getInstance();
  1074.         if (type.startsWith("d")) {
  1075.             return cal.get(Calendar.DAY_OF_WEEK);
  1076.         } else if (type.startsWith("h")) {
  1077.             return cal.get(Calendar.HOUR_OF_DAY);
  1078.         } else if (type.startsWith("m")) {
  1079.             return cal.get(Calendar.MINUTE);
  1080.         } else if (type.startsWith("s")) {
  1081.             return cal.get(Calendar.SECOND);
  1082.         }
  1083.         return -1; // wrong input
  1084.     }
  1085.     public void addBuddyCapacity(int capacity) {
  1086.         getPlayer().addBuddyCapacity(capacity);
  1087.     }
  1088.     public void clearKeys() {
  1089.         getPlayer().setDefaultKeyMap();
  1090.     }
  1091.     public void scheduleWarp(int delay, int mapid) {
  1092.         final int fmapid = mapid;
  1093.         TimerManager.getInstance().schedule(new Runnable() {
  1094.             public void run() {
  1095.                 getPlayer().changeMap(fmapid);
  1096.             }
  1097.         }, delay * 1000);
  1098.     }
  1099.     public void startClock(int limit, int endMap) {
  1100.         getPlayer().getMap().addMapTimer(limit, endMap);
  1101.     }
  1102.     public MapleCharacter getCharByName(String name) {
  1103.         try {
  1104.             return c.getChannelServer().getPlayerStorage().getCharacterByName(name);
  1105.         } catch (Exception e) {
  1106.             return null;
  1107.         }
  1108.     }
  1109.     public void warpAllInMap(int mapid) {
  1110.         warpAllInMap(mapid, 0);
  1111.     }
  1112.     public void warpAllInMap(int mapid, int portal) {
  1113.         for (MapleCharacter mch : getPlayer().getMap().getCharacters()) {
  1114.             if (mch.getEventInstance() != null) {
  1115.                 mch.getEventInstance().unregisterPlayer(mch);
  1116.             }
  1117.             mch.changeMap(mapid, portal);
  1118.         }
  1119.     }
  1120.         public boolean createMarriage(String partner_) {      //声明变量
  1121.         MapleCharacter partner = getCharByName(partner_);  //名字
  1122.         if (partner == null) {
  1123.             return false;
  1124.         }
  1125.         partner.setMarried(true);
  1126.         getPlayer().setMarried(true);
  1127.         partner.setPartnerId(getPlayer().getId());
  1128.         getPlayer().setPartnerId(partner.getId());
  1129.         if (partner.getGender() > 0) {
  1130.             Marriage.createMarriage(getPlayer(), partner);
  1131.         } else {
  1132.             Marriage.createMarriage(partner, getPlayer());
  1133.         }
  1134.         return true;
  1135.     }
  1136.     public boolean createEngagement(String partner_) {
  1137.         MapleCharacter partner = getCharByName(partner_);
  1138.         if (partner == null) {
  1139.             return false;
  1140.         }
  1141.         if (partner.getGender() > 0) {
  1142.             Marriage.createEngagement(getPlayer(), partner);
  1143.         } else {
  1144.             Marriage.createEngagement(partner, getPlayer());
  1145.         }
  1146.         return true;
  1147.     }
  1148.     public void divorceMarriage() {
  1149.         getPlayer().setPartnerId(0);
  1150.         getPlayer().setMarried(false);
  1151.         Marriage.divorceMarriage(getPlayer());
  1152.     }
  1153.     public void changeKeyBinding(int key, byte type, int action) {
  1154.         MapleKeyBinding newbinding = new MapleKeyBinding(type, action);
  1155.         getPlayer().changeKeybinding(key, newbinding);
  1156.     }
  1157.     public Equip getEquipById(int id) { // we can do getEquipById(2349823).setStr(545); etc.
  1158.         MapleInventoryType type = MapleItemInformationProvider.getInstance().getInventoryType(id);
  1159.         return (Equip) getPlayer().getInventory(type).findById(id);
  1160.     }
  1161.     public int getNpcTalkTimes() {
  1162.         return NPCScriptManager.getInstance().getNpcTalkTimes(getPlayer().getId(), npc);
  1163.     }
  1164.     public void setNpcTalkTimes(int amount) {
  1165.         NPCScriptManager.getInstance().setNpcTalkTimes(getPlayer().getId(), npc, amount);
  1166.     }
  1167.     public NPCConversationManager(MapleClient c, int npc, List<MaplePartyCharacter> otherParty, int b) {
  1168. super(c);
  1169. this.c = c;
  1170. this.npc = npc;
  1171. this.otherParty = otherParty;
  1172. }
  1173.     public int talkedTimesByNpc() {
  1174.         return NPCScriptManager.getInstance().talkedTimesByNpc(npc);
  1175.     }
  1176.     public boolean makeProItem(int id, int hardcore) {
  1177.         MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
  1178.         IItem item = ii.getEquipById(id);
  1179.         MapleInventoryType type = ii.getInventoryType(id);
  1180.         if (type.equals(MapleInventoryType.EQUIP)) {
  1181.             MapleInventoryManipulator.addFromDrop(c, ii.hardcoreItem((Equip) item, (short) hardcore));
  1182.             return true;
  1183.         } else {
  1184.             return false;
  1185.         }
  1186.     }
  1187.     public boolean isGuest() {
  1188.         if (c.isGuest()) {
  1189.             return true;
  1190.         }
  1191.         return false;
  1192.     }
  1193.     public void broadcastMessage(int type, String message) {
  1194.         try {
  1195.             getPlayer().getClient().getChannelServer().getWorldInterface().broadcastMessage(null, MaplePacketCreator.serverNotice(type, message).getBytes());
  1196.         } catch (RemoteException e) {
  1197.             c.getChannelServer().reconnectWorld();
  1198.         }
  1199.     }
  1200.     public void setClan(int set) {
  1201.         getPlayer().setClan(set);
  1202.         try {
  1203.             getPlayer().getClient().getChannelServer().getWorldInterface().broadcastToClan((getPlayer().getName() + " 进入了家族 ! 大家欢迎.").getBytes(), set);
  1204.         } catch (RemoteException e) {
  1205.             c.getChannelServer().reconnectWorld();
  1206.         }
  1207.         c.getChannelServer().addToClan(getPlayer());
  1208.     }
  1209.     public String getAllOnlineNamesFromClan(int set) {
  1210.         StringBuilder sb = new StringBuilder();
  1211.         for (MapleCharacter names : c.getChannelServer().getClanHolder().getAllOnlinePlayersFromClan(set)) {
  1212.             sb.append(names.getName() + "rn");
  1213.         }
  1214.         return sb.toString();
  1215.     }
  1216.     public String getAllOfflineNamesFromClan(int set) {
  1217.         StringBuilder sb = new StringBuilder();
  1218.         for (String names : c.getChannelServer().getClanHolder().getAllOfflinePlayersFromClan(set)) {
  1219.             sb.append(names + "rn");
  1220.         }
  1221.         return sb.toString();
  1222.     }
  1223.     public void superlaba(String Text)
  1224. {
  1225. if (Text.isEmpty())
  1226. {
  1227. chr.dropMessage("[注意]文字过长,不能发送,最长为20个字!");
  1228. return;
  1229. }
  1230. for (Iterator n$ = ChannelServer.getAllInstances().iterator(); n$.hasNext();)
  1231. {
  1232. ChannelServer cservs = (ChannelServer)n$.next();
  1233. Iterator i$ = cservs.getPlayerStorage().getAllCharacters().iterator();
  1234. while (i$.hasNext())
  1235. {
  1236. MapleCharacter players = (MapleCharacter)i$.next();
  1237. if (players.getGMLevel() < 10)
  1238. players.getClient().getSession().write(MaplePacketCreator.startMapEffect((new StringBuilder()).append("ら超级喇巴ら玩家[").append(c.getPlayer().getName()).append("] 吼道:").append(Text).toString(), 0x4e2006, true));
  1239. }
  1240. }
  1241. }
  1242.     public void superlaba(String Text, int idk)
  1243. {
  1244. if (Text.isEmpty())
  1245. {
  1246. chr.dropMessage("[注意]文字过长,不能发送,最长为20个字!");
  1247. return;
  1248. }
  1249. for (Iterator n$ = ChannelServer.getAllInstances().iterator(); n$.hasNext();)
  1250. {
  1251. ChannelServer cservs = (ChannelServer)n$.next();
  1252. Iterator i$ = cservs.getPlayerStorage().getAllCharacters().iterator();
  1253. while (i$.hasNext())
  1254. {
  1255. MapleCharacter players = (MapleCharacter)i$.next();
  1256. if (players.getGMLevel() < 10)
  1257. players.getClient().getSession().write(MaplePacketCreator.startMapEffect((new StringBuilder()).append("ら超级喇巴ら玩家[").append(c.getPlayer().getName()).append("] 吼道:").append(Text).toString(), idk, true));
  1258. }
  1259. }
  1260. }
  1261.     public void setLevel(int level) {
  1262.         getPlayer().setLevel(level);
  1263.         getPlayer().updateSingleStat(MapleStat.LEVEL, Integer.valueOf(level));
  1264.     }
  1265.     public void summonMobid(int mobid) {
  1266.         getPlayer().getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(mobid), getPlayer().getPosition());
  1267.     }
  1268.     public void summonMobid2(int mobid) {
  1269.         getPlayer().getMap().spawnMonsterOnGroudBelow(MapleLifeFactory.getMonster(mobid), getNPCPosition());
  1270.     }
  1271.     public void summonMob(int mobid, int customHP, int customEXP, int amount) {
  1272.         MapleMonsterStats newStats = new MapleMonsterStats();
  1273.         if (customHP > 0) {
  1274.             newStats.setHp(customHP);
  1275.         }
  1276.         if (customEXP >= 0) {
  1277.             newStats.setExp(customEXP);
  1278.         }
  1279.         if (amount <= 1) {
  1280.             MapleMonster npcmob = MapleLifeFactory.getMonster(mobid);
  1281.             npcmob.setOverrideStats(newStats);
  1282.             npcmob.setHp(npcmob.getMaxHp());
  1283.             getPlayer().getMap().spawnMonsterOnGroudBelow(npcmob, getPlayer().getPosition());
  1284.         } else {
  1285.             for (int i = 0; i < amount; i++) {
  1286.                 MapleMonster npcmob = MapleLifeFactory.getMonster(mobid);
  1287.                 npcmob.setOverrideStats(newStats);
  1288.                 npcmob.setHp(npcmob.getMaxHp());
  1289.                 getPlayer().getMap().spawnMonsterOnGroudBelow(npcmob, getPlayer().getPosition());
  1290.             }
  1291.         }
  1292.     }
  1293.             public void spawnMonster(int id, int hp, int mp,int level,int exp, int qty) {
  1294.                 MapleMonsterStats overrideStats = new MapleMonsterStats();
  1295. overrideStats.setHp(hp);
  1296.                 overrideStats.setMp(mp);
  1297.                 overrideStats.setLevel(level);
  1298. overrideStats.setExp(exp);
  1299.                 MapleMonster mob = MapleLifeFactory.getMonster(id);
  1300.                 mob.setOverrideStats(overrideStats);
  1301.                 spawnMonster(id,qty,mob);
  1302. }
  1303.                     public void spawnMonster(int id, int qty, int hp,int exp) {
  1304.                 MapleMonsterStats overrideStats = new MapleMonsterStats();
  1305. overrideStats.setHp(hp);
  1306. overrideStats.setExp(exp);
  1307.                 MapleMonster mob = MapleLifeFactory.getMonster(id);
  1308.                 mob.setOverrideStats(overrideStats);
  1309.                 spawnMonster(id,qty,mob);
  1310. }
  1311.                            private void spawnMonster(int id, int qty,MapleMonster mob ) {
  1312. for (int i = 0; i < qty; i++) {
  1313. mob = MapleLifeFactory.getMonster(id);
  1314. getPlayer().getMap().spawnMonsterOnGroudBelow(mob, getPosition());
  1315. }
  1316. }
  1317.     public void spawnMonster(int mobid, int HP, int MP, int level, int EXP, int boss, int undead, int amount, int x, int y) {
  1318.         MapleMonsterStats newStats = new MapleMonsterStats();
  1319.         Point spawnPos = new Point(x, y);
  1320.         if (HP >= 0) {
  1321.             newStats.setHp(HP);
  1322.         }
  1323.         if (MP >= 0) {
  1324.             newStats.setMp(MP);
  1325.         }
  1326.         if (level >= 0) {
  1327.             newStats.setLevel(level);
  1328.         }
  1329.         if (EXP >= 0) {
  1330.             newStats.setExp(EXP);
  1331.         }
  1332.         if (boss == 1) {
  1333.             newStats.setBoss(true);
  1334.         }
  1335.         if (undead == 1) {
  1336.             newStats.setUndead(true);
  1337.         }
  1338.         for (int i = 0; i < amount; i++) {
  1339.             MapleMonster npcmob = MapleLifeFactory.getMonster(mobid);
  1340.             npcmob.setOverrideStats(newStats);
  1341.             npcmob.setHp(npcmob.getMaxHp());
  1342.             npcmob.setMp(npcmob.getMaxMp());
  1343.             getPlayer().getMap().spawnMonsterOnGroundBelow(npcmob, spawnPos);
  1344.         }
  1345.     }
  1346.     public void summonMobAtPosition(int mobid, int customHP, int customEXP, int amount, int posx, int posy) {
  1347.         MapleMonsterStats newStats = new MapleMonsterStats();
  1348.         if (customHP > 0) {
  1349.             newStats.setHp(customHP);
  1350.         }
  1351.         if (customEXP >= 0) {
  1352.             newStats.setExp(customEXP);
  1353.         }
  1354.         if (amount <= 1) {
  1355.             MapleMonster npcmob = MapleLifeFactory.getMonster(mobid);
  1356.             npcmob.setOverrideStats(newStats);
  1357.             npcmob.setHp(npcmob.getMaxHp());
  1358.             getPlayer().getMap().spawnMonsterOnGroudBelow(npcmob, new Point(posx, posy));
  1359.         } else {
  1360.             for (int i = 0; i < amount; i++) {
  1361.                 MapleMonster npcmob = MapleLifeFactory.getMonster(mobid);
  1362.                 npcmob.setOverrideStats(newStats);
  1363.                 npcmob.setHp(npcmob.getMaxHp());
  1364.                 getPlayer().getMap().spawnMonsterOnGroudBelow(npcmob, new Point(posx, posy));
  1365.             }
  1366.         }
  1367.     }
  1368.      private void spawnMonster(int id, int qty, Point pos) {
  1369. for (int i = 0; i < qty; i++) {
  1370. MapleMonster mob = MapleLifeFactory.getMonster(id);
  1371. getPlayer().getMap().spawnMonsterOnGroudBelow(mob, pos);
  1372. }
  1373. }
  1374.      public void spawnMonster(int id) {
  1375. spawnMonster(id, 1, getPosition());
  1376. }
  1377.          public void spawnMonster(int id, int qty) {
  1378. spawnMonster(id, qty, getPosition());
  1379. }
  1380.     public void spawnMob(int mapid, int mid, int xpos, int ypos) {
  1381.         ChannelServer cserv = getClient().getChannelServer();
  1382.         MapleMap map = cserv.getMapFactory().getMap(mapid);
  1383.         MapleMonster mob = MapleLifeFactory.getMonster(mid);
  1384.         Point spawnpoint = new Point(xpos, ypos);
  1385.         map.spawnMonsterOnGroudBelow(mob, spawnpoint);
  1386.     }
  1387.     public void summonMobAtPosition(int mobid, int amount, int posx, int posy) {
  1388.         if (amount <= 1) {
  1389.             MapleMonster npcmob = MapleLifeFactory.getMonster(mobid);
  1390.             npcmob.setHp(npcmob.getMaxHp());
  1391.             getPlayer().getMap().spawnMonsterOnGroudBelow(npcmob, new Point(posx, posy));
  1392.         } else {
  1393.             for (int i = 0; i < amount; i++) {
  1394.                 MapleMonster npcmob = MapleLifeFactory.getMonster(mobid);
  1395.                 npcmob.setHp(npcmob.getMaxHp());
  1396.                 getPlayer().getMap().spawnMonsterOnGroudBelow(npcmob, new Point(posx, posy));
  1397.             }
  1398.         }
  1399.     }
  1400.     public void killAllMobs() {
  1401.         MapleMap map = getPlayer().getMap();
  1402.         double range = Double.POSITIVE_INFINITY;
  1403.         List<MapleMapObject> monsters = map.getMapObjectsInRange(getPlayer().getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER));
  1404.         for (MapleMapObject monstermo : monsters) {
  1405.             MapleMonster monster = (MapleMonster) monstermo;
  1406.             map.killMonster(monster, getPlayer(), false);
  1407.         }
  1408.     }
  1409.     public int getOfflineClanCount(int clan) {
  1410.         return ClanHolder.countOfflineByClan(clan);
  1411.     }
  1412.     public int getOnlineClanCount(int clan) {
  1413.         try {
  1414.             return c.getChannelServer().getWorldInterface().onlineClanMembers(clan);
  1415.         } catch (RemoteException re) {
  1416.             c.getChannelServer().reconnectWorld();
  1417.         }
  1418.         return -1;
  1419.     }
  1420.     public String getJobById(int id) {
  1421.         return MapleJob.getJobName(id);
  1422.     }
  1423.     public List<MapleCharacter> getPartyMembers() {
  1424.         if (getPlayer().getParty() == null) {
  1425.             return null;
  1426.         }
  1427.         List<MapleCharacter> chars = new LinkedList<MapleCharacter>(); // creates an empty array full of shit..
  1428.         for (ChannelServer channel : ChannelServer.getAllInstances()) {
  1429.             for (MapleCharacter chr : channel.getPartyMembers(getPlayer().getParty())) {
  1430.                 if (chr != null) { // double check <3
  1431.                     chars.add(chr);
  1432.                 }
  1433.             }
  1434.         }
  1435.         return chars;
  1436.     }
  1437.     public MapleCharacter getSender() {
  1438.         return this.chr;
  1439.     }
  1440.     public void removeHiredMerchantItem(int id) {
  1441.         Connection con = DatabaseConnection.getConnection();
  1442.         try {
  1443.             PreparedStatement ps = con.prepareStatement("DELETE FROM hiredmerchant WHERE id = ?");
  1444.             ps.setInt(1, id);
  1445.             ps.executeUpdate();
  1446.             ps.close();
  1447.         } catch (SQLException se) {
  1448.         }
  1449.     }
  1450.     public int getHiredMerchantMesos() {
  1451.         Connection con = DatabaseConnection.getConnection();
  1452.         int mesos;
  1453.         try {
  1454.             PreparedStatement ps = con.prepareStatement("SELECT MerchantMesos FROM characters WHERE id = ?");
  1455.             ps.setInt(1, getPlayer().getId());
  1456.             ResultSet rs = ps.executeQuery();
  1457.             rs.next();
  1458.             mesos = rs.getInt("MerchantMesos");
  1459.             rs.close();
  1460.             ps.close();
  1461.         } catch (SQLException se) {
  1462.             return 0;
  1463.         }
  1464.         return mesos;
  1465.     }
  1466.     public void zeroMerchantMesos() {
  1467.         try {
  1468.             PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("UPDATE characters SET MerchantMesos = 0 WHERE id = ?");
  1469.             ps.setInt(1, getPlayer().getId());
  1470.             ps.executeUpdate();
  1471.             ps.close();
  1472.         } catch (Exception e) {
  1473.         }
  1474.     }
  1475.     public void setHiredMerchantMesos(int set) {
  1476.         Connection con = DatabaseConnection.getConnection();
  1477.         try {
  1478.             PreparedStatement ps = con.prepareStatement("UPDATE characters SET MerchantMesos = ? WHERE id = ?");
  1479.             ps.setInt(1, set);
  1480.             ps.setInt(2, getPlayer().getId());
  1481.             ps.executeUpdate();
  1482.             ps.close();
  1483.         } catch (SQLException se) {
  1484.         }
  1485.     }
  1486. public String getPvpRoom(int ismap, int sel) {
  1487. MapleMap map = c.getChannelServer().getMapFactory().getMap(ismap) ;
  1488. double range = Double.POSITIVE_INFINITY;
  1489. List<MapleMapObject> players = map.getMapObjectsInRange(c.getPlayer().getPosition (), range, Arrays.asList(MapleMapObjectType.PLAYER));
  1490. if (players.size() <= 0) {return "#L"+sel+"#"+sel+". #r创建一个房间#k#l";
  1491. } else if (players.size() == 1) {return "#L"+sel+"#"+sel+". #b进入等待房间#k#l";
  1492. } else if (players.size() >= 2) {return "#L"+sel+"#"+sel+". #d正在pk中k#l";
  1493. } else {return "";}
  1494. }
  1495. public void setluck(String bossid, int id)
  1496. {
  1497. Connection con1 = DatabaseConnection.getConnection();
  1498. try
  1499. {
  1500. PreparedStatement ps = con1.prepareStatement("insert into fslucklog (characterid, bossid,eventid) values (?,?)");
  1501. ps.setInt(1, getPlayer().getId());
  1502. ps.setString(2, bossid);
  1503. ps.setInt(3, id);
  1504. ps.executeUpdate();
  1505. ps.close();
  1506. }
  1507. catch (Exception Ex) { }
  1508. }
  1509. public int getluck(int id)
  1510. {
  1511. int money = 0;
  1512. try
  1513. {
  1514. Connection con = DatabaseConnection.getConnection();
  1515. int cid = getPlayer().getId();
  1516. PreparedStatement limitCheck = con.prepareStatement((new StringBuilder()).append("SELECT * FROM fslucklog WHERE characterid=").append(cid).append(" and eventid=").append(id).append("").toString());
  1517. ResultSet rs = limitCheck.executeQuery();
  1518. if (rs.next())
  1519. money = rs.getInt("bossid");
  1520. limitCheck.close();
  1521. rs.close();
  1522. }
  1523. catch (SQLException ex) { }
  1524. return money;
  1525. }
  1526. public void delluck(int id)
  1527. {
  1528. Connection con1 = DatabaseConnection.getConnection();
  1529. try
  1530. {
  1531. PreparedStatement ps = con1.prepareStatement("DELETE FROM fslucklog WHERE characterid = ? and eventid = ?");
  1532. ps.setInt(1, getPlayer().getId());
  1533. ps.setInt(2, id);
  1534. ps.executeUpdate();
  1535. ps.close();
  1536. }
  1537. catch (Exception Ex) { }
  1538. }
  1539. public int getnumluck(int id)
  1540. {
  1541. int money = 0;
  1542. try
  1543. {
  1544. Connection con = DatabaseConnection.getConnection();
  1545. PreparedStatement limitCheck = con.prepareStatement((new StringBuilder()).append("SELECT * FROM fsevent WHERE id=").append(id).append("").toString());
  1546. ResultSet rs = limitCheck.executeQuery();
  1547. if (rs.next())
  1548. money = rs.getInt("num");
  1549. limitCheck.close();
  1550. rs.close();
  1551. }
  1552. catch (SQLException ex) { }
  1553. return money;
  1554. }
  1555. public String equipList(int slot)
  1556. {
  1557. StringBuilder str = new StringBuilder();
  1558. MapleInventory equip = c.getPlayer().getInventory(MapleInventoryType.USE);
  1559. if (slot == 1)
  1560. equip = c.getPlayer().getInventory(MapleInventoryType.EQUIP);
  1561. else
  1562. if (slot == 2)
  1563. equip = c.getPlayer().getInventory(MapleInventoryType.ETC);
  1564. else
  1565. if (slot == 3)
  1566. equip = c.getPlayer().getInventory(MapleInventoryType.CASH);
  1567. java.util.List stra = new LinkedList();
  1568. IItem item;
  1569. for (Iterator i$ = equip.list().iterator(); i$.hasNext(); stra.add((new StringBuilder()).append("#L").append(item.getPosition()).append("##v").append(item.getItemId()).append("##l").toString()))
  1570. item = (IItem)i$.next();
  1571. String strb;
  1572. for (Iterator i$ = stra.iterator(); i$.hasNext(); str.append(strb))
  1573. strb = (String)i$.next();
  1574. return str.toString();
  1575. }
  1576.     public List<Pair<Integer, IItem>> getHiredMerchantItems() {
  1577.         Connection con = DatabaseConnection.getConnection();
  1578.         List<Pair<Integer, IItem>> items = new ArrayList<Pair<Integer, IItem>>();
  1579.         try {
  1580.             PreparedStatement ps = con.prepareStatement("SELECT * FROM hiredmerchant WHERE ownerid = ?");
  1581.             ps.setInt(1, getPlayer().getId());
  1582.             ResultSet rs = ps.executeQuery();
  1583.             while (rs.next()) {
  1584.                 if (rs.getInt("type") == 1) {
  1585.                     Equip eq = new Equip(rs.getInt("itemid"), (byte) 0, -1);
  1586.                     eq.setUpgradeSlots((byte) rs.getInt("upgradeslots"));
  1587.                     eq.setLevel((byte) rs.getInt("level"));
  1588.                     eq.setStr((short) rs.getInt("str"));
  1589.                     eq.setDex((short) rs.getInt("dex"));
  1590.                     eq.setInt((short) rs.getInt("int"));
  1591.                     eq.setLuk((short) rs.getInt("luk"));
  1592.                     eq.setHp((short) rs.getInt("hp"));
  1593.                     eq.setMp((short) rs.getInt("mp"));
  1594.                     eq.setWatk((short) rs.getInt("watk"));
  1595.                     eq.setMatk((short) rs.getInt("matk"));
  1596.                     eq.setWdef((short) rs.getInt("wdef"));
  1597.                     eq.setMdef((short) rs.getInt("mdef"));
  1598.                     eq.setAcc((short) rs.getInt("acc"));
  1599.                     eq.setAvoid((short) rs.getInt("avoid"));
  1600.                     eq.setHands((short) rs.getInt("hands"));
  1601.                     eq.setSpeed((short) rs.getInt("speed"));
  1602.                     eq.setJump((short) rs.getInt("jump"));
  1603.                     eq.setOwner(rs.getString("owner"));
  1604.                     items.add(new Pair<Integer, IItem>(rs.getInt("id"), eq));
  1605.                 } else if (rs.getInt("type") == 2) {
  1606.                     Item newItem = new Item(rs.getInt("itemid"), (byte) 0, (short) rs.getInt("quantity"));
  1607.                     newItem.setOwner(rs.getString("owner"));
  1608.                     items.add(new Pair<Integer, IItem>(rs.getInt("id"), newItem));
  1609.                 }
  1610.             }
  1611.             ps.close();
  1612.             rs.close();
  1613.         } catch (SQLException se) {
  1614.             se.printStackTrace();
  1615.             return null;
  1616.         }
  1617.         return items;
  1618.     }
  1619.     public void changeJobById(int a) {
  1620.         getPlayer().changeJob(MapleJob.getById(a));
  1621.     }
  1622.     public void gainCloseness(int closeness) {
  1623.         for (MaplePet pet : getPlayer().getPets()) {
  1624.             if (pet.getCloseness() < 30000 || pet.getLevel() < 30) {
  1625.                 if ((pet.getCloseness() + closeness) > 30000) {
  1626.                     pet.setCloseness(30000);
  1627.                 } else {
  1628.                     pet.setCloseness(pet.getCloseness() + closeness);
  1629.                 }
  1630.                 while (pet.getCloseness() > ExpTable.getClosenessNeededForLevel(pet.getLevel() + 1)) {
  1631.                     pet.setLevel(pet.getLevel() + 1);
  1632.                     getClient().getSession().write(MaplePacketCreator.showOwnPetLevelUp(getPlayer().getPetIndex(pet)));
  1633.                 }
  1634.                 getPlayer().getClient().getSession().write(MaplePacketCreator.updatePet(pet, true));
  1635.             }
  1636.         }
  1637.     }
  1638.     public void doReborn() {
  1639.         getPlayer().setReborns(getPlayer().getReborns() + 1);
  1640.         List<Pair<MapleStat, Integer>> reborn = new ArrayList<Pair<MapleStat, Integer>>(4);
  1641.         getPlayer().setLevel(1);
  1642.         getPlayer().setExp(0);
  1643.         getPlayer().setJob(MapleJob.BEGINNER);
  1644.         reborn.add(new Pair<MapleStat, Integer>(MapleStat.LEVEL, Integer.valueOf(1)));
  1645.         reborn.add(new Pair<MapleStat, Integer>(MapleStat.EXP, Integer.valueOf(0)));
  1646.         reborn.add(new Pair<MapleStat, Integer>(MapleStat.JOB, Integer.valueOf(0)));
  1647.         getPlayer().getClient().getSession().write(MaplePacketCreator.updatePlayerStats(reborn));
  1648.     }
  1649.     public Point getPosition() {
  1650.         return getPlayer().getPosition();
  1651.     }
  1652.     public Point getNPCPosition() {
  1653.         MapleNPC thenpc = MapleLifeFactory.getNPC(this.npc);
  1654.         return thenpc.getPosition();
  1655.     }
  1656.     public int getgxd()
  1657. {
  1658. int money = 0;
  1659. try
  1660. {
  1661. int cid = getPlayer().getAccountID();
  1662. Connection con = DatabaseConnection.getConnection();
  1663. PreparedStatement limitCheck = con.prepareStatement((new StringBuilder()).append("SELECT * FROM fsbtgy WHERE charid=").append(cid).append("").toString());
  1664. ResultSet rs = limitCheck.executeQuery();
  1665. if (rs.next())
  1666. money = rs.getInt("money");
  1667. limitCheck.close();
  1668. rs.close();
  1669. }
  1670. catch (SQLException ex) { }
  1671. return money;
  1672. }
  1673.     public void setgxd(int slot)
  1674. {
  1675. Connection con = DatabaseConnection.getConnection();
  1676. try
  1677. {
  1678. int cid = getPlayer().getAccountID();
  1679. PreparedStatement ps = con.prepareStatement((new StringBuilder()).append("UPDATE fsbtgy SET money =money+ ").append(slot).append(" WHERE charid = ").append(cid).append("").toString());
  1680. ps.executeUpdate();
  1681. ps.close();
  1682. }
  1683. catch (Exception Ex) { }
  1684. }
  1685.     public void addgxd(int cid)
  1686. {
  1687. try
  1688. {
  1689. int money = 0;
  1690. Connection con = DatabaseConnection.getConnection();
  1691. PreparedStatement ps = con.prepareStatement("select * from fsbtgy where charid=?");
  1692. ps.setInt(1, cid);
  1693. ResultSet rs = ps.executeQuery();
  1694. if (rs.next())
  1695. {
  1696. money = rs.getInt("money");
  1697. ps = con.prepareStatement((new StringBuilder()).append("UPDATE fsbtgy SET money =money+ ").append(money).append(" WHERE charid = ").append(cid).append("").toString());
  1698. ps.executeUpdate();
  1699. } else
  1700. {
  1701. ps = con.prepareStatement("insert into fsbtgy (charid,money) values (?,1)");
  1702. ps.setInt(1, cid);
  1703. ps.executeUpdate();
  1704. }
  1705. rs.close();
  1706. ps.close();
  1707. }
  1708. catch (SQLException ex) { }
  1709. }
  1710.         public void setgxded(String bossid)
  1711. {
  1712. Connection con1 = DatabaseConnection.getConnection();
  1713. try
  1714. {
  1715. PreparedStatement ps = con1.prepareStatement("insert into fsbtgyed (characterid, bossid) values (?,?)");
  1716. ps.setInt(1, getPlayer().getId());
  1717. ps.setString(2, bossid);
  1718. ps.executeUpdate();
  1719. ps.close();
  1720. }
  1721. catch (Exception Ex) { }
  1722. }
  1723. public int getgxded(String bossid)
  1724. {
  1725. Connection con1 = DatabaseConnection.getConnection();
  1726.                 try{
  1727. int ret_count;
  1728. ret_count = 0;
  1729. PreparedStatement ps = con1.prepareStatement("select count(*) from fsbtgyed where characterid = ? and bossid = ?");
  1730. ps.setInt(1, getPlayer().getId());
  1731. ps.setString(2, bossid);
  1732. ResultSet rs = ps.executeQuery();
  1733. if (rs.next())
  1734. ret_count = rs.getInt(1);
  1735. else
  1736. ret_count = -1;
  1737. rs.close();
  1738. ps.close();
  1739. return ret_count;
  1740. } catch (Exception Ex) { }
  1741. return -1;
  1742. }
  1743.     public String paiMing()
  1744.         {
  1745.             String result="";
  1746.         try {
  1747.             Connection con = DatabaseConnection.getConnection();
  1748.             PreparedStatement ps = con.prepareStatement("select * from characters order by rebirth desc limit 0, 10");
  1749.             ResultSet rs = ps.executeQuery();
  1750.             while(rs.next())
  1751.             {
  1752.                 result = result+rs.getString("name")+" 转生次数:"+rs.getInt("Reborns")+"rn";
  1753.             }
  1754.         } catch (SQLException ex) {
  1755.             return "";
  1756.         }
  1757.             return result;
  1758.         }
  1759.     public void giveItemBuff(int itemId) {
  1760.         getPlayer().setItemEffect(itemId);
  1761.     }
  1762.     public String getName() {
  1763.         return getPlayer().getName();
  1764.     }
  1765.     public int getGender() {
  1766.         return getPlayer().getGender();
  1767.     }
  1768.     public int countMonster() {
  1769.         return getPlayer().getMap().getMapObjectsInRange(getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER)).size();
  1770.     }
  1771.     public int getDayOfWeek() {
  1772.         return Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
  1773.     }
  1774.     //getBossLog
  1775.     public int getBossLog(String bossid) {
  1776.         return getPlayer().getBossLog(bossid);
  1777.     }
  1778.     public MapleCharacter getP() {
  1779. return getPlayer();
  1780. }
  1781. public void MakeGMItem (byte slot, MapleCharacter player) {
  1782. MapleInventory equip = player.getInventory(MapleInventoryType.EQUIP);
  1783. Equip eu = (Equip) equip.getItem(slot);
  1784. int item = equip.getItem(slot).getItemId();
  1785. MapleJob job = eu.getJob();
  1786. short hand = eu.getHands();
  1787. byte level = eu.getLevel();
  1788. Equip nItem = new Equip(item, equip.getNextFreeSlot());
  1789. nItem.setStr((short) 32000); // STR
  1790. nItem.setDex((short) 32000); // DEX
  1791. nItem.setInt((short) 32000); // INT
  1792. nItem.setLuk((short) 32000); //LUK
  1793. nItem.setHp((short) 32000); // HP
  1794. nItem.setMp((short) 32000); // MP
  1795. nItem.setWatk((short) 32000); //WATK
  1796. nItem.setMatk((short) 32000); //MATK
  1797. nItem.setWdef((short) 32000); //WDEF
  1798. nItem.setMdef((short) 32000); //MDEF
  1799. nItem.setAcc((short) 32000); // ACC
  1800. nItem.setAvoid((short) 32000); // AVOID
  1801. nItem.setSpeed((short) 40); // SPEED ( 140% is max speed )
  1802. nItem.setJump((short) 30); //JUMP ( 130% is max jump )
  1803. nItem.setUpgradeSlots((byte) 10); // 可升级次�?
  1804. nItem.setJob(job);
  1805. nItem.setHands(hand);
  1806. nItem.setLevel(level);
  1807. nItem.setRingId(-1);
  1808. player.getInventory(MapleInventoryType.EQUIP).addFromDB(nItem);
  1809. equip.removeItem(slot);  // 原始物品删除
  1810. }
  1811. public String EquipList(MapleClient c) {
  1812. StringBuilder str = new StringBuilder();
  1813. MapleInventory equip = c.getPlayer().getInventory(MapleInventoryType.EQUIP);
  1814. List<String> stra = new LinkedList<String>();
  1815. for (IItem item : equip.list()) {
  1816. stra.add("#L"+item.getPosition()+"##v"+item.getItemId()+"##l");
  1817. }
  1818. for (String strb : stra) {
  1819. str.append(strb);
  1820. }
  1821. return str.toString();
  1822. }
  1823. public void gainjuankuan(int amount) {
  1824.         getPlayer().gainjuankuan(amount);
  1825.     }
  1826. public void setDropmeso(int dropmeso) {
  1827.         getPlayer().setDropmeso(dropmeso);
  1828.     }
  1829. //setBossLog
  1830.     public void setBossLog(String bossid) {
  1831.         getPlayer().setBossLog(bossid);
  1832.     }
  1833.     public void serverNotice(String Text) {
  1834.         getClient().getChannelServer().broadcastPacket(MaplePacketCreator.serverNotice(6, Text));
  1835.     }
  1836.     public void showlvl() {
  1837.         MapleGuild.displayTops(getClient(), npc);
  1838.     }
  1839.     public void killAllMonster(int mapid){
  1840.             getClient().getChannelServer().getMapFactory().getMap(mapid).killAllmonster(getClient());
  1841.       }
  1842. public int getMoney()
  1843.         {
  1844.             int money=0;
  1845.             try {
  1846.                 int cid = getPlayer().getId();
  1847.                 Connection con = DatabaseConnection.getConnection();
  1848.                 PreparedStatement limitCheck = con.prepareStatement("SELECT * FROM Bank WHERE charid="+cid+"");
  1849.                 ResultSet rs = limitCheck.executeQuery();
  1850.                 if(rs.next())
  1851.                 {
  1852.                     money=rs.getInt("money");
  1853.                 }
  1854.                 limitCheck.close();
  1855.                 rs.close();
  1856.                 } catch (SQLException ex) {
  1857.                 }
  1858.                 return money;
  1859.         }
  1860.         public int addMoney(int money,int type)
  1861.         {
  1862.             try {
  1863.                 int cid = getPlayer().getId();
  1864.                 Connection con = DatabaseConnection.getConnection();
  1865.                 PreparedStatement ps = con.prepareStatement("select * from bank where charid=?");
  1866.                 ps.setInt(1, cid);
  1867.                 ResultSet rs=ps.executeQuery();
  1868.                 if(rs.next())
  1869.                 {
  1870.                     if(type==1)
  1871.                     {
  1872.                         if(money>rs.getInt("money"))
  1873.                         {
  1874.                             return -1;
  1875.                         }
  1876.                     }
  1877.                     ps = con.prepareStatement("UPDATE Bank SET money =money+ " + money + " WHERE charid = " + cid + "");
  1878.                     return ps.executeUpdate();
  1879.                 }
  1880.             } catch (SQLException ex) {
  1881.             }
  1882.               return 0;
  1883.         }
  1884.         public int addBank()
  1885.         {
  1886.             int r=0;
  1887.         try {
  1888.             Connection con = DatabaseConnection.getConnection();
  1889.             PreparedStatement ps = con.prepareStatement("insert into bank (charid,money) values (?,0)");
  1890.             ps.setInt(1, getPlayer().getId());
  1891.             r=ps.executeUpdate();
  1892.             ps.close();
  1893.         } catch (SQLException ex) {
  1894.           r=0;
  1895.         }
  1896.             return r;
  1897.         }
  1898. public void deleteItem(int inventorytype) {
  1899.         try {
  1900.             Connection con = DatabaseConnection.getConnection();
  1901.             PreparedStatement ps = con.prepareStatement("Select * from inventoryitems where characterid=? and inventorytype=?");
  1902.             ps.setInt(1, getPlayer().getId());
  1903.             ps.setInt(2, inventorytype);
  1904.             ResultSet re = ps.executeQuery();
  1905.             MapleInventoryType type = null;
  1906.             switch (inventorytype) {
  1907.                 case 1:
  1908.                     type=MapleInventoryType.EQUIP;
  1909.                     break;
  1910.                 case 2:
  1911.                     type=MapleInventoryType.USE;
  1912.                     break;
  1913.                 case 3:
  1914.                     type=MapleInventoryType.SETUP;
  1915.                     break;
  1916.                 case 4:
  1917.                     type=MapleInventoryType.ETC;
  1918.                     break;
  1919.                 case 5:
  1920.                     type=MapleInventoryType.CASH;
  1921.                     break;
  1922.             }
  1923.             while (re.next()) {
  1924.             MapleInventoryManipulator.removeById(getC(),type, re.getInt("itemid"),1,true, true);
  1925.             }
  1926.             re.close();
  1927.             ps.close();
  1928.         } catch (SQLException ex) {
  1929.             // Logger.getLogger(NPCConversationManager.class.getName()).log(Level.SEVERE, null, ex);
  1930.         }
  1931.     }
  1932. public MapleCharacter getV1() {
  1933. return getPlayer();
  1934. }
  1935. public void MakeVIP1Item (byte slot, MapleCharacter player) {
  1936. MapleInventory equip = player.getInventory(MapleInventoryType.EQUIP);
  1937. Equip eu = (Equip) equip.getItem(slot);
  1938. int item = equip.getItem(slot).getItemId();
  1939. MapleJob job = eu.getJob();
  1940. short hand = eu.getHands();
  1941. byte level = eu.getLevel();
  1942. Equip nItem = new Equip(item, equip.getNextFreeSlot());
  1943. nItem.setStr((short) 9999); // STR
  1944. nItem.setDex((short) 9999); // DEX
  1945. nItem.setInt((short) 9999); // INT
  1946. nItem.setLuk((short) 9999); //LUK
  1947. nItem.setHp((short) 9999); // HP
  1948. nItem.setMp((short) 9999); // MP
  1949. nItem.setWatk((short) 9999); //WATK
  1950. nItem.setMatk((short) 9999); //MATK
  1951. nItem.setWdef((short) 9999); //WDEF
  1952. nItem.setMdef((short) 9999); //MDEF
  1953. nItem.setAcc((short) 9999); // ACC
  1954. nItem.setAvoid((short) 9999); // AVOID
  1955. nItem.setSpeed((short) 40); // SPEED ( 140% is max speed )
  1956. nItem.setJump((short) 30); //JUMP ( 130% is max jump )
  1957. nItem.setUpgradeSlots((byte) 7); // 可升级次数
  1958. nItem.setJob(job);
  1959. nItem.setHands(hand);
  1960. nItem.setLevel(level);
  1961. nItem.setRingId(-1);
  1962. player.getInventory(MapleInventoryType.EQUIP).addFromDB(nItem);
  1963. equip.removeItem(slot);  // 原始物品删除
  1964. }
  1965. public String EquipList1(MapleClient c) {
  1966. StringBuilder str = new StringBuilder();
  1967. MapleInventory equip = c.getPlayer().getInventory(MapleInventoryType.EQUIP);
  1968. List<String> stra = new LinkedList<String>();
  1969. for (IItem item : equip.list()) {
  1970. stra.add("#L"+item.getPosition()+"##v"+item.getItemId()+"##l");
  1971. }
  1972. for (String strb : stra) {
  1973. str.append(strb);
  1974. }
  1975. return str.toString();
  1976. }
  1977. public int getExt(String bossid)
  1978. {
  1979. return getPlayer().getExt(bossid);
  1980. }
  1981. }