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