[[http://www.siedler-games.de|{{:sg-link.jpg|}}]]
======KI-Script=======
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
=====Versions-History und geplante Änderungen======
===Versions-History===
* **Version 0.60**
* Leibeigenenkauf neu geschrieben
* Upgrade-Event-Grund-Funktion geändert
* Minen- und Dorfzentrenbau verbessert (schneller)
* **Version 0.65**
* Minen- und Dorfzentrenbau abgesichert ( 100%-ige Sicherheit kann nicht gewährleistet werden auf Grund der Zeitverzögerung )
* Wahrscheinlichkeit des Baus von Minen erhöht
* Den Kauf von Hauptmännern verbessert
* Code teilweise verallgemeinert zur besseren Lesbarkeit (weitere Verallgemeinerung folgt)
* **Version 0.70**
* Hauptmännerkontrolle komplett überarbeitet
* Forschungswahrscheinlichkeit erhöht
* Gebäudepositionierung verbessert
* Veredelungsgebäudebau um Welten verbessert
* **Version 0.80**
* KI greift jetzt an
* KI berechnet nach einem bestimmten Punktesystem (kann geändert werden, die Score-Tables stehen direkt über der Klasse CMilitaryControl) die beste Angriffsposition
* Aggressivität als Parameter hinzugefügt
* diverse kleinere Rechenfehler beseitigt
* KI kann beim Gebäudebau noch maximal 5 Minuten hängen bleiben (bei alter Version vergessen, die wichtigste Variable noch zurückzusetzen)
* Gold- und Holzausgaben werden besser gemanaged
* **Version 0.90**
* Nun auch Savegame-fähig
* **Version 0.91**
* Behebung des Problems mit neutralen Gebäuden ("type nil matches table")
* **Version 1.00**
* Verbesserte Armeenkontrolle
* Verbessertes Ressourcenmanagement
* Fehler, der eigentlich schon in Version 0.91 gefixt sein sollte, nun hoffentlich endgültig behoben
* **Version 1.10**
* Armeeverhalten bei der Verteidigung verbessert
* Einbau einer Versionsüberprüfungs-Funktion ermöglicht
* Turmbau eingebaut
* **Version 1.20**
* Kauf-Verhalten verbessert (es werden nur noch Hauptmänner gekauft, wenn für die Soldaten genug Geld vorhanden ist)
* Militär-Forschungen werden spätestens erforscht, wenn ein Mitspieler sie erforscht hat
* **Version 1.25**
* optionalen Parameter _refresh in AIScript_Setup hinzugefügt: Wenn der Wert true ist, werden voreingestellte Werte übernommen, es kann allerdings auch ein Table verwendet werden. Die Rohstoffe werden dann immer am Zahltag ausbezahlt
* ein paar kleinere Bug-Fixes
* **Version 1.30**
* nun wird zunächst von jedem Minentyp ein Gebäude gebaut
* Algorithmus bei den Minengebäuden geändert
* die Refresh-Zahlen erhöht
* **Version 1.40**
* Veredelungs-Gebäudebau verbessert
* Upgrade-Forschungen haben nun auch Auswirkungen ;-)
* **Version 1.41**
* Baubegrenzung hinzugefügt
* Setup-Funktion umgeschrieben
* **Version 1.50**
* Fehler in CMilitaryControl behoben
* Path-Finding-Funktionen hinzugefügt
* Neue Indizes in AIScript_Setup():
* noPathFindingUse (Abschalten des Path-Findings)
* peaceTime (Ausschalten der Soldatenproduktion für eine bestimmte Zeit
* Soldatenkauf verbessert
* Einige neue Comfort-Funktionen zur Interaktion mit der KI
* **Version 1.51**
* Bug bei Erstellung von CU_-Soldaten behoben
===bisher geplante, noch nicht vollendete Änderungen===
* Armee-Verhalten verbessern
* Gold- und Holzausgaben müssen besser geregelt werden
* Brückenbau-Simulation (falls möglich)
* Veredelungsgebäudebau verbessern
=====aktuelles Script=====
Das aktuelle Script findet ihr {{AIScript-1-51.rar|hier}}.
----
You will find the last AI version {{AIScript-1-51.rar|here}}.
=====Versions-Überprüfungs-Funktion=====
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
=====Ein paar Bilder=====
^Das Geschehen^Bild^
|Zu Beginn eine Universität|{{aiscript-picture1.jpg}}|
|Die erste Mine|{{aiscript-picture2.jpg}}|
|Die Burg wird ausgebaut|{{aiscript-picture3.jpg}}|
|Der erste Trupp des Gegners|{{aiscript-picture4.jpg}}|
|Nun ist auch Spieler 1 so weit|{{aiscript-picture5.jpg}}|
|Ein Dorfzentrum wird benötigt|{{aiscript-picture6.jpg}}|