summaryrefslogtreecommitdiffstats
path: root/Items.c4d/Sensors.c4d/CodeInput.c4d
diff options
context:
space:
mode:
Diffstat (limited to 'Items.c4d/Sensors.c4d/CodeInput.c4d')
-rw-r--r--Items.c4d/Sensors.c4d/CodeInput.c4d/DefCore.txt19
-rw-r--r--Items.c4d/Sensors.c4d/CodeInput.c4d/Graphics.pngbin0 -> 3811 bytes
-rw-r--r--Items.c4d/Sensors.c4d/CodeInput.c4d/Names.txt2
-rw-r--r--Items.c4d/Sensors.c4d/CodeInput.c4d/Script.c138
-rw-r--r--Items.c4d/Sensors.c4d/CodeInput.c4d/StringTblDE.txt9
-rw-r--r--Items.c4d/Sensors.c4d/CodeInput.c4d/StringTblUS.txt9
6 files changed, 177 insertions, 0 deletions
diff --git a/Items.c4d/Sensors.c4d/CodeInput.c4d/DefCore.txt b/Items.c4d/Sensors.c4d/CodeInput.c4d/DefCore.txt
new file mode 100644
index 0000000..224a95a
--- /dev/null
+++ b/Items.c4d/Sensors.c4d/CodeInput.c4d/DefCore.txt
@@ -0,0 +1,19 @@
+[DefCore]
+id=CI7I
+Name=Code Input
+Version=4,9,5
+Category=C4D_Object|C4D_SelectMaterial|C4D_SelectKnowledge|C4D_SelectHomebase
+Width=10
+Height=13
+Offset=-5,-6
+Mass=10
+Value=5
+Components=METL=1;
+Picture=10,0,64,64
+Vertices=1
+VertexFriction=100
+Grab=2
+Collectible=1
+MaxUserSelect=10
+Rebuy=1
+NoPushEnter=1
diff --git a/Items.c4d/Sensors.c4d/CodeInput.c4d/Graphics.png b/Items.c4d/Sensors.c4d/CodeInput.c4d/Graphics.png
new file mode 100644
index 0000000..f4be8c6
--- /dev/null
+++ b/Items.c4d/Sensors.c4d/CodeInput.c4d/Graphics.png
Binary files differ
diff --git a/Items.c4d/Sensors.c4d/CodeInput.c4d/Names.txt b/Items.c4d/Sensors.c4d/CodeInput.c4d/Names.txt
new file mode 100644
index 0000000..d238d54
--- /dev/null
+++ b/Items.c4d/Sensors.c4d/CodeInput.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Passworteingabe
+US:Code input
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, ...);
+}
diff --git a/Items.c4d/Sensors.c4d/CodeInput.c4d/StringTblDE.txt b/Items.c4d/Sensors.c4d/CodeInput.c4d/StringTblDE.txt
new file mode 100644
index 0000000..64671f3
--- /dev/null
+++ b/Items.c4d/Sensors.c4d/CodeInput.c4d/StringTblDE.txt
@@ -0,0 +1,9 @@
+RightCode=Richtiges Passwort
+WrongCode=Falsches Passwort
+EnterCode=Passwort eingeben
+EnterCurrentCode=Aktuelles Passwort eingeben
+EnterNewCode=Neues Passwort eingeben
+NoCodeSet=Es ist noch kein Passwort gesetzt!
+CodeChanged=Passwort erfolgreich gesetzt.
+ChangeCode=Passwort ändern
+TxtWrongCode=Falsches Passwort!|Neuer Versuch…
diff --git a/Items.c4d/Sensors.c4d/CodeInput.c4d/StringTblUS.txt b/Items.c4d/Sensors.c4d/CodeInput.c4d/StringTblUS.txt
new file mode 100644
index 0000000..eecdb4f
--- /dev/null
+++ b/Items.c4d/Sensors.c4d/CodeInput.c4d/StringTblUS.txt
@@ -0,0 +1,9 @@
+RightCode=Right code
+WrongCode=Wrong code
+EnterCode=Enter code
+EnterCurrentCode=Enter current code
+EnterNewCode=Enter new code
+NoCodeSet=No code is set!
+CodeChanged=Code changed successfully.
+ChangeCode=Change code
+TxtWrongCode=Wrong code!|Try again…