summaryrefslogtreecommitdiffstats
path: root/DTUtility.c
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 /DTUtility.c
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
Diffstat (limited to 'DTUtility.c')
-rw-r--r--DTUtility.c47
1 files changed, 47 insertions, 0 deletions
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);