Player versus Player Modul

Aus SoTecWare Wiki

(Weitergeleitet von Player versus Player (Modul))
Wechseln zu: Navigation, Suche
:: Projekt ::
Player versus Player Modul


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:

  1. 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.