I always have no solution, Please help me....
Quests plethora Players load exceed 30 second DC.
Quests plethora Players load exceed 30 second DC.
PHP:
public static MapleCharacter loadCharFromDB(int charid, MapleClient client, boolean channelserver) throws SQLException {
try {
MapleCharacter ret = new MapleCharacter();
ret.client = client;
ret.id = charid;
Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT * FROM characters WHERE id = ?");
ps.setInt(1, charid);
ResultSet rs = ps.executeQuery();
if (!rs.next()) {
rs.close();
ps.close();
throw new RuntimeException("無法正確讀取文字字符 (nao encontrado)");
}
ret.name = rs.getString("name");
ret.level = rs.getInt("level");
ret.fame = rs.getInt("fame");
ret.str = rs.getInt("str");
ret.dex = rs.getInt("dex");
ret.int_ = rs.getInt("int");
ret.luk = rs.getInt("luk");
ret.exp.set(rs.getInt("exp"));
ret.hp = rs.getInt("hp");
ret.maxhp = rs.getInt("maxhp");
ret.mp = rs.getInt("mp");
ret.maxmp = rs.getInt("maxmp");
ret.hpApUsed = rs.getInt("hpApUsed");
ret.mpApUsed = rs.getInt("mpApUsed");
ret.remainingSp = rs.getInt("sp");
ret.remainingAp = rs.getInt("ap");
ret.meso.set(rs.getInt("meso"));
ret.gmLevel = rs.getInt("gm");
ret.LeaderPoints = rs.getInt("LeaderPoints");
ret.FestivalPoints = rs.getInt("FestivalPoints");
ret.AriantPontos = rs.getInt("AriantPontos");
ret.hpMpApUsed = rs.getInt("hpMpUsed");
ret.skinColor = MapleSkinColor.getById(rs.getInt("skincolor"));
ret.gender = rs.getInt("gender");
ret.job = MapleJob.getById(rs.getInt("job"));
//Mini-jogos
ret.omokwins = rs.getInt("omokwins");
ret.omoklosses = rs.getInt("omoklosses");
ret.omokties = rs.getInt("omokties");
ret.matchcardwins = rs.getInt("matchcardwins");
ret.matchcardlosses = rs.getInt("matchcardlosses");
ret.matchcardties = rs.getInt("matchcardties");
//cantalk
ret.canTalk = rs.getInt("cantalk");
//marriage
ret.married = rs.getInt("married") == 0 ? false : true;
ret.partnerid = rs.getInt("partnerid");
ret.marriageQuestLevel = rs.getInt("marriagequest");
//mount
int mountexp = rs.getInt("mountexp");
int mountlevel = rs.getInt("mountlevel");
int mounttiredness = rs.getInt("mounttiredness");
ret.merchantMesos = rs.getInt("MerchantMesos");
ret.hasMerchant = rs.getInt("HasMerchant") == 1;
ret.zakumLvl = rs.getInt("zakumLvl");
ret.hair = rs.getInt("hair");
ret.face = rs.getInt("face");
ret.accountid = rs.getInt("accountid");
ret.mapid = rs.getInt("map");
ret.initialSpawnPoint = rs.getInt("spawnpoint");
ret.world = rs.getInt("world");
ret.rank = rs.getInt("rank");
ret.rankMove = rs.getInt("rankMove");
ret.jobRank = rs.getInt("jobRank");
ret.jobRankMove = rs.getInt("jobRankMove");
ret.guildid = rs.getInt("guildid");
ret.guildrank = rs.getInt("guildrank");
ret.allianceRank = rs.getInt("allianceRank");
if (ret.guildid > 0) {
ret.mgc = new MapleGuildCharacter(ret);
}
int buddyCapacity = rs.getInt("buddyCapacity");
ret.buddylist = new BuddyList(buddyCapacity);
ret.bosspoints = rs.getInt("bosspoints");
if (channelserver) {
// ret.chatlog = ChatLog.load(ret.name);
MapleMapFactory mapFactory = ChannelServer.getInstance(client.getChannel()).getMapFactory();
ret.map = mapFactory.getMap(ret.mapid);
if (ret.map == null) { //char is on a map that doesn't exist warp it to henesys
ret.map = mapFactory.getMap(100000000);
}
int rMap = ret.map.getForcedReturnId();
if (rMap != 999999999) {
ret.map = mapFactory.getMap(rMap);
}
MaplePortal portal = ret.map.getPortal(ret.initialSpawnPoint);
if (portal == null) {
portal = ret.map.getPortal(0); // char is on a spawnpoint that doesn't exist - select the first spawnpoint instead
ret.initialSpawnPoint = 0;
}
ret.setPosition(portal.getPosition());
int partyid = rs.getInt("party");
try {
MapleParty party = client.getChannelServer().getWorldInterface().getParty(partyid);
if (party != null) {
ret.mpc = party.getMemberById(ret.id);
if (ret.mpc != null) {
ret.party = party;
}
}
} catch (RemoteException ex) {
client.getChannelServer().reconnectWorld();
}
int messengerid = rs.getInt("messengerid");
int position = rs.getInt("messengerposition");
if (messengerid > 0 && position < 4 && position > -1) {
try {
WorldChannelInterface wci = ChannelServer.getInstance(client.getChannel()).getWorldInterface();
MapleMessenger messenger = wci.getMessenger(messengerid);
if (messenger != null) {
ret.messenger = messenger;
ret.messengerposition = position;
}
} catch (RemoteException e) {
client.getChannelServer().reconnectWorld();
}
}
if (ChannelServer.getInstance(1).getLordId() == ret.id) {
ret.lord = true;
}
//ret.loadCooldowns(con);
}
rs.close();
ps.close();
ps = con.prepareStatement("SELECT * FROM accounts WHERE id = ?");
ps.setInt(1, ret.accountid);
rs = ps.executeQuery();
while (rs.next()) {
ret.getClient().setAccountName(rs.getString("name"));
ret.paypalnx = rs.getInt("paypalNX");
ret.maplepoints = rs.getInt("mPoints");
ret.cardnx = rs.getInt("cardNX");
ret.donatorPoints = rs.getInt("donatorpoints");
ret.votePoints = rs.getInt("votePoints");
}
rs.close();
ps.close();
ps = con.prepareStatement("SELECT * FROM accounts WHERE id = ?");
ps.setInt(1, ret.accountid);
rs = ps.executeQuery();
while (rs.next()) {
ret.getClient().setAccountName(rs.getString("name"));
ret.launcher = rs.getInt("launcher");
}
rs.close();
ps.close();
String sql = "SELECT * FROM inventoryitems " + "LEFT JOIN inventoryequipment USING (inventoryitemid) " + "WHERE characterid = ?";
if (!channelserver) {
sql += " AND inventorytype = " + MapleInventoryType.EQUIPPED.getType();
}
ps = con.prepareStatement(sql);
ps.setInt(1, charid);
rs = ps.executeQuery();
while (rs.next()) {
MapleInventoryType type = MapleInventoryType.getByType((byte) rs.getInt("inventorytype"));
if (type.equals(MapleInventoryType.EQUIP) || type.equals(MapleInventoryType.EQUIPPED)) {
int itemid = rs.getInt("itemid");
Equip equip = new Equip(itemid, (byte) rs.getInt("position"), rs.getInt("ringid"));
equip.setOwner(rs.getString("owner"));
equip.setQuantity((short) rs.getInt("quantity"));
equip.setAcc((short) rs.getInt("acc"));
equip.setAvoid((short) rs.getInt("avoid"));
equip.setDex((short) rs.getInt("dex"));
equip.setHands((short) rs.getInt("hands"));
equip.setHp((short) rs.getInt("hp"));
equip.setInt((short) rs.getInt("int"));
equip.setJump((short) rs.getInt("jump"));
equip.setLuk((short) rs.getInt("luk"));
equip.setMatk((short) rs.getInt("matk"));
equip.setMdef((short) rs.getInt("mdef"));
equip.setMp((short) rs.getInt("mp"));
equip.setSpeed((short) rs.getInt("speed"));
equip.setStr((short) rs.getInt("str"));
equip.setWatk((short) rs.getInt("watk"));
equip.setWdef((short) rs.getInt("wdef"));
equip.setUpgradeSlots((byte) rs.getInt("upgradeslots"));
equip.setLocked((byte) rs.getInt("locked"));
equip.setLevel((byte) rs.getInt("level"));
equip.setExpiration(rs.getLong("expiration"));
equip.setVicious((short) rs.getInt("vicious"));
ret.getInventory(type).addFromDB(equip);
if (equip.getRingId() > -1) {
ret.addRingToCache(equip.getRingId());
}
} else {
Item item = new Item(rs.getInt("itemid"), (byte) rs.getInt("position"), (short) rs.getInt("quantity"), rs.getInt("petid"));
item.setOwner(rs.getString("owner"));
item.setExpiration(rs.getLong("expiration"));
ret.getInventory(type).addFromDB(item);
}
}
rs.close();
ps.close();
//有角色連進頻道
if (channelserver) {
ps = con.prepareStatement("SELECT * FROM queststatus WHERE characterid = ?");
ps.setInt(1, charid);
rs = ps.executeQuery();
PreparedStatement pse = con.prepareStatement("SELECT * FROM questprogress WHERE queststatusid = ?");
while (rs.next()) {
System.out.println("Load quests");
MapleQuest q = MapleQuest.getInstance(rs.getShort("quest"));
MapleQuestStatus status = new MapleQuestStatus(q, MapleQuestStatus.Status.getById(rs.getInt("status")));
long cTime = rs.getLong("time");
if (cTime > -1) {
status.setCompletionTime(cTime * 1000 );
}
status.setForfeited(rs.getInt("forfeited"));
ret.quests.put(q.getId(), status);
pse.setInt(1, rs.getInt("queststatusid"));
try (ResultSet rsProgress = pse.executeQuery()) {
while (rsProgress.next()) {
status.setProgress(rsProgress.getInt("progressid"), rsProgress.getString("progress"));
}
}
}
rs.close();
ps.close();
pse.close();
ps = con.prepareStatement("SELECT skillid,skilllevel,masterlevel FROM skills WHERE characterid = ?");
ps.setInt(1, charid);
rs = ps.executeQuery();
while (rs.next()) {
//System.out.println("載入技能");
ret.skills.put(SkillFactory.getSkill(rs.getInt("skillid")), new SkillEntry(rs.getInt("skilllevel"), rs.getInt("masterlevel")));
}
rs.close();
ps.close();
ps = con.prepareStatement("SELECT * FROM skillmacros WHERE characterid = ?");
ps.setInt(1, charid);
rs = ps.executeQuery();
while (rs.next()) {
//System.out.println("載入技能組");
int skill1 = rs.getInt("skill1");
int skill2 = rs.getInt("skill2");
int skill3 = rs.getInt("skill3");
String name = rs.getString("name");
int shout = rs.getInt("shout");
int position = rs.getInt("position");
SkillMacro macro = new SkillMacro(skill1, skill2, skill3, name, shout, position);
ret.skillMacros[position] = macro;
}
rs.close();
ps.close();
ps = con.prepareStatement("SELECT `key`,`type`,`action` FROM keymap WHERE characterid = ?");
ps.setInt(1, charid);
rs = ps.executeQuery();
while (rs.next()) {
//System.out.println("載入鍵盤");
int key = rs.getInt("key");
int type = rs.getInt("type");
int action = rs.getInt("action");
ret.keymap.put(Integer.valueOf(key), new MapleKeyBinding(type, action));
}
rs.close();
ps.close();
ps = con.prepareStatement("SELECT `locationtype`,`map` FROM savedlocations WHERE characterid = ?");
ps.setInt(1, charid);
rs = ps.executeQuery();
while (rs.next()) {
String locationType = rs.getString("locationtype");
int mapid = rs.getInt("map");
ret.savedLocations[SavedLocationType.valueOf(locationType).ordinal()] = mapid;
}
rs.close();
ps.close();
ps = con.prepareStatement("SELECT `characterid_to`,`when` FROM famelog WHERE characterid = ? AND DATEDIFF(NOW(),`when`) < 30");
ps.setInt(1, charid);
rs = ps.executeQuery();
ret.lastfametime = 0;
ret.lastmonthfameids = new ArrayList<Integer>(31);
while (rs.next()) {
ret.lastfametime = Math.max(ret.lastfametime, rs.getTimestamp("when").getTime());
ret.lastmonthfameids.add(Integer.valueOf(rs.getInt("characterid_to")));
}
rs.close();
ps.close();
ps = con.prepareStatement("SELECT `sn` FROM wishlist WHERE `characterid` = ?");
ps.setInt(1, ret.id);
rs = ps.executeQuery();
while (rs.next()) {
ret.wishList.add(rs.getInt("sn"));
}
rs.close();
ps.close();
ret.buddylist.loadFromDb(charid);
ret.storage = MapleStorage.loadOrCreateFromDB(ret.accountid);
}
if (ret.getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -18) != null) {
ret.maplemount = new MapleMount(ret, ret.getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -18).getItemId(), 1004);
ret.maplemount.setExp(mountexp);
ret.maplemount.setLevel(mountlevel);
ret.maplemount.setTiredness(mounttiredness);
ret.maplemount.setActive(false);
} else {
ret.maplemount = new MapleMount(ret, 0, 1004);
ret.maplemount.setExp(mountexp);
ret.maplemount.setLevel(mountlevel);
ret.maplemount.setTiredness(mounttiredness);
ret.maplemount.setActive(false);
}
ret.recalcLocalStats();
ret.silentEnforceMaxHpMp();
return ret;
} catch (SQLException | RuntimeException e) {
e.printStackTrace();
}
return null;
}
Attachments
You must be registered for see attachments list