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

游戏

开发平台:

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.client;
  19. import java.sql.Connection;
  20. import java.sql.PreparedStatement;
  21. import java.sql.ResultSet;
  22. import java.sql.SQLException;
  23. import java.util.logging.Level;
  24. import java.util.logging.Logger;
  25. import net.sf.odinms.database.DatabaseConnection;
  26. import net.sf.odinms.server.MapleInventoryManipulator;
  27. import net.sf.odinms.server.TimerManager;
  28. import net.sf.odinms.tools.MaplePacketCreator;
  29. /**
  30.  *
  31.  * @author Danny
  32.  */
  33. public class MapleRing implements Comparable<MapleRing> {
  34.     private int ringId;
  35.     private int ringId2;
  36.     private int partnerId;
  37.     private int itemId;
  38.     private String partnerName;
  39.     private boolean equipped;
  40.     private MapleRing(int id, int id2, int partnerId, int itemid, String partnername) {
  41.         this.ringId = id;
  42.         this.ringId2 = id2;
  43.         this.partnerId = partnerId;
  44.         this.itemId = itemid;
  45.         this.partnerName = partnername;
  46.     }
  47.     public static MapleRing loadFromDb(int ringId) {
  48.         try {
  49.             Connection con = DatabaseConnection.getConnection(); // Get a connection to the database
  50.             PreparedStatement ps = con.prepareStatement("SELECT * FROM rings WHERE id = ?"); // Get ring details..
  51.             ps.setInt(1, ringId);
  52.             ResultSet rs = ps.executeQuery();
  53.             rs.next();
  54.             MapleRing ret = new MapleRing(ringId, rs.getInt("partnerRingId"), rs.getInt("partnerChrId"), rs.getInt("itemid"), rs.getString("partnerName"));
  55.             rs.close();
  56.             ps.close();
  57.             return ret;
  58.         } catch (SQLException ex) {
  59.             return null;
  60.         }
  61.     }
  62.     public static int[] createRing(MapleClient c, int itemid, int chrId, String chrName, int partnerId, String partnername) {
  63. try {
  64. MapleCharacter chr = c.getChannelServer().getPlayerStorage().getCharacterById(partnerId);
  65. if (chr == null) {
  66. int[] ret_ = new int[2];
  67. ret_[0] = -1;
  68. ret_[1] = -1;
  69. return ret_;
  70. }
  71. Connection con = DatabaseConnection.getConnection();
  72.             String sql = "INSERT INTO rings (itemid, partnerChrId, partnername) VALUES (?, ?, ?)";
  73.             String sql1 = "INSERT INTO rings (itemid, partnerRingId, partnerChrId, partnername) VALUES (?, ?, ?, ?)";
  74.             String sql2 = "UPDATE rings SET partnerRingId = ? WHERE id = ?";
  75. PreparedStatement ps = con.prepareStatement(sql);
  76. ps.setInt(1, itemid);
  77. ps.setInt(2, partnerId);
  78. ps.setString(3, partnername);
  79. ps.executeUpdate();
  80. ResultSet rs = ps.getGeneratedKeys();
  81. rs.next();
  82. int[] ret = new int[2];
  83. ret[0] = rs.getInt(1);
  84. rs.close();
  85. ps.close();
  86. ps = con.prepareStatement(sql1);
  87. ps.setInt(1, itemid);
  88. ps.setInt(2, ret[0]);
  89. ps.setInt(3, chrId);
  90. ps.setString(4, chrName);
  91. ps.executeUpdate();
  92. rs = ps.getGeneratedKeys();
  93. rs.next();
  94. ret[1] = rs.getInt(1);
  95. rs.close();
  96. ps.close();
  97. ps = con.prepareStatement(sql2);
  98. ps.setInt(1, ret[1]);
  99. ps.setInt(2, ret[0]);
  100. ps.executeUpdate();
  101. ps.close();
  102. MapleCharacter player = c.getPlayer();
  103. MapleInventoryManipulator.addRing(player, itemid, ret[0]);
  104. MapleInventoryManipulator.addRing(chr, itemid, ret[1]);
  105. c.getSession().write(MaplePacketCreator.getCharInfo(player));
  106. player.getMap().removePlayer(player);
  107. player.getMap().addPlayer(player);
  108. chr.getClient().getSession().write(MaplePacketCreator.getCharInfo(chr));
  109. chr.getMap().removePlayer(chr);
  110. chr.getMap().addPlayer(chr);
  111. chr.getClient().getSession().write(MaplePacketCreator.serverNotice(5, "You have received a ring from " + player.getName() + ". Please log out and log back in again if it does not work correctly."));
  112. return ret;
  113. } catch (SQLException ex) {
  114. Logger.getLogger(MaplePet.class.getName()).log(Level.SEVERE, null, ex);
  115. int[] ret = new int[2];
  116. ret[0] = -1;
  117. ret[1] = -1;
  118. return ret;
  119. }
  120. }
  121.     public static int createRing(int itemid, final MapleCharacter partner1, final MapleCharacter partner2) {
  122.         try {
  123.             if (partner1 == null) {
  124.                 return -2; // Partner Number 1 is not on the same channel.
  125.             } else if (partner2 == null) {
  126.                 return -1; // Partner Number 2 is not on the same channel.
  127.             } else if (checkRingDB(partner1) || checkRingDB(partner2)) {
  128.                 return 0; // Error or Already have ring.
  129.             }
  130.             int[] ringID = new int[2];
  131.             Connection con = DatabaseConnection.getConnection();
  132.             PreparedStatement ps = con.prepareStatement("INSERT INTO rings (itemid, partnerChrId, partnername) VALUES (?, ?, ?)");
  133.             ps.setInt(1, itemid);
  134.             ps.setInt(2, partner2.getId());
  135.             ps.setString(3, partner2.getName());
  136.             ps.executeUpdate();
  137.             ResultSet rs = ps.getGeneratedKeys();
  138.             rs.next();
  139.             ringID[0] = rs.getInt(1); // ID.
  140.             rs.close();
  141.             ps.close();
  142.             ps = con.prepareStatement("INSERT INTO rings (itemid, partnerRingId, partnerChrId, partnername) VALUES (?, ?, ?, ?)");
  143.             ps.setInt(1, itemid);
  144.             ps.setInt(2, ringID[0]);
  145.             ps.setInt(3, partner1.getId());
  146.             ps.setString(4, partner1.getName());
  147.             ps.executeUpdate();
  148.             rs = ps.getGeneratedKeys();
  149.             rs.next();
  150.             ringID[1] = rs.getInt(1);
  151.             rs.close();
  152.             ps.close();
  153.             ps = con.prepareStatement("UPDATE rings SET partnerRingId = ? WHERE id = ?");
  154.             ps.setInt(1, ringID[1]);
  155.             ps.setInt(2, ringID[0]);
  156.             ps.executeUpdate();
  157.             ps.close();
  158.             MapleInventoryManipulator.addRing(partner1, itemid, ringID[0]);
  159.             MapleInventoryManipulator.addRing(partner2, itemid, ringID[1]);
  160.             TimerManager.getInstance().schedule(new Runnable() {
  161.                 public void run() {
  162.                     partner1.getClient().getSession().write(MaplePacketCreator.getCharInfo(partner1));
  163.                     partner1.getMap().removePlayer(partner1);
  164.                     partner1.getMap().addPlayer(partner1);
  165.                     partner2.getClient().getSession().write(MaplePacketCreator.getCharInfo(partner2));
  166.                     partner2.getMap().removePlayer(partner2);
  167.                     partner2.getMap().addPlayer(partner2);
  168.                 }
  169.             }, 1000);
  170.             partner1.dropMessage(5, "Congratulations to you and " + partner2.getName() + ". now go lick a cow (:");
  171.             partner1.dropMessage(5, "Please log off and log back in if the rings do not work.");
  172.             partner2.dropMessage(5, "Congratulations to you and " + partner1.getName() + ". now go lick a cow (:");
  173.             partner2.dropMessage(5, "Please log off and log back in if the rings do not work.");
  174.             return 1;
  175.         } catch (SQLException ex) {
  176.             return 0;
  177.         }
  178.     }
  179.     public int getRingId() {
  180.         return ringId;
  181.     }
  182.     public int getPartnerRingId() {
  183.         return ringId2;
  184.     }
  185.     public int getPartnerChrId() {
  186.         return partnerId;
  187.     }
  188.     public int getItemId() {
  189.         return itemId;
  190.     }
  191.     public String getPartnerName() {
  192.         return partnerName;
  193.     }
  194.     public boolean isEquipped() {
  195.         return equipped;
  196.     }
  197.     public void setEquipped(boolean equipped) {
  198.         this.equipped = equipped;
  199.     }
  200.     @Override
  201.     public boolean equals(Object o) {
  202.         if (o instanceof MapleRing) {
  203.             if (((MapleRing) o).getRingId() == getRingId()) {
  204.                 return true;
  205.             } else {
  206.                 return false;
  207.             }
  208.         }
  209.         return false;
  210.     }
  211.     @Override
  212.     public int hashCode() {
  213.         int hash = 5;
  214.         hash = 53 * hash + this.ringId;
  215.         return hash;
  216.     }
  217.     @Override
  218.     public int compareTo(MapleRing other) {
  219.         if (ringId < other.getRingId()) {
  220.             return -1;
  221.         } else if (ringId == other.getRingId()) {
  222.             return 0;
  223.         } else {
  224.             return 1;
  225.         }
  226.     }
  227.     public static boolean checkRingDB(MapleCharacter player) {
  228.         try {
  229.             Connection con = DatabaseConnection.getConnection();
  230.             PreparedStatement ps = con.prepareStatement("SELECT id FROM rings WHERE partnerChrId = ?");
  231.             ps.setInt(1, player.getId());
  232.             ResultSet rs = ps.executeQuery();
  233.             return rs.next();
  234.         } catch (SQLException pie) {
  235.             return false;
  236.         }
  237.     }
  238.     public static void removeRingFromDb(MapleCharacter player) {
  239.         try {
  240.             Connection con = DatabaseConnection.getConnection();
  241.             int otherId;
  242.             PreparedStatement ps = con.prepareStatement("SELECT partnerRingId FROM rings WHERE partnerChrId = ?");
  243.             ps.setInt(1, player.getId());
  244.             ResultSet rs = ps.executeQuery();
  245.             rs.next();
  246.             otherId = rs.getInt("partnerRingId");
  247.             rs.close();
  248.             ps = con.prepareStatement("DELETE FROM rings WHERE partnerChrId = ?");
  249.             ps.setInt(1, player.getId());
  250.             ps.executeUpdate();
  251.             ps = con.prepareStatement("DELETE FROM rings WHERE partnerChrId = ?");
  252.             ps.setInt(1, otherId);
  253.             ps.executeUpdate();
  254.             ps.close();
  255.         } catch (SQLException sex) {
  256.         }
  257.     }
  258. }