[Guide][Wiki-Beitrag] How-To Total RP 3 Extended ❔

Extended am Sonntag #16


Geheime Dokumente

Heute geht es darum, geheime Informationen oder wertvolle Gegenstände vor den Blicken oder Händen Unbefugter zu schützen. Das kann ein neugieriger Bote sein, der eine Nachricht überbringen, aber nicht lesen soll. Das kann ein Teilnehmer einer Schnitzeljagd sein, der die Trophäe erst bekommen soll, wenn bestimmte Vorbedingungen erfüllt sind. Oder es kann irgendetwas anderes sein, was der Extended-Benutzer (noch) nicht sehen können soll.
In den folgenden Beispielen wird der Schutzmechanismus immer ein Passwort sein, man könnte die Information aber auch hinter einem Rätsel oder allgemein einer Aufgabe verbergen.

:warning: Beachte, dass die Sicherheit hier lediglich im Spielkontext gewährleistet ist. Du solltest mit den folgenden Items auf keinen Fall echte Daten schützen!

Level 1: Statische Daten, statisches Passwort

Importcode: Geheimes Dokument !Trv4sjoqm4NL7b402c4CYm(dSG2ohwqtb88hHwBxHouAz2Db17g5z)s2f6nC6aZg2Szt(Y3(fqxmgJCPVoTOvpeiRRxRoT98E8(Tp5GrTOiGWiEnVoJnX)cH(JqyyiTtJWD9zV3rEIgX7d6z9hmaJUWXbHRJXRra8TUh3ZwtotpIWF20n7JBtR(9(KfILII1c5(KyXB6Z(Z5B(GUaDLR9)jg9dYoIVie0A(niCB6AXn1v6OA560YHPYfceU5b8zeMfIrT7qvoWLJSVqPlQENdoylhvGh7((TKF25CR3XhZACDDPUytGinxiPQYagI6rjQE121IknA)yyIW4dTguxnrj4FaX8QPdfn9Aroc7sLZ3iRxVHUlHxL9qyCQs9ATuBEa2y3KZmput9bczlfzRg34Vd7)acOVLfQgaDAKNcf64NLPvzljBdQYQRYpU5aoTW0KjcLhGy9PyJlg74QRoiq2rTAvrQC12Jq5L0IY7ekvktTpTDHS4Lx2NStiFvuSqi1FdHke8ogU3NzlsUzy75QL1VEcH9FI09jSY8lzeANsKTvwOFFOyNO0WQgHlmAYXNSgnm0N4k3ZDADUN3(eVwD7CzxNlqWNLVIskbQVhVuMwwIWuEOHC)fhLpLsZzDoZXovmGu56PhMXGHKNCIs8)uTA31JPdWFKbEHSsgEab69gcjZBTnknGm9NGrC2NXgnNqnr3k7a2eGVFp))Px3NukuIk71B6zRUEmqiZ9s6XmKoSOA38sHwlKZDVWaLNTs)BTZMQ9jndbS4Io9(EgPanwtBMeXRt7zGNVzySpxapNlPihycb4)nyMjCI9OvFtEMnW2mAJM3YFAe)7d

Der einfachste Fall ist ein Dokument, dass sich nur dann öffnet, wenn man ein Passwort eingibt.

  1. Erstelle einen Dokument-Gegenstand. Wenn du die Vorlage „Dokument-Gegenstand“ benutzt, wird automatisch ein vorbereitetes, inneres Dokument angelegt, dass sich bei Benutzung (onUse) öffnet.
  2. Überführe den Gegenstand in den Experten-Modus, denn es wird ein zweiter Arbeitsablauf benötigt.
  3. Füge dem Gegenstand neben onUse einen zweiten Arbeitsablauf hinzu: checkPassword.
  4. Entferne den Effekt „Dokument öffnen“ aus dem onUse-Arbeitsablauf, denn das Dokument soll erst nach der Passwortkontrolle angezeigt werden.
  5. Füge den Effekt „Experte > Eingabeaufforderung“ in den Arbeitsablauf onUse ein. Stelle darin die Objektvariable password ein sowie den Rückruf-Arbeitsablauf checkPassword.
  6. Der erste Effekt in checkPassword wird eine Bedingung sein: "Objektvariable password ist gleich dem direkten Text-Wert eniarku"
    In der Bedingung steht also das gesuchte Passwort. Als Fehlermeldung bei Nichterfüllung wähle eine Phrase wie „Zugriff verweigert“. Dieser Text wird angezeigt, wenn das falsche Passwort eingegeben wurde.
  7. Der zweite Effekt ist der „Dokument öffnen“-Effekt, der vorher aus dem Arbeitsablauf onUse entfernt wurde. Das Öffnen des Dokuments wird also hinter die Passwortkontrolle verlegt.

Das ist schonmal ein guter Anfang, aber das Passwort ist fest an das Item gebunden. Wenn sich das Passwort einmal herumgesprochen hat, benötigt man eine neue Version mit einem neuen Passwort.

Level 2: Statische Daten, dynamisches Passwort

Importcode: Ganz Geheimes Dokument !nsv3YPTsm4NLEBNPn2MqtdZKladjqkyiznH(ZCwSXwaUXExgVlesZe)003K(IvP1GZa9KZPJ9S)ODL0N(KwXT5(CpB83Qgo6Wz4SJLLvTtR7fwBBg3RgEdwppAmwgrt(FHZApKZ63d3P5SbTjPdqjEdP9DBwkVBhU3hSS4Sw(8wC2KECVtRJBh1S0PKP(mN90Qgrp3zRohYkcwalHKmiViWh2QFZtNS65IRlU2CNNste3)2OLHIfWOqL6bzE8B3Tqxe8RFkIHCXZKoO7ra0Y9tCVpIZKdzEnrylVFDgimNoA6LC2vHzGVuMQtw1fcr95SlVLpJZyUKoh6mscZNgnGhQcJKyoBty(0v5YSvOPdZxOkpK5bRbvrWEtueajOfNbcdBR0YCiUY(izZKilXzCV60sDzGG)PjknF)hRRnb(2GsNiE8sPq3D9caf7qIVb9OMeoDN0A7JusONmplmTpcr8OwdjqwswgsAe6zB7ZrOnMrjn3Hezqu3vHIFueCvz(bJOkQKOe8o300aFwlAZypA8oueMVDneABYYowNJ3SdTVNlYBIntZsurtfsnmxMgdX2XMce8ctmJUgJpPdzj9(0Iumwb)Vzd5SVdrhMnKgw)Bx8pgSEm7t8(rmotWzoKaN)6m((ksJRseRwR)xYVrlHO7Fr(RNSp6MhgZZQWtKueVFZoewcqJ6i(oGaoevKBiPxCXUx7)xQEeNvbtdpXMhMKoauQqQ46RRxKNmFErWgi)bizbKRFtviolpueT8vywSrJP2AQAP8Hdi3JApveq9KETxjkiADEI(X(Wgi1q(MwwSHJ3xcv19Qp29kgXSlwZZGuub178xMhMMILXCVZmf2)XjS2yIW5eRAN44ueyz1W2UHZzL9c7GT203TRZkl(o8MVV(7PNdhRKvTgNwNGc(yJqxpQIFWeZBN2JntyzpdRAy94S6BPf3IlivOEX98nVwXXMUV0IRiifuyBgJUvrBmOXuKY0GwBQelrLMZ)n

Um das obige Dokument zu verbessern, soll ein Mechanismus eingebaut werden, mit dem man das Passwort ändern kann. Das wird über einen Dokument-Link geschehen, d.h. wenn das Dokument geöffnet ist, hat man die Möglichkeit, das Passwort zu verändern.
Das Passwort wird dann nicht mehr in der Datenbank gespeichert, sondern individuell in jedem Item. Man kann also auch verschiedene Passwörter vergeben.
Ausgehend vom oben dargestellten Dokument-Item, gehe folgendermaßen vor:

  1. Im Arbeitsablauf onUse, füge den Effekt „Experte > Variablenoperation (Initialisierung)“ an erster Stelle ein. In diesem Effekt setzen wir die Objekt-Variable storedPassword. Das Standardpasswort soll zunächst leer bleiben.
  2. Im Effekt „Eingabeaufforderung“ ändere den Variablennamen zu inputPassword. Das gesuchte Passwort wird also in der Variable storedPassword gespeichert, während das eingegebene Passwort in inputPassword steht.
  3. Die Bedingung im Arbeitsablauf checkPassword muss dann entsprechend angepasst werden. Statt das eingegebene Passwort mit einem festen Text zu vergleichen, steht nun auf der einen Seite inputPassword und auf der anderen storedPassword.
  4. Jetzt fehlt nur noch die „Passwort ändern“-Funktion. Dazu legen wir einen dritten Arbeitsablauf changePassword an. Dieser liegt jedoch im inneren Dokument und nicht im Item selbst.
    Einziger Effekt in diesem Arbeitsabaluf ist „Experte > Eingabeaufforderung“ mit der Objektvariable storedPassword.
  5. Damit changePassword auch aufgerufen werden kann, fügen wir dem Dokument einen Dokument-Link hinzu.

Wir haben jetzt ein Dokument-Item, bei dem wir jedem Exemplar ein individuelles Passwort zuweisen können, bevor es verteilt wird. Aber das reicht mir noch nicht, denn der Inhalt ist festgelegt und kann nur in der Datenbank geändert werden.

Level 3: Die allesverschlingende* Schließkassette

* allesverschlingend-aber-danach-auch-wieder-ausspuckend-sofern-man-sich-das-passwort-gemerkt-hat

Importcode: Schließkassette !TF1xtnUnq8plDM(wBZz78hMlZKhcjP9YvWHdLaxBNQyh71jUySzKKdCCZ5Vk9f(MWxSURSXGdoPqkp2jzSLwjT)2D1U)Km3KpLBBI)nAIpT4m8TLHHLPHXYpOoiGB3eNbBSn(uXzt)nSn2NnGKMeptcud2u6jPlgKRqSvOpNT2vmpzXFbE4ADflL5dYs0q9h9(ts9mPYvLkNc3O42T4Sjbbqmcg9JH)JcL4ZyoZIe0CpbjkX7cWxdqGBeA21aqlsG1EcGoyu6ecWBLsEruiIA8pM5KEzMdeRw5gPGyiZ5xGLqSuD)DX(ypim(2uP3QOq4()UENVjjOnzrlkTTa3WOZtexeeLCnoBXxMftUjN5Le7)WSkCJCVWBfqJ7wXdkcneKu3E9k20xVrOcTIoLg2cHBS3kQtR9mGjvjcW)exP86er(otDoEBsWb1JXvIKlVQkg2qkiZCkuBUhTjsn1McHNDBQ5gOQi)C6t9YTgZ3r4omE9CCaLBymiMlJsuZjZUi0J)RlEhhgvk)hYf)svO1UvylTcB)kuyZDRWoAfEWRqHT2PcZ3TpOOTUVo6U30l92SUxjsRTSFV4v6vtr)TuvE)0GhRKZCQqeuh67fPtV6iopdeeYjs5)gfsvKKjPX(4o1Cjefubm2p)zco73BA0Pdb5In1B91)spr4g1LuZg5(td01KnOefKrmZPxMZth8b5FSoH0K)63QZ5AxkSKgSAMZJLW)F56lsHVKYvRCcXJbP0DjWzhcRU)o8iorMZLPsKhEDc20hEEDreqtsIN81OCZ8XZu2s9qn89vi6dJVkvvdppwMMNsSf(ED3Yj9QYB26PQvTLNfk31s348QslSsO(3txkcdcWqmiUgcxcc13vsNTz88TGD7n)knVDmFB9kJBLYB3euBJBQcX1h3jL2tQtEQbrxG6vFJPNDs2wVbR(YsDQXFFru8T3cfFHaj4LkcvF5iynePx8rJjaMm7HpfaN0mMU(zWdIy9XMF)xltL629)uEeX9Z(qFU(Rrgmrd)y0MzStP6vgBm(6Mw5wa(A4mUTbND850lCjhslLnCervfNQUfrWpeYPJWx)kwZbkfuyw(Up5QKzo3MM5OnlbsAXobV(OP57rqhpiNm9YqP3CABArYnlxLivHIeCt5Orue4Xu2UD15RFt7aOPB3hn3cp8IcdqtbHJ9P(6n8t6tDMztppRV2LgCk1zizewMy6XNgPNcJFiNDUE6SdPNdMQLmQiaC8qkaC0eoZh0tHXGiCdv(ttxjCJIq9JzbiKdgIrsR3z08DwwzoggDTm7AG46FgkVr7gytfov9hoYog13OpJ6Q6Im7AA0Tno(GNJJISa8SNiPoHz0G5NoQpBI9C0ZgFY0I0ZN95O18jQ5PNuyk3UuC()a

Das letzte Item ist ein Behälter, in den man beliebige Gegenstände einschließen kann.
Um das Passwort einzustellen, benutzt man den leeren, geöffneten Behälter. Wenn man Items in den Behälter legt und ihn dann benutzt, werden die Items eingeschlossen. Sie sind dann nicht mehr im Behälter zu sehen. Um die Items wieder auszuschließen, muss man den Behälter nochmals benutzen und das vorher festgelegte Passwort eingeben.

Damit das ganze funktioniert, braucht es etwas Luarkanmagie.

  1. Im onUse-Arbeitsablauf initialisiere ich zunächst einige Variablen, die wichtigste davon ist locked, die festhält, ob der Behälter gerade auf- oder zugeschlossen ist.
  2. Im fünften Effekt von onUse prüfe ich, ob der Beählter geöffnet ist. Wenn ja, prüfe im nächsten Effekt, ob der Behälter leer ist. Wenn der Behälter leer ist (und geöffnet), erfrage ein neues Passwort.
  3. Der Arbeitsablauf lock kümmert sich um das Einschließen. Zunächst werden die Zustandsvariablen aktualisiert, dann kommt das Herzstück, ein Luaskript:
    args.object.vars.content = args.object.content
    args.object.content = {}
    
    Der gesamte Inhalt (args.object.content) wandert in die Objektvariable content. Das was der Code macht, ist quasi ein Etikettentausch, so wie ein cleverer Arbeiter, der Zementsäcke vom Keller ins Lager schleppen soll, und daraufhin einfach "Lager" auf die Kellertür schreibt.
  4. Das Aufschließen funktioniert sehr ähnlich, nur, dass die Passwortabfrage vorgeschaltet wird. Außerdem prüfe ich, ob der Behälter leer ist, damit die eingeschlossenen Items keine anderen Items ersetzen. tryUnlock prüft, ob aufgeschlossen werden kann, onUnlock überprüft das Passwort, ändert die Zustandsvariablen und führt dann ein sehr ähnliches Luaskript wie oben aus.

Die Schließkassette ist sehr vielseitig, da man beliebige Items, sogar ganze Taschen, einschließen kann.
Hierbei gibt es einen kleinen Schönheitsfehler: Der Behälter wird nicht aktualisiert, während er benutzt wird, d.h. man kann Items sehen, die nur scheinbar darin liegen, bzw. leere Slots, die in Wirklichkeit belegt sind. Man kann sich behelfen, indem man die Tasche mit Doppelklick erneut öffnet.
Wer diesen Anzeigefehler beheben kann, darf sich einen Keks aussuchen.


Viel Spaß beim Experimentieren und
:wave: bis zum nächsten Sonntag…

4 Likes