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

游戏

开发平台:

Java

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package net.sf.odinms.net.world.guild;
  6. import java.rmi.RemoteException;
  7. import java.sql.Connection;
  8. import java.sql.PreparedStatement;
  9. import java.sql.SQLException;
  10. import java.sql.ResultSet;
  11. import java.util.LinkedList;
  12. import java.util.List;
  13. import net.sf.odinms.client.MapleCharacter;
  14. import net.sf.odinms.client.MapleClient;
  15. import net.sf.odinms.database.DatabaseConnection;
  16. import net.sf.odinms.net.world.remote.WorldChannelInterface;
  17. import net.sf.odinms.tools.MaplePacketCreator;
  18. /**
  19.  *
  20.  * @author XoticStory.
  21.  */
  22. public class MapleAlliance implements java.io.Serializable {
  23.     public static final long serialVersionUID = 24081985245L;
  24.     private int[] guilds = new int[5];
  25.     private int allianceId = -1;
  26.     private int capacity;
  27.     private String name;
  28.     private String notice = "";
  29.     private String rankTitles[] = new String[5];
  30.     public MapleAlliance() {
  31.     }
  32.     public MapleAlliance(String name, int id, int guild1, int guild2) {
  33.         this.name = name;
  34.         allianceId = id;
  35.         guilds[0] = guild1;
  36.         guilds[1] = guild2;
  37.         guilds[2] = -1; // UGH GRRRR. LOL
  38.         guilds[3] = -1;
  39.         guilds[4] = -1;
  40.         rankTitles[0] = "Master"; // WTFBBQHAX LOL
  41.         rankTitles[1] = "Jr.Master";
  42.         rankTitles[2] = "Member";
  43.         rankTitles[3] = "Member";
  44.         rankTitles[4] = "Member";
  45.     }
  46.     public static MapleAlliance loadAlliance(int id) {
  47.         // LOAD HERE
  48.         if (id <= 0) {
  49.             return null;
  50.         }
  51.         Connection con = DatabaseConnection.getConnection();
  52.         MapleAlliance alliance = new MapleAlliance();
  53.         try {
  54.             PreparedStatement ps = con.prepareStatement("SELECT * FROM alliance WHERE id = ?");
  55.             ps.setInt(1, id);
  56.             ResultSet rs = ps.executeQuery();
  57.             if (!rs.next()) {
  58.                 return null;
  59.             }
  60.             alliance.allianceId = id;
  61.             alliance.capacity = rs.getInt("capacity");
  62.             alliance.name = rs.getString("name");
  63.             alliance.notice = rs.getString("notice");
  64.             for (int i = 1; i <= 5; i++) {
  65.                 alliance.rankTitles[i - 1] = rs.getString("rank_title" + i);
  66.             }
  67.             for (int i = 1; i <= 5; i++) {
  68.                 alliance.guilds[i - 1] = rs.getInt("guild" + i);
  69.             }
  70.             ps.close();
  71.             rs.close();
  72.         } catch (SQLException e) {
  73.         }
  74.         return alliance;
  75.     }
  76.     public static void disbandAlliance(MapleClient c, int allianceId) {
  77.         Connection con = DatabaseConnection.getConnection();
  78.         try {
  79.             PreparedStatement ps = con.prepareStatement("DELETE FROM `alliance` WHERE id = ?");
  80.             ps.setInt(1, allianceId);
  81.             ps.executeUpdate();
  82.             ps.close();
  83.         } catch (SQLException e) {
  84.             e.printStackTrace();
  85.         }
  86.         try {
  87.             c.getChannelServer().getWorldInterface().allianceMessage(c.getPlayer().getGuild().getAllianceId(), MaplePacketCreator.disbandAlliance(allianceId), -1, -1);
  88.             c.getChannelServer().getWorldInterface().disbandAlliance(allianceId);
  89.         } catch (RemoteException r) {
  90.             c.getChannelServer().reconnectWorld();
  91.         }
  92.     }
  93.     public static boolean canBeUsedAllianceName(String name) {
  94.         if (name.contains(" ") || name.length() > 12) { // im using starswith because the 'contains' method fails.
  95.             return false;
  96.         }
  97.         Connection con = DatabaseConnection.getConnection();
  98.         boolean ret = true;
  99.         try {
  100.             PreparedStatement ps = con.prepareStatement("SELECT * FROM alliance WHERE name = ?");
  101.             ps.setString(1, name);
  102.             ResultSet rs = ps.executeQuery();
  103.             if (rs.next()) {
  104.                 ret = false;
  105.             }
  106.             ps.close();
  107.             rs.close();
  108.         } catch (SQLException e) {
  109.             return false;
  110.         }
  111.         return ret;
  112.     }
  113.     public static MapleAlliance createAlliance(MapleCharacter chr1, MapleCharacter chr2, String name) {
  114.         Connection con = DatabaseConnection.getConnection();
  115.         int id = 0;
  116.         int guild1 = chr1.getGuildId();
  117.         int guild2 = chr2.getGuildId();
  118.         try {
  119.             PreparedStatement ps = con.prepareStatement("INSERT INTO `alliance` (`name`, `guild1`, `guild2`) VALUES (?, ?, ?)");
  120.             ps.setString(1, name);
  121.             ps.setInt(2, guild1);
  122.             ps.setInt(3, guild2);
  123.             ps.executeUpdate();
  124.             ResultSet rs = ps.getGeneratedKeys();
  125.             rs.next();
  126.             id = rs.getInt(1);
  127.             rs.close();
  128.             ps.close();
  129.         } catch (SQLException e) {
  130.             e.printStackTrace();
  131.             return null;
  132.         }
  133.         MapleAlliance alliance = new MapleAlliance(name, id, guild1, guild2);
  134.         try {
  135.             WorldChannelInterface wci = chr1.getClient().getChannelServer().getWorldInterface();
  136.             wci.setGuildAllianceId(guild1, id);
  137.             wci.setGuildAllianceId(guild2, id);
  138.             chr1.setAllianceRank(1);
  139.             chr1.saveGuildStatus();
  140.             chr2.setAllianceRank(2);
  141.             chr2.saveGuildStatus();
  142.             wci.addAlliance(id, alliance);
  143.             wci.allianceMessage(id, MaplePacketCreator.makeNewAlliance(alliance, chr1.getClient()), -1, -1);
  144.         } catch (RemoteException e) {
  145.             chr1.getClient().getChannelServer().reconnectWorld();
  146.             return null;
  147.         }
  148.         return alliance;
  149.     }
  150.     public void saveToDB() {
  151.         Connection con = DatabaseConnection.getConnection();
  152.         StringBuilder sb = new StringBuilder();
  153.         sb.append("capacity = ?, ");
  154.         sb.append("notice = ?, ");
  155.         for (int i = 1; i <= 5; i++) {
  156.             sb.append("rank_title" + i + " = ?, ");
  157.         }
  158.         for (int i = 1; i <= 5; i++) {
  159.             sb.append("guild" + i + " = ?, ");
  160.         }
  161.         try {
  162.             PreparedStatement ps = con.prepareStatement("UPDATE `alliance` SET " + sb.toString() + " WHERE id = ?");
  163.             ps.setInt(1, this.capacity);
  164.             ps.setString(2, this.notice);
  165.             for (int i = 0; i < rankTitles.length; i++) {
  166.                 ps.setString(i + 3, rankTitles[i]);
  167.             }
  168.             for (int i = 0; i < guilds.length; i++) {
  169.                 ps.setInt(i + 8, guilds[i]);
  170.             }
  171.             ps.setInt(13, this.allianceId);
  172.             ps.executeQuery();
  173.             ps.close();
  174.         } catch (SQLException e) {
  175.         }
  176.     }
  177.     public boolean addRemGuildFromDB(int gid, boolean add) {
  178.         Connection con = DatabaseConnection.getConnection();
  179.         boolean ret = false;
  180.         try {
  181.             PreparedStatement ps = con.prepareStatement("SELECT * FROM alliance WHERE id = ?");
  182.             ps.setInt(1, this.allianceId);
  183.             ResultSet rs = ps.executeQuery();
  184.             if (rs.next()) {
  185.                 int avail = -1;
  186.                 for (int i = 1; i <= 5; i++) {
  187.                     int guildId = rs.getInt("guild" + i);
  188.                     if (add) {
  189.                         if (guildId == -1) {
  190.                             avail = i;
  191.                             break;
  192.                         }
  193.                     } else {
  194.                         if (guildId == gid) {
  195.                             avail = i;
  196.                             break;
  197.                         }
  198.                     }
  199.                 }
  200.                 rs.close();
  201.                 if (avail != -1) { // empty slot
  202.                     ps = con.prepareStatement("UPDATE alliance SET guild" + avail + " = ? WHERE id = ?");
  203.                     if (add) {
  204.                         ps.setInt(1, gid);
  205.                     } else {
  206.                         ps.setInt(1, -1);
  207.                     }
  208.                     ps.setInt(2, this.allianceId);
  209.                     ps.executeUpdate();
  210.                     ret = true;
  211.                 }
  212.                 ps.close();
  213.             }
  214.         } catch (SQLException e) {
  215.         }
  216.         return ret;
  217.     }
  218.     public boolean removeGuild(int gid) {
  219.         synchronized (guilds) {
  220.             int gIndex = getGuildIndex(gid);
  221.             if (gIndex != -1) {
  222.                 guilds[gIndex] = -1;
  223.             }
  224.             return addRemGuildFromDB(gid, false);
  225.         }
  226.     }
  227.     public boolean addGuild(int gid) {
  228.         synchronized (guilds) {
  229.             if (getGuildIndex(gid) == -1) {
  230.                 int emptyIndex = getGuildIndex(-1);
  231.                 if (emptyIndex != -1) {
  232.                     guilds[emptyIndex] = gid;
  233.                     return addRemGuildFromDB(gid, true);
  234.                 }
  235.             }
  236.         }
  237.         return false;
  238.     }
  239.     private int getGuildIndex(int gid) {
  240.         for (int i = 0; i < guilds.length; i++) {
  241.             if (guilds[i] == gid) {
  242.                 return i;
  243.             }
  244.         }
  245.         return -1;
  246.     }
  247.     public void setRankTitle(String[] ranks) {
  248.         rankTitles = ranks;
  249.     }
  250.     public void setNotice(String notice) {
  251.         this.notice = notice;
  252.     }
  253.     public int getId() {
  254.         return allianceId;
  255.     }
  256.     public String getName() {
  257.         return name;
  258.     }
  259.     public String getRankTitle(int rank) {
  260.         return rankTitles[rank - 1];
  261.     }
  262.     public String getAllianceNotice() {
  263.         return notice;
  264.     }
  265.     public List<Integer> getGuilds() {
  266.         List<Integer> guilds_ = new LinkedList<Integer>();
  267.         for (int guild : guilds) {
  268.             if (guild != -1) {
  269.                 guilds_.add(guild);
  270.             }
  271.         }
  272.         return guilds_;
  273.     }
  274.     public String getNotice() {
  275.         return notice;
  276.     }
  277.     public void increaseCapacity(int inc) {
  278.         capacity += inc;
  279.     }
  280.     public int getCapacity() {
  281.         return capacity;
  282.     }
  283. }