summaryrefslogtreecommitdiff
path: root/src/scripting/script.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripting/script.cpp')
-rw-r--r--src/scripting/script.cpp34
1 files changed, 20 insertions, 14 deletions
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");
}
}