Player versus Player Modul
Aus SoTecWare Wiki
Player versus Player ist ein Modul, welches für das Netzwerkspiel ausgelegt ist. Hierbei können Spieler sich gegenseitig bekämpfen und bekommen für Sieg und/oder Niederlage Erfahrungspunkte und/oder Gold, deren Menge anhand des Levels des anderen Spielers berechnet wird.
Inhaltsverzeichnis |
Aufbau
Das Modul ist in mehere Gebiete aufgeteilt: Drei Non-PvP-Gebiete, die Sonderzwecke haben und die Kampfgebiete, die sogenannten Arenen.
Non-PvP-Gebiete
Die drei Non-PvP-Gebiete sind die folgenden:
- Halle der Wege
- Von hier aus kommt man in die beiden anderen Non-PvP-Gebiete sowie in alle Kampfarenen.
- Halle des Handels
- In diesem Gebiet stehen alle möglichen Händler aller möglichen Stufen, damit die Spieler sich mit neuer Ausrüstung versorgen können.
- Halle der Zusammenkunft
- In dieser Halle stehen mehere Kisten, in denen die Spieler bequem Waren austauschen können. Außerdem stehen hier die beiden Folianten, in denen spezielle Kills aus den Kampfarenen aufgezeichnet werden.
Sonderfall: Halle des Handels
Diese Halle hat eine Besonderheit. Je nachdem, ob man sich gerade in einer Kampfarena befindet oder nicht landet man beim Verlassend der Halle woanders.
Arenen
Die Arenen sind in Abschnitte aufgeteilt. Je ein Abschnitt für einen Spieler, in den er sich zum Ausruhen oder Vorbereiten zurückziehen kann und ein Abschnitt in dem die Spieler aufeinandertreffen. Dieser Abschnitt sollte mit einem Tor für das er beim Eintritt in das Modul einen Schlüssel bekommt, gesichert werden. Außerdem befinden sich in diesem Abschnitt die beiden Truhen, in denen nach einem Kampf neue Items gespawnt werden. Von seinem Abschnitt kann er auch unbehelligt zum Händler gelangen.
Spezielle Objekte
Es gibt einige spezielle Objekte im Modul, die hier beschrieben sind.
Seelengefäß
Das Seelengefäß, welches sich bei den Portalen in der Halle der Wege befindet, erzählt einem von den letzten zehn Kills, die in den Kampfarenen passiert sind. Dies dient zur übersicht, wer wo wie gut kämpft.
Darwin's Foliant
Darwin's Foliant befindet sich in der Halle der Zusammenkunft in dem Hinterzimmer. Hier werden alle Selbsttötungen aufgezeichnet.
Foliant des Tötens
In diesem Foliant welches sich ebenfalls in der Halle der Zusammenkunft bei Darwin's Foliant befindet, sind alle Kills aufgeführt, die in irgeneiner Weise bemerkenswert waren. Das sind bis jetzt folgende:
- Ein Spieler tötet einen Spieler, der zwei oder mehr Stufen über ihm ist.
Erfahrung und Gold
Die Erfahrung und das Gold berechnet sich folgendermaßen:
xp_for_killer = pow(level_of_killed, 1.10) * 500.0 gm_for_killer = xp_for_killer * 0.5 xp_for_killed = pow(level_of_killer, 1.0) * 500.0 gm_for_killed = xp_for_killed * 0.5
- xp_for_killer => Erfahrungspunkte, die Spieler bekommen, die gerade einen anderen getötet haben.
- level_of_killed => Stufe des Spielers, der getötet wurde.
- gm_for_killer => Geld, das Spieler bekommen, die gerade einen anderen getötet haben.
- xp_for_killed => Erfahrungspunkte, die Spieler bekommen, die gerade von einem anderen getötet wurden.
- level_of_killer => Stufe des tötenden Spielers.
- gm_for_killed => Geld, das Spieler bekommen, die gerade von einem anderen getötet wurden.
Wie bereits Eingangs erwähnt, bleibt es dem ersten Spieler in einer Arena überlassen, ob und wer Erfahrung oder Gold bekommt.
Schätze
Die Schätze werden von der NWN-Spielengine generiert und folgendermaßen verteilt:
- Truhe, die sich füllt, wenn ein Spieler einen Kill macht oder getötet wird:
- 1x Boss, 1x High, 2x Medium (NWN Gegenstandsgenerierungswertlevel)
- Truhe, die sich füllt, wenn ein Spieler gestorben ist:
- 1x Boss, 1x High, 3x Medium (NWN Gegenstandsgenerierungswertlevel)
Neue Gebiete erstellen
Das Modul ist so aufgebaut, dass neue Gebiete denkbar einfach hinzugefügt werden können. Dazu sind nur wenige Änderungen in den Scripts notwendig, solange das Gebiet alle Anforderungen erfüllt.
Benötigte Variablen
Diese Variablen sollten in dem Gebiet gesetzt werden (Gebiets-Eigenschaften, Erweitert, Variablen ...).
| Variablenname | Typ | Beschreibung | Erforderlich |
|---|---|---|---|
| settings_gmforkill | int | Legt fest, ob Spieler standardmäßig Geld für Kills bekommen.
Anmerkung: Diese Einstellung kann von Spielern geändert werden. | nein |
| settings_xpforkill | int | Legt fest, ob Spieler standardmäßig XP für Kills bekommen.
Anmerkung: Diese Einstellung kann von Spielern geändert werden. | nein |
| settings_gmforkilled | int | Legt fest, ob getötete Spieler Standardmäßig Geld bekommen.
Anmerkung: Diese Einstellung kann von Spielern geändert werden. | nein |
| settings_xpforkilled | int | Legt fest, ob getötete Spieler Standardmäßig XP bekommen.
Anmerkung: Diese Einstellung kann von Spielern geändert werden. | nein |
| settings_usetreasures | int | Legt fest, ob Spieler Schätze bekommen.
Anmerkung: Diese Einstellung kann von Spielern geändert werden. | nein |
| settings_bonustreasureforkilled | int | Legt fest, ob getötete Spieler zusätzliche Schätze bekommen.
Anmerkung: Diese Einstellung kann von Spielern geändert werden. | nein |
| settings_minlevel | int | Legt das Mindestlevel für Spieler fest, die in dieser Arena spielen. Spieler, die dieses Level unterschreiten und sich schon in der Arena befinden, erhalten eine Nachricht und werden nach 60 Sekunden aus der Arena entfernt. | nein |
| settings_maxlevel | int | Legt das Maximallevel für Spieler fest, die in dieser Arena spielen. Spieler, die dieses Level überschreiten und sich schon in der Arena befinden, erhalten eine Nachricht und werden nach 60 Sekunden aus der Arena entfernt. | nein |
| settings_usedefaults | int | Wenn dieser Wert auf 1 gesetzt ist, werden alle anderen settings_*-Variablen, die von Spielern geändert werden können, mit Standardwerten überschrieben, sobald das Gebiet initialisiert wird. | nein |
| description_teams | int | Gibt die Anzahl der Teams in dem Gebiet an.
Anmerkung: Team support ist bis jetzt nicht komplett ausgereift. | ja |
| description_tileset | string | Name des verwendeten Tilesets (z.B. Forest, Desert, Snowy) | ja |
| description | string | Erweiterte Beschreibung | nein |
| placesTotal | int | Gesamtanzahl der Spielerplätze (für automatische Initialisierung) | ja |
| prefix | string | Gebietsprefix (siehe unten) | ja |
| hassettings | int | Gibt an, ob das Gebiet spezielle Einstellungen hat (siehe unten) | nein |
Benötigte Scripts
Folgende Ereignisse sollten im Gebiet belegt sein
| Ereigniss | Script | Beschreibung |
|---|---|---|
| OnEnter | area_enter | Legt den Positions-Tag der betretenden Spieler fest sodass sie in der Spielerliste richtig angezeigt werden und erkundet die Arena für den Spieler. |
| OnUserDefined | area_userdef | Ist für die Initialisierung der Arena zuständig. |
Benötigte Objekte
In dem Gebiet sind einige Objekte zwingend erforderlich.
Im folgenden steht pfx für das in den Gebietsvariablen angegebene Prefix.
Einzigartige Objekte
Die folgenden Objekte müssen einmal im Gebiet vorkommen:
- pfx_traderdoor
- Eine Tür oder ein Wegpunkt, der angibt, wo die Spieler herauskommen, wenn sie den Hauptausgang der Halle des Handels benutzen.
- pfx_gravestone
- Irgendein platzierbares Objekt, welches Benutzbar ist und in seinem OnUsed-Event gravestone_used hat. Dies wird die letzten zehn Kills in der Arena anzeigen.
- pfx_portal
- Ein Portal, welches in der Halle der Wege platziert werden sollte. Es wird beim initialisieren der Arena automatisch an die Arena gebunden und eingerichtet (Name usw.). Es sollte als OnUsed-Event areaportal_use haben. Dieses Portal zeigt einerseits die Einstellungen und den Zustand der Arena an, andererseits können Spieler mit diesem Portal eine Arena betreten.
Spielerbezogene Objekte
Im Folgenden wird id für die Nummer des Spielers stehen. Diese beginnt bei 0 und die höchste ist placesTotal-1, also die maximale Spieleranzahl in der Arena minus 1.
Alle folgenden Dinge sollten Verschlossen sein, auf Handlung gestellt werden, wiederverschließbar sein und als Schlüssel "key_id" haben.
- pfx_pl_id_gate
- Ein Tor oder eine Tür, die den Abschnitt des Spielers vom Kampffeld trennt.
- pfx_pl_id_ch_ever
- Eine Kiste oder ein anderes platzierbares Objekt mit Gepäck, in dem die Items für den Spieler gespawnt werden.
- pfx_pl_id_ch_loose
- Eine Kiste oder ein anderes platzierbares Objekt mit Gepäck, in dem die Items für den Spieler nach seinem Tod gespawnt werden.
- pfx_pl_id_secrettrade
- Eine Tür oder ein Gebietsübergang, der zum Hintereingang der Halle des Handels führt und festlegt, wo der Spieler hingebracht wird, wenn er diese durch den Hintereingang verlässt.
- pfx_pl_id_respawn
- Wegpunkt, der festlegt wo der Spieler (re-)spawnt wird.
Bei den pfx_pl_id_ch_*-Objekten empfehle ich im OnClose-Event noch das closechest-Skript zu setzen. Dieses Verschließt die Truhe automatisch sobald sie geschlossen wird.
Optionale Objekte:
- pfx_pl_id_leave
- Ein Trigger mit leavearea im OnExit Event und id in der lokalen Int-Variable "id", der automatisch pfx_pl_id_gate verschließt, sobald der zugehörige Spieler den Trigger verlässt. Der sollte in einem angemessenen Radius um den Spielerabschnitt herum platziert werden, sodass das Tor in diesem Abstand automatisch schließen kann.
Änderungen in Scripts
Zum Hinzufügen eines neuen Modules sind folgende Änderungen in Modulscripts zu tätigen:
- module_load
- Es muss ans Ende der main-Funktion folgende Zeile angehängt werden:
SignalEvent(GetObjectByTag("areatag"), EventUserDefined(EVENT_INITIALIZE));
- Hierbei muss areatag durch den Tag des Gebiets ersetzt werden, welches Hinzugefügt werden soll. Achtung: Dieser Tag sollte im Modul einzigartig sein.
Spezielle Einstellungen
Eine Arena kann besondere Einstellungen implementieren. Dafür muss sie nur ein Gespräch mit dem Tag pfx_settings erstellen. Dieses kann aus den Kampfmoduleinstellungen aufgerufen werden. Was in diesem Gespräch passiert, ist egal. Allerdings ist OBJECT_SELF in den Scripts immer gleich GetPCSpeaker, da die Spieler immer mit sich selber reden.
Teams
Um Teams zu erstellen müssen in den Startpunkten der Spieler noch weitere Variablen eingetragen werden.
| Variablenname | Typ | Beschreibung | Erforderlich |
|---|---|---|---|
| team | string | Maximal zwei Buchstaben die das Team eindeutig identifizieren. Auf keinen Fall dürfen hier nur Zahlen enthalten sein. Dann könnte der Tag des Schlüssels gleich dem eines Spielers sein. | für Teams |
Im folgenden steht team für die Teamidentifikation.
Den Spielern wird beim Eintreten in die Arena noch ein weiterer Schlüssel mit dem Tag key_team gegeben. Dieser sollte dann für das verrigelnde Tor verwendet werden. Das Tor muss des weiteren nicht pfx_pl_id_gate heißen sondern pfx_tm_team_gate. Es wird nicht automatisch geschlossen.
