summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2019-07-29 20:41:28 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2019-07-29 20:41:28 +0200
commit476da891e3bec25872a9557d0c7d0fd3eee33b4e (patch)
treea0565c349964a07d295cf1a55e5869ae1bdf34f4
parent4af9d50a92fcfb5ef8dd0aefd959a790bfe6655b (diff)
downloadSystem.c4g-476da891e3bec25872a9557d0c7d0fd3eee33b4e.tar.gz
System.c4g-476da891e3bec25872a9557d0c7d0fd3eee33b4e.zip
Use PrivateCall for fast object callbacks to circumvent access restriction errors
Fix error in DTCallback when DTScopedVars is not present Update DTMenuCompatibility Add SetPlrExtraDataIntArray to DTUtility
-rw-r--r--DTCallback.c5
-rw-r--r--DTMenuCompatibility.c2
-rw-r--r--DTUtility.c47
3 files changed, 52 insertions, 2 deletions
diff --git a/DTCallback.c b/DTCallback.c
index eef0877..cd0b0fe 100644
--- a/DTCallback.c
+++ b/DTCallback.c
@@ -64,7 +64,7 @@ global func CallA(callback, args, bool safe, array refs)
{
if(GetType(target) == C4V_C4Object)
{
- return ObjectCall(target, function, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
+ return PrivateCall(target, function, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
}
else if(GetType(target) == C4V_C4ID)
{
@@ -295,6 +295,9 @@ global func CheckCallback(callback)
}
}
+// to silence the error if no ScopedVars are included
+global func CheckScopedVar() { return _inherited(...); }
+
global func CheckCustomCallback() { return _inherited(...); }
global func CheckBindCallbackBinding(array binding)
diff --git a/DTMenuCompatibility.c b/DTMenuCompatibility.c
index 41331dc..d4e9506 100644
--- a/DTMenuCompatibility.c
+++ b/DTMenuCompatibility.c
@@ -7,7 +7,7 @@ static const Menu_Enum_InfoCaption = Menu_Layout_InfoCaption;
static const Menu_Enum_Caption = Menu_Layout_Caption;
static const Menu_Enum_Value = Menu_Layout_Value;
-global func Menu_SubMenu(caption, symbol, string infoCaption, array menuEntries_Settings, int count, int extra, XPar1, XPar2)
+global func Menu_SubMenu(caption, symbol, infoCaption, array menuEntries_Settings, int count, int extra, XPar1, XPar2)
{
if(GetType(caption) == C4V_Array) // caption contains all entry settings for the current menu and symbol contains all submenu entries and settings
{
diff --git a/DTUtility.c b/DTUtility.c
index 481ebe9..d491567 100644
--- a/DTUtility.c
+++ b/DTUtility.c
@@ -375,6 +375,53 @@ global func GetPlrExtraDataArray(int plr, string name)
}
}
+global func SetPlrExtraDataIntArray(int plr, string name, array arr)
+{
+ var lengthName = Format("%sL", name);
+
+ var oldLength = CastInt(GetPlrExtraData(plr, lengthName));
+
+ var length = GetLength(arr);
+
+ for(var i = 0; i < length; ++i)
+ {
+ var partName = Format("%s%d", name, i);
+ if(arr[i] != 0)
+ {
+ SetPlrExtraData(plr, partName, arr[i]);
+ }
+ else if(GetPlrExtraData(plr, partName) != 0)
+ {
+ SetPlrExtraData(plr, partName, 0);
+ }
+ }
+
+ SetPlrExtraData(plr, lengthName, length);
+
+ for(var i = length; i < oldLength; ++i)
+ {
+ var partName = Format("%s%d", name, i);
+ if(GetPlrExtraData(plr, partName) != 0)
+ {
+ SetPlrExtraData(plr, partName, 0);
+ }
+ }
+}
+
+global func GetPlrExtraDataIntArray(int plr, string name)
+{
+ var length = CastInt(GetPlrExtraData(plr, Format("%sL", name)));
+
+ var ret = CreateArray(length);
+
+ for(var i = 0; i < length; ++i)
+ {
+ ret[i] = CastInt(GetPlrExtraData(plr, Format("%s%d", name, i)));
+ }
+
+ return ret;
+}
+
global func EnableScripting()
{
AddMsgBoardCmd("s", "ScriptingFunc(\"%s\", %player%)", C4MSGCMDR_Escaped);