====== Spielerfarben ändern ======
[[http://www.siedler-maps.de/user-1104.htm|Noigi]] \\
Jedes Basis-Skript enthält ja die
function InitPlayerColorMapping()
end
In der können den einzelnen Spielern Farben zugewiesen werden.\\
Wenn nun der menschliche Spieler ausnahmsweise nicht mit Blau, sondern mit Rot spielen soll; Spieler 2 soll Schwarz haben und Spieler 3 Dunkelgrün, dann sähe die Funktion so aus:
function InitPlayerColorMapping()
Display.SetPlayerColorMapping(1,NEPHILIM_COLOR)
Display.SetPlayerColorMapping(2,ROBBERS_COLOR)
Display.SetPlayerColorMapping(3,EVIL_GOVERNOR_COLOR)
end
Das ganze geht auch mit einem numerischem Wert von 1-16
function InitPlayerColorMapping()
Display.SetPlayerColorMapping(1,5)
Display.SetPlayerColorMapping(2,8)
Display.SetPlayerColorMapping(3,16)
end
=====Liste der Farben=====
| **Nummer** | 1 | 2 |
| **Bezeichner** | PLAYER_COLOR | NEPHILIM_COLOR |
| **RGB** | 15,64,255 | 226,0,0 |
| **Screenshot** | {{:tutorials:spielerfarben_aendern:1.jpg?500x400|}} | {{:tutorials:spielerfarben_aendern:2.jpg?500x400|}} |
\\
| **Nummer** | 3 | 4 |
| **Bezeichner** | FRIENDLY_COLOR2 | ENEMY_COLOR2 |
| **RGB** | 235,255,53 | 0,235,209 |
| **Screenshot** | {{:tutorials:spielerfarben_aendern:3.jpg?500x400|}} | {{:tutorials:spielerfarben_aendern:4.jpg?500x400|}} |
\\
| **Nummer** | 5 | 6 |
| **Bezeichner** | FRIENDLY_COLOR1 | ENEMY_COLOR1 |
| **RGB** | 252,164,39 | 178,2,255 |
| **Screenshot** | {{:tutorials:spielerfarben_aendern:5.jpg?500x400|}} | {{:tutorials:spielerfarben_aendern:6.jpg?500x400|}} |
\\
| **Nummer** | 7 | 8 |
| **Bezeichner** | | |
| **RGB** | 255,79,200 | 115,209,65 |
| **Screenshot** | {{:tutorials:spielerfarben_aendern:7.jpg?500x400|}} | {{:tutorials:spielerfarben_aendern:8.jpg?500x400|}} |
\\
| **Nummer** | 9 | 10 |
| **Bezeichner** | EVIL_GOVERNOR_COLOR | |
| **RGB** | 0,140,2 | 184,184,184 |
| **Screenshot** | {{:tutorials:spielerfarben_aendern:9.jpg?500x400|}} | {{:tutorials:spielerfarben_aendern:10.jpg?500x400|}} |
\\
| **Nummer** | 11 | 12 |
| **Bezeichner** | NPC_COLOR | KERBEROS_COLOR |
| **RGB** | 184,182,90 | 136,136,136 |
| **Screenshot** | {{:tutorials:spielerfarben_aendern:11.jpg?500x400|}} | {{:tutorials:spielerfarben_aendern:12.jpg?500x400|}} |
\\
| **Nummer** | 13 | 14 |
| **Bezeichner** | FRIENDLY_COLOR3 | ROBBERS_COLOR |
| **RGB** | 230,230,230 | 57,57,57 |
| **Screenshot** | {{:tutorials:spielerfarben_aendern:13.jpg?500x400|}} | {{:tutorials:spielerfarben_aendern:14.jpg?500x400|}} |
\\
| **Nummer** | 15 | 16 |
| **Bezeichner** | | |
| **RGB** | 139,232,255 | 255,150,214 |
| **Screenshot** | {{:tutorials:spielerfarben_aendern:15.jpg?500x400|}} | {{:tutorials:spielerfarben_aendern:16.jpg?500x400|}} |
===== Spielerfarben Table =====
Der folgende Hilfstable ist nach SpielerfarbenID indiziert.\\
Man kann die Farben aber auch per Farbenbezeichnung abrufen
gv_playercolortable = { "@color:15,64,255",
"@color:226,0,0",
"@color:235,255,53",
"@color:0,235,209",
"@color:252,164,39",
"@color:178,2,255",
"@color:255,79,200",
"@color:115,209,65",
"@color:0,140,2",
"@color:184,184,184",
"@color:184,182,90",
"@color:136,136,136",
"@color:230,230,230",
"@color:57,57,57",
"@color:139,232,255",
"@color:255,150,214",
Blau = "@color:15,64,255",
Rot = "@color:226,0,0",
Gelb = "@color:235,255,53",
Tuerkis = "@color:0,235,209",
Orange = "@color:252,164,39",
Lila = "@color:178,2,255",
Pink = "@color:255,79,200",
Hellgruen = "@color:115,209,65",
Dunkelgruen = "@color:0,140,2",
Hellgrau = "@color:184,184,184",
Beige = "@color:184,182,90",
Dunkelgrau = "@color:136,136,136",
Weiss = "@color:230,230,230",
Schwarz = "@color:57,57,57",
Himmelblau = "@color:139,232,255",
Hellrosa = "@color:255,150,214"}
===== Nicht zu bunt... =====
Es könnte die Spieler verwirren, in jeder neuen Map eine andere Farbe zu haben. Man sollte also zumindest das Verändern der Farbe des menschlichen Spielers nur in Maßen vornehmen.
\\
===== Bug beim Laden eines Spielstandes =====
Theoretisch kann man die Spielerfarben auch außerhalb der
function InitPlayerColorMapping()
end
verändern. Beim Laden eines Spielstandes werden die Farben aber wieder auf die in der "function InitPlayerColorMapping()" angegebenen Farben oder die Grundwerte der jeweiligen SpielerID zurückgesetzt.\\
Man sollte die Spielerfarben also generell nicht in anderen Funktionen verändern.\\
\\
===== Workaround für den Bug =====
Ich habe einen kleinen Workaround geschrieben, mit dem man die Farben auch außerhald von
'InitPlayerColorMapping'
verändern kann. Dazu muss man unten stehenden Code irgendwo in das Script (nicht in eine Funktion!) einfügen und die Farbe mit "ChangePlayerColor" ändern. Die Parameter sind die selben wie bei "Display.SetPlayerColorMapping".\\
\\
Beispiel:
ChangePlayerColor(1, NEPHILIM_COLOR)
\\
Der Code:\\
Mit Kommentaren...\\
--Die originale Funktion 'Mission_OnSaveGameLoaded', die aufgerufen wird, wenn ein Spielstand geladen wurde, sichern
OrigMission_OnSaveGameLoaded = Mission_OnSaveGameLoaded
--Die Funktion 'Mission_OnSaveGameLoaded' überschreiben um eigene Funktionen direkt nach dem Laden eines Spielstands ausführen zu können
function Mission_OnSaveGameLoaded()
--Die originale Funktion aufrufen
OrigMission_OnSaveGameLoaded()
--Spielerfarben updaten
UpdatePlayerColors()
end
--Diese Funktion prüft das Table 'ChangedPlayerColors' auf Einträge
function UpdatePlayerColors()
--wenn das Table existiert
if type(ChangedPlayerColors) ~= "nil" then
--für jede SpielerId ausprobieren
for i=1, 8 do
--ob es eine Änderung gab
if ChangedPlayerColors[i] ~= nil then
--falls ja, die Spielerfarbe entsprechend ändern
Display.SetPlayerColorMapping(i,ChangedPlayerColors[i])
end
end
end
end
function ChangePlayerColor(_playerId, _color)
--falls noch nicht passiert, globales Table mit den geänderten Farben erstellen
if type(ChangedPlayerColors) == "nil" then
ChangedPlayerColors = {}
end
--Farbe ändern
Display.SetPlayerColorMapping(_playerId,_color)
--geänderte Farbe speichern, um sie nach dem Laden eines Spielstands wiederherstellen zu können
ChangedPlayerColors[_playerId] = _color
end
\\
... und ohne Kommentare\\
OrigMission_OnSaveGameLoaded = Mission_OnSaveGameLoaded
function Mission_OnSaveGameLoaded()
OrigMission_OnSaveGameLoaded()
UpdatePlayerColors()
end
function UpdatePlayerColors()
if type(ChangedPlayerColors) ~= "nil" then
for i=1, 8 do
if ChangedPlayerColors[i] ~= nil then
Display.SetPlayerColorMapping(i,ChangedPlayerColors[i])
end
end
end
end
function ChangePlayerColor(_playerId, _color)
if type(ChangedPlayerColors) == "nil" then
ChangedPlayerColors = {}
end
Display.SetPlayerColorMapping(_playerId,_color)
ChangedPlayerColors[_playerId] = _color
end
\\
Workaround by Katmai300
\\
\\
[[:tutorials:index|Zur Tutorial-Übersicht]]