diff --git a/README.md b/README.md index 13df4f5..4a09e94 100644 --- a/README.md +++ b/README.md @@ -33,9 +33,13 @@ Dieses Plugin nutzt eine eigene Datenbankstruktur für maximale Performance und Ankaufspreis pro Item konfigurierbar (% vom VK, Festpreis oder VK minus Betrag). - ✈️ **Fly-Abo-System** - Zeitbasiertes Fly-Abonnement mit tägl. Stunden-Limit (Standard: 6h). + Monatlich abgebuchtes Abonnement mit tägl. Stunden-Limit (Standard: 6h). Kauf im Shop, Verwaltung & Kündigung vollständig ingame. +- 📦 **Plot-Slot-System** + Zusätzliche PlotSquared-Slots einmalig kaufen oder monatlich abonnieren. + Integration über LuckPerms (`plots.plot.` Permission), vollautomatisch. + - 🌐 **REST API ohne RCON** - 📊 **Top-Spender & Umsatzstatistik** @@ -98,7 +102,7 @@ fly-redeem-disabled: false # Spieler der die Einnahmen aus dem Shop erhält (Vault-Konto) income-receiver: "" -# MySQL-Verbindung (für Fly-Code-System, Rang-Sessions und Fly-Abo) +# MySQL-Verbindung (für Fly-Code-System, Rang-Sessions, Fly-Abo und Plot-Slots) mysql: host: "localhost" port: "3306" @@ -117,12 +121,29 @@ sell: fly-abo: # Maximale Fly-Zeit pro Tag in Stunden (Standard: 6) max-daily-hours: 6 + +# Plot-Slot Einstellungen (nur Citybuild) +plot-slots: + # Auf welchem Server greift das Plot-Slot-System? + server: "citybuild" + # Standard-Plot-Slots pro LuckPerms-Gruppe + rank-defaults: + member: 2 + vip: 3 + scout: 4 + primo: 5 ``` --- # 🎮 Ingame-Befehle +## Übersicht + +| Befehl | Beschreibung | Berechtigung | +|--------|-------------|--------------| +| `/abo` | Zeigt alle laufenden Abonnements in einer Übersicht | `ingameshop.abo` | + ## Shop / Bestellungen | Befehl | Beschreibung | Berechtigung | @@ -144,9 +165,19 @@ fly-abo: | Befehl | Beschreibung | Berechtigung | |--------|-------------|--------------| | `/flyabo` | Zeigt Abo-Status, Ablaufdatum und heutiges Tageslimit | `ingameshop.flyabo` | -| `/flyabocancel [confirm]` | Kündigt das Abo zum Ablaufdatum (bleibt bis dahin aktiv) | `ingameshop.flyabocancel` | +| `/flyabocancel confirm` | Kündigt das Abo zum Monatsende (bleibt bis dahin aktiv) | `ingameshop.flyabocancel` | | `/flyabogive [Label]` | Vergibt ein Fly-Abo manuell (Admin) | `ingameshop.flyabogive` (OP) | +## Plot-Slots + +| Befehl | Beschreibung | Berechtigung | +|--------|-------------|--------------| +| `/plotslots` | Zeigt eigene Slot-Übersicht (Basis / Einmalig / Abo / Gesamt) | `ingameshop.plotslots` | +| `/plotabo` | Zeigt Plot-Abo-Status, Slots, Preis und Ablaufdatum | `ingameshop.plotabo` | +| `/plotabocancel confirm` | Kündigt das Plot-Abo zum Monatsende | `ingameshop.plotabocancel` | +| `/plotabogive [Label]` | Vergibt ein Plot-Abo manuell (Admin) | `ingameshop.plotabogive` (OP) | +| `/plotslotsgive [Label]` | Vergibt permanente Plot-Slots (Admin) | `ingameshop.plotslotsgive` (OP) | + ## Ränge | Befehl | Beschreibung | Berechtigung | @@ -218,12 +249,105 @@ Die Item-ID wird automatisch als `fly_abo` gespeichert. | Zahlung fehlgeschlagen | Abo läuft bis Monatsende, danach automatisch beendet | | `/flyabocancel confirm` | Kündigung vorgemerkt, Abo läuft bis Monatsende weiter | -## Datenbanktabellen +--- -| Tabelle | Inhalt | -|---------|--------| -| `wis_fly_abos` | Aktive Abos pro Spieler (Label, Ablaufdatum, Kündigungs-Flag) | -| `wis_fly_abo_usage` | Tagesverbrauch pro Spieler (wird täglich neu erfasst) | +# 📦 Plot-Slot-System + +Spieler können zusätzliche Plot-Slots auf dem Citybuild-Server kaufen – entweder **einmalig permanent** oder als **monatliches Abo**. + +## Standard-Limits pro Rang + +| Rang | Standard-Slots | +|------|---------------| +| Member | 2 | +| VIP | 3 | +| Scout | 4 | +| Primo | 5 | + +## Gesamtlimit-Berechnung + +``` +Gesamt = Rang-Basis + einmalig gekaufte Slots + Abo-Slots +``` + +Das Plugin setzt automatisch die LuckPerms-Permission `plots.plot.` – PlotSquared liest diese direkt aus. + +## PlotSquared Voraussetzung + +In `plugins/PlotSquared/config/worlds.yml` muss für jede Welt gesetzt sein: + +```yaml +worlds: + citybuild: + plot: + max_plots_per_player: -1 +``` + +## Shop-Artikel anlegen (WordPress) + +**Einmaliger Kauf (permanent):** +1. Typ: **„📦 Plot-Slots (einmalig)"** auswählen +2. Anzahl der zusätzlichen Slots eingeben +3. Preis setzen → Speichern +Item-ID: `plot_slots_2` (z.B. +2 Slots permanent) + +**Monatliches Abo:** +1. Typ: **„📦 Plot-Abo (monatlich)"** auswählen +2. Anzahl der Abo-Slots eingeben +3. Preis setzen (= monatlicher Beitrag) → Speichern +Item-ID: `plot_abo_2` (z.B. +2 Slots monatlich) + +## Billing-Übersicht + +| Zeitpunkt | Was passiert | +|-----------|-------------| +| Kauf im Shop | Vault-Abzug, Slots sofort aktiv, LuckPerms Permission gesetzt | +| 1. des Monats | Automatische Vault-Abbuchung, Abo-Slots bleiben aktiv | +| Zahlung fehlgeschlagen | Abo-Slots verfallen, überzählige Plots eingefroren | +| `/plotabocancel confirm` | Kündigung vorgemerkt, läuft bis Monatsende weiter | + +## Einfrieren bei Zahlungsausfall + +Wenn nach Zahlungsausfall der Spieler mehr Plots besitzt als das neue Limit erlaubt, werden die überzähligen Plots eingefroren (kein Bauen möglich) bis das Abo erneuert wird. + +--- + +# 📋 /abo – Abo-Übersicht + +Der Befehl `/abo` zeigt alle laufenden Abonnements eines Spielers in einer kompakten Übersicht: + +``` +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 📋 Meine Abonnements +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + ✈ Fly-Abo + ┌ Paket: Fly-Abo Monat + ├ Preis: 50 $ / Monat + ├ Status: ✔ Aktiv + ├ Aktiv bis: 30.04.2026 + ├ Nächste Abbuchung: 01.05.2026 + ├ Heute: 1h 30min / 6h (noch: 4h 30min) + └ Kündigen: /flyabocancel confirm + + 📦 Plot-Abo + ┌ Paket: Plot-Abo +2 Slots + ├ Slots: +2 Plot-Slots + ├ Preis: 30 $ / Monat + ├ Status: ✔ Aktiv + ├ Aktiv bis: 30.04.2026 + ├ Nächste Abbuchung: 01.05.2026 + └ Kündigen: /plotabocancel confirm + + 📦 Plot-Slots + ┌ Rang-Basis: 2 + ├ Einmalig: +1 + ├ Abo: +2 + └ Gesamt: 5 Slots +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +``` + +Die Plot-Slots-Übersicht wird immer angezeigt. Hat der Spieler kein Abo, erscheint ein Hinweis mit dem Shop-Link. --- @@ -311,7 +435,7 @@ Ideal für: ### Einzelbearbeitung - Item ID (`minecraft:diamond`) -- Typ: Minecraft Item | ✈ Fly-Gutschein | 👑 Rang (LuckPerms) | ✈ Fly-Abo (tägl. Limit) +- Typ: Minecraft Item | ✈ Fly-Gutschein | 👑 Rang (LuckPerms) | ✈ Fly-Abo | 📦 Plot-Slots (einmalig) | 📦 Plot-Abo (monatlich) - Preis - Angebotspreis - Server-Zuweisung @@ -392,7 +516,7 @@ Beispiel: ``` Blöcke Waffen -Rüstung +R�stung Ranks ``` @@ -626,6 +750,33 @@ Antwort: --- +## `wis_plot_extra_slots` *(Spigot MySQL)* + +| Feld | Beschreibung | +|------|-------------| +| player_name | Minecraft Name | +| extra_slots | Dauerhaft gekaufte Zusatz-Slots | +| last_perm | Zuletzt gesetzter `plots.plot.` Wert (für sauberes LP-Update) | +| granted_at | Zeitstempel der letzten Vergabe | + +--- + +## `wis_plot_abos` *(Spigot MySQL)* + +| Feld | Beschreibung | +|------|-------------| +| player_name | Minecraft Name | +| label | Anzeigename des Pakets | +| abo_slots | Anzahl der Abo-Slots | +| monthly_price | Monatlicher Beitrag (Vault) | +| cancelled | 0 / 1 – Kündigung vorgemerkt? | +| cancellation_reason | `user` oder `payment_failed` | +| next_billing_date | Datum der nächsten Abbuchung (immer 1. des Monats) | +| period_end | Letzter Tag der aktuellen Abo-Periode (Monatsende) | +| granted_at | Aktivierungszeitpunkt | + +--- + ## `wp_wis_servers` Serverdefinitionen