43 | public static final String SELECT_QUERY = "SELECT `itemUniqueId`, `itemId`, `itemCount`, `itemColor`, `isEquiped`, `slot` FROM `inventory` WHERE `itemOwner`=?"; | 45 | public static final String SELECT_QUERY = "SELECT `itemUniqueId`, `itemId`, `itemCount`, `itemColor`, `isEquiped`, `slot` FROM `inventory` WHERE `itemOwner`=? AND `itemLocation`=?"; |
44 | public static final String INSERT_QUERY = "INSERT INTO `inventory` (`itemUniqueId`, `itemId`, `itemCount`, `itemColor`, `itemOwner`, `isEquiped`, `slot`) VALUES(?,?,?,?,?,?,?)"; | 46 | public static final String INSERT_QUERY = "INSERT INTO `inventory` (`itemUniqueId`, `itemId`, `itemCount`, `itemColor`, `itemOwner`, `isEquiped`, `slot`, `itemLocation`) VALUES(?,?,?,?,?,?,?,?)"; |
45 | public static final String UPDATE_QUERY = "UPDATE inventory SET itemCount=?, itemColor=?, itemOwner=?, isEquiped=?, slot=? WHERE itemUniqueId=?"; | 47 | public static final String UPDATE_QUERY = "UPDATE inventory SET itemCount=?, itemColor=?, itemOwner=?, isEquiped=?, slot=?, itemLocation=? WHERE itemUniqueId=?"; |
46 | public static final String DELETE_QUERY = "DELETE FROM inventory WHERE itemUniqueId=?"; | 48 | public static final String DELETE_QUERY = "DELETE FROM inventory WHERE itemUniqueId=?"; |
| | 49 | public static final String SELECT_ACCOUNT_QUERY = "SELECT `account_id` FROM `players` WHERE `id`=?"; |
48 | @Override | 51 | @Override |
49 | public Inventory load(Player player) | 52 | public Storage load(Player player, StorageType storageType) |
50 | { | 53 | { |
51 | //TODO load parts - cube, equipment etc. | 54 | //TODO load parts - cube, equipment etc. |
52 | final Inventory inventory = new Inventory(player); | 55 | final Storage inventory = new Storage(player, storageType); |
53 | final int playerId = player.getObjectId(); | 56 | int playerId = player.getObjectId(); |
| | 57 | final int storage = storageType.getId(); |
63 | @Override | 64 | final int owner = playerId; |
64 | public void handleRead(ResultSet rset) throws SQLException | | |
65 | { | | |
66 | while(rset.next()) | | |
67 | { | | |
68 | int itemUniqueId = rset.getInt("itemUniqueId"); | | |
69 | int itemId = rset.getInt("itemId"); | | |
70 | int itemCount = rset.getInt("itemCount"); | | |
71 | int itemColor = rset.getInt("itemColor"); | | |
72 | int isEquiped = rset.getInt("isEquiped"); | | |
73 | int slot = rset.getInt("slot"); | | |
74 | Item item = new Item(itemUniqueId, itemId, itemCount, itemColor, isEquiped == 1, slot); | | |
75 | item.setPersistentState(PersistentState.UPDATED); | | |
76 | inventory.onLoadHandler(item); | | |
77 | } | | |
78 | } | | |
79 | }); | | |
80 | return inventory; | | |
81 | } | | |
83 | @Override | 66 | DB.select(SELECT_QUERY, new ParamReadStH() |
84 | public boolean store(Inventory inventory) | 67 | { |
85 | { | | |
86 | int playerId = inventory.getOwner().getObjectId(); | | |
87 | List<Item> inventoryItems = inventory.getAllItems(); | | |
88 | | | |
89 | boolean resultSuccess = true; | | |
90 | for(Item item : inventoryItems) | | |
91 | { | | |
92 | resultSuccess = store(item, playerId); | | |
93 | } | | |
94 | return resultSuccess; | | |
95 | } | | |
96 | | | |
97 | /** | | |
98 | * @param item | | |
99 | * @param playerId | | |
100 | * @return | | |
101 | */ | | |
102 | @Override | | |
103 | public boolean store(final Item item, final int playerId) | | |
104 | { | | |
105 | boolean result = false; | | |
106 | | | |
107 | switch(item.getPersistentState()) | | |
108 | { | | |
109 | case NEW: | | |
110 | result = insertItem(item, playerId); | | |
111 | break; | | |
112 | case UPDATE_REQUIRED: | | |
113 | result = updateItem(item, playerId); | | |
114 | break; | | |
115 | case DELETED: | | |
116 | result = deleteItem(item); | | |
117 | break; | | |
118 | } | | |
119 | item.setPersistentState(PersistentState.UPDATED); | | |
120 | return result; | | |
121 | } | | |
122 | | | |
123 | /** | | |
124 | * @param item | | |
125 | * @param playerId | | |
126 | * @return | | |
127 | */ | | |
128 | private boolean insertItem(final Item item, final int playerId) | | |
129 | { | | |
130 | return DB.insertUpdate(INSERT_QUERY, new IUStH() { | | |
| | 69 | public void setParams(PreparedStatement stmt) throws SQLException |
| | 70 | { |
| | 71 | stmt.setInt(1, owner); |
| | 72 | stmt.setInt(2, storage); |
| | 73 | } |
| | 74 | |
| | 75 | @Override |
| | 76 | public void handleRead(ResultSet rset) throws SQLException |
| | 77 | { |
| | 78 | while(rset.next()) |
| | 79 | { |
| | 80 | int itemUniqueId = rset.getInt("itemUniqueId"); |
| | 81 | int itemId = rset.getInt("itemId"); |
| | 82 | int itemCount = rset.getInt("itemCount"); |
| | 83 | int itemColor = rset.getInt("itemColor"); |
| | 84 | int isEquiped = rset.getInt("isEquiped"); |
| | 85 | int slot = rset.getInt("slot"); |
| | 86 | Item item = new Item(itemUniqueId, itemId, itemCount, itemColor, isEquiped == 1, slot); |
| | 87 | item.setPersistentState(PersistentState.UPDATED); |
| | 88 | inventory.onLoadHandler(item); |
| | 89 | } |
| | 90 | } |
| | 91 | }); |
| | 92 | return inventory; |
| | 93 | } |
| | 94 | |
| | 95 | public int getPlayerAccountId(final int playerId) |
| | 96 | { |
| | 97 | final List<Integer> owner = new ArrayList<Integer>(); |
| | 98 | DB.select(SELECT_ACCOUNT_QUERY, new ParamReadStH() |
| | 99 | { |
| | 100 | @Override |
| | 101 | public void setParams(PreparedStatement stmt) throws SQLException |
| | 102 | { |
| | 103 | stmt.setInt(1, playerId); |
| | 104 | } |
| | 105 | |
| | 106 | @Override |
| | 107 | public void handleRead(ResultSet rset) throws SQLException |
| | 108 | { |
| | 109 | while(rset.next()) |
| | 110 | { |
| | 111 | owner.add(rset.getInt("account_id")); |
| | 112 | } |
| | 113 | } |
| | 114 | }); |
| | 115 | return owner.get(0); |
| | 116 | } |
| | 117 | |
| | 118 | @Override |
| | 119 | public boolean store(Player player) |
| | 120 | { |
| | 121 | int playerId = player.getObjectId(); |
| | 122 | List<Item> allPlayerItems = new ArrayList<Item>(); |
| | 123 | allPlayerItems.addAll(player.getStorage(StorageType.CUBE.getId()).getStorageItems()); |
| | 124 | allPlayerItems.addAll(player.getStorage(StorageType.REGULAR_WAREHOUSE.getId()).getStorageItems()); |
| | 125 | allPlayerItems.addAll(player.getStorage(StorageType.ACCOUNT_WAREHOUSE.getId()).getStorageItems()); |
| | 126 | allPlayerItems.addAll(player.getInventory().getEquippedItems()); |
| | 127 | |
| | 128 | boolean resultSuccess = true; |
| | 129 | for(Item item : allPlayerItems) |
| | 130 | { |
| | 131 | resultSuccess = store(item, playerId); |
| | 132 | } |
| | 133 | return resultSuccess; |
| | 134 | } |
| | 135 | |
| | 136 | /** |
| | 137 | * @param item |
| | 138 | * @param playerId |
| | 139 | * @return |
| | 140 | */ |
| | 141 | @Override |
| | 142 | public boolean store(final Item item, int playerId) |
| | 143 | { |
| | 144 | boolean result = false; |
| | 145 | |
| | 146 | if(item.getItemLocation() == StorageType.ACCOUNT_WAREHOUSE.getId()) |
| | 147 | { |
| | 148 | playerId = getPlayerAccountId(playerId); |
| | 149 | } |
| | 150 | |
| | 151 | switch(item.getPersistentState()) |
| | 152 | { |
| | 153 | case NEW: |
| | 154 | result = insertItem(item, playerId); |
| | 155 | break; |
| | 156 | case UPDATE_REQUIRED: |
| | 157 | result = updateItem(item, playerId); |
| | 158 | break; |
| | 159 | case DELETED: |
| | 160 | result = deleteItem(item); |
| | 161 | break; |
| | 162 | } |
| | 163 | item.setPersistentState(PersistentState.UPDATED); |
| | 164 | return result; |
| | 165 | } |
| | 166 | |
| | 167 | /** |
| | 168 | * @param item |
| | 169 | * @param playerId |
| | 170 | * @return |
| | 171 | */ |
| | 172 | private boolean insertItem(final Item item, final int playerId) |
| | 173 | { |
| | 174 | return DB.insertUpdate(INSERT_QUERY, new IUStH() { |
| | 175 | @Override |
189 | try | 235 | try |
190 | { | 236 | { |
191 | ResultSet rs = statement.executeQuery(); | 237 | ResultSet rs = statement.executeQuery(); |
192 | rs.last(); | 238 | rs.last(); |
193 | int count = rs.getRow(); | 239 | int count = rs.getRow(); |
194 | rs.beforeFirst(); | 240 | rs.beforeFirst(); |
195 | int[] ids = new int[count]; | 241 | int[] ids = new int[count]; |
196 | for(int i = 0; i < count; i++) | 242 | for(int i = 0; i < count; i++) |
197 | { | 243 | { |
198 | rs.next(); | 244 | rs.next(); |
199 | ids[i] = rs.getInt("itemUniqueId"); | 245 | ids[i] = rs.getInt("itemUniqueId"); |
200 | } | 246 | } |
201 | return ids; | 247 | return ids; |
202 | } | 248 | } |
203 | catch(SQLException e) | 249 | catch(SQLException e) |
204 | { | 250 | { |
205 | log.error("Can't get list of id's from inventory table", e); | 251 | log.error("Can't get list of id's from inventory table", e); |
206 | } | 252 | } |
207 | finally | 253 | finally |
208 | { | 254 | { |
209 | DB.close(statement); | 255 | DB.close(statement); |
210 | } | 256 | } |