- 积分
- 54
- 最后登录
- 2025-12-22
- 阅读权限
- 10
- 积分
- 54
- 回帖
- 14
- 精华
- 0
新人上路

- 枫币
- 40
- 威望
- 0
- 贡献
- 0
- 在线时间
- 6 小时
- 注册时间
- 2025-9-10
|
发表于 2025-9-27 11:15:41
|
显示全部楼层
Here is the code to solve the saveItems method issue. Copy this to src/database/loader/Itemloader.java. Replace the 3rd saveItems claim with the code below:
public void saveItems(List<Pair<Item, MapleInventoryType>> items, Connection con, int id, List<AuctionItemPackage> aitems) throws SQLException {
StringBuilder query = new StringBuilder();
query.append("DELETE FROM `").append(this.table).append("` WHERE `type` = ?");
if (this.getValue() != 7) {
query.append(" AND `").append(this.arg).append("` = ?");
}
PreparedStatement ps = con.prepareStatement(query.toString());
ps.setInt(1, this.value);
if (this.getValue() != 7) {
ps.setInt(2, id);
}
ps.executeUpdate();
ps.close();
if (items != null && !items.isEmpty()) {
List<String> psList = new ArrayList<>();
for (int i = 0; i < items.size(); i++) {
Pair<Item, MapleInventoryType> pair = items.get(i);
Item item = pair.getLeft();
MapleInventoryType mit = pair.getRight();
AuctionItemPackage aItem = (this.getValue() == 7 && aitems != null) ? aitems.get(i) : null;
StringBuilder insert = new StringBuilder();
insert.append("INSERT INTO `").append(this.table).append("` (");
if (this.getValue() == 7) {
insert.append("historyID, accountid, ");
}
insert.append(this.arg)
.append(", itemid, inventorytype, position, quantity, owner, GM_Log, uniqueid, expiredate, flag, `type`, sender, once_trade");
if (this.getValue() == 7) {
insert.append(", bid, meso, expired, bargain, ownername, buyer, buytime, starttime, `status`, inventoryitemid");
}
insert.append(") VALUES (");
if (this.getValue() == 7) {
insert.append("?, ?, ");
}
insert.append("?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?");
if (this.getValue() == 7) {
insert.append(", ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?");
}
insert.append(")");
PreparedStatement psItem = con.prepareStatement(insert.toString(), PreparedStatement.RETURN_GENERATED_KEYS);
int idx = 1;
if (this.getValue() == 7) {
psItem.setInt(idx++, aItem.getHistoryID());
psItem.setInt(idx++, aItem.getAccountID());
}
psItem.setInt(idx++, (id == -1 && aItem != null) ? aItem.getOwnerId() : id);
psItem.setInt(idx++, item.getItemId());
psItem.setInt(idx++, mit.getType());
psItem.setInt(idx++, item.getPosition());
psItem.setInt(idx++, item.getQuantity());
psItem.setString(idx++, item.getOwner());
psItem.setString(idx++, item.getGMLog());
psItem.setInt(idx++, (item.getPet() != null ? (int)Math.max(item.getUniqueId(), item.getPet().getUniqueId()) : (int)item.getUniqueId()));
psItem.setInt(idx++, (int)item.getExpiration());
psItem.setInt(idx++, item.getFlag());
psItem.setInt(idx++, this.value);
psItem.setString(idx++, item.getGiftFrom());
psItem.setInt(idx++, item.getOnceTrade());
if (this.getValue() == 7) {
psItem.setInt(idx++, (int) aItem.getBid());
psItem.setInt(idx++, (int)aItem.getMesos());
psItem.setInt(idx++, (int)aItem.getExpiredTime());
psItem.setBoolean(idx++, aItem.isBargain());
psItem.setString(idx++, aItem.getOwnerName());
psItem.setInt(idx++, aItem.getBuyer());
psItem.setInt(idx++, (int)aItem.getBuyTime());
psItem.setInt(idx++, (int)aItem.getStartTime());
psItem.setInt(idx++, aItem.getType(false, true));
psItem.setInt(idx++, (int)item.getInventoryId());
}
psItem.executeUpdate();
ResultSet rs = psItem.getGeneratedKeys();
if (rs.next()) {
long iid = rs.getLong(1);
item.setInventoryId(iid);
}
rs.close();
psItem.close();
// Save equipment if needed
if (mit == MapleInventoryType.EQUIP || mit == MapleInventoryType.EQUIPPED || mit == MapleInventoryType.CASH_EQUIP) {
Equip equip = (Equip)item;
StringBuilder equipInsert = new StringBuilder();
equipInsert.append("INSERT INTO `").append(this.table_equip).append("` VALUES (DEFAULT, ");
equipInsert.append((int)equip.getInventoryId()).append(", ");
equipInsert.append(this.arg.equals("characterid") ? id : 0).append(", ");
equipInsert.append(this.arg.equals("characterid") ? 0 : id).append(", ");
equipInsert.append(equip.getItemId()).append(", ");
equipInsert.append(Math.max(0, equip.getUpgradeSlots())).append(", ");
equipInsert.append(equip.getLevel()).append(", ");
equipInsert.append(equip.getStr()).append(", ");
equipInsert.append(equip.getDex()).append(", ");
equipInsert.append(equip.getInt()).append(", ");
equipInsert.append(equip.getLuk()).append(", ");
equipInsert.append(equip.getArc()).append(", ");
equipInsert.append(equip.getArcEXP()).append(", ");
equipInsert.append(equip.getArcLevel()).append(", ");
equipInsert.append(equip.getHp()).append(", ");
equipInsert.append(equip.getMp()).append(", ");
equipInsert.append(equip.getHpR()).append(", ");
equipInsert.append(equip.getMpR()).append(", ");
equipInsert.append(equip.getWatk()).append(", ");
equipInsert.append(equip.getMatk()).append(", ");
equipInsert.append(equip.getWdef()).append(", ");
equipInsert.append(equip.getMdef()).append(", ");
equipInsert.append(equip.getAcc()).append(", ");
equipInsert.append(equip.getAvoid()).append(", ");
equipInsert.append(equip.getHands()).append(", ");
equipInsert.append(equip.getSpeed()).append(", ");
equipInsert.append(equip.getJump()).append(", ");
equipInsert.append(equip.getViciousHammer()).append(", ");
equipInsert.append(equip.getItemEXP()).append(", ");
equipInsert.append(equip.getDurability()).append(", ");
equipInsert.append(equip.getEnhance()).append(", ");
equipInsert.append(equip.getState()).append(", ");
equipInsert.append(equip.getLines()).append(", ");
equipInsert.append(equip.getPotential1()).append(", ");
equipInsert.append(equip.getPotential2()).append(", ");
equipInsert.append(equip.getPotential3()).append(", ");
equipInsert.append(equip.getPotential4()).append(", ");
equipInsert.append(equip.getPotential5()).append(", ");
equipInsert.append(equip.getPotential6()).append(", ");
equipInsert.append(equip.getFusionAnvil()).append(", ");
equipInsert.append(equip.getIncSkill()).append(", ");
equipInsert.append(equip.getCharmEXP()).append(", ");
equipInsert.append(equip.getPVPDamage()).append(", ");
equipInsert.append(equip.getSpecialAttribute()).append(", ");
equipInsert.append(equip.getReqLevel()).append(", ");
equipInsert.append(equip.getGrowthEnchant()).append(", ");
if (!GameConstants.isTheSeedRing(equip.getItemId())) {
equipInsert.append(equip.getFinalStrike() ? 1 : 0).append(", ");
} else {
equipInsert.append(equip.getTheSeedRingLevel()).append(", ");
}
equipInsert.append(equip.getBossDamage()).append(", ");
equipInsert.append(equip.getIgnorePDR()).append(", ");
equipInsert.append(equip.getTotalDamage()).append(", ");
equipInsert.append(equip.getAllStat()).append(", ");
equipInsert.append(equip.getKarmaCount()).append(", ");
equipInsert.append(equip.getSoulName()).append(", ");
equipInsert.append(equip.getSoulEnchanter()).append(", ");
equipInsert.append(equip.getSoulPotential()).append(", ");
equipInsert.append(equip.getSoulSkill()).append(", ");
equipInsert.append(equip.getFire()).append(", ");
equipInsert.append(equip.getStarForce()).append(", ");
equipInsert.append("0, ");
equipInsert.append(equip.getDownLevel()).append(", ");
equipInsert.append(equip.getSpecialPotential()).append(", ");
equipInsert.append(equip.getSPGrade()).append(", ");
equipInsert.append(equip.getSPAttack()).append(", ");
equipInsert.append(equip.getSPAllStat()).append(", ");
equipInsert.append(equip.getItemState()).append(", ");
equipInsert.append(equip.getCsGrade()).append(", ");
equipInsert.append(equip.getCsOption1()).append(", ");
equipInsert.append(equip.getCsOption2()).append(", ");
equipInsert.append(equip.getCsOption3()).append(", ");
equipInsert.append(equip.getCsOptionExpireDate()).append(", ");
equipInsert.append(equip.getExGradeOption()).append(", ");
equipInsert.append(equip.getCHUC()).append(", ");
equipInsert.append(equip.getClearCheck()).append(", ");
equipInsert.append(equip.isSpecialRoyal() ? 1 : 0).append(", ");
equipInsert.append(equip.getSerialNumberEquip()).append(", ");
equipInsert.append(equip.getCashEnchantCount());
equipInsert.append(")");
PreparedStatement psEquip = con.prepareStatement(equipInsert.toString());
psEquip.executeUpdate();
psEquip.close();
if (equip.getExceptionalSlot() > 0 && !this.table_equip_exceptional.isEmpty()) {
String exInfo = "INSERT INTO `"
+ this.table_equip_exceptional
+ "` (`inventoryitemid`, `slot`, `str`, `dex`, `int`, `luk`, `hp`, `mp`, `watk`, `matk`, `wdef`, `mdef`, `acc`, `avoid`) VALUES ("
+ (int)equip.getInventoryId()
+ ", "
+ equip.getExceptionalSlot()
+ ", "
+ equip.getExceptSTR()
+ ", "
+ equip.getExceptDEX()
+ ", "
+ equip.getExceptINT()
+ ", "
+ equip.getExceptLUK()
+ ", "
+ equip.getExceptHP()
+ ", "
+ equip.getExceptMP()
+ ", "
+ equip.getExceptWATK()
+ ", "
+ equip.getExceptMATK()
+ ", "
+ equip.getExceptWDEF()
+ ", "
+ equip.getExceptMDEF()
+ ", "
+ equip.getExceptAVOID()
+ ", "
+ equip.getExceptJUMP()
+ ")";
psList.add(exInfo);
}
if (equip.getUniqueId() > 0L && equip.getItemId() / 10000 == 166) {
Android android = equip.getAndroid();
if (android != null) {
android.saveToDb();
}
}
}
// Save pet if needed
if (item.getPet() != null) {
item.getPet().saveToDb();
}
}
if (!psList.isEmpty()) {
for (String exInfo : psList) {
try (PreparedStatement psEx = con.prepareStatement(exInfo)) {
psEx.executeUpdate();
} catch (Exception var32) {
System.out.println("[ERROR] 익셉셔널 정보 저장 오류");
var32.printStackTrace();
}
}
}
}
} |
|