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

游戏

开发平台:

Java

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor. Then suck a dick
  4.  */
  5. package net.sf.odinms.server.market;
  6. import java.sql.Connection;
  7. import java.sql.PreparedStatement;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.util.LinkedHashMap;
  11. import java.util.LinkedList;
  12. import java.util.List;
  13. import java.util.Map;
  14. import net.sf.odinms.client.MapleCharacter;
  15. import net.sf.odinms.database.DatabaseConnection;
  16. import net.sf.odinms.net.channel.ChannelServer;
  17. /**
  18.  *
  19.  * @author David
  20.  */
  21. public class MarketEngine {
  22. public static class ItemEntry {
  23. private int quantity;
  24. private int id;
  25. private int price;
  26. private int owner;
  27. public int getId() {
  28. return id;
  29. }
  30. public void setId(int id) {
  31. this.id = id;
  32. }
  33. public int getQuantity() {
  34. return quantity;
  35. }
  36. public void setQuantity(int quantity) {
  37. this.quantity = quantity;
  38. }
  39. public int getPrice() {
  40. return price;
  41. }
  42. public void setPrice(int price) {
  43. this.price = price;
  44. }
  45. public int getOwner() {
  46. return owner;
  47. }
  48. public void setOwner(int owner) {
  49. this.owner = owner;
  50. }
  51. }
  52. private List<ItemEntry> items = new LinkedList<ItemEntry>();
  53. private Map<Integer, String> names = new LinkedHashMap<Integer, String>();
  54. public void addItem(int itemId, int quantity, int price, int charid) {
  55. //see if s/he's already put the same item up
  56. synchronized (items) {
  57. for (ItemEntry ie : items) {
  58. if (ie.getId() == itemId && ie.getOwner() == charid
  59. && ie.getPrice() == price) {
  60. ie.setQuantity(ie.getQuantity() + quantity);
  61. return;
  62. }
  63. }
  64. }
  65. ItemEntry ie = new ItemEntry();
  66. ie.setId(itemId);
  67. ie.setQuantity(quantity);
  68. ie.setOwner(charid);
  69. ie.setPrice(price);
  70. synchronized (items) {
  71. items.add(ie);
  72. }
  73. }
  74. public void removeItem(int itemId, int quantity, int charid) {
  75. synchronized (items) {
  76. for (int i = 0; i < items.size(); i++) {
  77. ItemEntry ie = items.get(i);
  78. if (ie.getOwner() == charid && ie.getId() == itemId &&
  79. ie.getQuantity() >= quantity) {
  80. if (ie.getQuantity() == quantity) {
  81. items.remove(items.indexOf(ie));
  82. } else {
  83. ie.setQuantity(ie.getQuantity() - quantity);
  84. }
  85. }
  86. }
  87. }
  88. }
  89. public ItemEntry getItem(int position) {
  90. return items.get(position);
  91. }
  92. public List<ItemEntry> getItems() {
  93. return items;
  94. }
  95. public String getCharacterName(int charId) {
  96. if (names.get(charId) != null) return names.get(charId);
  97. for (ChannelServer cs : ChannelServer.getAllInstances()) {
  98. for (MapleCharacter mc : cs.getPlayerStorage().getAllCharacters()) {
  99. if (mc.getId() == charId) {
  100. names.put(charId, mc.getName());
  101. return mc.getName();
  102. }
  103. }
  104. }
  105. //Not found.. look in SQL
  106. Connection con = DatabaseConnection.getConnection();
  107.         PreparedStatement ps = null;
  108.         ResultSet rs = null;
  109. try {
  110. ps = con.prepareStatement("SELECT * FROM characters WHERE id = ?");
  111. ps.setInt(1, charId);
  112. rs = ps.executeQuery();
  113. if (rs.next()) {
  114. String name = rs.getString("name");
  115. names.put(charId, name);
  116. return name;
  117. }
  118. } catch (SQLException fuckthisissofuckinggay) {
  119. return "SQL Error fixmepl0x";
  120. } finally {
  121.             try {
  122.                 if (ps !=null && !ps.isClosed())
  123.                     ps.close();
  124.                 if (rs !=null && !rs.isClosed())
  125.                     rs.close();
  126.         } catch (SQLException fuck) {
  127. return "SQL Error fixmepl0x";
  128.             }
  129.         }
  130. return "No user";
  131. }
  132. @Override public String toString() {
  133. String ret = "";
  134. synchronized (items) {
  135. for (ItemEntry ie : items) {
  136. ret += "#v" + ie.getId() + //Item picture
  137. "# Price: #b" + ie.getPrice() + "#k" + //Price
  138. "Seller: #b" + getCharacterName(ie.getOwner()) + "#k" + //Seller
  139. "\r\n"; //Newline
  140. }
  141. }
  142. return ret;
  143. }
  144. }