diff options
Diffstat (limited to 'src/crsm.cpp')
| -rw-r--r-- | src/crsm.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/crsm.cpp b/src/crsm.cpp index af4c212..e77ee3c 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -738,6 +738,9 @@ void CRSM::startScen(const ScenarioSettings &scen, QStringList argList) { argList << "/noleague"; } + + argList << Packs.getScenarioCmdOptions(filename).split(' '); + argList << filename; processManager->setWorkingDirectory(Config.Auto.Volatile.Clonk.Directory); out(Packs.linkScenarioPacks(filename)); @@ -1533,6 +1536,10 @@ void CRSM::setupCmds() addCommand("packs scenarios add", &CRSM::packsScenariosAdd, Management, UserType::Max, "Aktiviert für das <Szenario> die <Packversion>.", "<Szenario> <Packversion>"); addCommand("packs scenarios delete", &CRSM::packsScenariosDelete, Management, UserType::Max, "Löscht für das <Szenario> die <Packversion>.", "<Szenario> <Packversion>"); addCommand("packs scenarios list", &CRSM::packsScenariosList, Management, UserType::Max, "Listet alle Szenarien mit ihren Packversionen auf."); + addCommandGroup("packs scenoptions", Management, UserType::Max, "Über die packs scenoptions-Befehlsgruppe werden zusätzliche Clonk-Argumente für einzelne Szenarien/Rundenordner verwaltet."); + addCommand("packs scenoptions get", &CRSM::packsScenOptionsGet, Management, UserType::Max, "Fragt die Clonk-Argumente nur für <Szenario> ab.", "<Szenario>"); + addCommand("packs scenoptions all", &CRSM::packsScenOptionsGet, Management, UserType::Max, "Fragt die Clonk-Argumente ab, die im Endeffekt für <Szenario> gültig sind.", "<Szenario>"); + addCommand("packs scenoptions set", &CRSM::packsScenOptionsSet, Management, UserType::Max, "Setzt die Clonk-Argumente für <Szenario> auf [Argumente], entfernt sie, wenn keine Argumente angegeben sind.", "<Szenario> [Argumente]"); addCommand("relist", &CRSM::relist, Management, UserType::Max, "Durchsucht veränderte Rundenordner erneut."); } @@ -3314,6 +3321,45 @@ CMD_FUNCTION_IMPL(packsScenariosList) return Success; } +CMD_FUNCTION_IMPL(packsScenOptionsGet) + bool all = cmd == "packs scenoptions all"; + + const QString& scen = args.trimmed(); + if(scen.isEmpty()) + { + respond(client, "Eine Szenarioangabe ist notwendig!\n"); + return SyntaxFail; + } + else + { + respond(client, "\"" + Packs.getScenarioCmdOptions(scen, all) + "\"\n"); + return Success; + } +} + +CMD_FUNCTION_IMPL(packsScenOptionsSet) + if(args.trimmed().isEmpty()) + { + respond(client, "Eine Szenarioangabe ist notwendig!\n"); + return SyntaxFail; + } + + QStringList argList = Util::splitEscaped(args, ' '); + QString scen = argList.first(); + argList.removeFirst(); + + QString scenOptions; + + if(argList.length() > 0) + { + scenOptions = Util::joinEscape(argList, ' '); + } + + respond(client, Packs.setScenarioCmdOptions(scen, scenOptions)); + + return Success; +} + CMD_FUNCTION_IMPL(dccConnect) dccChatRequest(client); return Success; |
