diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game-server/character.cpp | 3 | ||||
-rw-r--r-- | src/game-server/main-game.cpp | 11 | ||||
-rw-r--r-- | src/game-server/mapcomposite.cpp | 4 | ||||
-rw-r--r-- | src/scripting/luascript.cpp | 33 | ||||
-rw-r--r-- | src/scripting/luascript.h | 9 | ||||
-rw-r--r-- | src/scripting/script.cpp | 34 | ||||
-rw-r--r-- | src/scripting/script.h | 12 |
7 files changed, 38 insertions, 68 deletions
diff --git a/src/game-server/character.cpp b/src/game-server/character.cpp index 41d05455..f1792261 100644 --- a/src/game-server/character.cpp +++ b/src/game-server/character.cpp @@ -714,7 +714,8 @@ void Character::takeSpecial(int id) void Character::clearSpecials() { - for(std::map<int, Special*>::iterator i = mSpecials.begin(); i != mSpecials.end(); i++) + for (std::map<int, Special*>::iterator i = mSpecials.begin(); + i != mSpecials.end(); i++) { delete i->second; } diff --git a/src/game-server/main-game.cpp b/src/game-server/main-game.cpp index 62da4f9c..daf15611 100644 --- a/src/game-server/main-game.cpp +++ b/src/game-server/main-game.cpp @@ -71,9 +71,7 @@ using utils::Logger; #define DEFAULT_MONSTERSDB_FILE "monsters.xml" #define DEFAULT_STATUSDB_FILE "status-effects.xml" #define DEFAULT_PERMISSION_FILE "permissions.xml" -#define DEFAULT_GLOBAL_EVENT_SCRIPT_FILE "scripts/global_events.lua" -#define DEFAULT_SPECIAL_ACTIONS_SCRIPT_FILE "scripts/special_actions.lua" -#define DEFAULT_CRAFT_SCRIPT_FILE "scripts/crafting.lua" +#define DEFAULT_GLOBAL_EVENT_SCRIPT_FILE "scripts/main.lua" static int const WORLD_TICK_SKIP = 2; /** tolerance for lagging behind in world calculation) **/ @@ -141,9 +139,10 @@ static void initializeServer() StatusManager::initialize(DEFAULT_STATUSDB_FILE); PermissionManager::initialize(DEFAULT_PERMISSION_FILE); - LuaScript::loadGlobalEventScript(DEFAULT_GLOBAL_EVENT_SCRIPT_FILE); - LuaScript::loadSpecialActionsScript(DEFAULT_SPECIAL_ACTIONS_SCRIPT_FILE); - LuaScript::loadCraftScript(DEFAULT_CRAFT_SCRIPT_FILE); + const std::string mainScriptFile = + Configuration::getValue("script_mainFile", + DEFAULT_GLOBAL_EVENT_SCRIPT_FILE); + Script::loadGlobalEventScript(mainScriptFile); // --- Initialize the global handlers // FIXME: Make the global handlers global vars or part of a bigger diff --git a/src/game-server/mapcomposite.cpp b/src/game-server/mapcomposite.cpp index 4d0581ad..99590566 100644 --- a/src/game-server/mapcomposite.cpp +++ b/src/game-server/mapcomposite.cpp @@ -737,7 +737,7 @@ void MapComposite::initializeContent() if (scriptEngineName.empty()) { // Set engine to default value and print warning - scriptEngineName = Configuration::getValue("defaultScriptEngine", "lua"); + scriptEngineName = Configuration::getValue("script_defaultEngine", "lua"); LOG_WARN("No script engine specified for map script \"" + mName + "\", falling back to default"); } @@ -772,7 +772,7 @@ void MapComposite::initializeContent() else if (scriptEngineName.empty()) { // Set engine to default value and print warning - scriptEngineName = Configuration::getValue("defaultScriptEngine", "lua"); + scriptEngineName = Configuration::getValue("script_defaultEngine", "lua"); LOG_WARN("No script engine specified for map script \"" + mName + "\", falling back to default"); } diff --git a/src/scripting/luascript.cpp b/src/scripting/luascript.cpp index dc6230ca..af9da17b 100644 --- a/src/scripting/luascript.cpp +++ b/src/scripting/luascript.cpp @@ -187,36 +187,3 @@ void LuaScript::getPostCallback(Character *q, const std::string &sender, s->nbArgs = 3; s->execute(); } - -bool LuaScript::loadGlobalEventScript(const std::string &file) -{ - Script::globalEventScript = new LuaScript(); - if (!Script::globalEventScript->loadFile(file)) - { - Script::globalEventScript = NULL; - return false; - } - return true; -} - -bool LuaScript::loadSpecialActionsScript(const std::string &file) -{ - Script::specialActionsScript = new LuaScript(); - if (!Script::specialActionsScript->loadFile(file)) - { - Script::specialActionsScript = NULL; - return false; - } - return true; -} - -bool LuaScript::loadCraftScript(const std::string &file) -{ - Script::craftScript = new LuaScript(); - if (!Script::craftScript->loadFile(file)) - { - Script::craftScript = NULL; - return false; - } - return true; -} diff --git a/src/scripting/luascript.h b/src/scripting/luascript.h index b9bde2d8..0d59703c 100644 --- a/src/scripting/luascript.h +++ b/src/scripting/luascript.h @@ -31,7 +31,7 @@ extern "C" { /** * Implementation of the Script class for Lua. */ -class LuaScript: public Script +class LuaScript : public Script { public: /** @@ -66,13 +66,6 @@ class LuaScript: public Script void processRemoveEvent(Thing *thing); - /** - * Loads the global event script file - */ - static bool loadGlobalEventScript(const std::string &file); - static bool loadSpecialActionsScript(const std::string &file); - static bool loadCraftScript(const std::string &file); - private: lua_State *mState; int nbArgs; diff --git a/src/scripting/script.cpp b/src/scripting/script.cpp index b6121bb8..722979fd 100644 --- a/src/scripting/script.cpp +++ b/src/scripting/script.cpp @@ -34,8 +34,6 @@ typedef std::map< std::string, Script::Factory > Engines; static Engines *engines = NULL; Script *Script::globalEventScript = NULL; -Script *Script::specialActionsScript = NULL; -Script *Script::craftScript = NULL; Script::Script(): mMap(NULL), @@ -110,11 +108,21 @@ void Script::loadNPC(const std::string &name, int id, int x, int y, execute(); } +bool Script::loadGlobalEventScript(const std::string &file) +{ + std::string engineName = determineEngineByFilename(file); + if (Script *script = Script::create(engineName)) + { + globalEventScript = script; + return globalEventScript->loadFile(file); + } + return false; +} + bool Script::executeGlobalEventFunction(const std::string &function, Being* obj) { bool isScriptHandled = false; - Script *script = Script::globalEventScript; - if (script) + if (Script *script = globalEventScript) { script->setMap(obj->getMap()); script->prepare(function); @@ -127,7 +135,7 @@ bool Script::executeGlobalEventFunction(const std::string &function, Being* obj) } -void Script::addDataToSpecial(int id, Special* special) +void Script::addDataToSpecial(int id, Special *special) { /* currently only gets the recharge cost. TODO: get any other info in a similar way, but @@ -136,8 +144,7 @@ void Script::addDataToSpecial(int id, Special* special) */ if (special) { - Script *script = Script::specialActionsScript; - if (script) + if (Script *script = globalEventScript) { script->prepare("get_special_recharge_cost"); script->push(id); @@ -148,10 +155,9 @@ void Script::addDataToSpecial(int id, Special* special) } -bool Script::performSpecialAction(int specialId, Being* caster) +bool Script::performSpecialAction(int specialId, Being *caster) { - Script *script = Script::specialActionsScript; - if (script) + if (Script *script = globalEventScript) { script->prepare("use_special"); script->push(caster); @@ -161,10 +167,10 @@ bool Script::performSpecialAction(int specialId, Being* caster) return true; } -bool Script::performCraft(Being* crafter, std::list<InventoryItem> recipe) +bool Script::performCraft(Being *crafter, + const std::list<InventoryItem> &recipe) { - Script *script = Script::craftScript; - if (script) + if (Script *script = globalEventScript) { script->prepare("on_craft"); script->push(crafter); @@ -187,6 +193,6 @@ std::string Script::determineEngineByFilename(const std::string &filename) // Set to default engine and print warning LOG_WARN("Unknown file extension for script \"" + filename + "\", falling back to default script engine"); - return Configuration::getValue("defaultScriptEngine", "lua"); + return Configuration::getValue("script_defaultEngine", "lua"); } } diff --git a/src/scripting/script.h b/src/scripting/script.h index e2ab3afa..a7737512 100644 --- a/src/scripting/script.h +++ b/src/scripting/script.h @@ -136,25 +136,29 @@ class Script virtual void processRemoveEvent(Thing *thing) = 0; /** + * Loads the global event script file + */ + static bool loadGlobalEventScript(const std::string &file); + + /** * Runs a function from the global event script file */ static bool executeGlobalEventFunction(const std::string &function, Being *obj); static void addDataToSpecial(int specialId, Special *special); static bool performSpecialAction(int specialId, Being *caster); - static bool performCraft(Being* crafter, std::list<InventoryItem> recipe); + static bool performCraft(Being *crafter, const std::list<InventoryItem> &recipe); static std::string determineEngineByFilename(const std::string &filename); protected: - static Script *globalEventScript; - static Script *specialActionsScript; - static Script *craftScript; std::string mScriptFile; private: MapComposite *mMap; EventListener mEventListener; /**< Tracking of being deaths. */ + static Script *globalEventScript; + friend struct ScriptEventDispatch; }; |