ATM Money Skript LSL - Druckversion +- GridTalk.de (https://www.gridtalk.de) +-- Forum: Werkstatt (https://www.gridtalk.de/forumdisplay.php?fid=4) +--- Forum: Scripting (https://www.gridtalk.de/forumdisplay.php?fid=23) +--- Thema: ATM Money Skript LSL (/showthread.php?tid=4924) |
ATM Money Skript LSL - Manfred Aabye - 03.11.2024 Dieses Skript erlaubt es einem Objekt in OpenSim, Geld an Benutzer zu überweisen. Dabei wird jedoch eine tägliche Grenze von 250 festgelegt. Jeder Benutzer kann innerhalb von 24 Stunden nur bis zu diesem Limit Geld anfordern. Wenn der Benutzer das Limit erreicht, erhält er eine Nachricht und kann erst am nächsten Tag erneut Geld anfordern. ACHTUNG! Wem das Script gehört, ist der Banker. Der Banker kann sich natürlich nicht selber abheben. Die Installation ist ganz einfach Script in ein Objekt einfügen und Resetten. Das Script kann man auch so erweitern, dass nur bestimmte Personen Zugang zum Geld haben. --- ### Funktionsweise Das Skript arbeitet in drei Hauptphasen: 1. **Tägliches Limit verfolgen**: Es speichert die tägliche Gesamtsumme des Geldbetrags, den jeder Benutzer erhalten hat. 2. **Limit erzwingen**: Wenn die vom Benutzer angeforderte Menge das tägliche Limit überschreitet, zeigt das Skript eine Nachricht an, anstatt das Geld zu geben. 3. **Zurücksetzen des Limits nach 24 Stunden**: Wenn seit der letzten Interaktion eines Benutzers 24 Stunden vergangen sind, wird sein Tageslimit zurückgesetzt. --- ### Code-Abschnitte #### 1. Globale Variablen - **`buttons`**: Eine Liste mit den Geldbeträgen, die der Benutzer auswählen kann (z.B. "150", "200", "250"). - **`dialogInfo`**: Nachricht, die im Dialogfenster angezeigt wird. - **`ToucherID`**: Speichert die ID des Benutzers, der mit dem Objekt interagiert. - **`dialogChannel`** und **`listenHandle`**: Steuerung des Kommunikationskanals und Handhabung der Dialogantworten. - **`userTimes`**: Eine Liste, die für jeden Benutzer die letzte Interaktionszeit und die bereits erhaltene Gesamtsumme des Tages speichert. - **`ONE_DAY`** und **`DAILY_LIMIT`**: Definition der Tageslänge (in Sekunden, hier 24 Stunden) und des Tageslimits (hier 250). #### 2. Initialisierung: `state_entry` Beim Start des Skripts: - **Berechtigung anfordern**: Das Skript fordert eine Debit-Berechtigung an, damit das Objekt Geld senden kann. - **Dialog-Kanal setzen**: Der Kommunikationskanal wird auf eine eindeutige ID gesetzt, die auf dem Objektschlüssel basiert. #### 3. Benutzerinteraktion: `touch_start` Wenn ein Benutzer das Objekt berührt: 1. **Benutzer-Details überprüfen**: Das Skript sucht die ID des Benutzers in der Liste `userTimes`, um die letzte Interaktionszeit und den aktuellen Betrag zu finden. 2. **Tageslimit zurücksetzen**: Falls seit der letzten Interaktion 24 Stunden vergangen sind, wird der kumulierte Betrag des Benutzers auf 0 zurückgesetzt. 3. **Limit prüfen**: Wenn der Benutzer das tägliche Limit bereits erreicht hat, zeigt das Skript eine Nachricht an und beendet den Vorgang. 4. **Dialog anzeigen**: Wenn das Limit nicht überschritten ist, wird ein Dialog mit den auswählbaren Beträgen angezeigt. #### 4. Dialogantwort: `listen` Sobald der Benutzer einen Betrag auswählt: 1. **Auswahl verarbeiten**: Der ausgewählte Betrag wird in einen Integer-Wert umgewandelt. 2. **Validierung**: Das Skript überprüft, ob der Betrag in der Liste `buttons` enthalten ist. 3. **Limit überprüfen**: Wenn die neue Auswahl das Tageslimit überschreiten würde, zeigt das Skript eine Warnung an und fordert den Benutzer auf, einen kleineren Betrag zu wählen. 4. **Betrag aktualisieren**: Der Betrag und die Zeit werden in der `userTimes`-Liste aktualisiert, und das Skript sendet den angegebenen Betrag an den Benutzer. 5. **Ungültige Auswahl behandeln**: Wenn der Benutzer eine ungültige Option auswählt, wird eine Fehlermeldung angezeigt. 6. **Listener entfernen**: Am Ende wird der Listener entfernt, um unnötige Listener zu vermeiden. --- ### Zusammenfassung der Hauptfunktionen 1. **Benutzerdaten speichern**: Speichert ID, Interaktionszeit und erhaltenen Betrag jedes Benutzers. 2. **Tageslimit prüfen und zurücksetzen**: Wenn 24 Stunden vergangen sind, wird der erhaltene Betrag auf null gesetzt. Bei Erreichen des Limits wird dem Benutzer eine Nachricht angezeigt. 3. **Geld überweisen**: Überweist den gewünschten Betrag an den Benutzer, wenn das Limit nicht überschritten wird. --- ### Hinweise - Achten Sie darauf, dass das Objekt die notwendigen Berechtigungen besitzt, um Geld zu überweisen. - Die Liste `userTimes` speichert alle Benutzerinformationen, und sie wird täglich für jeden Benutzer zurückgesetzt. --- Das Skript gewährleistet eine kontrollierte Ausgabe von Geld und verhindert, dass Benutzer über das festgelegte Limit hinaus an einem Tag Geld erhalten. PHP-Code: /* Money Giver Script with Daily Limit by Manfred Aabye. |