diff options
Diffstat (limited to 'src/game-server/mapcomposite.cpp')
-rw-r--r-- | src/game-server/mapcomposite.cpp | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/src/game-server/mapcomposite.cpp b/src/game-server/mapcomposite.cpp index ecd39569..4d0581ad 100644 --- a/src/game-server/mapcomposite.cpp +++ b/src/game-server/mapcomposite.cpp @@ -727,14 +727,23 @@ void MapComposite::initializeContent() } else if (utils::compareStrI(type, "NPC") == 0) { + int npcId = utils::stringToInt(object->getProperty("NPC_ID")); + std::string scriptText = object->getProperty("SCRIPT"); + if (!mScript) { - mScript = Script::create("lua"); + // Determine script engine by xml property + std::string scriptEngineName = object->getProperty("ENGINE"); + if (scriptEngineName.empty()) + { + // Set engine to default value and print warning + scriptEngineName = Configuration::getValue("defaultScriptEngine", "lua"); + LOG_WARN("No script engine specified for map script \"" + + mName + "\", falling back to default"); + } + mScript = Script::create(scriptEngineName); } - int npcId = utils::stringToInt(object->getProperty("NPC_ID")); - std::string scriptText = object->getProperty("SCRIPT"); - if (npcId && !scriptText.empty()) { mScript->loadNPC(object->getName(), npcId, @@ -748,14 +757,28 @@ void MapComposite::initializeContent() } else if (utils::compareStrI(type, "SCRIPT") == 0) { + std::string scriptFilename = object->getProperty("FILENAME"); + std::string scriptText = object->getProperty("TEXT"); + if (!mScript) { - mScript = Script::create("lua"); + // Determine script engine by xml property + std::string scriptEngineName = object->getProperty("ENGINE"); + if (!scriptFilename.empty() && scriptEngineName.empty()) + { + // Engine property is empty - determine by filename + scriptEngineName = Script::determineEngineByFilename(scriptFilename); + } + else if (scriptEngineName.empty()) + { + // Set engine to default value and print warning + scriptEngineName = Configuration::getValue("defaultScriptEngine", "lua"); + LOG_WARN("No script engine specified for map script \"" + + mName + "\", falling back to default"); + } + mScript = Script::create(scriptEngineName); } - std::string scriptFilename = object->getProperty("FILENAME"); - std::string scriptText = object->getProperty("TEXT"); - if (!scriptFilename.empty()) { mScript->loadFile(scriptFilename); |