From 476da891e3bec25872a9557d0c7d0fd3eee33b4e Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Mon, 29 Jul 2019 20:41:28 +0200 Subject: 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 --- DTCallback.c | 5 ++++- DTMenuCompatibility.c | 2 +- DTUtility.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 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); -- cgit v1.2.3-54-g00ecf