====== 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]]