diff --git a/GameServer/build.xml b/GameServer/build.xml
index 8f9f763..c4b586a 100644
--- a/GameServer/build.xml
+++ b/GameServer/build.xml
@@ -4,11 +4,12 @@
+
-
+
@@ -18,6 +19,10 @@
+
+
+
+
@@ -29,6 +34,7 @@
+
@@ -69,7 +75,7 @@
-
+
diff --git a/GameServer/conf/world.xml b/GameServer/conf/world.xml
index 0c2ffc8..4e7ed86 100644
--- a/GameServer/conf/world.xml
+++ b/GameServer/conf/world.xml
@@ -78,4 +78,7 @@
conf/alert-config.xml
conf/command-config.xml
+
+
+ org.moparscape.msc.gs.persistence.impl.XMLUsingXStream
diff --git a/GameServer/ivy.xml b/GameServer/ivy.xml
index b68035c..12a0ddd 100644
--- a/GameServer/ivy.xml
+++ b/GameServer/ivy.xml
@@ -15,5 +15,8 @@
+
+
+
diff --git a/GameServer/module/DataStoreCore.jar b/GameServer/module/DataStoreCore.jar
new file mode 100644
index 0000000..bfea6ab
Binary files /dev/null and b/GameServer/module/DataStoreCore.jar differ
diff --git a/GameServer/module/XMLUsingXStreamDataStore.jar b/GameServer/module/XMLUsingXStreamDataStore.jar
new file mode 100644
index 0000000..f85dcaa
Binary files /dev/null and b/GameServer/module/XMLUsingXStreamDataStore.jar differ
diff --git a/GameServer/moparclassic.jar b/GameServer/moparclassic.jar
new file mode 100644
index 0000000..edc4207
Binary files /dev/null and b/GameServer/moparclassic.jar differ
diff --git a/GameServer/src/org/moparscape/msc/config/Config.java b/GameServer/src/org/moparscape/msc/config/Config.java
index e1a050e..066c94e 100644
--- a/GameServer/src/org/moparscape/msc/config/Config.java
+++ b/GameServer/src/org/moparscape/msc/config/Config.java
@@ -42,6 +42,7 @@ public class Config {
public static boolean OS_LEVEL_BLOCKING, APPLICATION_LEVEL_THROTTLE_ALERT,
OS_LEVEL_THROTTLE_ALERT, OS_LEVEL_UNBLOCK_FAILED_ALERT,
CONGRATS_FOR_MAX_LEVEL;
+ public static String DATA_STORE;
static {
loadEnv();
@@ -127,6 +128,8 @@ public class Config {
.getProperty("wild-combat-bonus"));
CONGRATS_FOR_MAX_LEVEL = Boolean.parseBoolean(props
.getProperty("max-level-congrats"));
+
+ DATA_STORE = props.getProperty("data-store");
props.clear();
diff --git a/GameServer/src/org/moparscape/msc/config/Formulae.java b/GameServer/src/org/moparscape/msc/config/Formulae.java
index 747e942..4f0e771 100644
--- a/GameServer/src/org/moparscape/msc/config/Formulae.java
+++ b/GameServer/src/org/moparscape/msc/config/Formulae.java
@@ -1132,7 +1132,7 @@ public class Formulae {
* - ItemLoc, GameObjectLoc, NPCLoc or an Integer.
* @return - true if inside P2P area, otherwise false.
*/
- public static boolean isP2P(boolean f2pwildy, Object... objs) {
+ public static boolean isP2P(Boolean f2pwildy, Object... objs) {
int x = -1;
int y = -1;
if (objs.length == 1) {
diff --git a/GameServer/src/org/moparscape/msc/gs/Instance.java b/GameServer/src/org/moparscape/msc/gs/Instance.java
index b65d754..67bbd72 100644
--- a/GameServer/src/org/moparscape/msc/gs/Instance.java
+++ b/GameServer/src/org/moparscape/msc/gs/Instance.java
@@ -1,9 +1,12 @@
package org.moparscape.msc.gs;
+import org.moparscape.msc.config.Config;
import org.moparscape.msc.gs.core.DelayedEventHandler;
import org.moparscape.msc.gs.db.DBConnection;
import org.moparscape.msc.gs.db.ReportHandlerQueries;
import org.moparscape.msc.gs.model.World;
+import org.moparscape.msc.gs.persistence.DataStore;
+import org.moparscape.msc.gs.persistence.impl.DataStoreFactory;
import org.moparscape.msc.gs.plugins.dependencies.PluginHandler;
/**
@@ -33,4 +36,23 @@ public class Instance {
public static ReportHandlerQueries getReport() {
return DBConnection.getReport();
}
+
+ private static DataStore dataStore;
+
+ private static void createDataStore() {
+ try {
+ dataStore = DataStoreFactory.create(Config.DATA_STORE);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("Could not create DataStore - " + Config.DATA_STORE);
+ System.exit(0);
+ }
+ }
+
+ public static DataStore getDataStore() {
+ if(dataStore == null) {
+ createDataStore();
+ }
+ return dataStore;
+ }
}
diff --git a/GameServer/src/org/moparscape/msc/gs/Server.java b/GameServer/src/org/moparscape/msc/gs/Server.java
index 7c81ae3..f78b934 100644
--- a/GameServer/src/org/moparscape/msc/gs/Server.java
+++ b/GameServer/src/org/moparscape/msc/gs/Server.java
@@ -49,7 +49,12 @@ public class Server {
Config.initConfig(configFile);
world = Instance.getWorld();
- world.wl.loadObjects();
+ try {
+ world.wl.loadObjects();
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(0);
+ }
World.initilizeDB();
diff --git a/GameServer/src/org/moparscape/msc/gs/core/DelayedEventHandler.java b/GameServer/src/org/moparscape/msc/gs/core/DelayedEventHandler.java
index 6ce1f6d..021f7a0 100644
--- a/GameServer/src/org/moparscape/msc/gs/core/DelayedEventHandler.java
+++ b/GameServer/src/org/moparscape/msc/gs/core/DelayedEventHandler.java
@@ -34,7 +34,6 @@ public final class DelayedEventHandler {
events.addAll(toAdd);
toAdd.clear();
}
-
Iterator iterator = events.iterator();
while (iterator.hasNext()) {
DelayedEvent event = iterator.next();
diff --git a/GameServer/src/org/moparscape/msc/gs/core/GameEngine.java b/GameServer/src/org/moparscape/msc/gs/core/GameEngine.java
index 366f056..0f2388f 100644
--- a/GameServer/src/org/moparscape/msc/gs/core/GameEngine.java
+++ b/GameServer/src/org/moparscape/msc/gs/core/GameEngine.java
@@ -26,7 +26,6 @@ import org.moparscape.msc.gs.phandler.PacketHandlerDef;
import org.moparscape.msc.gs.plugins.dependencies.NpcAI;
import org.moparscape.msc.gs.tools.Captcha;
import org.moparscape.msc.gs.util.Logger;
-import org.moparscape.msc.gs.util.PersistenceManager;
/**
* The central motor of the game. This class is responsible for the primary
@@ -92,7 +91,12 @@ public final class GameEngine extends Thread {
captcha = new Captcha();
captcha.init();
packetQueue = new PacketQueue();
- loadPacketHandlers();
+ try {
+ loadPacketHandlers();
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(0);
+ }
for (Shop shop : world.getShops()) {
shop.initRestock();
}
@@ -147,10 +151,11 @@ public final class GameEngine extends Thread {
/**
* Loads the packet handling classes from the persistence manager.
+ * @throws Exception
*/
- protected void loadPacketHandlers() {
- PacketHandlerDef[] handlerDefs = (PacketHandlerDef[]) PersistenceManager
- .load("PacketHandlers.xml");
+ protected void loadPacketHandlers() throws Exception {
+ PacketHandlerDef[] handlerDefs = Instance.getDataStore()
+ .loadPacketHandlerDefs();
for (PacketHandlerDef handlerDef : handlerDefs) {
try {
String className = handlerDef.getClassName();
@@ -171,25 +176,21 @@ public final class GameEngine extends Thread {
clientUpdater.sendQueuedPackets();
long now = GameEngine.getTime();
if (now - lastSentClientUpdate >= 600) {
- if (now - lastSentClientUpdate >= 1000) {
- // Logger.println("MAJOR UPDATE DELAYED: " + (now -
- // lastSentClientUpdate));
- }
lastSentClientUpdate = now;
clientUpdater.doMajor();
}
if (now - lastSentClientUpdateFast >= 104) {
- if (now - lastSentClientUpdateFast >= 6000) {
- // Logger.println("MINOR UPDATE DELAYED: " + (now -
- // lastSentClientUpdateFast));
- }
lastSentClientUpdateFast = now;
clientUpdater.doMinor();
}
}
-
+
+ private long lastEventTick;
private void processEvents() {
- eventHandler.doEvents();
+ if (getTime() - lastEventTick >= 100) {
+ eventHandler.doEvents();
+ lastEventTick = getTime();
+ }
}
public DelayedEventHandler getEventHandler() {
diff --git a/GameServer/src/org/moparscape/msc/gs/core/LoginConnector.java b/GameServer/src/org/moparscape/msc/gs/core/LoginConnector.java
index ff7a630..066e350 100644
--- a/GameServer/src/org/moparscape/msc/gs/core/LoginConnector.java
+++ b/GameServer/src/org/moparscape/msc/gs/core/LoginConnector.java
@@ -11,6 +11,7 @@ import org.apache.mina.transport.socket.nio.SocketConnector;
import org.apache.mina.transport.socket.nio.SocketConnectorConfig;
import org.apache.mina.transport.socket.nio.SocketSessionConfig;
import org.moparscape.msc.config.Config;
+import org.moparscape.msc.gs.Instance;
import org.moparscape.msc.gs.builders.ls.MiscPacketBuilder;
import org.moparscape.msc.gs.connection.LSConnectionHandler;
import org.moparscape.msc.gs.connection.LSPacket;
@@ -18,7 +19,6 @@ import org.moparscape.msc.gs.connection.PacketQueue;
import org.moparscape.msc.gs.phandler.PacketHandler;
import org.moparscape.msc.gs.phandler.PacketHandlerDef;
import org.moparscape.msc.gs.util.Logger;
-import org.moparscape.msc.gs.util.PersistenceManager;
public class LoginConnector {
/**
@@ -112,7 +112,12 @@ public class LoginConnector {
public LoginConnector() {
packetQueue = new PacketQueue();
- loadPacketHandlers();
+ try {
+ loadPacketHandlers();
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(0);
+ }
reconnect();
}
@@ -138,9 +143,8 @@ public class LoginConnector {
actionSender.unregisterWorld();
}
- private void loadPacketHandlers() {
- PacketHandlerDef[] handlerDefs = (PacketHandlerDef[]) PersistenceManager
- .load("LSPacketHandlers.xml");
+ private void loadPacketHandlers() throws Exception {
+ PacketHandlerDef[] handlerDefs = Instance.getDataStore().loadLSPacketHandlerDefs();
for (PacketHandlerDef handlerDef : handlerDefs) {
try {
String className = handlerDef.getClassName();
diff --git a/GameServer/src/org/moparscape/msc/gs/event/DuelEvent.java b/GameServer/src/org/moparscape/msc/gs/event/DuelEvent.java
index 759f7f6..c87cef9 100644
--- a/GameServer/src/org/moparscape/msc/gs/event/DuelEvent.java
+++ b/GameServer/src/org/moparscape/msc/gs/event/DuelEvent.java
@@ -47,6 +47,7 @@ public class DuelEvent extends DelayedEvent {
if (opponent.getHits() <= 0) {
attacker.resetCombat(CombatState.WON);
opponent.resetCombat(CombatState.LOST);
+ this.stop();
return;
}
attacker.incHitsMade();
@@ -102,6 +103,7 @@ public class DuelEvent extends DelayedEvent {
attacker.resetDueling();
opponent.resetDueling();
+ this.stop();
}
}
}
diff --git a/GameServer/src/org/moparscape/msc/gs/event/FightEvent.java b/GameServer/src/org/moparscape/msc/gs/event/FightEvent.java
index 2cb8467..b382f7d 100644
--- a/GameServer/src/org/moparscape/msc/gs/event/FightEvent.java
+++ b/GameServer/src/org/moparscape/msc/gs/event/FightEvent.java
@@ -81,12 +81,16 @@ public class FightEvent extends DelayedEvent {
Npc n = (Npc) attacker;
if (attacker.getHits() <= 0) {
n.resetCombat(CombatState.ERROR);
+ owner.resetCombat(CombatState.ERROR);
+ this.stop();
}
}
if (opponent instanceof Npc) {
Npc n = (Npc) opponent;
if (opponent.getHits() <= 0) {
n.resetCombat(CombatState.ERROR);
+ owner.resetCombat(CombatState.ERROR);
+ this.stop();
}
}
if (opponent instanceof Player && attacker instanceof Player) {
@@ -100,8 +104,7 @@ public class FightEvent extends DelayedEvent {
* opponent.resetCombat(CombatState.LOST); return; }
*/
attacker.incHitsMade();
- if (attacker instanceof Npc && opponent.isPrayerActivated(12)
- && ((Npc) attacker).getTeam() == 2) {
+ if (attacker instanceof Npc && opponent.isPrayerActivated(12)) {
return;
}
int damage = (attacker instanceof Player && opponent instanceof Player ? Formulae
@@ -148,6 +151,7 @@ public class FightEvent extends DelayedEvent {
player.resetAll();
player.getActionSender().sendMessage(
"Your opponent is retreating");
+ this.stop();
return;
}
}
@@ -254,6 +258,7 @@ public class FightEvent extends DelayedEvent {
}
attacker.resetCombat(CombatState.WON);
opponent.resetCombat(CombatState.LOST);
+ this.stop();
} else {
ArrayList playersToInform = new ArrayList();
playersToInform.addAll(opponent.getViewArea().getPlayersInView());
diff --git a/GameServer/src/org/moparscape/msc/gs/event/RangeEvent.java b/GameServer/src/org/moparscape/msc/gs/event/RangeEvent.java
index b3e2949..c98980a 100644
--- a/GameServer/src/org/moparscape/msc/gs/event/RangeEvent.java
+++ b/GameServer/src/org/moparscape/msc/gs/event/RangeEvent.java
@@ -68,6 +68,7 @@ public class RangeEvent extends DelayedEvent {
.loggedIn()) || affectedMob.getHits() <= 0
|| !owner.checkAttack(affectedMob, true) || bowID < 0) {
owner.resetRange();
+ this.stop();
return;
}
if (owner.withinRange(affectedMob, 5)) {
@@ -86,6 +87,7 @@ public class RangeEvent extends DelayedEvent {
owner.getActionSender().sendMessage(
"I can't get a clear shot from here");
owner.resetPath();
+ this.stop();
return;
}
boolean xbow = DataConversions.inArray(Formulae.xbowIDs, bowID);
@@ -106,6 +108,7 @@ public class RangeEvent extends DelayedEvent {
.sendMessage(
"You may not use P2P (Member Item) Arrows in the F2P Wilderness");
owner.resetRange();
+ this.stop();
return;
}
}
@@ -126,6 +129,7 @@ public class RangeEvent extends DelayedEvent {
owner.getActionSender().sendMessage(
"Your arrows are too powerful for your Bow.");
owner.resetRange();
+ this.stop();
return;
}
}
@@ -143,11 +147,13 @@ public class RangeEvent extends DelayedEvent {
owner.getActionSender().sendMessage(
"You have run out of " + (xbow ? "bolts" : "arrows"));
owner.resetRange();
+ this.stop();
return;
}
if (affectedMob.isPrayerActivated(13)) {
if (!owner.shouldRangePass()) {
- owner.getActionSender().sendMessage("Your missile got blocked");
+ owner.getActionSender().sendMessage("Your missile was blocked");
+ this.stop();
return;
}
}
@@ -259,6 +265,7 @@ public class RangeEvent extends DelayedEvent {
public void arrived() {
if (affectedMob.isBusy() || player.isBusy()) {
npc.setChasing(null);
+ this.stop();
return;
}
@@ -298,12 +305,14 @@ public class RangeEvent extends DelayedEvent {
fighting.setLastRun(0);
Instance.getDelayedEventHandler().add(
fighting);
+ this.stop();
}
public void failed() {
npc.setChasing(null);
}
});
+ this.stop();
}
}
}
diff --git a/GameServer/src/org/moparscape/msc/gs/event/WalkToMobEvent.java b/GameServer/src/org/moparscape/msc/gs/event/WalkToMobEvent.java
index 1d680b2..37c9961 100644
--- a/GameServer/src/org/moparscape/msc/gs/event/WalkToMobEvent.java
+++ b/GameServer/src/org/moparscape/msc/gs/event/WalkToMobEvent.java
@@ -1,3 +1,4 @@
+
package org.moparscape.msc.gs.event;
import org.moparscape.msc.gs.model.Mob;
diff --git a/GameServer/src/org/moparscape/msc/gs/event/WalkToPointEvent.java b/GameServer/src/org/moparscape/msc/gs/event/WalkToPointEvent.java
index c6814c5..48ff618 100644
--- a/GameServer/src/org/moparscape/msc/gs/event/WalkToPointEvent.java
+++ b/GameServer/src/org/moparscape/msc/gs/event/WalkToPointEvent.java
@@ -29,8 +29,8 @@ public abstract class WalkToPointEvent extends DelayedEvent {
public final void run() {
if (stop && owner.withinRange(location, radius)) {
- owner.resetPath();
arrived();
+ owner.resetPath();
} else if (owner.hasMoved()) {
return; // We're still moving
} else if (owner.withinRange(location, radius)) {
diff --git a/GameServer/src/org/moparscape/msc/gs/external/EntityHandler.java b/GameServer/src/org/moparscape/msc/gs/external/EntityHandler.java
index 05a9612..230acf7 100644
--- a/GameServer/src/org/moparscape/msc/gs/external/EntityHandler.java
+++ b/GameServer/src/org/moparscape/msc/gs/external/EntityHandler.java
@@ -1,120 +1,100 @@
package org.moparscape.msc.gs.external;
-import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import org.moparscape.msc.gs.Instance;
+import org.moparscape.msc.gs.model.InvItem;
import org.moparscape.msc.gs.model.Point;
import org.moparscape.msc.gs.model.TelePoint;
-import org.moparscape.msc.gs.util.PersistenceManager;
+import org.moparscape.msc.gs.persistence.DataStore;
/**
* This class handles the loading of entities from the conf files, and provides
* methods for relaying these entities to the user.
*/
-@SuppressWarnings("unchecked")
public class EntityHandler {
-
- private static HashMap agilityCourses;
- private static HashMap agilityObjects;
- private static HashMap arrowHeads;
- private static HashMap bowString;
- private static HashMap certers;
- private static HashMap dartTips;
+ private static Map agilityCourses;
+ private static Map agilityObjects;
+ private static Map arrowHeads;
+ private static Map bowString;
+ private static Map certers;
+ private static Map dartTips;
private static DoorDef[] doors;
- private static HashMap firemaking;
+ private static Map firemaking;
private static GameObjectDef[] gameObjects;
- private static HashMap gems;
+ private static Map gems;
private static ItemHerbSecond[] herbSeconds;
- private static HashMap itemAffectedTypes;
- private static HashMap itemCooking;
+ private static Map itemAffectedTypes;
+ private static Map itemCooking;
private static ItemCraftingDef[] itemCrafting;
- private static HashMap itemEdibleHeals;
- private static HashMap itemHerb;
+ private static Map itemEdibleHeals;
+ private static Map itemHerb;
private static ItemDef[] items;
- private static HashMap itemSmelting;
+ private static Map itemSmelting;
private static ItemSmithingDef[] itemSmithing;
- private static HashMap itemUnIdentHerb;
- private static HashMap itemWieldable;
- private static List>[] keyChestLoots;
- private static HashMap logCut;
+ private static Map itemUnIdentHerb;
+ private static Map itemWieldable;
+ private static List[] keyChestLoots;
+ private static Map logCut;
private static NPCDef[] npcs;
- private static HashMap objectFishing;
+ private static Map objectFishing;
- private static HashMap objectMining;
- private static HashMap objectTelePoints;
- private static HashMap objectWoodcutting;
+ private static Map objectMining;
+ private static Map objectTelePoints;
+ private static Map objectWoodcutting;
private static PrayerDef[] prayers;
- private static HashMap spellAggressiveLvl;
+ private static Map spellAggressiveLvl;
private static SpellDef[] spells;
private static TileDef[] tiles;
static {
- doors = (DoorDef[]) PersistenceManager.load("defs/DoorDef.xml.gz");
- gameObjects = (GameObjectDef[]) PersistenceManager
- .load("defs/GameObjectDef.xml.gz");
- npcs = (NPCDef[]) PersistenceManager.load("defs/NPCDef.xml.gz");
- for (NPCDef n : npcs) {
- if (n.isAttackable()) {
- n.respawnTime -= (n.respawnTime / 3);
+ DataStore dataStore = Instance.getDataStore();
+ try {
+ doors = dataStore.loadDoorDefs();
+ gameObjects = dataStore.loadGameObjectDefs();
+ npcs = dataStore.loadNPCDefs();
+ for (NPCDef n : npcs) {
+ if (n.isAttackable()) {
+ n.respawnTime -= (n.respawnTime / 3);
+ }
}
+ prayers = dataStore.loadPrayerDefs();
+ items = dataStore.loadItemDefs();
+ spells = dataStore.loadSpellDefs();
+ tiles = dataStore.loadTileDefs();
+ keyChestLoots = dataStore.loadKeyChestLoots();
+ herbSeconds = dataStore.loadItemHerbSeconds();
+ dartTips = dataStore.loadDartTips();
+ gems = dataStore.loadGemDefs();
+ logCut = dataStore.loadItemLogCutDefs();
+ bowString = dataStore.loadItemBowStringDefs();
+ arrowHeads = dataStore.loadItemArrowHeadDefs();
+ firemaking = dataStore.loadFiremakingDefs();
+ itemAffectedTypes = dataStore.loadItemAffectedTypes();
+ itemWieldable = dataStore.loadItemWieldableDefs();
+ itemUnIdentHerb = dataStore.loadItemUnIdentHerbDefs();
+ itemHerb = dataStore.loadItemHerbDefs();
+ itemEdibleHeals = dataStore.loadItemEdibleHeals();
+ itemCooking = dataStore.loadItemCookingDefs();
+ itemSmelting = dataStore.loadItemSmeltingDefs();
+ itemSmithing = dataStore.loadItemSmithingDefs();
+ itemCrafting = dataStore.loadItemCraftingDefs();
+ objectMining = dataStore.loadObjectMiningDefs();
+ objectWoodcutting = dataStore.loadObjectWoodcuttingDefs();
+ objectFishing = dataStore.loadObjectFishDefs();
+ spellAggressiveLvl = dataStore.loadSpellAgressiveLevel();
+ objectTelePoints = dataStore.loadTelePoints();
+ certers = dataStore.loadCerterDefs();
+ agilityObjects = dataStore.loadAgilityDefs();
+ agilityCourses = dataStore.loadAgilityCourseDefs();
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(0);
}
- prayers = (PrayerDef[]) PersistenceManager
- .load("defs/PrayerDef.xml.gz");
- items = (ItemDef[]) PersistenceManager.load("defs/ItemDef.xml.gz");
- spells = (SpellDef[]) PersistenceManager.load("defs/SpellDef.xml.gz");
- tiles = (TileDef[]) PersistenceManager.load("defs/TileDef.xml.gz");
- keyChestLoots = (List[]) PersistenceManager
- .load("defs/extras/KeyChestLoot.xml.gz");
- herbSeconds = (ItemHerbSecond[]) PersistenceManager
- .load("defs/extras/ItemHerbSecond.xml.gz");
- dartTips = (HashMap) PersistenceManager
- .load("defs/extras/ItemDartTipDef.xml.gz");
- gems = (HashMap) PersistenceManager
- .load("defs/extras/ItemGemDef.xml.gz");
- logCut = (HashMap) PersistenceManager
- .load("defs/extras/ItemLogCutDef.xml.gz");
- bowString = (HashMap) PersistenceManager
- .load("defs/extras/ItemBowStringDef.xml.gz");
- arrowHeads = (HashMap) PersistenceManager
- .load("defs/extras/ItemArrowHeadDef.xml.gz");
- firemaking = (HashMap) PersistenceManager
- .load("defs/extras/FiremakingDef.xml.gz");
- itemAffectedTypes = (HashMap) PersistenceManager
- .load("defs/extras/ItemAffectedTypes.xml.gz");
- itemWieldable = (HashMap) PersistenceManager
- .load("defs/extras/ItemWieldableDef.xml.gz");
- itemUnIdentHerb = (HashMap) PersistenceManager
- .load("defs/extras/ItemUnIdentHerbDef.xml.gz");
- itemHerb = (HashMap) PersistenceManager
- .load("defs/extras/ItemHerbDef.xml.gz");
- itemEdibleHeals = (HashMap) PersistenceManager
- .load("defs/extras/ItemEdibleHeals.xml.gz");
- itemCooking = (HashMap) PersistenceManager
- .load("defs/extras/ItemCookingDef.xml.gz");
- itemSmelting = (HashMap) PersistenceManager
- .load("defs/extras/ItemSmeltingDef.xml.gz");
- itemSmithing = (ItemSmithingDef[]) PersistenceManager
- .load("defs/extras/ItemSmithingDef.xml.gz");
- itemCrafting = (ItemCraftingDef[]) PersistenceManager
- .load("defs/extras/ItemCraftingDef.xml.gz");
- objectMining = (HashMap) PersistenceManager
- .load("defs/extras/ObjectMining.xml.gz");
- objectWoodcutting = (HashMap) PersistenceManager
- .load("defs/extras/ObjectWoodcutting.xml.gz");
- objectFishing = (HashMap) PersistenceManager
- .load("defs/extras/ObjectFishing.xml.gz");
- spellAggressiveLvl = (HashMap) PersistenceManager
- .load("defs/extras/SpellAggressiveLvl.xml.gz");
- objectTelePoints = (HashMap) PersistenceManager
- .load("locs/extras/ObjectTelePoints.xml.gz");
- certers = (HashMap) PersistenceManager
- .load("defs/extras/NpcCerters.xml.gz");
- agilityObjects = (HashMap) PersistenceManager
- .load("defs/extras/AgilityDef.xml.gz");
- agilityCourses = (HashMap) PersistenceManager
- .load("defs/extras/AgilityCourseDef.xml.gz");
+ dataStore.dispose();
}
/**
diff --git a/GameServer/src/org/moparscape/msc/gs/io/WorldLoader.java b/GameServer/src/org/moparscape/msc/gs/io/WorldLoader.java
index 1e171d0..d5db80f 100644
--- a/GameServer/src/org/moparscape/msc/gs/io/WorldLoader.java
+++ b/GameServer/src/org/moparscape/msc/gs/io/WorldLoader.java
@@ -3,7 +3,6 @@ package org.moparscape.msc.gs.io;
import java.io.BufferedInputStream;
import java.io.File;
import java.nio.ByteBuffer;
-import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -22,7 +21,6 @@ import org.moparscape.msc.gs.model.Shop;
import org.moparscape.msc.gs.model.World;
import org.moparscape.msc.gs.tools.DataConversions;
import org.moparscape.msc.gs.util.Logger;
-import org.moparscape.msc.gs.util.PersistenceManager;
public class WorldLoader {
private ZipFile tileArchive;
@@ -129,8 +127,7 @@ public class WorldLoader {
* }
*/
- @SuppressWarnings("unchecked")
- public void loadWorld(World world) {
+ public void loadWorld(World world) throws Exception {
try {
tileArchive = new ZipFile(new File(Config.CONF_DIR,
"data/Landscape.rscd"));
@@ -154,26 +151,22 @@ public class WorldLoader {
}
Logger.error((System.currentTimeMillis() - now) / 1000 + "s to parse");
// try { out.close(); } catch(Exception e) { Logger.error(e); }
- for (Shop shop : (List) PersistenceManager
- .load("locs/Shops.xml.gz")) {
+ for (Shop shop : Instance.getDataStore().loadShops()) {
world.registerShop(shop);
}
System.gc();
}
- @SuppressWarnings("unchecked")
- public void loadObjects() {
+ public void loadObjects() throws Exception {
World world = Instance.getWorld();
- for (GameObjectLoc gameObject : (List) PersistenceManager
- .load("locs/GameObjectLoc.xml.gz")) {
+ for (GameObjectLoc gameObject : Instance.getDataStore().loadGameObjectLocs()) {
if (Config.f2pWildy && Formulae.isP2P(true, gameObject))
continue;
if (Formulae.isP2P(gameObject) && !World.isMembers())
continue;
world.registerGameObject(new GameObject(gameObject));
}
- for (ItemLoc item : (List) PersistenceManager
- .load("locs/ItemLoc.xml.gz")) {
+ for (ItemLoc item : Instance.getDataStore().loadItemLocs()) {
if (Config.f2pWildy && Formulae.isP2P(true, item))
continue;
if (Formulae.isP2P(item) && !World.isMembers())
@@ -181,8 +174,7 @@ public class WorldLoader {
world.registerItem(new Item(item));
}// ember
- for (NPCLoc npc : (List) PersistenceManager
- .load("locs/NpcLoc.xml.gz")) {
+ for (NPCLoc npc : Instance.getDataStore().loadNPCLocs()) {
if (Config.f2pWildy && Formulae.isP2P(true, npc))
continue;
if (Formulae.isP2P(npc) && !World.isMembers())
diff --git a/GameServer/src/org/moparscape/msc/gs/model/Npc.java b/GameServer/src/org/moparscape/msc/gs/model/Npc.java
index 42b0b12..de9010e 100644
--- a/GameServer/src/org/moparscape/msc/gs/model/Npc.java
+++ b/GameServer/src/org/moparscape/msc/gs/model/Npc.java
@@ -621,13 +621,4 @@ public class Npc extends Mob {
public boolean hasArmor = false;
public boolean undead = false;
- private int team = 2;
-
- public int getTeam() {
- return team;
- }
-
- public void setTeam(int team) {
- this.team = team;
- }
}
diff --git a/GameServer/src/org/moparscape/msc/gs/model/Player.java b/GameServer/src/org/moparscape/msc/gs/model/Player.java
index 2d4230d..c4f3cd6 100644
--- a/GameServer/src/org/moparscape/msc/gs/model/Player.java
+++ b/GameServer/src/org/moparscape/msc/gs/model/Player.java
@@ -582,8 +582,10 @@ public final class Player extends Mob {
for (Player p : getViewArea().getPlayersInView())
p.informOfModifiedHits(this);
- if (getCurStat(3) <= 0)
+ if (getCurStat(3) <= 0) {
killedBy(null, false);
+ poisonEvent.stop();
+ }
} else {
if (poisonEvent != null)
poisonEvent.stop();
@@ -697,6 +699,7 @@ public final class Player extends Mob {
public void run() {
removeSkull();
+ this.stop();
}
};
Instance.getDelayedEventHandler().add(skullEvent);
@@ -2121,6 +2124,7 @@ public final class Player extends Mob {
Instance.getServer().getLoginConnector().getActionSender()
.playerLogin(this);
+ final Player p = this;
Instance.getDelayedEventHandler().add(
new DelayedEvent(this, 60000) {
@@ -2137,6 +2141,9 @@ public final class Player extends Mob {
}
public void run() {
+ if(p == null || p.isDestroy()) {
+ this.stop();
+ }
for (int statIndex = 0; statIndex < 18; statIndex++) {
if (statIndex == 5) {
continue;
@@ -2159,6 +2166,9 @@ public final class Player extends Mob {
drainer = new DelayedEvent(this, Integer.MAX_VALUE) {
public void run() {
+ if(p == null || p.isDestroy()) {
+ this.stop();
+ }
int curPrayer = getCurStat(5);
if (getDrainRate() > 0 && curPrayer > 0) {
incCurStat(5, -1);
@@ -2681,6 +2691,7 @@ public final class Player extends Mob {
if (!owner.withinRange(mob) || mob.isRemoved()
|| (owner.isBusy() && !owner.isDueling())) {
resetFollowing();
+ this.stop();
} else if (!owner.finishedPath()
&& owner.withinRange(mob, radius)) {
owner.resetPath();
diff --git a/GameServer/src/org/moparscape/msc/gs/model/World.java b/GameServer/src/org/moparscape/msc/gs/model/World.java
index 9848d0f..89cb5b2 100644
--- a/GameServer/src/org/moparscape/msc/gs/model/World.java
+++ b/GameServer/src/org/moparscape/msc/gs/model/World.java
@@ -9,6 +9,7 @@ import java.util.List;
import java.util.TreeMap;
import org.moparscape.msc.config.Config;
+import org.moparscape.msc.gs.Instance;
import org.moparscape.msc.gs.Server;
import org.moparscape.msc.gs.core.ClientUpdater;
import org.moparscape.msc.gs.core.DelayedEventHandler;
@@ -25,7 +26,6 @@ import org.moparscape.msc.gs.quest.QuestManager;
import org.moparscape.msc.gs.states.CombatState;
import org.moparscape.msc.gs.util.EntityList;
import org.moparscape.msc.gs.util.Logger;
-import org.moparscape.msc.gs.util.PersistenceManager;
public final class World {
@@ -468,11 +468,11 @@ public final class World {
/**
* Loads the npc handling classes
+ * @throws Exception
*/
- private void loadNpcHandlers() {
+ private void loadNpcHandlers() throws Exception {
- NpcHandlerDef[] handlerDefs = (NpcHandlerDef[]) PersistenceManager
- .load("NpcHandlers.xml");
+ NpcHandlerDef[] handlerDefs = Instance.getDataStore().loadNpcHandlers();
for (NpcHandlerDef handlerDef : handlerDefs) {
try {
String className = handlerDef.getClassName();
diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/Tanner.java b/GameServer/src/org/moparscape/msc/gs/npchandler/Tanner.java
index 3dcb868..dbcf3d9 100644
--- a/GameServer/src/org/moparscape/msc/gs/npchandler/Tanner.java
+++ b/GameServer/src/org/moparscape/msc/gs/npchandler/Tanner.java
@@ -95,6 +95,7 @@ public class Tanner implements NpcHandler {
1));
owner.getActionSender()
.sendInventory();
+ this.stop();
} else {
matchRunning = false;
owner.setBusy(false);
diff --git a/GameServer/src/org/moparscape/msc/gs/persistence/impl/DataStoreFactory.java b/GameServer/src/org/moparscape/msc/gs/persistence/impl/DataStoreFactory.java
new file mode 100644
index 0000000..96bceba
--- /dev/null
+++ b/GameServer/src/org/moparscape/msc/gs/persistence/impl/DataStoreFactory.java
@@ -0,0 +1,12 @@
+package org.moparscape.msc.gs.persistence.impl;
+
+import org.moparscape.msc.gs.persistence.DataStore;
+
+public class DataStoreFactory {
+
+ public static DataStore create(String className) throws Exception {
+ return Class.forName(className).asSubclass(DataStore.class)
+ .newInstance();
+ }
+
+}
diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/BotHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/BotHandler.java
index a70c224..cfd7b53 100644
--- a/GameServer/src/org/moparscape/msc/gs/phandler/client/BotHandler.java
+++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/BotHandler.java
@@ -22,40 +22,43 @@ public class BotHandler implements PacketHandler {
boolean wpe = false;
boolean autominer = false;
if (p.getLength() > 1) {
- if (p.readByte() == 1) {
- scar = true;
- }
- if (p.readByte() == 1) {
- autominer = true;
- }
- if (p.readByte() == 1) {
- autominer = true;
- }
- if (p.readByte() == 1) {
- wpe = true;
- }
- /*
- * for (String s : PlayerLoginHandler.badClients) { if
- * (s.equalsIgnoreCase(player.getUsername())) player.badClient =
- * true; PlayerLoginHandler.badClients.remove(s); break; }
- */
- for (Player pl : Instance.getWorld().getPlayers()) {
- if (pl.getLastPlayerInfo2() == null)
- continue;
- String s = "Client Statistics for " + player.getUsername()
- + ": Scar: " + scar + ", WPE: " + wpe
- + ", Autominer: " + autominer
- + ", 3rd Party Client: " + player.isBadClient();
- if (pl.getLastPlayerInfo2().equalsIgnoreCase(
- player.getUsername())) {
+ boolean windows = p.readByte() == 1;
+ if (windows) {
+ if (p.readByte() == 1) {
+ scar = true;
+ }
+ if (p.readByte() == 1) {
+ autominer = true;
+ }
+ if (p.readByte() == 1) {
+ autominer = true;
+ }
+ if (p.readByte() == 1) {
+ wpe = true;
+ }
+ /*
+ * for (String s : PlayerLoginHandler.badClients) { if
+ * (s.equalsIgnoreCase(player.getUsername()))
+ * player.badClient = true;
+ * PlayerLoginHandler.badClients.remove(s); break; }
+ */
+ for (Player pl : Instance.getWorld().getPlayers()) {
+ if (pl.getLastPlayerInfo2() == null)
+ continue;
+ String s = "Client Statistics for "
+ + player.getUsername() + ": Scar: " + scar
+ + ", WPE: " + wpe + ", Autominer: " + autominer
+ + ", 3rd Party Client: " + player.isBadClient();
+ if (pl.getLastPlayerInfo2().equalsIgnoreCase(
+ player.getUsername())) {
- s = s.replace("true", "@gre@true@whi@");
- s = s.replace("false", "@red@false@whi@");
- pl.getActionSender().sendAlert(s, false);
- pl.setLastPlayerInfo2(null);
+ s = s.replace("true", "@gre@true@whi@");
+ s = s.replace("false", "@red@false@whi@");
+ pl.getActionSender().sendAlert(s, false);
+ pl.setLastPlayerInfo2(null);
+ }
}
}
-
} else {
Logger.println(player.getUsername()
+ " caught on 3rd party client");
diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/DropHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/DropHandler.java
index 0e7745a..5c5ce67 100644
--- a/GameServer/src/org/moparscape/msc/gs/phandler/client/DropHandler.java
+++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/DropHandler.java
@@ -52,6 +52,7 @@ public class DropHandler implements PacketHandler {
return;
}
if (owner.hasMoved()) {
+ this.stop();
return;
}
world.addEntryToSnapshots(new Activity(owner.getUsername(),
diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvActionHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvActionHandler.java
index e9ef108..1b05f19 100644
--- a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvActionHandler.java
+++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvActionHandler.java
@@ -338,6 +338,7 @@ public class InvActionHandler implements PacketHandler {
if (object != null) {
world.unregisterGameObject(object);
}
+ this.stop();
}
});
}
diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/PickupItem.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/PickupItem.java
index bcb4428..3f59f43 100644
--- a/GameServer/src/org/moparscape/msc/gs/phandler/client/PickupItem.java
+++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/PickupItem.java
@@ -75,8 +75,9 @@ public class PickupItem implements PacketHandler {
}
player.setStatus(Action.TAKING_GITEM);
+ int distance = tile.hasGameObject() ? 1 : 0;
Instance.getDelayedEventHandler().add(
- new WalkToPointEvent(player, location, 0, true) {
+ new WalkToPointEvent(player, location, distance, true) {
public void arrived() {
if (owner.isBusy() || owner.isRanging()
|| !tile.hasItem(item) || !owner.nextTo(item)
diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/plugs/skills/Mining.java b/GameServer/src/org/moparscape/msc/gs/plugins/plugs/skills/Mining.java
index b4c028a..e4ef0f7 100644
--- a/GameServer/src/org/moparscape/msc/gs/plugins/plugs/skills/Mining.java
+++ b/GameServer/src/org/moparscape/msc/gs/plugins/plugs/skills/Mining.java
@@ -138,7 +138,6 @@ public class Mining implements ObjectListener {
owner.getActionSender().sendMessage(
"You manage to obtain some "
+ ore.getDef().getName() + ".");
- owner.setSkillLoops(0);
owner.incExp(14, def.getExp(), true);
owner.getActionSender().sendStat(14);
world.registerGameObject(new GameObject(object
@@ -147,10 +146,12 @@ public class Mining implements ObjectListener {
world.delayedSpawnObject(newobject.getLoc(),
def.getRespawnTime() * 1000);
}
+ owner.isMining(false);
+ owner.setSkillLoops(0);
owner.getActionSender().sendInventory();
} else {
boolean retry = false;
- if (retrytime >= swings)
+ if (retrytime - swings > 0)
retry = true;
owner.getActionSender().sendMessage(
"You only succeed in scratching the rock.");
diff --git a/GameServer/src/org/moparscape/msc/gs/util/PersistenceManager.java b/GameServer/src/org/moparscape/msc/gs/util/PersistenceManager.java
deleted file mode 100644
index b1048fe..0000000
--- a/GameServer/src/org/moparscape/msc/gs/util/PersistenceManager.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.moparscape.msc.gs.util;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Enumeration;
-import java.util.Properties;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-import org.moparscape.msc.config.Config;
-
-import com.thoughtworks.xstream.XStream;
-
-public class PersistenceManager {
- private static final XStream xstream = new XStream();
-
- static {
- setupAliases();
- }
-
- public static Object load(String filename) {
- try {
- InputStream is = new FileInputStream(new File(Config.CONF_DIR,
- filename));
- if (filename.endsWith(".gz")) {
- is = new GZIPInputStream(is);
- }
- Object rv = xstream.fromXML(is);
- return rv;
- } catch (IOException ioe) {
- Logger.error(ioe);
- }
- return null;
- }
-
- public static void setupAliases() {
- try {
- Properties aliases = new Properties();
- FileInputStream fis = new FileInputStream(new File(Config.CONF_DIR,
- "aliases.xml"));
- aliases.loadFromXML(fis);
- for (Enumeration> e = aliases.propertyNames(); e
- .hasMoreElements();) {
- String alias = (String) e.nextElement();
- Class> c = Class.forName((String) aliases.get(alias));
- xstream.alias(alias, c);
- }
- } catch (Exception ioe) {
- Logger.error(ioe);
- }
- }
-
- public static void write(String filename, Object o) {
- try {
- OutputStream os = new FileOutputStream(new File(Config.CONF_DIR,
- filename));
- if (filename.endsWith(".gz")) {
- os = new GZIPOutputStream(os);
- }
- xstream.toXML(o, os);
- } catch (IOException ioe) {
- Logger.error(ioe);
- }
- }
-}
diff --git a/LoginServer/auth.php b/LoginServer/auth.php
new file mode 100644
index 0000000..fb07184
--- /dev/null
+++ b/LoginServer/auth.php
@@ -0,0 +1 @@
+YES
diff --git a/LoginServer/build.xml b/LoginServer/build.xml
index 918f4d7..7bfe7e3 100644
--- a/LoginServer/build.xml
+++ b/LoginServer/build.xml
@@ -9,7 +9,7 @@
-
+
@@ -26,7 +26,7 @@
-
+
diff --git a/LoginServer/conf/Config.xml b/LoginServer/conf/Config.xml
index 2cbceba..7576db8 100644
--- a/LoginServer/conf/Config.xml
+++ b/LoginServer/conf/Config.xml
@@ -10,6 +10,7 @@
34526
localhost
8186
- http://localhost/auth.php
- org.moparscape.msc.ls.persistence.impl.MySQL
+ org.moparscape.msc.ls.persistence.impl.DummyStorageMedium
+ org.moparscape.msc.ls.auth.impl.DummyAuth
+ http://localhost/auth.php
diff --git a/LoginServer/src/org/moparscape/msc/ls/Server.java b/LoginServer/src/org/moparscape/msc/ls/Server.java
index 5910e55..ae39a98 100644
--- a/LoginServer/src/org/moparscape/msc/ls/Server.java
+++ b/LoginServer/src/org/moparscape/msc/ls/Server.java
@@ -17,7 +17,7 @@ import org.moparscape.msc.ls.model.World;
import org.moparscape.msc.ls.net.FConnectionHandler;
import org.moparscape.msc.ls.net.LSConnectionHandler;
import org.moparscape.msc.ls.persistence.StorageMedium;
-import org.moparscape.msc.ls.persistence.StorageMediumFactory;
+import org.moparscape.msc.ls.persistence.impl.StorageMediumFactory;
import org.moparscape.msc.ls.util.Config;
public class Server {
@@ -58,7 +58,7 @@ public class Server {
System.out.println("Login Server starting up...");
Config.initConfig(configFile);
try {
- storage = StorageMediumFactory.createMedium(Config.STORAGE_MEDIUM);
+ storage = StorageMediumFactory.create(Config.STORAGE_MEDIUM);
} catch (Exception e) {
e.printStackTrace();
return;
diff --git a/LoginServer/src/org/moparscape/msc/ls/auth/Auth.java b/LoginServer/src/org/moparscape/msc/ls/auth/Auth.java
index 2e21f99..fe664d0 100644
--- a/LoginServer/src/org/moparscape/msc/ls/auth/Auth.java
+++ b/LoginServer/src/org/moparscape/msc/ls/auth/Auth.java
@@ -1,62 +1,7 @@
-package org.moparscape.msc.ls.auth;
-import java.io.BufferedReader;
-import java.io.DataOutputStream;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLEncoder;
-
-import org.moparscape.msc.ls.util.Config;
-
-public class Auth {
-
- public static double version = 1.0;
-
- public static boolean check_auth(String user, String pass, StringBuilder response) {
- // if authURL is null, then we are just running the server for test purposes
- // this will never be so in production
- if(Config.AUTH_URL == null){
- response.append("TestUser");
- return true;
- }
- try {
- user = URLEncoder.encode(user, "UTF-8");
- pass = URLEncoder.encode(pass, "UTF-8");
-
- HttpURLConnection.setFollowRedirects(false);
- HttpURLConnection uc = (HttpURLConnection) new URL(Config.AUTH_URL).openConnection();
-
- uc.setRequestMethod("POST");
- uc.setDoInput(true);
- uc.setDoOutput(true);
- uc.setUseCaches(false);
- uc.setAllowUserInteraction(false);
- uc.setInstanceFollowRedirects(false);
- uc.setRequestProperty("User-Agent", "Mozilla/5.0 MoparClassic/" + version);
- uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
- DataOutputStream out = new DataOutputStream(uc.getOutputStream());
- out.writeBytes("user=" + user + "&pass=" + pass);
- out.flush();
- out.close();
-
- BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
- String line = in.readLine();
- boolean success = line != null && line.equals("YES");
- response.append(in.readLine());
- in.close();
- return success;
- } catch (Exception e) {
- response.append(e.getMessage());
- return false;
- }
- }
-
- public static void main(String[] args){
- Config.AUTH_URL = "https://www.moparscape.org/auth.php?field=";
- String user = "CodeForFame";
- String pass = "";
- StringBuilder sb = new StringBuilder();
- System.out.println("success: "+check_auth(user, pass, sb));
- System.out.println("message: "+sb.toString());
- }
-}
\ No newline at end of file
+package org.moparscape.msc.ls.auth;
+
+public interface Auth {
+
+ boolean validate(long hash, String pass, StringBuilder stringBuilder);
+
+}
diff --git a/LoginServer/src/org/moparscape/msc/ls/auth/impl/AuthFactory.java b/LoginServer/src/org/moparscape/msc/ls/auth/impl/AuthFactory.java
new file mode 100644
index 0000000..ec09b83
--- /dev/null
+++ b/LoginServer/src/org/moparscape/msc/ls/auth/impl/AuthFactory.java
@@ -0,0 +1,12 @@
+package org.moparscape.msc.ls.auth.impl;
+
+import org.moparscape.msc.ls.auth.Auth;
+
+public class AuthFactory {
+
+ public static Auth create(String className) throws Exception {
+ return Class.forName(className).asSubclass(Auth.class)
+ .newInstance();
+ }
+
+}
diff --git a/LoginServer/src/org/moparscape/msc/ls/auth/impl/DummyAuth.java b/LoginServer/src/org/moparscape/msc/ls/auth/impl/DummyAuth.java
new file mode 100644
index 0000000..3b6df1b
--- /dev/null
+++ b/LoginServer/src/org/moparscape/msc/ls/auth/impl/DummyAuth.java
@@ -0,0 +1,12 @@
+package org.moparscape.msc.ls.auth.impl;
+
+import org.moparscape.msc.ls.auth.Auth;
+
+class DummyAuth implements Auth {
+
+ @Override
+ public boolean validate(long hash, String pass, StringBuilder stringBuilder) {
+ return true;
+ }
+
+}
diff --git a/LoginServer/src/org/moparscape/msc/ls/auth/impl/PersistenceAuth.java b/LoginServer/src/org/moparscape/msc/ls/auth/impl/PersistenceAuth.java
new file mode 100644
index 0000000..f3ee5aa
--- /dev/null
+++ b/LoginServer/src/org/moparscape/msc/ls/auth/impl/PersistenceAuth.java
@@ -0,0 +1,14 @@
+package org.moparscape.msc.ls.auth.impl;
+
+import org.moparscape.msc.ls.Server;
+import org.moparscape.msc.ls.auth.Auth;
+
+public class PersistenceAuth implements Auth {
+
+ @Override
+ public boolean validate(long hash, String pass,
+ StringBuilder stringBuilder) {
+ return Server.storage.getPass(hash).equals(pass);
+ }
+
+}
diff --git a/LoginServer/src/org/moparscape/msc/ls/auth/impl/WebsiteAuth.java b/LoginServer/src/org/moparscape/msc/ls/auth/impl/WebsiteAuth.java
new file mode 100644
index 0000000..8760c8f
--- /dev/null
+++ b/LoginServer/src/org/moparscape/msc/ls/auth/impl/WebsiteAuth.java
@@ -0,0 +1,57 @@
+package org.moparscape.msc.ls.auth.impl;
+
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+
+import org.moparscape.msc.ls.auth.Auth;
+import org.moparscape.msc.ls.util.Config;
+import org.moparscape.msc.ls.util.DataConversions;
+
+class WebsiteAuth implements Auth {
+
+ private final double version = 1.0;
+
+ public boolean validate(long hash, String pass, StringBuilder response) {
+ String user = DataConversions.hashToUsername(hash);
+ // if authURL is null, then we are just running the server for test purposes
+ // this will never be so in production
+ if(Config.AUTH_META_DATA == null){
+ response.append("TestUser");
+ return true;
+ }
+ try {
+ user = URLEncoder.encode(user, "UTF-8");
+ pass = URLEncoder.encode(pass, "UTF-8");
+
+ HttpURLConnection.setFollowRedirects(false);
+ HttpURLConnection uc = (HttpURLConnection) new URL(Config.AUTH_META_DATA).openConnection();
+
+ uc.setRequestMethod("POST");
+ uc.setDoInput(true);
+ uc.setDoOutput(true);
+ uc.setUseCaches(false);
+ uc.setAllowUserInteraction(false);
+ uc.setInstanceFollowRedirects(false);
+ uc.setRequestProperty("User-Agent", "Mozilla/5.0 MoparClassic/" + version);
+ uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+ DataOutputStream out = new DataOutputStream(uc.getOutputStream());
+ out.writeBytes("user=" + user + "&pass=" + pass);
+ out.flush();
+ out.close();
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
+ String line = in.readLine();
+ boolean success = line != null && line.equals("YES");
+ response.append(in.readLine());
+ in.close();
+ return success;
+ } catch (Exception e) {
+ response.append(e.getMessage());
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/LoginServer/src/org/moparscape/msc/ls/packethandler/loginserver/PlayerLoginHandler.java b/LoginServer/src/org/moparscape/msc/ls/packethandler/loginserver/PlayerLoginHandler.java
index b610cda..798ab36 100644
--- a/LoginServer/src/org/moparscape/msc/ls/packethandler/loginserver/PlayerLoginHandler.java
+++ b/LoginServer/src/org/moparscape/msc/ls/packethandler/loginserver/PlayerLoginHandler.java
@@ -6,11 +6,13 @@ import java.util.Map.Entry;
import org.apache.mina.common.IoSession;
import org.moparscape.msc.ls.Server;
import org.moparscape.msc.ls.auth.Auth;
+import org.moparscape.msc.ls.auth.impl.AuthFactory;
import org.moparscape.msc.ls.model.World;
import org.moparscape.msc.ls.net.LSPacket;
import org.moparscape.msc.ls.net.Packet;
import org.moparscape.msc.ls.packetbuilder.loginserver.PlayerLoginPacketBuilder;
import org.moparscape.msc.ls.packethandler.PacketHandler;
+import org.moparscape.msc.ls.util.Config;
import org.moparscape.msc.ls.util.DataConversions;
public class PlayerLoginHandler implements PacketHandler {
@@ -60,14 +62,25 @@ public class PlayerLoginHandler implements PacketHandler {
}
}
+ private static Auth auth;
+
+ static {
+ try {
+ auth = AuthFactory.create(Config.AUTH_CLASS);
+ System.out.println("Authentication Scheme: "
+ + auth.getClass().getSimpleName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
private byte validatePlayer(long user, String pass, String ip) {
Server server = Server.getServer();
byte returnVal = 0;
if (!Server.storage.playerExists(user))
return 2;
- if (!Auth.check_auth(DataConversions.hashToUsername(user), pass,
- new StringBuilder())) {
+ if (!auth.validate(user, pass, new StringBuilder())) {
return 2;
}
diff --git a/LoginServer/src/org/moparscape/msc/ls/packethandler/loginserver/PlayerSaveHandler.java b/LoginServer/src/org/moparscape/msc/ls/packethandler/loginserver/PlayerSaveHandler.java
index 7cdb870..f1784cf 100644
--- a/LoginServer/src/org/moparscape/msc/ls/packethandler/loginserver/PlayerSaveHandler.java
+++ b/LoginServer/src/org/moparscape/msc/ls/packethandler/loginserver/PlayerSaveHandler.java
@@ -36,7 +36,7 @@ public class PlayerSaveHandler implements PacketHandler {
//save.setPoints(p.readInt());
for (int i = 0; i < 18; i++) {
- save.setStat(i, p.readInt(), p.readShort());
+ save.setStat(i, (int) p.readLong(), p.readShort());
}
int invCount = p.readShort();
diff --git a/LoginServer/src/org/moparscape/msc/ls/persistence/StorageMedium.java b/LoginServer/src/org/moparscape/msc/ls/persistence/StorageMedium.java
index 48b295c..169805f 100644
--- a/LoginServer/src/org/moparscape/msc/ls/persistence/StorageMedium.java
+++ b/LoginServer/src/org/moparscape/msc/ls/persistence/StorageMedium.java
@@ -37,4 +37,5 @@ public interface StorageMedium {
public PlayerSave loadPlayer(long user);
public void logLogin(long user, String ip);
public void logIn(String ip, long user);
+ public String getPass(long user);
}
diff --git a/LoginServer/src/org/moparscape/msc/ls/persistence/StorageMediumFactory.java b/LoginServer/src/org/moparscape/msc/ls/persistence/StorageMediumFactory.java
deleted file mode 100644
index 51607ba..0000000
--- a/LoginServer/src/org/moparscape/msc/ls/persistence/StorageMediumFactory.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.moparscape.msc.ls.persistence;
-
-public class StorageMediumFactory {
-
- public static StorageMedium createMedium(String className) throws Exception {
- return Class.forName(className).asSubclass(StorageMedium.class)
- .newInstance();
- }
-
-}
diff --git a/LoginServer/src/org/moparscape/msc/ls/persistence/impl/DummyStorageMedium.java b/LoginServer/src/org/moparscape/msc/ls/persistence/impl/DummyStorageMedium.java
new file mode 100644
index 0000000..1e8a011
--- /dev/null
+++ b/LoginServer/src/org/moparscape/msc/ls/persistence/impl/DummyStorageMedium.java
@@ -0,0 +1,192 @@
+package org.moparscape.msc.ls.persistence.impl;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.moparscape.msc.ls.model.PlayerSave;
+import org.moparscape.msc.ls.persistence.StorageMedium;
+import org.moparscape.msc.ls.util.Config;
+
+class DummyStorageMedium implements StorageMedium {
+
+ @Override
+ public boolean savePlayer(PlayerSave s) {
+
+ return true;
+ }
+
+ @Override
+ public String getPass(long user) {
+ return "";
+ }
+
+ @Override
+ public void shutdown() {
+
+ }
+
+ @Override
+ public void logTrade(long from, long to, int item, long amount, int x,
+ int y, int type, long date) {
+
+ }
+
+ @Override
+ public void logReport(long user, long reported, byte reason, int x, int y,
+ String status) {
+
+ }
+
+ @Override
+ public void resetOnlineFlag(int world) {
+
+ }
+
+ @Override
+ public void logKill(long user, long killed, byte type) {
+
+ }
+
+ @Override
+ public void addFriend(long user, long friend) {
+
+ }
+
+ @Override
+ public boolean addFriend_isOnline0(long user, long friend) {
+
+ return false;
+ }
+
+ @Override
+ public boolean addFriend_isOnline1(long friend, long user) {
+
+ return false;
+ }
+
+ @Override
+ public void removeFriend(long user, long friend) {
+
+ }
+
+ @Override
+ public boolean removeFriend_isOnline(long user) {
+
+ return false;
+ }
+
+ @Override
+ public void addIgnore(long user, long friend) {
+
+ }
+
+ @Override
+ public void removeIgnore(long user, long friend) {
+
+ }
+
+ @Override
+ public List getFriendsOnline(long user) {
+
+ return null;
+ }
+
+ @Override
+ public void chatBlock(int on, long user) {
+
+ }
+
+ @Override
+ public void privateBlock(int on, long user) {
+
+ }
+
+ @Override
+ public List getPrivateBlockFriendsOnline(long user) {
+
+ return null;
+ }
+
+ @Override
+ public void tradeBlock(int on, long user) {
+
+ }
+
+ @Override
+ public void duelBlock(int on, long user) {
+
+ }
+
+ @Override
+ public boolean playerExists(long user) {
+
+ return true;
+ }
+
+ @Override
+ public boolean isBanned(long user) {
+ return false;
+ }
+
+ @Override
+ public int getGroupID(long user) {
+ // Dev mode
+ return 11;
+ }
+
+ private long ownerId = 0;
+
+ @Override
+ public long getOwner(long user) {
+ return ownerId++;
+ }
+
+ @Override
+ public void setOnlineFlag(int id, long user) {
+
+ }
+
+ @Override
+ public boolean ban(boolean setBanned, long user) {
+ return false;
+ }
+
+ @Override
+ public void logBan(long user, long modhash) {
+
+ }
+
+ @Override
+ public void setGameSettings(int idx, boolean on, long user) {
+
+ }
+
+ @Override
+ public PlayerSave loadPlayer(long user) {
+ PlayerSave save = new PlayerSave(user);
+ save.setLocation(213, 452);
+ save.setAppearance((byte) 2, (byte) 8, (byte) 14, (byte) 0, (byte) 1,
+ (byte) 2, true, 0l);
+
+ int[] exp = new int[Config.statArray.length];
+ Arrays.fill(exp, 1);
+ int[] stats = exp.clone();
+
+ exp[3] = 1200;
+ save.setExp(exp);
+ stats[3] = 10;
+ save.setCurStats(stats);
+ return save;
+ }
+
+ @Override
+ public void logLogin(long user, String ip) {
+
+ }
+
+ @Override
+ public void logIn(String ip, long user) {
+
+ }
+
+}
diff --git a/LoginServer/src/org/moparscape/msc/ls/persistence/impl/MySQL.java b/LoginServer/src/org/moparscape/msc/ls/persistence/impl/MySQL.java
index 3344c5d..60e5e66 100644
--- a/LoginServer/src/org/moparscape/msc/ls/persistence/impl/MySQL.java
+++ b/LoginServer/src/org/moparscape/msc/ls/persistence/impl/MySQL.java
@@ -3,6 +3,7 @@ package org.moparscape.msc.ls.persistence.impl;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -15,11 +16,11 @@ import org.moparscape.msc.ls.persistence.StorageMedium;
import org.moparscape.msc.ls.util.Config;
import org.moparscape.msc.ls.util.DataConversions;
-public class MySQL implements StorageMedium {
+class MySQL implements StorageMedium {
private final DatabaseConnection conn;
- public MySQL() {
+ MySQL() {
conn = new DatabaseConnection();
}
@@ -44,6 +45,7 @@ public class MySQL implements StorageMedium {
statement.addBatch();
}
statement.executeBatch();
+ close(statement);
}
updateLongs(Statements.save_DeleteInv, s.getUser());
@@ -60,6 +62,7 @@ public class MySQL implements StorageMedium {
statement.addBatch();
}
statement.executeBatch();
+ close(statement);
}
updateLongs(Statements.save_DeleteQuests, s.getUser());
@@ -73,6 +76,7 @@ public class MySQL implements StorageMedium {
statement.addBatch();
}
statement.executeBatch();
+ close(statement);
statement = conn.prepareStatement(Statements.save_UpdateBasicInfo);
statement.setInt(1, s.getCombat());
@@ -92,6 +96,7 @@ public class MySQL implements StorageMedium {
statement.setInt(15, s.getQuestPoints());
statement.setLong(16, s.getUser());
statement.executeUpdate();
+ close(statement);
String query = "UPDATE `" + Statements.PREFIX + "experience` SET ";
for (int i = 0; i < 18; i++)
@@ -108,8 +113,8 @@ public class MySQL implements StorageMedium {
conn.updateQuery(query.substring(0, query.length() - 1)
+ " WHERE `user`=" + s.getUser());
-
- updateLongs(Statements.save_SetEventCD, s.getEventCD() / 1000, s.getUser());
+ updateLongs(Statements.save_SetEventCD, s.getEventCD() / 1000,
+ s.getUser());
return true;
} catch (Exception e) {
@@ -144,6 +149,7 @@ public class MySQL implements StorageMedium {
logTrade.setInt(8, type);
logTrade.executeUpdate();
+ close(logTrade);
} catch (SQLException e) {
if (logTrade != null)
e.printStackTrace();
@@ -178,6 +184,7 @@ public class MySQL implements StorageMedium {
+ Statements.logReport);
}
+ close(logReport);
}
@Override
@@ -200,6 +207,7 @@ public class MySQL implements StorageMedium {
+ Statements.logKill);
}
+ close(logKill);
}
@Override
@@ -219,6 +227,7 @@ public class MySQL implements StorageMedium {
+ Statements.resetOnlineFlag);
}
+ close(resetOnlineFlag);
}
@Override
@@ -262,7 +271,7 @@ public class MySQL implements StorageMedium {
List list = longListFromResultSet(
resultSetFromLongs(Statements.friendsList0, user), "user");
list.addAll(longListFromResultSet(
- resultSetFromLongs(Statements.friendsList1,user), "user"));
+ resultSetFromLongs(Statements.friendsList1, user), "user"));
} catch (SQLException e) {
e.printStackTrace();
}
@@ -312,38 +321,47 @@ public class MySQL implements StorageMedium {
@Override
public boolean isBanned(long user) {
+ ResultSet res = null;
try {
- ResultSet res = resultSetFromLongs(Statements.basicInfo, user);
+ res = resultSetFromLongs(Statements.basicInfo, user);
res.next();
return res.getInt("banned") == 1;
} catch (SQLException e) {
e.printStackTrace();
return true;
+ } finally {
+ close(res);
}
}
@Override
public int getGroupID(long user) {
+ ResultSet res = null;
try {
- ResultSet res = resultSetFromLongs(Statements.basicInfo, user);
+ res = resultSetFromLongs(Statements.basicInfo, user);
res.next();
return res.getInt("group_id");
} catch (SQLException e) {
e.printStackTrace();
// Normal user = 1
return 1;
+ } finally {
+ close(res);
}
}
@Override
public long getOwner(long user) {
+ ResultSet res = null;
try {
- ResultSet res = resultSetFromLongs(Statements.basicInfo, user);
+ res = resultSetFromLongs(Statements.basicInfo, user);
res.next();
return res.getLong("owner");
} catch (SQLException e) {
e.printStackTrace();
return 0L;
+ } finally {
+ close(res);
}
}
@@ -426,16 +444,23 @@ public class MySQL implements StorageMedium {
Config.statArray, user));
save.setCurStats(intArrayFromStringArray(Statements.playerCurExp,
"cur_", Config.statArray, user));
+
+ close(result);
result = resultSetFromLongs(Statements.playerInvItems, user);
+
while (result.next()) {
save.addInvItem(result.getInt("id"), result.getInt("amount"),
result.getInt("wielded") == 1);
}
+ close(result);
result = resultSetFromLongs(Statements.playerBankItems, user);
+
while (result.next()) {
save.addBankItem(result.getInt("id"), result.getInt("amount"));
}
+
+ close(result);
save.addFriends(longListFromResultSet(
resultSetFromLongs(Statements.playerFriends, user),
@@ -448,6 +473,7 @@ public class MySQL implements StorageMedium {
while (result.next()) {
save.setQuestStage(result.getInt("id"), result.getInt("stage"));
}
+ close(result);
} catch (SQLException e) {
e.printStackTrace();
}
@@ -471,6 +497,7 @@ public class MySQL implements StorageMedium {
System.out.println("Failed to create prepared statement: "
+ statement);
}
+ close(prepared);
}
private void updateIntsLongs(String statement, int[] intA, long[] longA) {
@@ -494,6 +521,7 @@ public class MySQL implements StorageMedium {
System.out.println("Failed to create prepared statement: "
+ statement);
}
+ close(prepared);
}
private int[] intArrayFromStringArray(String statement, String prefix,
@@ -517,6 +545,7 @@ public class MySQL implements StorageMedium {
return null;
}
}
+ close(result);
return data;
}
@@ -527,7 +556,7 @@ public class MySQL implements StorageMedium {
while (result.next()) {
list.add(result.getLong(param));
}
-
+ close(result);
return list;
}
@@ -549,7 +578,6 @@ public class MySQL implements StorageMedium {
System.out.println("Failed to create prepared statement: "
+ statement);
}
-
return result;
}
@@ -576,6 +604,32 @@ public class MySQL implements StorageMedium {
return result.next();
} catch (Exception e) {
return false;
+ } finally {
+ close(result);
+ }
+ }
+
+ private void close(ResultSet res) {
+ if(res == null) {
+ return;
+ }
+
+ try {
+ close(res.getStatement());
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void close(Statement s) {
+ if(s == null) {
+ return;
+ }
+
+ try {
+ s.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
}
}
@@ -693,6 +747,7 @@ public class MySQL implements StorageMedium {
+ Statements.logLogin);
}
+ close(logLogin);
}
@Override
@@ -714,5 +769,23 @@ public class MySQL implements StorageMedium {
+ Statements.logIn);
}
+ close(login);
}
+
+ @Override
+ public String getPass(long user) {
+ ResultSet result = resultSetFromLongs(Statements.playerData, user);
+ try {
+ if (!result.next()) {
+ return null;
+ }
+ return result.getString("pass");
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ close(result);
+ }
+ return null;
+ }
+
}
diff --git a/LoginServer/src/org/moparscape/msc/ls/persistence/impl/StorageMediumFactory.java b/LoginServer/src/org/moparscape/msc/ls/persistence/impl/StorageMediumFactory.java
new file mode 100644
index 0000000..d3c8ad4
--- /dev/null
+++ b/LoginServer/src/org/moparscape/msc/ls/persistence/impl/StorageMediumFactory.java
@@ -0,0 +1,12 @@
+package org.moparscape.msc.ls.persistence.impl;
+
+import org.moparscape.msc.ls.persistence.StorageMedium;
+
+public class StorageMediumFactory {
+
+ public static StorageMedium create(String className) throws Exception {
+ return Class.forName(className).asSubclass(StorageMedium.class)
+ .newInstance();
+ }
+
+}
diff --git a/LoginServer/src/org/moparscape/msc/ls/util/Config.java b/LoginServer/src/org/moparscape/msc/ls/util/Config.java
index 7e57eae..8908b26 100644
--- a/LoginServer/src/org/moparscape/msc/ls/util/Config.java
+++ b/LoginServer/src/org/moparscape/msc/ls/util/Config.java
@@ -15,10 +15,12 @@ public class Config {
public static int LS_PORT, QUERY_PORT;
public static String RSCDLS_HOME, CONF_DIR, LOG_DIR, MYSQL_HOST, MYSQL_DB,
- MYSQL_USER, MYSQL_PASS, LS_IP, QUERY_IP, AUTH_URL;
+ MYSQL_USER, MYSQL_PASS, LS_IP, QUERY_IP, AUTH_META_DATA;
public static long START_TIME;
+ public static String AUTH_CLASS;
+
static {
loadEnv();
}
@@ -46,10 +48,11 @@ public class Config {
LS_PORT = Integer.parseInt(props.getProperty("lsport"));
QUERY_IP = props.getProperty("queryip");
QUERY_PORT = Integer.parseInt(props.getProperty("queryport"));
- AUTH_URL = props.getProperty("authURL",
- "https://www.moparscape.org/auth.php?field=");
STORAGE_MEDIUM = props.getProperty("storage-medium",
"org.moparscape.msc.ls.persistence.impl.MySQL");
+ AUTH_CLASS = props.getProperty("auth-class", "org.moparscape.msc.ls.auth.impl.WebsiteAuth");
+ AUTH_META_DATA = props.getProperty("auth-meta-data",
+ "https://www.moparscape.org/auth.php?field=");
props.clear();
}
diff --git a/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/BinaryUsingNIO.java b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/BinaryUsingNIO.java
new file mode 100644
index 0000000..37153f1
--- /dev/null
+++ b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/BinaryUsingNIO.java
@@ -0,0 +1,537 @@
+package org.moparscape.msc.gs.persistence.impl;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+import net.jcip.annotations.ThreadSafe;
+
+import org.moparscape.msc.gs.external.*;
+import org.moparscape.msc.gs.model.InvItem;
+import org.moparscape.msc.gs.model.Point;
+import org.moparscape.msc.gs.model.Shop;
+import org.moparscape.msc.gs.model.TelePoint;
+import org.moparscape.msc.gs.npchandler.NpcHandlerDef;
+import org.moparscape.msc.gs.persistence.DataStore;
+import org.moparscape.msc.gs.persistence.impl.bun.CodecLookupService;
+import org.moparscape.msc.gs.persistence.impl.bun.FileLookupService;
+import org.moparscape.msc.gs.persistence.impl.bun.IO;
+import org.moparscape.msc.gs.phandler.PacketHandlerDef;
+
+@ThreadSafe
+public class BinaryUsingNIO implements DataStore {
+
+ protected BinaryUsingNIO() throws Exception {
+ throw new Exception("Not yet implemented!");
+ }
+
+ @Override
+ public PacketHandlerDef[] loadPacketHandlerDefs() throws Exception {
+ String cls = PacketHandlerDef.class.getName();
+ File f = FileLookupService.lookup(cls);
+ return (PacketHandlerDef[]) CodecLookupService.lookup(cls).decode(IO.read(f));
+ }
+
+ @Override
+ public void savePacketHandlerDefs(PacketHandlerDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public PacketHandlerDef[] loadLSPacketHandlerDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveLSPacketHandlerDefs(PacketHandlerDef[] defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public NpcHandlerDef[] loadNpcHandlers() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveNpcHandlers(NpcHandlerDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadTelePoints() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveTelePoints(Map points) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public List loadShops() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveShops(List shops) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadCerterDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveCerterDefs(Map certers)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public List loadGameObjectLocs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveGameObjectLocs(List locs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public List loadItemLocs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemLocs(List locs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public List loadNPCLocs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveNPCLocs(List locs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public TileDef[] loadTileDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveTileDefs(TileDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public GameObjectDef[] loadGameObjectDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveGameObjectDefs(GameObjectDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public DoorDef[] loadDoorDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveDoorDefs(DoorDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public ItemDef[] loadItemDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemDefs(ItemDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public PrayerDef[] loadPrayerDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void savePrayerDefs(PrayerDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public SpellDef[] loadSpellDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveSpellDefs(SpellDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public NPCDef[] loadNPCDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveNPCDefs(NPCDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public ItemCraftingDef[] loadItemCraftingDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemCraftingDefs(ItemCraftingDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public ItemHerbSecond[] loadItemHerbSeconds() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemHerbSeconds(ItemHerbSecond[] seconds) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemDartTipDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemDartTipDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadGemDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveGemDefs(Map defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemLogCutDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemLogCutDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemBowStringDefs()
+ throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemBowStringDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemArrowHeadDefs()
+ throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemArrowHeadDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadFiremakingDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveFiremakingDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemAffectedTypes() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemAffectedTypes(Map types)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemWieldableDefs()
+ throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemWieldableDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemUnIdentHerbDefs()
+ throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemUnIdentHerbDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemHerbDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemHerbDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemEdibleHeals() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemEdibleHeals(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemCookingDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemCookingDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadItemSmeltingDefs()
+ throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemSmeltingDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public ItemSmithingDef[] loadItemSmithingDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveItemSmithingDefs(ItemSmithingDef[] defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadObjectMiningDefs()
+ throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveObjectMiningDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadObjectWoodcuttingDefs()
+ throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveObjectWoodcuttingDefs(
+ Map defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadObjectFishDefs()
+ throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveObjectFishingDefs(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadSpellAgressiveLevel() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveSpellAgressiveLevel(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadAgilityDefs() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveAgilityDefs(Map defs) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadAgilityCourseDefs()
+ throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveAgilityCourseDef(Map defs)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public List[] loadKeyChestLoots() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void saveKeyChestLoots(List[] loots) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Map loadDartTips() throws Exception {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/ByteBufferUtil.java b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/ByteBufferUtil.java
new file mode 100644
index 0000000..9bcd8cd
--- /dev/null
+++ b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/ByteBufferUtil.java
@@ -0,0 +1,22 @@
+package org.moparscape.msc.gs.persistence.impl.bun;
+
+import java.nio.ByteBuffer;
+
+public class ByteBufferUtil {
+ public static ByteBuffer putString(ByteBuffer buf, String s) {
+ buf.put((byte) s.length());
+ for (byte c : s.getBytes()) {
+ buf.put(c);
+ }
+ return buf;
+ }
+
+ public static String getString(ByteBuffer buf) {
+ int bytes = buf.get();
+ StringBuilder sb = new StringBuilder(bytes);
+ for (int i = 0; i < bytes; i++) {
+ sb.append((char) buf.get());
+ }
+ return sb.toString();
+ }
+}
diff --git a/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/Codec.java b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/Codec.java
new file mode 100644
index 0000000..0c8c97d
--- /dev/null
+++ b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/Codec.java
@@ -0,0 +1,8 @@
+package org.moparscape.msc.gs.persistence.impl.bun;
+
+import java.nio.ByteBuffer;
+
+public interface Codec {
+ public ByteBuffer encode(T t);
+ public T decode(ByteBuffer buf);
+}
diff --git a/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/CodecLookupService.java b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/CodecLookupService.java
new file mode 100644
index 0000000..74159bd
--- /dev/null
+++ b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/CodecLookupService.java
@@ -0,0 +1,26 @@
+package org.moparscape.msc.gs.persistence.impl.bun;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import net.jcip.annotations.ThreadSafe;
+
+@ThreadSafe
+public class CodecLookupService {
+ private static final Map> codecs = new ConcurrentHashMap>();
+
+ public static Codec> lookup(String className) {
+ return codecs.get(className);
+ }
+
+ public static boolean register(String className, Codec> codec) {
+ synchronized (codecs) {
+ Codec> prev = codecs.put(className, codec);
+ if (prev == null) {
+ codecs.put(className, prev);
+ return false;
+ }
+ }
+ return true;
+ }
+}
diff --git a/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/FileLookupService.java b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/FileLookupService.java
new file mode 100644
index 0000000..4ebc5f9
--- /dev/null
+++ b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/FileLookupService.java
@@ -0,0 +1,27 @@
+package org.moparscape.msc.gs.persistence.impl.bun;
+
+import java.io.File;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import net.jcip.annotations.ThreadSafe;
+
+@ThreadSafe
+public class FileLookupService {
+ private static Map files = new ConcurrentHashMap();
+
+ public static File lookup(String className) {
+ return files.get(className);
+ }
+
+ public static boolean register(String className, File file) {
+ synchronized (files) {
+ File prev = files.put(className, file);
+ if (prev == null) {
+ files.put(className, prev);
+ return false;
+ }
+ }
+ return true;
+ }
+}
diff --git a/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/IO.java b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/IO.java
new file mode 100644
index 0000000..b92d28c
--- /dev/null
+++ b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/IO.java
@@ -0,0 +1,45 @@
+package org.moparscape.msc.gs.persistence.impl.bun;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+
+public class IO {
+ public static void write(File file, ByteBuffer buf) throws Exception {
+ if(!file.exists()) {
+ file.createNewFile();
+ }
+
+ FileOutputStream fos = new FileOutputStream(file);
+
+ FileChannel chan = fos.getChannel();
+
+ chan.write(buf);
+
+ chan.close();
+ fos.close();
+ }
+
+ public static ByteBuffer read(File file) throws Exception {
+ FileInputStream fis = new FileInputStream(file);
+ FileChannel chan = fis.getChannel();
+
+ long size = chan.size();
+ if(size > Integer.MAX_VALUE) {
+ throw new IndexOutOfBoundsException("File too large");
+ }
+
+ ByteBuffer buf = ByteBuffer.allocate((int) size);
+
+ chan.read(buf);
+
+ chan.close();
+ fis.close();
+
+ buf.flip();
+
+ return buf;
+ }
+}
diff --git a/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/codec/NpcDefCodec.java b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/codec/NpcDefCodec.java
new file mode 100644
index 0000000..5c03bc3
--- /dev/null
+++ b/Modules/DataStore/BinaryUsingNIO/src/org/moparscape/msc/gs/persistence/impl/bun/codec/NpcDefCodec.java
@@ -0,0 +1,32 @@
+package org.moparscape.msc.gs.persistence.impl.bun.codec;
+
+import java.nio.ByteBuffer;
+
+import org.moparscape.msc.gs.external.NPCDef;
+import org.moparscape.msc.gs.persistence.impl.bun.ByteBufferUtil;
+import org.moparscape.msc.gs.persistence.impl.bun.Codec;
+
+public class NpcDefCodec implements Codec {
+
+ @Override
+ public ByteBuffer encode(NPCDef[] t) {
+
+ return null;
+ }
+
+ private ByteBuffer encode(NPCDef d) {
+ ByteBuffer buf = ByteBuffer.allocate(d.getName().length() + 1 + d.getDescription().length() + 1 + d.getCommand().length() + 2 + 4 * 2 + 2 + 13 + 8 + 8);
+
+ ByteBufferUtil.putString(buf, d.getName());
+
+
+ buf.flip();
+ return buf;
+ }
+
+ @Override
+ public NPCDef[] decode(ByteBuffer buf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
diff --git a/Modules/DataStore/DataStoreCore.jar b/Modules/DataStore/DataStoreCore.jar
new file mode 100644
index 0000000..f6cb33c
Binary files /dev/null and b/Modules/DataStore/DataStoreCore.jar differ
diff --git a/Modules/DataStore/XMLUsingXStream/build.xml b/Modules/DataStore/XMLUsingXStream/build.xml
new file mode 100644
index 0000000..f99a206
--- /dev/null
+++ b/Modules/DataStore/XMLUsingXStream/build.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/GameServer/lib/xpp3.jar b/Modules/DataStore/XMLUsingXStream/lib/xpp3.jar
similarity index 100%
rename from GameServer/lib/xpp3.jar
rename to Modules/DataStore/XMLUsingXStream/lib/xpp3.jar
diff --git a/GameServer/lib/xstream.jar b/Modules/DataStore/XMLUsingXStream/lib/xstream.jar
similarity index 100%
rename from GameServer/lib/xstream.jar
rename to Modules/DataStore/XMLUsingXStream/lib/xstream.jar
diff --git a/Modules/DataStore/XMLUsingXStream/src/org/moparscape/msc/gs/persistence/impl/XMLUsingXStream.java b/Modules/DataStore/XMLUsingXStream/src/org/moparscape/msc/gs/persistence/impl/XMLUsingXStream.java
new file mode 100644
index 0000000..0a53727
--- /dev/null
+++ b/Modules/DataStore/XMLUsingXStream/src/org/moparscape/msc/gs/persistence/impl/XMLUsingXStream.java
@@ -0,0 +1,527 @@
+package org.moparscape.msc.gs.persistence.impl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+
+import net.jcip.annotations.NotThreadSafe;
+
+import org.moparscape.msc.config.Config;
+import org.moparscape.msc.gs.external.*;
+import org.moparscape.msc.gs.model.InvItem;
+import org.moparscape.msc.gs.model.Point;
+import org.moparscape.msc.gs.model.Shop;
+import org.moparscape.msc.gs.model.TelePoint;
+import org.moparscape.msc.gs.npchandler.NpcHandlerDef;
+import org.moparscape.msc.gs.persistence.DataStore;
+import org.moparscape.msc.gs.phandler.PacketHandlerDef;
+import org.moparscape.msc.gs.util.Logger;
+
+import com.thoughtworks.xstream.XStream;
+
+/**
+ *
+ * A DataStore that parses XML using XStream.
+ *
+ * @author Joe Pritzel
+ *
+ */
+@NotThreadSafe
+@SuppressWarnings("unchecked")
+public class XMLUsingXStream implements DataStore {
+
+ protected XMLUsingXStream() {
+ // To conform to the contract specified by the DataStore interface.
+ }
+
+ private static final XStream xstream = new XStream();
+
+ static {
+ try {
+ setupAliases();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static Object load(String filename) {
+ filename = filename.replaceAll(Pattern.quote("/"),
+ Matcher.quoteReplacement(File.separator));
+ try {
+ InputStream is = new FileInputStream(new File(Config.CONF_DIR,
+ filename));
+ if (filename.endsWith(".gz")) {
+ is = new GZIPInputStream(is);
+ }
+ Object rv = xstream.fromXML(is);
+ return rv;
+ } catch (IOException ioe) {
+ Logger.error("Filename = " + filename);
+ Logger.error(ioe);
+ }
+ return null;
+ }
+
+ public static void setupAliases() {
+ try {
+ Properties aliases = new Properties();
+ FileInputStream fis = new FileInputStream(new File(Config.CONF_DIR,
+ "aliases.xml"));
+ aliases.loadFromXML(fis);
+ for (Enumeration> e = aliases.propertyNames(); e
+ .hasMoreElements();) {
+ String alias = (String) e.nextElement();
+ Class> c = Class.forName((String) aliases.get(alias));
+ xstream.alias(alias, c);
+ }
+ } catch (Exception ioe) {
+ Logger.error(ioe);
+ }
+ }
+
+ public static void write(String filename, Object o) {
+ filename = filename.replaceAll(Pattern.quote("/"),
+ Matcher.quoteReplacement(File.separator));
+ try {
+ OutputStream os = new FileOutputStream(new File(Config.CONF_DIR,
+ filename));
+ if (filename.endsWith(".gz")) {
+ os = new GZIPOutputStream(os);
+ }
+ xstream.toXML(o, os);
+ } catch (IOException ioe) {
+ Logger.error(ioe);
+ }
+ }
+
+ @Override
+ public PacketHandlerDef[] loadPacketHandlerDefs() {
+ return (PacketHandlerDef[]) load("PacketHandlers.xml");
+ }
+
+ @Override
+ public PacketHandlerDef[] loadLSPacketHandlerDefs() {
+ return (PacketHandlerDef[]) load("LSPacketHandlers.xml");
+ }
+
+ @Override
+ public NpcHandlerDef[] loadNpcHandlers() {
+ return (NpcHandlerDef[]) load("NpcHandlers.xml");
+ }
+
+ @Override
+ public Map loadTelePoints() {
+ return (Map) load("locs/extras/ObjectTelePoints.xml.gz");
+ }
+
+ @Override
+ public List loadShops() {
+ return (List) load("locs/Shops.xml.gz");
+ }
+
+ @Override
+ public Map loadCerterDefs() {
+ return (Map) load("defs/extras/NpcCerters.xml.gz");
+ }
+
+ @Override
+ public List loadGameObjectLocs() {
+ return (List) load("locs/GameObjectLoc.xml.gz");
+ }
+
+ @Override
+ public List loadItemLocs() {
+ return (List) load("locs/ItemLoc.xml.gz");
+ }
+
+ @Override
+ public List loadNPCLocs() {
+ return (List) load("locs/NpcLoc.xml.gz");
+ }
+
+ @Override
+ public TileDef[] loadTileDefs() {
+ return (TileDef[]) load("defs/TileDef.xml.gz");
+ }
+
+ @Override
+ public GameObjectDef[] loadGameObjectDefs() {
+ return (GameObjectDef[]) load("defs/GameObjectDef.xml.gz");
+ }
+
+ @Override
+ public DoorDef[] loadDoorDefs() {
+ return (DoorDef[]) load("defs/DoorDef.xml.gz");
+ }
+
+ @Override
+ public ItemDef[] loadItemDefs() {
+ return (ItemDef[]) load("defs/ItemDef.xml.gz");
+ }
+
+ @Override
+ public PrayerDef[] loadPrayerDefs() {
+ return (PrayerDef[]) load("defs/PrayerDef.xml.gz");
+ }
+
+ @Override
+ public SpellDef[] loadSpellDefs() {
+ return (SpellDef[]) load("defs/SpellDef.xml.gz");
+ }
+
+ @Override
+ public NPCDef[] loadNPCDefs() {
+ return (NPCDef[]) load("defs/NPCDef.xml.gz");
+ }
+
+ @Override
+ public ItemCraftingDef[] loadItemCraftingDefs() {
+ return (ItemCraftingDef[]) load("defs/extras/ItemCraftingDef.xml.gz");
+ }
+
+ @Override
+ public ItemHerbSecond[] loadItemHerbSeconds() {
+ return (ItemHerbSecond[]) load("defs/extras/ItemHerbSecond.xml.gz");
+ }
+
+ @Override
+ public Map loadItemDartTipDefs() {
+ return (Map) load("defs/extras/ItemDartTipDef.xml.gz");
+ }
+
+ @Override
+ public Map loadGemDefs() {
+ return (Map) load("defs/extras/ItemGemDef.xml.gz");
+ }
+
+ @Override
+ public Map loadItemLogCutDefs() {
+ return (Map) load("defs/extras/ItemLogCutDef.xml.gz");
+ }
+
+ @Override
+ public Map loadItemBowStringDefs() {
+ return (Map) load("defs/extras/ItemBowStringDef.xml.gz");
+ }
+
+ @Override
+ public Map loadItemArrowHeadDefs() {
+ return (Map) load("defs/extras/ItemArrowHeadDef.xml.gz");
+ }
+
+ @Override
+ public Map loadFiremakingDefs() {
+ return (Map) load("defs/extras/FiremakingDef.xml.gz");
+ }
+
+ @Override
+ public Map loadItemAffectedTypes() {
+ return (Map) load("defs/extras/ItemAffectedTypes.xml.gz");
+ }
+
+ @Override
+ public Map loadItemWieldableDefs() {
+ return (Map) load("defs/extras/ItemWieldableDef.xml.gz");
+ }
+
+ @Override
+ public Map loadItemUnIdentHerbDefs() {
+ return (Map) load("defs/extras/ItemUnIdentHerbDef.xml.gz");
+ }
+
+ @Override
+ public Map loadItemHerbDefs() {
+ return (Map) load("defs/extras/ItemHerbDef.xml.gz");
+ }
+
+ @Override
+ public Map loadItemEdibleHeals() {
+ return (Map) load("defs/extras/ItemEdibleHeals.xml.gz");
+ }
+
+ @Override
+ public Map loadItemCookingDefs() {
+ return (Map) load("defs/extras/ItemCookingDef.xml.gz");
+ }
+
+ @Override
+ public Map loadItemSmeltingDefs() {
+ return (Map) load("defs/extras/ItemSmeltingDef.xml.gz");
+ }
+
+ @Override
+ public ItemSmithingDef[] loadItemSmithingDefs() {
+ return (ItemSmithingDef[]) load("defs/extras/ItemSmithingDef.xml.gz");
+ }
+
+ @Override
+ public Map loadObjectMiningDefs() {
+ return (Map) load("defs/extras/ObjectMining.xml.gz");
+ }
+
+ @Override
+ public Map loadObjectWoodcuttingDefs() {
+ return (Map) load("defs/extras/ObjectWoodcutting.xml.gz");
+ }
+
+ @Override
+ public Map loadObjectFishDefs() {
+ return (Map) load("defs/extras/ObjectFishing.xml.gz");
+ }
+
+ @Override
+ public Map loadSpellAgressiveLevel() {
+ return (Map) load("defs/extras/SpellAggressiveLvl.xml.gz");
+ }
+
+ @Override
+ public Map loadAgilityDefs() {
+ return (Map) load("defs/extras/AgilityDef.xml.gz");
+ }
+
+ @Override
+ public Map loadAgilityCourseDefs() {
+ return (Map) load("defs/extras/AgilityCourseDef.xml.gz");
+ }
+
+ @Override
+ public List[] loadKeyChestLoots() {
+ return (List[]) load("defs/extras/KeyChestLoot.xml.gz");
+ }
+
+ @Override
+ public Map loadDartTips() {
+ return (HashMap) load("defs/extras/ItemDartTipDef.xml.gz");
+ }
+
+ @Override
+ public void dispose() {
+
+ }
+
+ @Override
+ public void savePacketHandlerDefs(PacketHandlerDef[] defs) throws Exception {
+ write("PacketHandlers.xml", defs);
+ }
+
+ @Override
+ public void saveLSPacketHandlerDefs(PacketHandlerDef[] defs)
+ throws Exception {
+ write("LSPacketHanlders.xml", defs);
+ }
+
+ @Override
+ public void saveNpcHandlers(NpcHandlerDef[] defs) throws Exception {
+ write("NpcHandlers.xml", defs);
+ }
+
+ @Override
+ public void saveTelePoints(Map points) throws Exception {
+ write("locs/extras/ObjectTelePoints.xml.gz", points);
+ }
+
+ @Override
+ public void saveShops(List shops) throws Exception {
+ write("locs/Shops.xml.gz", shops);
+ }
+
+ @Override
+ public void saveCerterDefs(Map certers)
+ throws Exception {
+ write("defs/extras/NpcCerters.xml.gz", certers);
+ }
+
+ @Override
+ public void saveGameObjectLocs(List locs) throws Exception {
+ write("locs/GameObjectLocs.xml.gz", locs);
+ }
+
+ @Override
+ public void saveItemLocs(List locs) throws Exception {
+ write("locs/ItemLoc.xml.gz", locs);
+ }
+
+ @Override
+ public void saveNPCLocs(List locs) throws Exception {
+ write("locs/NpcLoc.xml.gz", locs);
+ }
+
+ @Override
+ public void saveTileDefs(TileDef[] defs) throws Exception {
+ write("defs/TileDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveGameObjectDefs(GameObjectDef[] defs) throws Exception {
+ write("defs/GameObjectDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveDoorDefs(DoorDef[] defs) throws Exception {
+ write("defs/DoorDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemDefs(ItemDef[] defs) throws Exception {
+ write("defs/ItemDef.xml.gz", defs);
+ }
+
+ @Override
+ public void savePrayerDefs(PrayerDef[] defs) throws Exception {
+ write("defs/PrayerDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveSpellDefs(SpellDef[] defs) throws Exception {
+ write("defs/SpellDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveNPCDefs(NPCDef[] defs) throws Exception {
+ write("defs/NPCDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemCraftingDefs(ItemCraftingDef[] defs) throws Exception {
+ write("defs/extras/ItemCraftingDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemHerbSeconds(ItemHerbSecond[] seconds) throws Exception {
+ write("defs/extras/ItemHerbSecond.xml.gz", seconds);
+ }
+
+ @Override
+ public void saveItemDartTipDefs(Map defs)
+ throws Exception {
+ write("defs/extras/ItemDartTipDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveGemDefs(Map defs) throws Exception {
+ write("def/extras/ItemGemDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemLogCutDefs(Map defs)
+ throws Exception {
+ write("def/extras/ItemLogCutDefs.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemBowStringDefs(Map defs)
+ throws Exception {
+ write("defs/extras/ItemBowStringDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemArrowHeadDefs(Map defs)
+ throws Exception {
+ write("defs/extras/ItemArrowHeadDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveFiremakingDefs(Map defs)
+ throws Exception {
+ write("defs/extras/FiremakingDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemAffectedTypes(Map types)
+ throws Exception {
+ write("defs/extras/ItemAffectedTypes.xml.gz", types);
+ }
+
+ @Override
+ public void saveItemWieldableDefs(Map defs)
+ throws Exception {
+ write("defs/extras/ItemWieldableDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemUnIdentHerbDefs(Map defs)
+ throws Exception {
+ write("defs/extras/Item.UnIdentHerbDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemHerbDefs(Map defs)
+ throws Exception {
+ write("defs/extras/ItemHerbDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemEdibleHeals(Map defs)
+ throws Exception {
+ write("defs/extras/ItemEdibleHeals.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemCookingDefs(Map defs)
+ throws Exception {
+ write("defs/extras/ItemCookingDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemSmeltingDefs(Map defs)
+ throws Exception {
+ write("defs/extras/ItemSmeltingDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveItemSmithingDefs(ItemSmithingDef[] defs) throws Exception {
+ write("defs/extras/ItemSmithingDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveObjectMiningDefs(Map defs)
+ throws Exception {
+ write("defs/extras/ObjectMiningDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveObjectWoodcuttingDefs(
+ Map defs) throws Exception {
+ write("defs/extras/ObjectWoodcuttingDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveObjectFishingDefs(Map defs)
+ throws Exception {
+ write("defs/extras/ObjectFishingDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveSpellAgressiveLevel(Map defs)
+ throws Exception {
+ write("defs/extras/SpellAgressiveLvl.xml.gz", defs);
+ }
+
+ @Override
+ public void saveAgilityDefs(Map defs) throws Exception {
+ write("defs/extras/AgilityDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveAgilityCourseDef(Map defs)
+ throws Exception {
+ write("defs/extras/AgilityCourseDef.xml.gz", defs);
+ }
+
+ @Override
+ public void saveKeyChestLoots(List[] loots) throws Exception {
+ write("defs/extras/KeyChestLoot.xml.gz", loots);
+ }
+}
diff --git a/Modules/DataStore/build.xml b/Modules/DataStore/build.xml
new file mode 100644
index 0000000..3837fa3
--- /dev/null
+++ b/Modules/DataStore/build.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Modules/DataStore/lib/jcip-annotations-1.0.jar b/Modules/DataStore/lib/jcip-annotations-1.0.jar
new file mode 100644
index 0000000..06e9066
Binary files /dev/null and b/Modules/DataStore/lib/jcip-annotations-1.0.jar differ
diff --git a/Modules/DataStore/src/org/moparscape/msc/gs/persistence/DataStore.java b/Modules/DataStore/src/org/moparscape/msc/gs/persistence/DataStore.java
new file mode 100644
index 0000000..bc7ad17
--- /dev/null
+++ b/Modules/DataStore/src/org/moparscape/msc/gs/persistence/DataStore.java
@@ -0,0 +1,202 @@
+package org.moparscape.msc.gs.persistence;
+
+import java.util.List;
+import java.util.Map;
+
+import org.moparscape.msc.gs.external.*;
+import org.moparscape.msc.gs.model.InvItem;
+import org.moparscape.msc.gs.model.Point;
+import org.moparscape.msc.gs.model.Shop;
+import org.moparscape.msc.gs.model.TelePoint;
+import org.moparscape.msc.gs.npchandler.NpcHandlerDef;
+import org.moparscape.msc.gs.phandler.PacketHandlerDef;
+
+/**
+ * Any retrieval of unchanging data should be done through this interface. All
+ * implementations should be only accessable by the
+ * org.moparscape.msc.gs.persistence.impl package.
+ * Implementations should also use JCIP annotations to specify their degree of
+ * thread saftey.
+ *
+ * @author Joe Pritzel
+ *
+ */
+public abstract interface DataStore {
+
+ public PacketHandlerDef[] loadPacketHandlerDefs() throws Exception;
+
+ public void savePacketHandlerDefs(PacketHandlerDef[] defs) throws Exception;
+
+ public PacketHandlerDef[] loadLSPacketHandlerDefs() throws Exception;
+
+ public void saveLSPacketHandlerDefs(PacketHandlerDef[] defs)
+ throws Exception;
+
+ public NpcHandlerDef[] loadNpcHandlers() throws Exception;
+
+ public void saveNpcHandlers(NpcHandlerDef[] defs) throws Exception;
+
+ public Map loadTelePoints() throws Exception;
+
+ public void saveTelePoints(Map points) throws Exception;
+
+ public List loadShops() throws Exception;
+
+ public void saveShops(List shops) throws Exception;
+
+ public Map loadCerterDefs() throws Exception;
+
+ public void saveCerterDefs(Map certers)
+ throws Exception;
+
+ public List loadGameObjectLocs() throws Exception;
+
+ public void saveGameObjectLocs(List locs) throws Exception;
+
+ public List loadItemLocs() throws Exception;
+
+ public void saveItemLocs(List locs) throws Exception;
+
+ public List loadNPCLocs() throws Exception;
+
+ public void saveNPCLocs(List locs) throws Exception;
+
+ public TileDef[] loadTileDefs() throws Exception;
+
+ public void saveTileDefs(TileDef[] defs) throws Exception;
+
+ public GameObjectDef[] loadGameObjectDefs() throws Exception;
+
+ public void saveGameObjectDefs(GameObjectDef[] defs) throws Exception;
+
+ public DoorDef[] loadDoorDefs() throws Exception;
+
+ public void saveDoorDefs(DoorDef[] defs) throws Exception;
+
+ public ItemDef[] loadItemDefs() throws Exception;
+
+ public void saveItemDefs(ItemDef[] defs) throws Exception;
+
+ public PrayerDef[] loadPrayerDefs() throws Exception;
+
+ public void savePrayerDefs(PrayerDef[] defs) throws Exception;
+
+ public SpellDef[] loadSpellDefs() throws Exception;
+
+ public void saveSpellDefs(SpellDef[] defs) throws Exception;
+
+ public NPCDef[] loadNPCDefs() throws Exception;
+
+ public void saveNPCDefs(NPCDef[] defs) throws Exception;
+
+ public ItemCraftingDef[] loadItemCraftingDefs() throws Exception;
+
+ public void saveItemCraftingDefs(ItemCraftingDef[] defs) throws Exception;
+
+ public ItemHerbSecond[] loadItemHerbSeconds() throws Exception;
+
+ public void saveItemHerbSeconds(ItemHerbSecond[] seconds) throws Exception;
+
+ public Map loadItemDartTipDefs() throws Exception;
+
+ public void saveItemDartTipDefs(Map defs)
+ throws Exception;
+
+ public Map loadGemDefs() throws Exception;
+
+ public void saveGemDefs(Map defs) throws Exception;
+
+ public Map loadItemLogCutDefs() throws Exception;
+
+ public void saveItemLogCutDefs(Map defs)
+ throws Exception;
+
+ public Map loadItemBowStringDefs()
+ throws Exception;
+
+ public void saveItemBowStringDefs(Map defs)
+ throws Exception;
+
+ public Map loadItemArrowHeadDefs()
+ throws Exception;
+
+ public void saveItemArrowHeadDefs(Map defs)
+ throws Exception;
+
+ public Map loadFiremakingDefs() throws Exception;
+
+ public void saveFiremakingDefs(Map defs)
+ throws Exception;
+
+ public Map loadItemAffectedTypes() throws Exception;
+
+ public void saveItemAffectedTypes(Map types) throws Exception;
+
+ public Map loadItemWieldableDefs()
+ throws Exception;
+
+ public void saveItemWieldableDefs(Map defs) throws Exception;
+
+ public Map loadItemUnIdentHerbDefs()
+ throws Exception;
+
+ public void saveItemUnIdentHerbDefs(Map defs) throws Exception;
+
+ public Map loadItemHerbDefs() throws Exception;
+
+ public void saveItemHerbDefs(Map defs) throws Exception;
+
+ public Map loadItemEdibleHeals() throws Exception;
+
+ public void saveItemEdibleHeals(Map defs) throws Exception;
+
+ public Map loadItemCookingDefs() throws Exception;
+
+ public void saveItemCookingDefs(Map defs) throws Exception;
+
+ public Map loadItemSmeltingDefs()
+ throws Exception;
+
+ public void saveItemSmeltingDefs(Map defs) throws Exception;
+
+ public ItemSmithingDef[] loadItemSmithingDefs() throws Exception;
+
+ public void saveItemSmithingDefs(ItemSmithingDef[] defs) throws Exception;
+
+ public Map loadObjectMiningDefs()
+ throws Exception;
+
+ public void saveObjectMiningDefs(Map defs) throws Exception;
+
+ public Map loadObjectWoodcuttingDefs()
+ throws Exception;
+
+ public void saveObjectWoodcuttingDefs(Map defs) throws Exception;
+
+ public Map loadObjectFishDefs()
+ throws Exception;
+
+ public void saveObjectFishingDefs(Map defs) throws Exception;
+
+ public Map loadSpellAgressiveLevel() throws Exception;
+
+ public void saveSpellAgressiveLevel(Map defs) throws Exception;
+
+ public Map loadAgilityDefs() throws Exception;
+
+ public void saveAgilityDefs(Map defs) throws Exception;
+
+ public Map loadAgilityCourseDefs()
+ throws Exception;
+
+ public void saveAgilityCourseDef(Map defs) throws Exception;
+
+ public List[] loadKeyChestLoots() throws Exception;
+
+ public void saveKeyChestLoots(List[] loots) throws Exception;
+
+ public Map loadDartTips() throws Exception;
+
+ public void dispose();
+
+}
diff --git a/README b/README
index d679320..6160207 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-An emulator for an old java MMORPG.
+An emulator for an old Java MMORPG.
Setup
======
@@ -6,6 +6,7 @@ Install the JRE and JDK
Install Ant
Install Ivy
Install MySQL
+Install a Web-Server
Ensure all the paths are set correctly.
@@ -13,10 +14,21 @@ Import Database.sql
If you have any questions regarding that use Google.
+For account authentication (using the default config) you need to copy the auth.php in the LoginServer folder, and ensure that localhost/auth.php is pointed to it.
+
+It is highly recommended that you modify it so that it checks the credentials provided against the database.
+
Go to LoginServer in the terminal/command prompt and type--
-ant runls
+ant run
Go to GameServer in the terminal/command prompy and type--
ant run
You're now ready to start accept connections.
+
+Modules
+========
+To compile modules go in the module's directory and run the following command--
+ant build
+
+To use the module copy the newly created JAR into the modules folder in the respective server. You may need to change some configuration files for the module to be used.
\ No newline at end of file