Pets
Überblick
Pets fügt sammelbare Begleiter hinzu, inspiriert von EcoPets. Jedes Pet wird einmal im Web-Panel definiert (eine Pet Definition), und jeder Spieler besitzt Kopien davon. Ein Pet wird als Token-Item ausgegeben: Ein Rechtsklick auf den Token fügt das Pet dem Begleitermenü des Spielers hinzu. Im Menü aktiviert der Spieler jeweils ein Pet, das dann über seinem Kopf schwebt, neben ihm hergeht oder um ihn herumfliegt.
Pets sammeln Erfahrung, wenn der Besitzer Mobs tötet oder wenn deine Story XP vergibt, und steigen nach einer Formel oder einer Tabelle, die du schreibst, im Level auf. Ein Pet kann sich an Mobs rächen, die seinen Besitzer treffen, und kann mehrere Skins haben, die über TypeWriter-Criteria freigeschaltet werden.
Funktionen
- Drei Anzeigemodi —
HEADschwebt über dem Spieler,GROUNDläuft neben ihm,FLYschwebt in einer festgelegten Höhe. - Begleitermenü — ein GUI mit einem Raster besessener Pets, Aktivierung, Ein- und Ausblenden, Details und Skins.
- Token-Items — Pets wandern als Items zwischen Spielern und behalten dabei Level, XP, Modus und Skin.
- XP und Level — eine Formel wie
{level} * 100oder eine explizite Tabelle, mit einem maximalen Level. - Kill-XP und Story-XP — XP pro Mob-Kill sowie eine Aktion, um XP aus jeder Sequence zu vergeben.
- Vergeltung — optionaler Gegenangriff auf Mobs, die den Besitzer verletzen, mit Schaden pro Level.
- Skins — mehrere NPC-Skins pro Pet, jeweils mit Criteria, Priorität und einem Menü-Icon.
- Slot-Berechtigungen — sperre Menü-Slots hinter Berechtigungen, um zusätzliche Begleiter-Slots zu verkaufen.
- Platzhalter — Name, Level, XP, Status und Besitz des aktiven Pets, eines Slots oder eines beliebigen Pets.
- Modellunterstützung — Boden- und Flug-Pets verwenden jede Entity-Definition, auch ModelEngine-Modelle.
Installation
- Installiere die Erweiterung GUI, die die Menüs zeichnet.
- Optional: Installiere ModelEngine und die TypeWriter-Erweiterung, die deine Modelle als Entity-Definitionen bereitstellt, wenn Pets animierte Modelle verwenden sollen.
- Lege die Pets-JAR in
plugins/Typewriter/extensions/ab und starte den Server neu. - Erstelle ein Pet Storage-Artifact, damit besessene Pets gespeichert werden, siehe Erste Schritte.
Erste Schritte
Erstelle ein erstes Pet und gib es einem Spieler:
- Öffne im TypeWriter-Web-Panel eine statische Page und füge ein Pet Storage-Artifact hinzu. Ohne es protokolliert die Erweiterung „No pet_storage entry found“, und nichts bleibt erhalten.
- Füge eine Pet Definition hinzu. Der eigene
namedes Entries ist der Anzeigename des Pets und seineidder Pet-Bezeichner. - Wähle
defaultMode. Füge beiHEADoptional eine base64-texturefür den schwebenden Kopf ein. Setze beiGROUNDoderFLYnpcauf einen Entity-Definitions-Entry, der neben dem Spieler gespawnt wird. - Setze unter
xpmaxLevelund entweder eineformulamit{level}(zum Beispiel{level} * 100) oder einelevels-Liste. SetzekillRewardfür XP pro Kill. - Optional: Aktiviere
combat.enabledfür Vergeltung und passetokenan (das Item, sein Name und seine Lore sowie ein Leuchten). - Füge eine Pets Open Menu-Aktion hinzu, setze ihr
storageauf dein Pet-Storage-Artifact und löse sie über einen NPC, ein Item oder einen Befehl aus. - Veröffentliche und führe dann als Spieler
/pets give <pet> 1aus. Rechtsklicke den Token, öffne dann das Menü und klicke auf das Pet, um es zu aktivieren.
Um XP aus deiner Story zu vergeben, füge eine Pets Add XP-Aktion mit amount hinzu. Sie geht an das aktive Pet des Spielers. Um ein bestimmtes Pet zu steuern, verwende Pets State mit pet und action.
Es gibt keine Aktion, die ein Pet direkt freischaltet. Ein Pet gelangt als Token-Item zu einem Spieler, über /pets give oder über den Button „zurück zum Item“ im Menü. Führe den Befehl in einer Konsolenbefehls-Aktion in einer Quest oder einem Shop aus, um ihn zu einer freischaltbaren Belohnung zu machen.
Funktionsweise
Ein Spieler besitzt höchstens ein Pet pro Definition. Es ist immer nur ein Pet aktiv: Das Aktivieren eines weiteren deaktiviert das erste. Pets werden im Hintergrund im Pet-Storage-Artifact gespeichert, und das aktive Pet wird wiederhergestellt, wenn der Spieler beitritt.
Anzeigemodi.
HEADzeigt das Pet über dem Kopf des Spielers mit angewendetemheadOffset. Istnpcgesetzt, wird diese Entity verwendet. Andernfalls trägt ein unsichtbarer Rüstungsständer einen Spielerkopf mittexture.GROUNDspawnt dennpc(oder den NPC des gewählten Skins) einige Blöcke hinter dem Spieler und lässt ihn folgen.swimModelegt fest, ob er in Flüssigkeiten schwimmt:AUTOfolgt den Fähigkeiten der Entity,ALWAYSundNEVERerzwingen es.FLYist wieGROUND, aber das Pet schwebtflightHeightBlöcke über dem Spieler.
Hat ein GROUND- oder FLY-Pet keinen NPC (oder passt keiner seiner Skins), wird es nicht angezeigt, und eine Warnung wird protokolliert. Über jedem aktiven Pet wird ein Namensschild mit dem Level angezeigt. Der Modus stammt aus defaultMode, wenn der Token erstmals erstellt wird, und bleibt bei dieser Pet-Instanz.
XP und Level. Ein Pet beginnt auf Level 1. Jeder Eintrag in levels gibt die Gesamt-XP an, die ein Pet für ein Level erreicht haben muss, zum Beispiel Level 2 bei 100 XP, Level 3 bei 250 XP. Explizite Einträge haben Vorrang vor der Formel. Die Formel wird mit {level} ersetzt durch das zu erreichende Level ausgewertet und unterstützt + - * /, Klammern und Dezimalzahlen. Ein Pet ohne Anforderung für das nächste Level steigt nicht auf.
Vergeltung. Bei combat.enabled schlägt ein aktives und sichtbares Pet jeden Nicht-Spieler-Mob zurück, der dem Besitzer Schaden zufügt, nach einer kurzen Verzögerung und mit 1,5 Sekunden Cooldown pro Angreifer. Der Schaden ist der damage des höchsten levels-Eintrags auf oder unter dem Level des Pets. Ohne einen solchen sind es 1,5 plus 0,5 pro Level über 1.
Skins. Jeder skins-Eintrag verweist auf eine NPC-Definition, eine priority und criteria. Das Pet verwendet den vom Spieler gewählten Skin, wenn dessen Criteria noch zutreffen, sonst den Skin mit der höchsten Priorität, dessen Criteria zutreffen. Das Feld npc der Definition ist der Fallback-Skin. Ein Skin-Eintrag benötigt einen npc, sonst wird er ignoriert.
Menüs
Die Aktion Pets Open Menu öffnet das eingebaute Begleitermenü mit dem Titel „Compagnons“. Jedes besessene Pet ist ein Spielerkopf-Icon, das Level, XP-Fortschritt und Zustand zeigt. Ein Linksklick aktiviert oder deaktiviert das Pet, ein Rechtsklick öffnet seinen Detailbildschirm. Der Detailbildschirm zeigt die Werte und lässt den Spieler aktivieren, einen Skin wählen (wenn das Pet mehr als einen hat), das Pet in ein Item zurückverwandeln oder zurückgehen. Ein Button in der unteren linken Ecke blendet das aktive Pet ein oder aus.
Menüeinstellungen sind Felder des Objekts menu der Aktion:
slots— Inventar-Slot-Nummern, in denen Pets angezeigt werden. Standard sind 21 Slots in drei Reihen.lockedSlots— Paare ausslotundpermission. Ein Slot, dessen Berechtigung dem Spieler fehlt, zeigt eine Sperrmarkierung, und es kann kein Pet darin platziert werden.maxSlots— maximale Anzahl genutzter Slots (Standard 21, Minimum 1): Nur die erstenmaxSlotsEinträge vonslotswerden angeordnet und können ein neues Haustier aufnehmen. Es begrenzt die Anordnung und wie viele Haustiere ein Spieler erhalten kann, nicht das, was er bereits besitzt.rows— Menühöhe, 1 bis 6.storage— das zu verwendende Pet Storage-Artifact.
Das Slot-Layout des zuletzt geöffneten Menüs wird mit den Spielerdaten gespeichert und bestimmt, welche Slots ein Token belegen kann. Ein Haustier, das der Spieler bereits in einem Slot jenseits von maxSlots (oder außerhalb der Menühöhe) besitzt, wird nicht ausgeblendet: Es erscheint in einer freien Zelle des Menüs, nie auf dem Button zum Anzeigen/Verbergen, und seine Klicks wirken weiterhin auf den eigenen Slot. Gibt es mehr solche Haustiere als freie Zellen, bleiben die übrigen im Besitz und erscheinen auf der Pets-Seite des gemeinsamen Social-Menüs, das alle besessenen Haustiere auflistet; pro Spieler wird einmal eine Warnung protokolliert.
In deinem eigenen Menü verwenden. Die Erweiterung registriert das Button-Präfix pets_button: für jedes GUI-Menü. Setze den buttonPrefix eines Items auf pets_button: und seinen buttonType auf einen der folgenden Werte:
buttonType | Zeigt |
|---|---|
PET_ENTRY | Das Pet an dieser Position in der Liste des Spielers. Ein Linksklick schaltet es um, ein Rechtsklick wählt es für die Detail-Items aus. |
PET_DETAIL_INFO | Level, XP und Modus des ausgewählten Pets. |
PET_LEVEL_ENTRY | Ein Level des ausgewählten Pets mit seiner XP-Anforderung und seinem Zustand. |
PET_DETAIL_REMOVE | Einen Button, der das ausgewählte Pet in ein Item zurückverwandelt. |
PET_LIST_NAV, PET_DETAIL_NAV | Seitenpfeile für die Pet-Liste und die Level-Liste. |
Slots können auch die pet_menu-Befehle pet_menu activate <slot>, pet_menu deactivate <slot>, pet_menu toggle_visibility, pet_menu details <slot>, pet_menu skins <slot>, pet_menu select_skin <pet> <skin> und pet_menu remove <slot> ausführen.
Ist UiCore installiert, kann es die Begleiter des Spielers lesen, um ein HUD oder eine Menüseite zu zeichnen.
Menütexte, Token-Lore und das Label über einem Pet sind standardmäßig auf Französisch (zum Beispiel „Niveau“, „Compagnons“). Bearbeite pro Pet den name, die lore und die noSlotMessage des Tokens. Andere Menütexte sind im Code fest.
Befehle
Die Berechtigung typewriter.pets ist für jeden Unterbefehl erforderlich, zusammen mit der jeweils genannten Berechtigung. Die meisten Unterbefehle akzeptieren nach ihren Argumenten einen optionalen Spielerselektor [target], um für jemand anderen zu handeln; ohne ihn handeln sie für den Absender.
| Befehl | Berechtigung | Beschreibung |
|---|---|---|
/pets open [target] | typewriter.pets.open | Öffnet das Begleitermenü. |
/pets activate <pet> [target] | typewriter.pets.activate | Aktiviert ein besessenes Pet. |
/pets deactivate [target] | typewriter.pets.deactivate | Schickt das aktive Pet weg. |
/pets show [target] | typewriter.pets.show | Zeigt das aktive Pet wieder an. |
/pets hide [target] | typewriter.pets.hide | Blendet das aktive Pet aus. |
/pets remove <pet> [target] | typewriter.pets.remove | Löscht ein Pet aus dem Menü des Spielers. Es wird kein Item zurückgegeben. |
/pets give <pet> <amount> [target] | typewriter.pets.give | Gibt 1 bis 64 Token-Items. |
<pet> ist die ID oder der Name eines Pet-Definition-Entries. Der Befehl /pets ohne Argument bewirkt in dieser Version nichts: Verwende /pets open.
Berechtigungen
Keine wird mit einem Standardwert registriert, daher haben sie nur Operatoren, sofern du sie nicht mit einem Berechtigungs-Plugin vergibst.
| Berechtigung | Gewährt |
|---|---|
typewriter.pets | Den Befehlsbaum /pets. |
typewriter.pets.open | /pets open. |
typewriter.pets.activate | /pets activate. |
typewriter.pets.deactivate | /pets deactivate. |
typewriter.pets.show | /pets show. |
typewriter.pets.hide | /pets hide. |
typewriter.pets.remove | /pets remove. |
typewriter.pets.give | /pets give. |
Berechtigungen aus lockedSlots | Schalten den passenden Menü-Slot frei. Du wählst die Namen. |
Platzhalter
Pets stellt einen TypeWriter-Platzhalter-Entry bereit, Pets Placeholder. Erstelle ihn einmal. Das Tag lautet <typewriter_ENTRY:...>, wobei ENTRY der kleingeschriebene Name oder die ID dieses Entries ist, zum Beispiel <typewriter_pets_placeholder:active:name>, wenn der Entry pets_placeholder heißt.
| Argumentpfad | Gibt zurück |
|---|---|
active | Name des aktiven Pets, leer, wenn keines aktiv ist. |
active:name, active:id | Name und ID des aktiven Pets. |
active:level, active:xp, active:max_level | Level, XP und maximales Level. |
active:next_xp | Für das nächste Level benötigte XP, Max auf der höchsten Stufe. |
active:damage | Vergeltungsschaden auf dem aktuellen Level. |
active:status | active oder inactive. |
active:visibility | hidden oder visible. |
active:mode | head, ground oder fly. |
slot:<index>:name, id, level, xp, next_xp, max_level, damage, visibility, mode | Dieselben Felder für das Pet in diesem Menü-Slot. |
slot:<index>:status | active, inactive oder empty. |
pet:<id>:name, description, max_level, xp_per_kill, default_mode, combat, texture | Felder einer Pet Definition. |
pet:<id>:owned | true oder false für den Spieler. |
pet:<id>:level, xp, next_xp, visibility, mode, damage | Die Kopie dieses Pets des Spielers, leer, wenn nicht besessen. |
pet:<id>:status | active, inactive oder unowned. |
Entries
6 Einträge, aus dem Quellcode der Erweiterung generiert.
Aktionen3
- Pets Add XPGrant experience to a pet
- Pets Open MenuOpen the pet selection menu
- Pets StateChange the state of a pet
Platzhalter1
- Pets PlaceholderExpose companion placeholders
Artefakte1
- Pet StoragePersist companion data
Manifeste1
- Pet DefinitionConfigure a companion pet
Fehlerbehebung
Pets gehen nach einem Neustart verloren. Es existiert kein Pet Storage-Artifact, oder die Menü-Aktion hat kein storage. Das Log zeigt „No pet_storage entry found. Companion data will not persist until one is created.“
Der Token meldet, das Menü sei voll. Jeder Slot des Menüs ist für diesen Spieler belegt oder gesperrt. Füge Slots in slots hinzu oder vergib die Berechtigung eines gesperrten Slots. Die Nachricht ist die noSlotMessage des Tokens.
„Ce familier est déjà présent dans ton menu.“ Ein Spieler kann von jedem Pet eine Kopie besitzen. Er kann keinen zweiten Token für dieselbe Definition verwenden.
Ein GROUND- oder FLY-Pet erscheint nie. Das Log meldet „Unable to summon ground pet“. Setze npc an der Definition oder gib mindestens einem Skin einen npc, dessen Criteria zum Spieler passen. Prüfe, ob der Entity-Definitions-Entry existiert.
Das Pet steigt nicht im Level auf. Das Pet benötigt eine Anforderung für das nächste Level, entweder einen levels-Eintrag oder eine formula. Eine Formel, die nicht ausgewertet werden kann, wird wie keine Anforderung behandelt. Prüfe, dass sie nur Zahlen, {level}, + - * / und Klammern verwendet.
/pets gibt nichts aus. Verwende /pets open. Alle Unterbefehle benötigen typewriter.pets plus ihre eigene Berechtigung, und diese Berechtigungen werden standardmäßig nicht vergeben.
Ein Skin wird als gesperrt angezeigt („???“). Seine criteria treffen noch nicht zu. Teste die Facts oder Quests, von denen er abhängt.