summaryrefslogtreecommitdiffstats
path: root/Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2017-01-02 19:33:41 +0100
committerMarkus Mittendrein <git@maxmitti.tk>2017-01-05 16:31:26 +0100
commitfa5403dccd986022b2a849e2078f043c3225348a (patch)
tree223fac13363b078720cd6e0d04d6adf53edc5dc9 /Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c
downloadDTSensors.c4d-fa5403dccd986022b2a849e2078f043c3225348a.tar.gz
DTSensors.c4d-fa5403dccd986022b2a849e2078f043c3225348a.zip
Initial
Diffstat (limited to 'Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c')
-rw-r--r--Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c138
1 files changed, 138 insertions, 0 deletions
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, ...);
+}