大佬,请问可以分享一下项目文件和客户端文件吗
大佬能分享下saveItems 方法的修复代码吗
Debug is true storeKey false useTicketCache true useKeyTab false doNotPrompt true ticketCache is null isInitiator true KeyTab is null refreshKrb5Config is false principal is null tryFirstPass is false useFirstPass is false storePass is false clearPass is false
Acquire TGT from Cache
Principal is null
null credentials from Ticket Cache
authentication failed
Unable to obtain Principal Name for authentication
데이터베이스를 연결하는 과정에서 오류가 발생하였습니다.2
com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: GSS-API authentication exception
我用的mariadb11.5, Eclipse jdk12.
SQL 在正常运行,但是在运行start.java的时候出现了这个bug。你知道是咋回事嘛
liang255 发表于 2025-9-23 11:58
Debug is true storeKey false useTicketCache true useKeyTab false doNotPrompt true ticketCache is nul ...
JDK版本太小了 最起码用JDK24的
niuchris 发表于 2025-9-17 13:29
大佬能分享下saveItems 方法的修复代码吗
你这问等于白问,他就是来炫耀的,就是那种在QQ群里没事贴张高版本的图,然后炫耀出来,还不分享的人
你的任务系统能用吗。我每次点击任务或者有灯泡的NPC都会闪退
dai188988 发表于 2025-9-26 22:40
JDK版本太小了 最起码用JDK24的
我用JDK24 可以运行了。源代码没啥大问题,但是有很多文件路径需要改正
liang255 发表于 2025-9-27 10:03
我用JDK24 可以运行了。源代码没啥大问题,但是有很多文件路径需要改正
问题很大啊,上线下线 装备属性丢失
liang255 发表于 2025-9-27 10:01
你的任务系统能用吗。我每次点击任务或者有灯泡的NPC都会闪退
楼主不是都说了 灯泡有问题 闪退吗 你看看他把那个节点删了
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(" 익셉셔널 정보 저장 오류");
var32.printStackTrace();
}
}
}
}
}