diff options
Diffstat (limited to 'src/scripting')
-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 |
4 files changed, 29 insertions, 59 deletions
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; }; |