Chromix
Normalerweise lassen sich die Karten mit jeder beliebigen Spielversion starten.
Diese funktionieren aber nicht immer, da ältere Spielversionen manchmal nicht die Funktionalität der Version, für die die Karte geschrieben wurde, besitzen.
Wenn also jemand mit Version 1.03 eine Karte spielt die für Version 1.05 geschrieben wurde, kann es vorkommen, daß die Karte irgendwann einfach nicht mehr funktioniert, oder das Spiel abstürzt.
Mit dieser Funktion ist es möglich, eine aktuelle Spielversion vorauszusetzen.
Wenn die eigene Version „1.05.0216 Extra1“ ist (wirds rechts unten im Hauptmenü angezeigt), dann kommt in die FirstMapAction folgender Aufruf vor den eigenen Code:
RequireVersion( 1, 05, 0216, 1 );
Ist die Version des Spielers zu alt, wird eine Warnung angezeigt aber es wird dem Spieler erlaubt die Karte zu spielen.
Wenn man weiß, daß das eigene Script bestimmte Funktionen verwendet, die in alten Versionen nicht vorhanden sind, so kann man die Karte auch einfach beenden, wenn die Version des Spielers zu alt ist (da sie ja eh nicht wie gewünscht funktionieren würde).
RequireVersion( 1, 05, 0216, 1, true );
Hier nun die Funktion:
function RequireVersion( _major, _minor, _build, _addon, _forcequit ) assert( type( _major ) == "number" ) assert( type( _minor ) == "number" ) assert( type( _build ) == "number" ) assert( type( _addon ) == "number" ) local restext; local action; local dummy, dummy, nMajor, nMinor, nBuild, nAddon = string.find( Framework.GetProgramVersion(), "^(%d+)%.(%d+)%.(%d+) Extra(%d+)$" ); if dummy then nMajor = tonumber( nMajor ); nMinor = tonumber( nMinor ); nBuild = tonumber( nBuild ); nAddon = tonumber( nAddon ); local tooOld = false; if _addon > nAddon or _major > nMajor then tooOld = true; elseif _major == nMajor then if _minor > nMinor then tooOld = true; elseif _minor == nMinor then if _build > nBuild then tooOld = true; end end end if tooOld then restext = "Ihre Spielversion ist zu alt! @cr Die Karte benoetigt: " .. _major .. "." .. _minor .. "." .. _build .. " Extra" .. _addon .. " @cr Sie haben: " .. nMajor .. "." .. nMinor .. "." .. nBuild .. " Extra" .. nAddon .. " @cr Bitte installieren sie das aktuelle Update von www.siedler.de"; action = _forcequit and Framework.CloseGame; end else restext = "Die Spielversion konnte nicht ermittelt werden. Die Karte wird eventuell nicht normal spielbar sein! @cr Die Karte benoetigt: " .. _major .. "." .. _minor .. "." .. _build .. " Extra" .. _addon; end if restext then restext = restext .. string.rep( " ", 200 ); StartBriefing{ finished = action, { title = "@color:255,0,0 ACHTUNG!", text = restext } }; end end