Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level1:diplomacy

Dies ist eine alte Version des Dokuments!


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

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 17 verschiedene Spielerfarben (IDs von 0-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
scripting/tutorials/level1/diplomacy.1689601902.txt.gz · Zuletzt geändert: 2023/07/17 13:51 von fritz_98