Inhaltsverzeichnis

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

bisher geplante, noch nicht vollendete Änderungen

aktuelles Script

Das aktuelle Script findet ihr hier.


You will find the last AI version 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 GeschehenBild
Zu Beginn eine Universitätaiscript-picture1.jpg
Die erste Mineaiscript-picture2.jpg
Die Burg wird ausgebautaiscript-picture3.jpg
Der erste Trupp des Gegnersaiscript-picture4.jpg
Nun ist auch Spieler 1 so weitaiscript-picture5.jpg
Ein Dorfzentrum wird benötigtaiscript-picture6.jpg