From fa5403dccd986022b2a849e2078f043c3225348a Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Mon, 2 Jan 2017 19:33:41 +0100 Subject: Initial --- Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c | 138 +++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c (limited to 'Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c') diff --git a/Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c b/Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c new file mode 100644 index 0000000..bd5af5c --- /dev/null +++ b/Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c @@ -0,0 +1,138 @@ +#strict 2 +#include SN7I + +local inputMode, code, authedPlayers; + +func Init() +{ + inputMode = []; + authedPlayers = []; +} + +func Triggers() { return [["$RightCode$"], ["$WrongCode$"]];} + +func ControlThrow(object caller) +{ + if(!code) + { + PlayerMessage(GetController(caller), "$NoCodeSet$", this); + } + else + { + QueryCode(caller, 0); + } + return ClearCom(caller); +} + +func ControlThrowDouble() { return ControlThrow(...); } + +func QueryCode(object caller, int mode) +{ + var plr = GetController(caller); + inputMode[plr] = [mode, caller]; + CallMessageBoard(this, false, ["$EnterCode$", "$EnterCurrentCode$", "$EnterNewCode$", "$EnterCode$"][mode], plr); +} + +func InputCallback(string answer, int plr) +{ + if(!inputMode[plr]) + { + return _inherited(answer, plr, ...); + } + else if(answer != "") + { + var mode = inputMode[plr][0]; + var caller = inputMode[plr][1]; + inputMode[plr] = 0; + if(mode == 0 || mode == 3) + { + authedPlayers[GetPlayerID(plr)] = answer == code; + if(mode == 0) + { + Trigger(answer != code, caller); + } + else if(mode == 3) + { + if(answer == code) + { + _Setup(caller); + } + else + { + Trigger(1, caller); + } + } + ShowSuccess(answer == code, caller); + if(answer != code) + { + ScheduleCall(this, "QueryCode", 1, 0, caller, mode); + } + } + else if(mode == 1) + { + ShowSuccess(answer == code, caller); + ScheduleCall(this, "QueryCode", 1, 0, caller, 1 + (answer == code)); + if(answer != code) + { + Trigger(1, caller); + } + } + else if(mode == 2) + { + code = answer; + authedPlayers = []; + authedPlayers[GetPlayerID(plr)] = true; + PlayerMessage(plr, "$CodeChanged$", this); + } + } +} + +func ShowSuccess(bool success, object caller) +{ + if(!success) + { + Sound("Error"); + PlayerMessage(GetController(caller), "$TxtWrongCode$", this); + CreateParticle("PSpark", -2, -3, 0, 0, 50, RGB(192, 0, 0)); + } + else + { + CreateParticle("PSpark", -2, -3, 0, 0, 50, RGB(0, 192, 0)); + } +} + +func _Setup(object caller) +{ + if(code && !authedPlayers[GetPlayerID(GetController(caller))]) + { + QueryCode(caller, 3); + } + else + { + return _inherited(caller, ...); + } +} + +func Setup(object caller, int& menuIndex) +{ + if(GetController(caller) == GetOwner()) + { + AddMenuItem("$ChangeCode$", "ChangeCode", GetID(), caller, 0, caller, 0, C4MN_Add_ForceNoDesc); + ++menuIndex; + } + return true; +} + +func ChangeCode(id id, object caller) +{ + _Setup(caller); + SelectMenuItem(2, caller); + + QueryCode(caller, 1 + !code); +} + +func ChangeDesc(id id, object caller, bool right) +{ + inputMode[GetController(caller)] = 0; + return _inherited(id, caller, right, ...); +} -- cgit v1.2.3-54-g00ecf