Dieses Script sollte bisher nur in Einzelspielerkarten verwendet werden, da in Multiplayerkarten Desyncs sehr wahrscheinlich sind. Vor allem die Upgrades und die Forschungen können zu Desyncs führen.
Außerdem wurde eine (für Mapper relativ interessante) Änderung an den Trigger-Funktionen vorgenommen, es wurde das Ereignis Events.LOGIC_EVENT_BUILDING_UPGRADED (ein Gebäude wurde ausgebaut) zusammen mit den Ereignis-Funktionen Event.GetOldBuildingID() (Gebäude-ID vor dem Ausbau) und Event.GetNewBuildingID() (Gebäude-ID nach dem Ausbau) hinzugefügt.
Wer möchte, kann ja mal den Code in eine Testmap kopieren und dann über AIScript_Setup() die KI erstellen. Parameter sind die Spieler-ID, (optional) die KI-Stärke (0 - 5) und (optional) die Aggressivität (0 - ∞, empfohlen: 0 - 4).
Außerdem gibt es die Möglichkeit, Informationen zu bekommen, was die KI gerade tut. Man muss in sein Script nur folgende Zeile einfügen:
msgVerbose = Message;
Zur Armee-Kontrolle wird TickOffensiveAIController() verwendet, das heißt Informationen über die Armeen bekommt man über
Report = Message;
Diese Befehle sollten natürlich in der endgültigen Version fehlen.
Diverse unwichtige Gebäude (Wetterturm, Wetterkraftwerk, Taverne etc.) werden aktuell nicht gebaut
Aktuelle Scriptgröße: ca. 200 KB
Die folgende Funktion „AIScript_require()“ ermöglicht die Überprüfung der KI-Version. Sie gibt bei einer deutschen Siedler-Version das Problem auf Deutsch aus, bei einer anderen in Englisch. Sie sollte immer in das Map-Script gepackt werden, wenn das KI-Script extern geladen werden muss. Diese Funktion kann erst ab Version 1.10 verwendet werden, vorher kommt eine Meldung, dass das KI-Script fehlerhaft sei.
Zur Ausgabe einer Warnung, falls die KI Version 1.10 nicht vorhanden ist, kann man folgendes eingeben:
AIScript_require( 1, 10 );
Der Parameter _additional ermöglicht es, eigene Informationen dem Spieler zu geben:
AIScript_require( 1, 10, "Guten Morgen" );
Nun würde bei einer Warnung in der zweiten Zeile „Guten Morgen“ anstatt „Die aktuelle Version des KI-Scripts findet ihr auf http://www.chromix.de/dedk/dokuwiki/doku.php.“ stehen.
Wenn das Spiel nach der Warnung beendet werden soll, dann muss der Parameter _end den Wert true bekommen. Um trotzdem noch die normale Meldung in der zweiten Zeile zu erhalten, muss man nur false übergeben.
Beispiele:
AIScript_require( 1, 10, "Hallo", true ) --Ausgabe von "Hallo" in der zweiten Zeile und beenden des Spiels AIScript_require( 1, 10, false, true ) --Ausgabe der normalen Meldung in der zweiten Zeile und beenden des Spiels
function AIScript_require( _major, _minor, _additional, _end ) asserttype( _major, "number" ); asserttype( _minor, "number" ); local lang = XNetworkUbiCom and XNetworkUbiCom.Tool_GetCurrentLanguageShortName() == "de"; _additional = _additional or ( lang and "Die aktuelle Version des KI-Scripts findet ihr auf @color:0,255,0 http://www.chromix.de/dedk/dokuwiki/doku.php @color:255,255,255 ." or "You will find the last version of the AI-Script at @color:0,255,0 http://www.chromix.de/dedk/dokuwiki/doku.php @color:255,255,255 ."); if not Umlaute then Umlaute = function(_text) local texttype = type(_text); if texttype == "string" then _text = string.gsub(_text, "ä", "\195\164"); _text = string.gsub(_text, "ö", "\195\182"); _text = string.gsub(_text, "ü", "\195\188"); _text = string.gsub(_text, "ß", "\195\159"); _text = string.gsub(_text, "Ä", "\195\132"); _text = string.gsub(_text, "Ö", "\195\150"); _text = string.gsub(_text, "Ü", "\195\156"); return _text; elseif texttype == "table" then for k, v in pairs(_text) do _text[k] = Umlaute(v); end return _text; else return _text; end end; end local restext; if not AiTools then restext = (lang and "Die KI ist bei dieser Karte fehlerhaft oder sie wurde nicht geladen. Benötigt wird KI Version " or "This AI version is defect or the AI-Script wasn't loaded. The required AI version is ") .. "@color:0,0,255 " .. _major .. "." .. (_minor >= 10 and _minor or ("0" .. _minor)) .. " @color:255,255,255 . @cr "; else if type(AiTools) ~= "table" or not AiTools.version then restext = (lang and "Die Version der KI konnte nicht ermittelt werden. Benötigt wird die KI Version " or "The version of the AI couldn't be found out. The required AI version is ") .. "@color:0,0,255 " .. _major .. "." .. (_minor >= 10 and _minor or ("0" .. _minor)) .. " @color:255,255,255 . @cr "; else local dummy, dummy, nMajor, nMinor = string.find( AiTools.version, "^(%d+)%.(%d+)$" ); if dummy then nMajor = tonumber(nMajor); nMinor = tonumber(nMinor); local tooOld; if _major > nMajor then tooOld = true; elseif _major == nMajor then if _minor > nMinor then tooOld = true; end end if tooOld then restext = (lang and "Die Version der KI ist zu alt. Benötigt wird die KI Version " or "The version of the AI is too old. The required AI version is ") .. "@color:0,0,255 " .. _major .. "." .. (_minor >= 10 and _minor or ("0" .. _minor)) .. " @color:255,255,255 , " .. ( lang and "die vorhandene Version ist allerdings nur " or "but the existing version is " ) .. "@color:0,0,255 " .. nMajor .. "." .. (nMinor >= 10 and nMinor or ("0" .. nMinor)) .. " @color:255,255,255 . @cr "; end else restext = (lang and "Die Version der KI konnte nicht ermittelt werden. Benötigt wird die KI Version " or "The version of the AI couldn't be found out. The required AI version is " ) .. "@color:0,0,255 " .. _major .. "." .. (_minor >= 10 and _minor or ("0" .. _minor)) .. " @color:255,255,255 . @cr "; end end end if restext then restext = restext .. _additional; StartBriefing{ { title = "@color:255,0,0 " .. (lang and "Achtung!" or "Attention!"), text = Umlaute(restext) }, finished = _end and Framework.CloseGame or nil }; end end