From 0647d735cbd9b1deb31d5d2145a2197da5ff7a63 Mon Sep 17 00:00:00 2001 From: George Tokmaji Date: Mon, 16 Oct 2023 21:45:37 +0200 Subject: [PATCH] Add ConsoleScriptStrictness to set the strict level for console mode and /script --- src/C4Config.cpp | 8 ++++++++ src/C4Config.h | 3 +++ src/C4Console.cpp | 2 +- src/C4Control.cpp | 8 ++++---- src/C4Control.h | 9 ++++++--- src/C4EditCursor.cpp | 2 +- src/C4MessageInput.cpp | 2 +- 7 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/C4Config.cpp b/src/C4Config.cpp index 179cbb234..5d9a3e9e2 100644 --- a/src/C4Config.cpp +++ b/src/C4Config.cpp @@ -110,6 +110,14 @@ void C4ConfigGeneral::CompileFunc(StdCompiler *pComp) void C4ConfigDeveloper::CompileFunc(StdCompiler *pComp) { pComp->Value(mkNamingAdapt(AutoFileReload, "AutoFileReload", true, false, true)); + + auto strictness = std::to_underlying(ConsoleScriptStrictness); + pComp->Value(mkNamingAdapt(strictness, "ConsoleScriptStrictness", std::to_underlying(C4AulScriptStrict::STRICT3))); + + if (pComp->isCompiler()) + { + ConsoleScriptStrictness = static_cast(std::clamp(strictness, std::to_underlying(C4AulScriptStrict::NONSTRICT), std::to_underlying(C4AulScriptStrict::MAXSTRICT))); + } } void C4ConfigGraphics::CompileFunc(StdCompiler *pComp) diff --git a/src/C4Config.h b/src/C4Config.h index a2b1d8610..1d226595f 100644 --- a/src/C4Config.h +++ b/src/C4Config.h @@ -24,6 +24,7 @@ #include "StdConfig.h" #ifdef C4ENGINE +#include "C4AulScriptStrict.h" #include "StdWindow.h" #endif @@ -98,6 +99,8 @@ class C4ConfigDeveloper { public: bool AutoFileReload; + C4AulScriptStrict ConsoleScriptStrictness; + void CompileFunc(StdCompiler *pComp); }; diff --git a/src/C4Console.cpp b/src/C4Console.cpp index b403d1cf8..6193769e3 100644 --- a/src/C4Console.cpp +++ b/src/C4Console.cpp @@ -608,7 +608,7 @@ bool C4Console::In(const char *szText) // editing enabled? if (!EditCursor.EditingOK()) return false; // pass through network queue - Game.Control.DoInput(CID_Script, new C4ControlScript(szText, C4ControlScript::SCOPE_Console), CDT_Decide); + Game.Control.DoInput(CID_Script, new C4ControlScript(szText, C4ControlScript::SCOPE_Console, Config.Developer.ConsoleScriptStrictness), CDT_Decide); return true; } diff --git a/src/C4Control.cpp b/src/C4Control.cpp index 45c7c9edf..85b520fab 100644 --- a/src/C4Control.cpp +++ b/src/C4Control.cpp @@ -287,7 +287,7 @@ void C4ControlScript::Execute() const else // default: Fallback to global context pScript = &Game.ScriptEngine; - C4Value rVal(pScript->DirectExec(pObj, szScript, "console script")); + C4Value rVal(pScript->DirectExec(pObj, szScript, "console script", false, Strict)); // show messages // print script if (pObj) @@ -850,9 +850,9 @@ void C4ControlJoinPlayer::CompileFunc(StdCompiler *pComp) // *** C4ControlEMMoveObject C4ControlEMMoveObject::C4ControlEMMoveObject(C4ControlEMObjectAction eAction, int32_t tx, int32_t ty, C4Object *pTargetObj, - int32_t iObjectNum, int32_t *pObjects, const char *szScript) + int32_t iObjectNum, int32_t *pObjects, const char *szScript, const C4AulScriptStrict strict) : eAction(eAction), tx(tx), ty(ty), iTargetObj(Game.Objects.ObjectNumber(pTargetObj)), - iObjectNum(iObjectNum), pObjects(pObjects), Script(szScript, true) {} + iObjectNum(iObjectNum), Strict{strict}, pObjects(pObjects), Script(szScript, true) {} C4ControlEMMoveObject::~C4ControlEMMoveObject() { @@ -918,7 +918,7 @@ void C4ControlEMMoveObject::Execute() const { if (!pObjects) return; // execute script ... - C4ControlScript ScriptCtrl(Script.getData(), C4ControlScript::SCOPE_Global); + C4ControlScript ScriptCtrl(Script.getData(), C4ControlScript::SCOPE_Global, Strict); ScriptCtrl.SetByClient(iByClient); // ... for each object in selection for (int i = 0; i < iObjectNum; ++i) diff --git a/src/C4Control.h b/src/C4Control.h index fbc6afb38..141f0b3ea 100644 --- a/src/C4Control.h +++ b/src/C4Control.h @@ -18,6 +18,7 @@ #pragma once +#include "C4AulScriptStrict.h" #include "C4ForwardDeclarations.h" #include "C4Id.h" #include "C4PacketBase.h" @@ -133,11 +134,12 @@ class C4ControlScript : public C4ControlPacket // sync C4ControlScript() : iTargetObj(-1) {} - C4ControlScript(const char *szScript, int32_t iTargetObj = SCOPE_Global) - : iTargetObj(iTargetObj), Script(szScript, true) {} + C4ControlScript(const char *szScript, int32_t iTargetObj = SCOPE_Global, C4AulScriptStrict strict = C4AulScriptStrict::MAXSTRICT) + : iTargetObj(iTargetObj), Strict{strict}, Script(szScript, true) {} protected: int32_t iTargetObj; + C4AulScriptStrict Strict; StdStrBuf Script; public: @@ -341,7 +343,7 @@ class C4ControlEMMoveObject : public C4ControlPacket // sync public: C4ControlEMMoveObject() : pObjects(nullptr) {} C4ControlEMMoveObject(C4ControlEMObjectAction eAction, int32_t tx, int32_t ty, C4Object *pTargetObj, - int32_t iObjectNum = 0, int32_t *pObjects = nullptr, const char *szScript = nullptr); + int32_t iObjectNum = 0, int32_t *pObjects = nullptr, const char *szScript = nullptr, C4AulScriptStrict strict = C4AulScriptStrict::MAXSTRICT); ~C4ControlEMMoveObject(); protected: @@ -349,6 +351,7 @@ class C4ControlEMMoveObject : public C4ControlPacket // sync int32_t tx, ty; // target position int32_t iTargetObj; // enumerated ptr to target object int32_t iObjectNum; // number of objects moved + C4AulScriptStrict Strict; // strictness for the script to execute int32_t *pObjects; // pointer on array of objects moved StdStrBuf Script; // script to execute diff --git a/src/C4EditCursor.cpp b/src/C4EditCursor.cpp index 7886e52d7..ef1e7d42e 100644 --- a/src/C4EditCursor.cpp +++ b/src/C4EditCursor.cpp @@ -733,7 +733,7 @@ void C4EditCursor::EMMoveObject(C4ControlEMObjectAction eAction, int32_t tx, int } // execute control - EMControl(CID_EMMoveObj, new C4ControlEMMoveObject(eAction, tx, ty, pTargetObj, iObjCnt, pObjIDs, szScript)); + EMControl(CID_EMMoveObj, new C4ControlEMMoveObject(eAction, tx, ty, pTargetObj, iObjCnt, pObjIDs, szScript, Config.Developer.ConsoleScriptStrictness)); } void C4EditCursor::EMControl(C4PacketType eCtrlType, C4ControlPacket *pCtrl) diff --git a/src/C4MessageInput.cpp b/src/C4MessageInput.cpp index cfd57d1c3..91bda3909 100644 --- a/src/C4MessageInput.cpp +++ b/src/C4MessageInput.cpp @@ -469,7 +469,7 @@ bool C4MessageInput::ProcessCommand(const char *szCommand) if (!Game.DebugMode) return false; if (Game.Network.isEnabled() && !Game.Network.isHost()) return false; - Game.Control.DoInput(CID_Script, new C4ControlScript(pCmdPar, C4ControlScript::SCOPE_Console), CDT_Decide); + Game.Control.DoInput(CID_Script, new C4ControlScript(pCmdPar, C4ControlScript::SCOPE_Console, Config.Developer.ConsoleScriptStrictness), CDT_Decide); return true; } // set runtimte properties