MoparClassic/LoginServer/src/org/moparscape/msc/ls/model/PlayerSave.java

606 lines
14 KiB
Java

package org.moparscape.msc.ls.model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import org.moparscape.msc.ls.Server;
import org.moparscape.msc.ls.util.DataConversions;
public class PlayerSave {
public static final String[] statArray = { "attack", "defense", "strength",
"hits", "ranged", "prayer", "magic", "cooking", "woodcut",
"fletching", "fishing", "firemaking", "crafting", "smithing",
"mining", "herblaw", "agility", "thieving" };
public static PlayerSave loadPlayer(long user) {
PlayerSave save = new PlayerSave(user);
ResultSet result;
try {
result = Server.db
.getQuery("SELECT * FROM `pk_players` WHERE `user`='"
+ save.getUser() + "'");
if (!result.next()) {
return save;
}
long eventcd = result.getLong("eventcd");
long subexp = result.getLong("sub_expires");
@SuppressWarnings("unused")
long now = System.currentTimeMillis() / 1000;
int sowner = result.getInt("owner");
save.setOwner(sowner, result.getInt("group_id"), subexp);
save.setMuted(result.getLong("muted"));
/*
* if(subexp - now < 1) {
* Server.db.updateQuery("UPDATE users SET group_id='4' WHERE `id`='"
* + sowner + "'"); save.setOwner(sowner, 0,
* result.getLong("subexp")); }
*/
save.setLogin(result.getLong("login_date"),
DataConversions.IPToLong(result.getString("login_ip")));
save.setLocation(result.getInt("x"), result.getInt("y"));
save.setFatigue(result.getInt("fatigue"));
save.setCombatStyle((byte) result.getInt("combatstyle"));
save.setPrivacy(result.getInt("block_chat") == 1,
result.getInt("block_private") == 1,
result.getInt("block_trade") == 1,
result.getInt("block_duel") == 1);
save.setSettings(result.getInt("cameraauto") == 1,
result.getInt("onemouse") == 1,
result.getInt("soundoff") == 1,
result.getInt("showroof") == 1,
result.getInt("autoscreenshot") == 1,
result.getInt("combatwindow") == 1);
save.setAppearance((byte) result.getInt("haircolour"),
(byte) result.getInt("topcolour"),
(byte) result.getInt("trousercolour"),
(byte) result.getInt("skincolour"),
(byte) result.getInt("headsprite"),
(byte) result.getInt("bodysprite"),
result.getInt("male") == 1, result.getInt("skulled"));
save.setQuestPoints(result.getInt("quest_points"));
result = Server.db
.getQuery("SELECT * FROM `pk_experience` WHERE `user`='"
+ save.getUser() + "'");
if (!result.next()) {
return save;
}
for (int i = 0; i < 18; i++) {
save.setExp(i, result.getInt("exp_" + statArray[i]));
}
result = Server.db
.getQuery("SELECT * FROM `pk_curstats` WHERE `user`='"
+ save.getUser() + "'");
if (!result.next()) {
return save;
}
for (int i = 0; i < 18; i++) {
save.setLvl(i, result.getInt("cur_" + statArray[i]));
}
result = Server.db
.getQuery("SELECT id,amount,wielded FROM `pk_invitems` WHERE `user`='"
+ save.getUser() + "' ORDER BY `slot` ASC");
while (result.next()) {
save.addInvItem(result.getInt("id"), result.getInt("amount"),
result.getInt("wielded") == 1);
}
result = Server.db
.getQuery("SELECT id,amount FROM `pk_bank` WHERE `user`='"
+ save.getUser() + "' ORDER BY `slot` ASC");
while (result.next()) {
save.addBankItem(result.getInt("id"), result.getInt("amount"));
}
result = Server.db
.getQuery("SELECT friend FROM `pk_friends` WHERE `user`='"
+ save.getUser() + "'");
while (result.next()) {
save.addFriend(result.getLong("friend"));
}
result = Server.db
.getQuery("SELECT `ignore` FROM `pk_ignores` WHERE `user`='"
+ save.getUser() + "'");
while (result.next()) {
save.addIgnore(result.getLong("ignore"));
}
result = Server.db
.getQuery("SELECT * FROM `pk_quests` WHERE `user`='"
+ save.getUser() + "'");
while (result.next()) {
save.setQuestStage(result.getInt("id"), result.getInt("stage"));
}
save.setEventCD(eventcd);
} catch (SQLException e) {
Server.error("SQL Exception Loading "
+ DataConversions.hashToUsername(user) + ": "
+ e.getMessage());
}
return save;
}
private long eventcd = 0;
private long muted;
private ArrayList<BankItem> bankItems = new ArrayList<BankItem>();
private boolean blockChat, blockPrivate, blockTrade, blockDuel;
private boolean cameraAuto, oneMouse, soundOff, showRoof, autoScreenshot,
combatWindow;
private int combat, skillTotal;
private byte combatStyle;
private long[] exp = new long[18];
private int fatigue;
private ArrayList<Long> friendList = new ArrayList<Long>();
private byte hairColour, topColour, trouserColour, skinColour, headSprite,
bodySprite;
private ArrayList<Long> ignoreList = new ArrayList<Long>();
private ArrayList<InvItem> invItems = new ArrayList<InvItem>();
private long lastUpdate = 0;
private long loginDate, loginIP;
private int[] lvl = new int[18];
private boolean male;
private int owner, group;
private int questPoints;
private HashMap<Integer, Integer> questStage = new HashMap<Integer, Integer>();
private long skulled;
private long subExpires;
private long user;
private int x, y;
private PlayerSave(long user) {
this.user = user;
}
public void addBankItem(int id, int amount) {
bankItems.add(new BankItem(id, amount));
}
public void addFriend(long friend) {
friendList.add(friend);
}
public void addIgnore(long friend) {
ignoreList.add(friend);
}
public void addInvItem(int id, int amount, boolean wielded) {
invItems.add(new InvItem(id, amount, wielded));
}
public boolean autoScreenshot() {
return autoScreenshot;
}
public boolean blockChat() {
return blockChat;
}
public boolean blockDuel() {
return blockDuel;
}
public boolean blockPrivate() {
return blockPrivate;
}
public boolean blockTrade() {
return blockTrade;
}
public boolean cameraAuto() {
return cameraAuto;
}
public void clearBankItems() {
bankItems.clear();
}
public void clearInvItems() {
invItems.clear();
}
public void clearQuestStages() {
questStage.clear();
}
public boolean combatWindow() {
return combatWindow;
}
public int getBankCount() {
return bankItems.size();
}
public BankItem getBankItem(int i) {
return bankItems.get(i);
}
public int getBodySprite() {
return bodySprite;
}
public byte getCombatStyle() {
return combatStyle;
}
public long getExp(int i) {
return exp[i];
}
public int getFatigue() {
return fatigue;
}
public long getFriend(int i) {
return friendList.get(i);
}
public int getFriendCount() {
return friendList.size();
}
public int getGroup() {
return group;
}
public int getHairColour() {
return hairColour;
}
public int getHeadSprite() {
return headSprite;
}
public long getIgnore(int i) {
return ignoreList.get(i);
}
public int getIgnoreCount() {
return ignoreList.size();
}
public int getInvCount() {
return invItems.size();
}
public InvItem getInvItem(int i) {
return invItems.get(i);
}
public long getLastIP() {
return loginIP;
}
public long getLastLogin() {
return loginDate;
}
public long getLastUpdate() {
return lastUpdate;
}
public int getOwner() {
return owner;
}
public int getQuestPoints() {
return questPoints;
}
public int getQuestStage(int id) {
return questStage.get(id);
}
public HashMap<Integer, Integer> getQuestStages() {
return questStage;
}
public int getSkinColour() {
return skinColour;
}
public long getSkullTime() {
return skulled;
}
public int getStat(int i) {
return lvl[i];
}
public long getSubscriptionExpires() {
return subExpires;
}
public int getTopColour() {
return topColour;
}
public int getTrouserColour() {
return trouserColour;
}
public long getUser() {
return user;
}
public String getUsername() {
return DataConversions.hashToUsername(user);
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public boolean isMale() {
return male;
}
public boolean oneMouse() {
return oneMouse;
}
public void removeFriend(long friend) {
friendList.remove(friend);
}
public void removeIgnore(long friend) {
ignoreList.remove(friend);
}
public boolean save() {
try {
String query;
Server.db.updateQuery("DELETE FROM `pk_bank` WHERE `user`='" + user
+ "'");
if (bankItems.size() > 0) {
query = "INSERT INTO `pk_bank`(`user`, `id`, `amount`, `slot`) VALUES";
int slot = 0;
for (BankItem item : bankItems) {
query += "('" + user + "', '" + item.getID() + "', '"
+ item.getAmount() + "', '" + (slot++) + "'),";
}
Server.db.updateQuery(query.substring(0, query.length() - 1));
}
Server.db.updateQuery("DELETE FROM `pk_invitems` WHERE `user`='"
+ user + "'");
ResultSet result = Server.db
.getQuery("Select 1 FROM `pk_players` WHERE `user`='"
+ user + "' AND `owner`='" + owner + "'");
if (!result.next())
return false;
Server.db.updateQuery("UPDATE `pk_players` SET `combat`=" + combat
+ ", skill_total=" + skillTotal + ", `x`=" + x + ", `y`='"
+ y + "', `fatigue`='" + fatigue + "', `haircolour`="
+ hairColour + ", `topcolour`=" + topColour
+ ", `trousercolour`=" + trouserColour + ", `skincolour`="
+ skinColour + ", `headsprite`=" + headSprite
+ ", `bodysprite`=" + bodySprite + ", `male`="
+ (male ? 1 : 0) + ", `skulled`=" + skulled
+ ", `combatstyle`=" + combatStyle + ", `quest_points`="
+ questPoints + " WHERE `user`='" + user + "'");
query = "UPDATE `pk_experience` SET ";
for (int i = 0; i < 18; i++)
query += "`exp_" + statArray[i] + "`=" + exp[i] + ",";
Server.db.updateQuery(query.substring(0, query.length() - 1)
+ " WHERE `user`='" + user + "'");
query = "UPDATE `pk_curstats` SET ";
for (int i = 0; i < 18; i++)
query += "`cur_" + statArray[i] + "`=" + lvl[i] + ",";
Server.db.updateQuery(query.substring(0, query.length() - 1)
+ " WHERE `user`='" + user + "'");
if (invItems.size() > 0) {
query = "INSERT INTO `pk_invitems`(`user`, `id`, `amount`, `wielded`, `slot`) VALUES";
int slot = 0;
for (InvItem item : invItems)
query += "('" + user + "', '" + item.getID() + "', '"
+ item.getAmount() + "', '"
+ (item.isWielded() ? 1 : 0) + "', '" + (slot++)
+ "'),";
Server.db.updateQuery(query.substring(0, query.length() - 1));
}
Server.db.updateQuery("DELETE FROM `pk_quests` WHERE `user`='"
+ user + "'");
query = "INSERT INTO `pk_quests` (`user`, `id`, `stage`) VALUES";
java.util.Set<Integer> keys = questStage.keySet();
for (int id : keys)
query += "('" + user + "', '" + id + "', '"
+ questStage.get(id) + "'),";
Server.db.updateQuery(query.substring(0, query.length() - 1));
Server.db.updateQuery("UPDATE `pk_players` SET eventcd='"
+ getEventCD() + "' WHERE user='" + user + "'");
return true;
} catch (SQLException e) {
e.printStackTrace();
Server.error(e);
return false;
}
}
public void setAppearance(byte hairColour, byte topColour,
byte trouserColour, byte skinColour, byte headSprite,
byte bodySprite, boolean male, long skulled) {
this.hairColour = hairColour;
this.topColour = topColour;
this.trouserColour = trouserColour;
this.skinColour = skinColour;
this.headSprite = headSprite;
this.bodySprite = bodySprite;
this.male = male;
this.skulled = skulled;
}
public void setCombatStyle(byte combatStyle) {
this.combatStyle = combatStyle;
}
public void setExp(int stat, long exp) {
this.exp[stat] = exp;
}
public void setFatigue(int fatigue) {
this.fatigue = fatigue;
}
public void setEventCD(long eventcd) {
this.eventcd = eventcd;
}
public long getEventCD() {
return eventcd;
}
public void setGameSetting(int idx, boolean on) {
switch (idx) {
case 0:
cameraAuto = on;
break;
case 2:
oneMouse = on;
break;
case 3:
soundOff = on;
break;
case 4:
showRoof = on;
break;
case 5:
autoScreenshot = on;
break;
case 6:
combatWindow = on;
break;
}
}
public void setLastUpdate(long lastUpdate) {
this.lastUpdate = lastUpdate;
}
public void setLocation(int x, int y) {
this.x = x;
this.y = y;
}
public void setLogin(long loginDate, long loginIP) {
this.loginDate = loginDate;
this.loginIP = loginIP;
}
public void setLvl(int stat, int lvl) {
this.lvl[stat] = lvl;
}
public void setOwner(int owner) {
this.owner = owner;
}
public void setOwner(int owner, int group, long subExpires) {
this.owner = owner;
this.group = group;
this.subExpires = subExpires;
}
public void setPrivacy(boolean blockChat, boolean blockPrivate,
boolean blockTrade, boolean blockDuel) {
this.blockChat = blockChat;
this.blockPrivate = blockPrivate;
this.blockTrade = blockTrade;
this.blockDuel = blockDuel;
}
public void setPrivacySetting(int idx, boolean on) {
switch (idx) {
case 0:
blockChat = on;
break;
case 1:
blockPrivate = on;
break;
case 2:
blockTrade = on;
break;
case 3:
blockDuel = on;
break;
}
}
public void setQuestPoints(int i) {
questPoints = i;
}
public void setQuestStage(int index, int stage) {
questStage.put(index, stage);
}
public void setSettings(boolean cameraAuto, boolean oneMouse,
boolean soundOff, boolean showRoof, boolean autoScreenshot,
boolean combatWindow) {
this.cameraAuto = cameraAuto;
this.oneMouse = oneMouse;
this.soundOff = soundOff;
this.showRoof = showRoof;
this.autoScreenshot = autoScreenshot;
this.combatWindow = combatWindow;
}
public void setStat(int stat, long exp, int lvl) {
this.exp[stat] = exp;
this.lvl[stat] = lvl;
}
public void setTotals(int combat, int skillTotal) {
this.combat = combat;
this.skillTotal = skillTotal;
}
public boolean showRoof() {
return showRoof;
}
public boolean soundOff() {
return soundOff;
}
public void setMuted(long muted) {
this.muted = muted;
}
public long getMuted() {
return muted;
}
}