Browse Source

Refactor to remove abstraction.

master
MagicBot 2 years ago
parent
commit
6be3ca41f8
  1. 346
      src/engine/db/handlers/dbItemHandler.java

346
src/engine/db/handlers/dbItemHandler.java

@ -89,18 +89,19 @@ public class dbItemHandler extends dbHandlerBase {
public String GET_OWNER(int ownerID) { public String GET_OWNER(int ownerID) {
String ownerType = ""; String ownerType;
try (Connection connection = DbManager.getConnection(); try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `type` FROM `object` WHERE `UID`=?")) { PreparedStatement preparedStatement = connection.prepareStatement("SELECT `type` FROM `object` WHERE `UID`=?")) {
preparedStatement.setInt(1, ownerID); preparedStatement.setInt(1, ownerID);
ResultSet rs = preparedStatement.executeQuery(); ResultSet rs = preparedStatement.executeQuery();
ownerType = rs.getString("type"); ownerType = rs.getString("type");
} catch (SQLException e) { } catch (SQLException e) {
Logger.error(e); Logger.error(e);
return "";
} }
return ownerType; return ownerType;
@ -112,6 +113,7 @@ public class dbItemHandler extends dbHandlerBase {
AbstractCharacter ac1 = man1.getOwner(); AbstractCharacter ac1 = man1.getOwner();
AbstractCharacter ac2 = man2.getOwner(); AbstractCharacter ac2 = man2.getOwner();
boolean worked = false;
if (ac1 == null || ac2 == null || inventoryGold1 == null || inventoryGold2 == null) if (ac1 == null || ac2 == null || inventoryGold1 == null || inventoryGold2 == null)
return false; return false;
@ -130,12 +132,14 @@ public class dbItemHandler extends dbHandlerBase {
ResultSet rs = preparedStatement.executeQuery(); ResultSet rs = preparedStatement.executeQuery();
return rs.getBoolean("result"); if (rs.next())
worked = rs.getBoolean("result");
} catch (SQLException e) { } catch (SQLException e) {
Logger.error(e); Logger.error(e);
return false; return false;
} }
return worked;
} }
private static String formatTradeString(HashSet<Integer> list) { private static String formatTradeString(HashSet<Integer> list) {
@ -159,139 +163,254 @@ public class dbItemHandler extends dbHandlerBase {
} }
public ArrayList<Item> GET_EQUIPPED_ITEMS(final int targetId) { public ArrayList<Item> GET_EQUIPPED_ITEMS(final int targetId) {
prepareCallable("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`parent`=? && `obj_item`.`item_container`='equip';");
setLong(1, (long) targetId); ArrayList<Item> itemList;
return getObjectList();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`parent`=? && `obj_item`.`item_container`='equip';")) {
preparedStatement.setLong(1, (long) targetId);
ResultSet rs = preparedStatement.executeQuery();
itemList = getObjectsFromRs(rs, 50);
} catch (SQLException e) {
Logger.error(e);
return null;
} }
public Item GET_ITEM(final int id) { return itemList;
}
public Item GET_ITEM(final int itemUUID) {
Item item;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`UID`=?;")) {
preparedStatement.setLong(1, itemUUID);
ResultSet rs = preparedStatement.executeQuery();
prepareCallable("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`UID`=?;"); item = (Item) getObjectFromRs(rs);
setLong(1, (long) id);
return (Item) getObjectSingle(id); } catch (SQLException e) {
Logger.error(e);
return null;
}
return item;
} }
public ArrayList<Item> GET_ITEMS_FOR_ACCOUNT(final int accountId) { public ArrayList<Item> GET_ITEMS_FOR_ACCOUNT(final int accountId) {
prepareCallable("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`parent`=?;");
setLong(1, (long) accountId); ArrayList<Item> itemList;
return getObjectList();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`parent`=?;")) {
preparedStatement.setLong(1, (long) accountId);
ResultSet rs = preparedStatement.executeQuery();
itemList = getObjectsFromRs(rs, 100);
} catch (SQLException e) {
Logger.error(e);
return null;
}
return itemList;
} }
public ArrayList<Item> GET_ITEMS_FOR_NPC(final int npcId) { public ArrayList<Item> GET_ITEMS_FOR_NPC(final int npcId) {
prepareCallable("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`parent`=?");
setLong(1, (long) npcId); ArrayList<Item> itemList;
return getObjectList();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`parent`=?;")) {
preparedStatement.setLong(1, npcId);
ResultSet rs = preparedStatement.executeQuery();
itemList = getObjectsFromRs(rs, 20);
} catch (SQLException e) {
Logger.error(e);
return null;
}
return itemList;
} }
public ArrayList<Item> GET_ITEMS_FOR_PC(final int id) { public ArrayList<Item> GET_ITEMS_FOR_PC(final int id) {
prepareCallable("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`parent`=?");
setLong(1, (long) id); ArrayList<Item> itemList;
return getLargeObjectList();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`parent`=?")) {
preparedStatement.setLong(1, (long) id);
ResultSet rs = preparedStatement.executeQuery();
itemList = getObjectsFromRs(rs, 100);
} catch (SQLException e) {
Logger.error(e);
return null;
}
return itemList;
} }
public boolean MOVE_GOLD(final Item from, final Item to, final int amt) { public boolean MOVE_GOLD(final Item from, final Item to, final int amt) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_numberOfItems` = CASE WHEN `UID`=? THEN ? WHEN `UID`=? THEN ? END WHERE `UID` IN (?, ?);")) {
int newFromAmt = from.getNumOfItems() - amt; int newFromAmt = from.getNumOfItems() - amt;
int newToAmt = to.getNumOfItems() + amt; int newToAmt = to.getNumOfItems() + amt;
prepareCallable("UPDATE `obj_item` SET `item_numberOfItems` = CASE WHEN `UID`=? THEN ? WHEN `UID`=? THEN ? END WHERE `UID` IN (?, ?);");
setLong(1, (long) from.getObjectUUID()); preparedStatement.setLong(1, (long) from.getObjectUUID());
setInt(2, newFromAmt); preparedStatement.setInt(2, newFromAmt);
setLong(3, (long) to.getObjectUUID()); preparedStatement.setLong(3, (long) to.getObjectUUID());
setInt(4, newToAmt); preparedStatement.setInt(4, newToAmt);
setLong(5, (long) from.getObjectUUID()); preparedStatement.setLong(5, (long) from.getObjectUUID());
setLong(6, (long) to.getObjectUUID()); preparedStatement.setLong(6, (long) to.getObjectUUID());
return (executeUpdate() != 0);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
} }
public boolean ORPHAN_INVENTORY(final HashSet<Item> inventory) { public boolean ORPHAN_INVENTORY(final HashSet<Item> inventory) {
boolean worked = true; boolean worked = true;
for (Item item : inventory) { for (Item item : inventory) {
if (item.getItemBase().getType().equals(ItemType.GOLD)) if (item.getItemBase().getType().equals(ItemType.GOLD))
continue; continue;
prepareCallable("UPDATE `obj_item` LEFT JOIN `object` ON `object`.`UID` = `obj_item`.`UID` SET `object`.`parent`=NULL, `obj_item`.`item_container`='none' WHERE `object`.`UID`=?;"); try (Connection connection = DbManager.getConnection();
setLong(1, (long) item.getObjectUUID()); PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` LEFT JOIN `object` ON `object`.`UID` = `obj_item`.`UID` SET `object`.`parent`=NULL, `obj_item`.`item_container`='none' WHERE `object`.`UID`=?;")) {
if (executeUpdate() == 0)
worked = false; preparedStatement.setLong(1, (long) item.getObjectUUID());
else worked = (preparedStatement.executeUpdate() > 0);
if (worked)
item.zeroItem(); item.zeroItem();
} catch (SQLException e) {
Logger.error(e);
return false;
}
} }
return worked; return worked;
} }
public HashSet<Integer> GET_ITEMS_FOR_VENDOR(final int vendorID) { public HashSet<Integer> GET_ITEMS_FOR_VENDOR(final int vendorID) {
prepareCallable("SELECT ID FROM static_itembase WHERE vendorType = ?");
setInt(1, vendorID);
return getIntegerList(1);
}
public String SET_PROPERTY(final Item i, String name, Object new_value) { HashSet<Integer> itemSet = new HashSet<>();
prepareCallable("CALL item_SETPROP(?,?,?)");
setLong(1, (long) i.getObjectUUID()); try (Connection connection = DbManager.getConnection();
setString(2, name); PreparedStatement preparedStatement = connection.prepareStatement("SELECT ID FROM static_itembase WHERE vendorType = ?")) {
setString(3, String.valueOf(new_value));
return getResult(); preparedStatement.setInt(1, vendorID);
ResultSet rs = preparedStatement.executeQuery();
while (rs.next())
itemSet.add(rs.getInt(1));
} catch (SQLException e) {
Logger.error(e);
return itemSet;
} }
public String SET_PROPERTY(final Item i, String name, Object new_value, Object old_value) { return itemSet;
prepareCallable("CALL item_GETSETPROP(?,?,?,?)");
setLong(1, (long) i.getObjectUUID());
setString(2, name);
setString(3, String.valueOf(new_value));
setString(4, String.valueOf(old_value));
return getResult();
} }
//Used to transfer a single item between owners or equip or vault or bank or inventory //Used to transfer a single item between owners or equip or vault or bank or inventory
public boolean UPDATE_OWNER(final Item item, int newOwnerID, boolean ownerNPC, boolean ownerPlayer, public boolean UPDATE_OWNER(final Item item, int newOwnerID, boolean ownerNPC, boolean ownerPlayer,
boolean ownerAccount, ItemContainerType containerType, int slot) { boolean ownerAccount, ItemContainerType containerType, int slot) {
prepareCallable("CALL `item_TRANSFER_OWNER`(?, ?, ?, ? )"); boolean worked = false;
setLong(1, (long) item.getObjectUUID());
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL `item_TRANSFER_OWNER`(?, ?, ?, ? )")) {
preparedStatement.setLong(1, item.getObjectUUID());
if (newOwnerID != 0) if (newOwnerID != 0)
setLong(2, (long) newOwnerID); preparedStatement.setLong(2, newOwnerID);
else else
setNULL(2, java.sql.Types.BIGINT); preparedStatement.setNull(2, java.sql.Types.BIGINT);
switch (containerType) { switch (containerType) {
case INVENTORY: case INVENTORY:
setString(3, "inventory"); preparedStatement.setString(3, "inventory");
break; break;
case EQUIPPED: case EQUIPPED:
setString(3, "equip"); preparedStatement.setString(3, "equip");
break; break;
case BANK: case BANK:
setString(3, "bank"); preparedStatement.setString(3, "bank");
break; break;
case VAULT: case VAULT:
setString(3, "vault"); preparedStatement.setString(3, "vault");
break; break;
case FORGE: case FORGE:
setString(3, "forge"); preparedStatement.setString(3, "forge");
break; break;
default: default:
setString(3, "none"); //Shouldn't be here preparedStatement.setString(3, "none"); //Shouldn't be here
break; break;
} }
setInt(4, slot); preparedStatement.setInt(4, slot);
return worked(); ResultSet rs = preparedStatement.executeQuery();
if (rs.next())
worked = rs.getBoolean("result");
} catch (SQLException e) {
Logger.error(e);
return false;
}
return worked;
} }
public boolean SET_DURABILITY(final Item item, int value) { public boolean SET_DURABILITY(final Item item, int value) {
prepareCallable("UPDATE `obj_item` SET `item_durabilityCurrent`=? WHERE `UID`=? AND `item_durabilityCurrent`=?");
setInt(1, value);
setLong(2, (long) item.getObjectUUID());
setInt(3, (int) item.getDurabilityCurrent());
return (executeUpdate() != 0);
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_durabilityCurrent`=? WHERE `UID`=? AND `item_durabilityCurrent`=?")) {
preparedStatement.setInt(1, value);
preparedStatement.setLong(2, (long) item.getObjectUUID());
preparedStatement.setInt(3, (int) item.getDurabilityCurrent());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
} }
public boolean UPDATE_FORGE_TO_INVENTORY(final Item item) { public boolean UPDATE_FORGE_TO_INVENTORY(final Item item) {
prepareCallable("UPDATE `obj_item` SET `item_container` = ? WHERE `UID` = ? AND `item_container` = 'forge';");
setString(1, "inventory"); try (Connection connection = DbManager.getConnection();
setLong(2, (long) item.getObjectUUID()); PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_container` = ? WHERE `UID` = ? AND `item_container` = 'forge';")) {
return (executeUpdate() != 0);
preparedStatement.setString(1, "inventory");
preparedStatement.setLong(2, (long) item.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
} }
/** /**
@ -313,43 +432,88 @@ public class dbItemHandler extends dbHandlerBase {
*/ */
public boolean UPDATE_GOLD(final Item item, int newValue, int oldValue) { public boolean UPDATE_GOLD(final Item item, int newValue, int oldValue) {
if (item.getItemBase().getType().equals(ItemType.GOLD) == false) if (!item.getItemBase().getType().equals(ItemType.GOLD))
return false; return false;
prepareCallable("UPDATE `obj_item` SET `item_numberOfItems`=? WHERE `UID`=?"); try (Connection connection = DbManager.getConnection();
setInt(1, newValue); PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_numberOfItems`=? WHERE `UID`=?")) {
setLong(2, (long) item.getObjectUUID());
return (executeUpdate() != 0); preparedStatement.setInt(1, newValue);
preparedStatement.setLong(2, (long) item.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
} }
public boolean UPDATE_REMAINING_CHARGES(final Item item) { public boolean UPDATE_REMAINING_CHARGES(final Item item) {
prepareCallable("UPDATE `obj_item` SET `item_chargesRemaining` = ? WHERE `UID` = ?");
setInt(1, item.getChargesRemaining()); try (Connection connection = DbManager.getConnection();
setLong(2, (long) item.getObjectUUID()); PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_chargesRemaining` = ? WHERE `UID` = ?")) {
return (executeUpdate() != 0);
preparedStatement.setInt(1, item.getChargesRemaining());
preparedStatement.setLong(2, (long) item.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
} }
// This is necessary because default number of items is 1. // This is necessary because default number of items is 1.
// When we create gold, we want it to start at 0 quantity. // When we create gold, we want it to start at 0 quantity.
public boolean ZERO_ITEM_STACK(Item item) { public boolean ZERO_ITEM_STACK(Item item) {
prepareCallable("UPDATE `obj_item` SET `item_numberOfItems`=0 WHERE `UID` = ?");
setLong(1, (long) item.getObjectUUID()); try (Connection connection = DbManager.getConnection();
return (executeUpdate() != 0); PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_numberOfItems`=0 WHERE `UID` = ?")) {
preparedStatement.setLong(1, (long) item.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
} }
public boolean UPDATE_FLAGS(Item item) { public boolean UPDATE_FLAGS(Item item) {
prepareCallable("UPDATE `obj_item` SET `item_flags`=? WHERE `UID` = ?");
setInt(1, item.getFlags()); try (Connection connection = DbManager.getConnection();
setLong(2, (long) item.getObjectUUID()); PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_flags`=? WHERE `UID` = ?")) {
return (executeUpdate() != 0);
preparedStatement.setInt(1, item.getFlags());
preparedStatement.setLong(2, (long) item.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
} }
public boolean UPDATE_VALUE(Item item,int value) { public boolean UPDATE_VALUE(Item item,int value) {
prepareCallable("UPDATE `obj_item` SET `item_value`=? WHERE `UID` = ?");
setInt(1, value);
setLong(2, (long) item.getObjectUUID());
return (executeUpdate() != 0);
}
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_value`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, value);
preparedStatement.setLong(2, (long) item.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
} }

Loading…
Cancel
Save