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

游戏

开发平台:

Java

  1. /*
  2. 此文件是 MapleMs 核心服务器 -<MapleStory 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.     此文件原作者为德国  OdinMS 团队  以上是开发人员联系信息 本程序遵守
  7.     版本首要发布  GNU 协议进行修改发布 你可以无偿使用此文件或者进行修改
  8.     但是禁止使用本程序进行一切商业行为,如有发现 根据当地法律的制度 导致
  9.     任何法律责任,我们将不于承担 本程序发布是免费的 并不收取额外费用 拥有
  10.     此文件副本的人遵守 GNU 规定 但请保留修改发布人的信息 谢谢!
  11.     此二次开发修整版本: MapleMs
  12.     基于Xotic进行修改,融合ThePack DestinySource 等服务端的优点制作。
  13.     ==============================================================
  14.               当前版本修复制作维护人员: MapleMs
  15.     ==============================================================
  16.     您应该已经收到一份拷贝的GNU通用公共许可证Affero程式一起。如果不是,请参阅
  17.     <http://www.gnu.org/licenses/>.
  18. */
  19. /*
  20.  * Made and created by Red Hat.
  21.  * QQ : 185544419 / -Red Hat-
  22.  * Website :-MapleMs-
  23.  *
  24.  */
  25. package net.sf.odinms.net.channel.handler;
  26. import java.rmi.RemoteException;
  27. import java.sql.Connection;
  28. import java.sql.PreparedStatement;
  29. import java.sql.ResultSet;
  30. import java.sql.SQLException;
  31. import net.sf.odinms.client.MapleClient;
  32. import net.sf.odinms.database.DatabaseConnection;
  33. import net.sf.odinms.net.MaplePacket;
  34. import net.sf.odinms.server.life.MapleLifeFactory;
  35. import net.sf.odinms.server.life.MapleMonster;
  36. import net.sf.odinms.server.life.MapleNPC;
  37. import net.sf.odinms.server.maps.MapleMap;
  38. import net.sf.odinms.tools.MaplePacketCreator;
  39. /**
  40.  *
  41.  * @author MapleMs
  42.  *
  43.  */
  44. public class GuildHangoutHandler {
  45.     public static void buyMap(MapleClient c, int map) {
  46.         if (c.getChannelServer().getMapFactory().getMap(map).isOwned()) {
  47.             //int price = c.getChannelServer().getMapFactory().getMap(map).getPrice();
  48.             int price = 188;
  49.             MapleMap targetMap = c.getChannelServer().getMapFactory().getMap(map);
  50.             if (c.getPlayer().getDonatorPoints() >= price && c.getPlayer().getGuildRank() == 1) {
  51.                 targetMap.saveNPCS(targetMap.getOwner());
  52.                 if (!targetMap.isPubic()) {
  53.                     targetMap.setPublic(true);
  54.                 }
  55.                 targetMap.removeNpcs();
  56.                 targetMap.removeMobs();
  57.                 targetMap.setOwner(c.getPlayer().getGuild().getName());
  58.                 c.getPlayer().gainDonatorPoints(-price);
  59.                 targetMap.setPrice(price + 0);
  60.                 targetMap.setPublic(true);
  61.                 targetMap.saveGuildMaps(false);
  62.                 MaplePacket packet = MaplePacketCreator.serverNotice(6, "[家族领地] " + c.getPlayer().getGuild().getName() + " 刚刚购买了: " + targetMap.getOwner() + " 领地 " + c.getChannelServer().getMapFactory().getMap(map).getMapName() + ".");
  63. try {
  64.                     c.getChannelServer().getWorldInterface().broadcastMessage(c.getPlayer().getName(), packet.getBytes());
  65.                 } catch (RemoteException e) {
  66.                     c.getChannelServer().reconnectWorld();
  67.                 }
  68.             } else {
  69.                 c.getPlayer().dropMessage("您必须拥有 " + price + " 冒险币才可以购买这个领地。并且你要是族长!");
  70.             }
  71.         } else {
  72.             int price = 188;
  73.             MapleMap targetMap = c.getChannelServer().getMapFactory().getMap(map);
  74.             if (c.getPlayer().getDonatorPoints() >= price && c.getPlayer().getGuildRank() == 1) {
  75.                 targetMap.setOwner(c.getPlayer().getGuild().getName());
  76.                 c.getPlayer().gainDonatorPoints(-188);
  77.                 targetMap.setPrice(price + 0);
  78.                 targetMap.setPublic(true);
  79.                 targetMap.setOwned(true);
  80.                 targetMap.saveGuildMaps(true);
  81.                 MaplePacket packet = MaplePacketCreator.serverNotice(6, "[家族领地] " + c.getPlayer().getGuild().getName() + " 刚刚购买了 " + c.getChannelServer().getMapFactory().getMap(map).getMapName() + "这个领地.");
  82. try {
  83.                     c.getChannelServer().getWorldInterface().broadcastMessage(c.getPlayer().getName(), packet.getBytes());
  84.                 } catch (RemoteException e) {
  85.                     c.getChannelServer().reconnectWorld();
  86.                 }
  87.                 c.getChannelServer().getMapFactory().getMap(map).saveGuildMaps(true);
  88.             } else {
  89.                 c.getPlayer().dropMessage("你必须有 " + price + " 冒险币才可以购买这个领地,并且你是族长!");
  90.             }
  91.         }
  92.     }
  93.     
  94.     public static void setState(MapleClient c, int map) {
  95.         int price = 20;
  96.         MapleMap targetMap = c.getChannelServer().getMapFactory().getMap(map);
  97.         if (!targetMap.isOwned()) {
  98.             return;
  99.         }
  100.         if (c.getPlayer().getDonatorPoints() <= price) {
  101.             c.getPlayer().dropMessage("你至少要有20香熏币.");
  102.             return;
  103.         }
  104.         targetMap.setPublic(!targetMap.isPubic());
  105.         c.getPlayer().dropMessage("修改成功!");
  106.         c.getPlayer().gainDonatorPoints(-price);
  107.         targetMap.saveGuildMaps(false);
  108.     }
  109.     
  110.     public static void buyMonster(MapleClient c, int mobId) {
  111.         MapleMonster mob = MapleLifeFactory.getMonster(mobId);
  112.         if (mob != null && !mob.getName().equals("MISSINGNO") && !mob.isBoss() && mob.getLevel() <= 100 && c.getPlayer().getMeso() >= 50000000) {
  113.             if (mob.getLevel() <= 50) {
  114.                 int price = 10;
  115.                 addMonster(c, mobId);
  116.                 c.getPlayer().gainDonatorPoints(-price);
  117.             } else {
  118.                 int price = 15;
  119.                 if (c.getPlayer().getDonatorPoints() >= price) {
  120.                     addMonster(c, mobId);
  121.                     c.getPlayer().gainDonatorPoints(-price);
  122.                 } else {
  123.                     c.getPlayer().dropMessage("你必须要有15个香熏币,并且怪物等级不能超过100级。");
  124.                 }
  125.             }
  126.         } else {
  127.             c.getPlayer().dropMessage("你至少要有10个香熏币,怪物必须存在,并且怪物不是BOSS,怪物等级不能大于100级。");
  128.         }
  129.     }
  130.     
  131.     public static void addMonster(MapleClient c, int mobId) {
  132.             int mobTime = 120000;
  133.             MapleMonster mob = MapleLifeFactory.getMonster(mobId);
  134.             if (mob != null && !mob.getName().equals("MISSINGNO")) { //Just to be sure :P
  135.                 mob.setPosition(c.getPlayer().getPosition());
  136.                 mob.setCy(c.getPlayer().getPosition().y);
  137.                 mob.setRx0(c.getPlayer().getPosition().x + 50);
  138.                 mob.setRx1(c.getPlayer().getPosition().x - 50);
  139.                 mob.setFh(c.getPlayer().getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId());
  140.                 Connection con = DatabaseConnection.getConnection();
  141.                 try { 
  142.                     PreparedStatement ps = con.prepareStatement("INSERT INTO spawns ( idd, f, fh, cy, rx0, rx1, type, x, y, mid, mobtime ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )");
  143.                     ps.setInt(1, mobId);
  144.                     ps.setInt(2, 0);
  145.                     ps.setInt(3, c.getPlayer().getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId());
  146.                     ps.setInt(4, c.getPlayer().getPosition().y);
  147.                     ps.setInt(5, c.getPlayer().getPosition().x + 50);
  148.                     ps.setInt(6, c.getPlayer().getPosition().x - 50);
  149.                     ps.setString(7, "m");
  150.                     ps.setInt(8, c.getPlayer().getPosition().x);
  151.                     ps.setInt(9, c.getPlayer().getPosition().y);
  152.                     ps.setInt(10, c.getPlayer().getMapId());
  153.                     ps.setInt(11, mobTime);
  154.                     ps.executeUpdate();
  155.                     c.getPlayer().getMap().addMonsterSpawn(mob, mobTime);
  156.                 } catch (SQLException e) {
  157.                     System.out.print("领地添加怪物时发生错误 : " + e);
  158.                 }
  159.             }
  160.     }
  161.     
  162.     public static void buyNpc(MapleClient c, int npcId) {
  163.             MapleNPC npc = MapleLifeFactory.getNPC(npcId);
  164.             if (c.getPlayer().getDonatorPoints() <= 20) {
  165.                 c.getPlayer().dropMessage("购买一个NPC必须要有20个香熏币。");
  166.                 return;
  167.             }
  168.             int xpos = c.getPlayer().getPosition().x;
  169.             int ypos = c.getPlayer().getPosition().y;
  170.             int fh = c.getPlayer().getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId();
  171.             if (npc != null && !npc.getName().equals("MISSINGNO")) {
  172.                 npc.setPosition(c.getPlayer().getPosition());
  173.                 npc.setCy(ypos);
  174.                 npc.setRx0(xpos + 50);
  175.                 npc.setRx1(xpos - 50);
  176.                 npc.setFh(fh);
  177.                 npc.setCustom(true);
  178.                 try {
  179.                     Connection con = DatabaseConnection.getConnection();
  180.                     PreparedStatement ps = con.prepareStatement("INSERT INTO guildspawns ( idd, f, fh, cy, rx0, rx1, type, x, y, mid, guild) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
  181.                     ps.setInt(1, npcId);
  182.                     ps.setInt(2, 0);
  183.                     ps.setInt(3, fh);
  184.                     ps.setInt(4, ypos);
  185.                     ps.setInt(4, ypos);
  186.                     ps.setInt(5, xpos + 50);
  187.                     ps.setInt(6, xpos - 50);
  188.                     ps.setString(7, "n");
  189.                     ps.setInt(8, xpos);
  190.                     ps.setInt(9, ypos);
  191.                     ps.setInt(10, c.getPlayer().getMapId());
  192.                     ps.setString(11, c.getPlayer().getGuild().getName());
  193.                     ps.executeUpdate();
  194.                     ps.close();
  195.                 } catch (SQLException e) {
  196.                     c.getPlayer().dropMessage("NPC无法保存到数据库!");
  197.                 }
  198.                 c.getPlayer().getMap().addMapObject(npc);
  199.                 c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.spawnNPC(npc));
  200.                 c.getPlayer().gainDonatorPoints(-20);
  201.             } else {
  202.                 c.getPlayer().dropMessage("请输入一个有效的NPC代码。");
  203.             }
  204.     }
  205.     
  206.     public static boolean hasHiddenNPC(String guild) {
  207.         try {
  208.             Connection con = DatabaseConnection.getConnection();
  209.             PreparedStatement ps = con.prepareStatement("SELECT * FROM guildspawns WHERE hidden = 1 AND guild = ?");
  210.             ps.setString(1, guild);
  211.             ResultSet rs = ps.executeQuery();
  212.             while (rs.next()) {
  213.                 ps.close();
  214.                 rs.close();
  215.                 return true;
  216.             }
  217.             ps.close();
  218.             rs.close();
  219.         } catch (SQLException e) {
  220.             
  221.         }
  222.         return false;
  223.     }
  224.     
  225.     public static void replaceHiddenNPCS(MapleClient c, String guild, int newMap) {
  226.         try {
  227.             Connection con = DatabaseConnection.getConnection();
  228.             PreparedStatement ps = con.prepareStatement("SELECT * FROM guildspawns WHERE hidden = 1 AND guild = ?");
  229.             ps.setString(1, guild);
  230.             ResultSet rs = ps.executeQuery();
  231.             while (rs.next()) {
  232.                 int map = rs.getInt("mid");
  233.                 PreparedStatement psx = con.prepareStatement("UPDATE guildspawns SET mid = ? WHERE mid = ? AND guild = ?");
  234.                 psx.setInt(1, newMap);
  235.                 psx.setInt(2, map);
  236.                 psx.setString(3, guild);
  237.                 psx.executeUpdate();
  238.                 psx.close();
  239.                 ps.close();
  240.                 rs.close();
  241.             }
  242.             ps.close();
  243.             rs.close();
  244.         } catch (SQLException e) {
  245.             
  246.         }
  247.     }
  248.     
  249.     public static boolean checkAlliance(MapleClient c, String guild) {
  250.         try {
  251.             Connection con = DatabaseConnection.getConnection();
  252.             PreparedStatement ps = con.prepareStatement("SELECT * FROM guilds where name = ?");
  253.             ps.setString(1, c.getPlayer().getGuild().getName());
  254.             ResultSet rs = ps.executeQuery();
  255.             while (rs.next()) {    
  256.                 int eId = rs.getInt("guildid");
  257.                 ps.close();
  258.                 rs.close();
  259.                 PreparedStatement psx = con.prepareStatement("SELECT * FROM alliance WHERE guild1 = ? OR guild2 = ? OR guild3 = ? OR guild4 = ? OR guild5 = ?");
  260.                 psx.setInt(1, eId);
  261.                 psx.setInt(2, eId);
  262.                 psx.setInt(3, eId);
  263.                 psx.setInt(4, eId);
  264.                 psx.setInt(5, eId);
  265.                 ResultSet rsx = psx.executeQuery();
  266.                 while (rsx.next()) {
  267.                     int aId = rs.getInt("id");
  268.                     rsx.close();
  269.                     psx.close();
  270.                     PreparedStatement psa = con.prepareStatement("SELECT * FROM guilds where name = ?");
  271.                     psa.setString(1, guild);
  272.                     ResultSet rsa = psa.executeQuery();
  273.                     while (rsa.next()) {    
  274.                         int id = rs.getInt("allianceId");
  275.                         if (aId == id) {
  276.                             rsa.close();
  277.                             psa.close();
  278.                             return true;
  279.                         }
  280.                     }
  281.                     rsa.close();
  282.                     psa.close();
  283.                 }
  284.                 rsx.close();
  285.                 psx.close();
  286.             }
  287.             ps.close();
  288.             rs.close();
  289.         } catch (Exception e) {
  290.             return false;
  291.         }
  292.         return false;
  293.     }
  294. }