Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level1:diplomacy

Diplomatie

Es gibt drei verschiedene diplomatische Zustände zwischen zwei Spielern: verbündet, neutral, feindlich. Standardmäßig sind alle Spieler untereinander neutral. Um die Diplomatie zu modifizieren, benötigt man die jeweiligen Spieler-Ids. Spieler 1 ist im Singleplayer standardmäßig der menschliche Spieler.

Es gibt drei Funktionen, um einen der drei diplomatischen Zustände zu setzen:

-- Setze _PlayerId1 und _PlayerId2 verbündet
SetFriendly(_PlayerId1, _PlayerId2)
 
-- Setze _PlayerId1 und _PlayerId2 neutral
SetNeutral(_PlayerId1, _PlayerId2)
 
-- Setze _PlayerId1 und _PlayerId2 feindlich
SetHostile(_PlayerId1, _PlayerId2)

Wir setzen die Diplomatie in der dafür vorgesehenen Funktion InitDiplomacy. Für unsere Beispielkarte müssen Spieler 1 und Spieler 2 feindlich zueinander sein:

function InitDiplomacy()
    SetHostile(1, 2)
    -- Für einen verbündeten Spieler 3 könnte man folgendes einstellen:
    -- SetFriendly(1, 3)
    -- damit dieser auch den gemeinsamen Feind angreifen kann, müssen die 
    -- beiden untereinander ebenfalls feindlich sein:
    -- SetHostile(2, 3)
end

Das diplomatische Verhältnis zweier Spieler kann auch später im Spiel verändert werden. Falls beispielsweise ein neutrales Dorf nach der Erfüllung einer Reihe von Quests verbündet werden soll, kann das zum Ende der Quest immer noch eingestellt werden.


Spielernamen setzen

Spieler 2 ist nun feindlich, allerdings kann der menschliche Spieler das im F2-Diplomatiemenü noch nicht sehen. Damit das möglich wird, müssen wir Spieler 2 einen Namen geben, unter dem er angezeigt werden kann. Dies geschieht mit der Funktion SetPlayerName:

function InitDiplomacy()
    SetHostile(1, 2)
    -- Parameter 1 ist die Spieler-Id, Parameter 2 der Name als String
    SetPlayerName(2, "Kerberos")
end


Gemeinsame Sicht zweier Spieler

Für unser Beispiel ist es nicht relevant, aber möglicherweise möchtest du einen Verbündeten auf die Karte setzen, der seine Sicht mit dem Spieler teilt. Der Aufruf von SetFriendly macht das nicht automatisch. Dafür braucht man die Funktion

-- Definiert, ob _PlayerId1 die Sicht von _PlayerId2 erhält 
-- Wenn _ShareFlag 1 ist, wird die gemeinsame Sicht aktiviert
-- Wenn _ShareFlag 0 ist, wird die gemeinsame Sicht deaktiviert
Logic.SetShareExplorationWithPlayerFlag(_PlayerId1, _PlayerId2, _ShareFlag)

Achtung: Diese Funktion definiert nur eine einseitige Sicht! Das bedeutet, dass _PlayerId1 zwar _PlayerId2 sehen kann, aber nicht umgekehrt. Im Singleplayer ist das nicht so relevant wie im Multiplayer. Eine gegenseitige gemeinsame Sicht samt Bündnis sähe daher so aus:

function InitDiplomacy()
    SetFriendly(1, 3)
    Logic.SetShareExplorationWithPlayerFlag(1, 3, 1)
    Logic.SetShareExplorationWithPlayerFlag(3, 1, 1)
end


Spielerfarben ändern

Es gibt insgesamt 16 verschiedene Spielerfarben (IDs von 1-16). Jeder Spieler hat standardmäßig die Farb-Id, die seiner Spieler-Id entspricht (also hat Spieler 1 Farb-Id 1). Mit der Funktion

Display.SetPlayerColorMapping(_PlayerId, _ColorId)

kann die Farbe eines Spielers verändert werden.

Achtung: Die Spielerfarben müssen in der Funktion InitPlayerColorMapping definiert werden, da die Änderungen sonst nach dem Laden eines Spielstands verloren gehen!

Einige Farb-Ids sind in einer Variable abgespeichert, um sie leichter auffindbar und im Skript besser lesbar zu machen. Beispielsweise kann man die Farb-Id 12 in der Variable KERBEROS_COLOR finden. Da wir oben Spieler 2 den Namen „Kerberos“ gegeben haben, soll er auch die passende Farbe erhalten:

function InitPlayerColorMapping()
    Display.SetPlayerColorMapping(2, KERBEROS_COLOR)
end

Diese Tabelle gibt eine Übersicht über alle Spielerfarben und eventuelle Aliase:

Farb-Id RGB Farbe Bezeichner
1 15, 64, 255 Blau PLAYER_COLOR
2 226, 0, 0 Rot NEPHILIM_COLOR
3 235, 255, 53 Gelb FRIENDLY_COLOR2
4 0, 235, 209 Türkis ENEMY_COLOR2
5 252, 164, 39 Orange FRIENDLY_COLOR1
6 178,2,255 Lila ENEMY_COLOR1
7 255,79,200 Pink -
8 115, 209, 65 Hellgrün -
9 0, 140, 2 Dunkelgrün EVIL_GOVERNOR_COLOR
10 184,184,184 Hellgrau -
11 184,182,90 Mattes Gold NPC_COLOR
12 136,136,136 Grau KERBEROS_COLOR
13 230,230,230 Weiß FRIENDLY_COLOR3
14 57,57,57 Schwarz ROBBERS_COLOR
15 139,232,255 Blau-Türkis -
16 255,150,214 Rosa -

Im nächsten Kapitel legen wir fest, welche Startressourcen die Spieler erhalten.

Voriges Kapitel: Das Basisskript
Nächstes Kapitel: Ressourcen
Zurück nach oben

scripting/tutorials/level1/diplomacy.txt · Zuletzt geändert: 2023/09/07 09:38 von fritz_98