Mit diesem Code lassen sich Countdowns starten, die nach Ablauf bestimmte Funktionen aufrufen.
Ausserdem lässt sich eine Friedenszeit im Multiplayer setzen.
Die Anwendung ist sehr einfach. Zunächst muss in der FirstMapAction() vor Anwendung der Code eingelesen werden:
Countdown_and_Peacetime()
Jetzt können folgende Funktionen verwendet werden
_countdownId = StartCountdown (_Limit, _Callback, _Show) _countdownId: Id für spätere Verwendung _Limit: Ablauf des Countdowns in Sekunden _Callback: Funktion (ohne " ", also einfach der Name!) _Show: True, falls der Countdown gezeigt werden soll. Achtung! Es kann nur ein Countdown auf einmal angezeigt werden!
StopCountdown(_Id) _Id: Id eines Countdowns wie in StartCountdown vermerkt
SetPeacetime = function ( _seconds ) _seconds: Dauer der Friedenszeit in Sekunden
Sollen nach Ablauf der Friedenszeit noch andere Aktionen durchgeführt werden, muss noch die folgende Funktion bearbeitet werden.
PeacetimeEnd = function() ... end
function Countdown_and_Peacetime() PeacetimeEnd = function() -- sämtliche Aktionen bei Ende der Friedenszeit MultiplayerTools.SetUpDiplomacyOnMPGameConfig() -- Sound bei Ende der Friedenszeit Sound.PlayGUISound( Sounds.OnKlick_Select_kerberos, 127 ) -- Nachricht bei Ende der Friedenszeit Message( "@color:255,255,0 "..g_MC_Loc[gvRL].Wartimemsg ); end SetPeacetime = function ( _seconds ) ---hier wird die Funktion special peacetime gestartet SpecialPeacetime(); StartCountdown( _seconds, PeacetimeEnd, true ); end SpecialPeacetime = function() -- Anzahl der menschlichen Spieler wird hier ermittelt local _humenPlayer = XNetwork.GameInformation_GetMapMaximumNumberOfHumanPlayer() -- Abfrage ob Standardsituation gegeben ist das jeder sich mit jedem verbünden kann if XNetwork.GameInformation_GetFreeAlliancesFlag() == 1 then -- Feststellung wer mit wem verbündet ist und Festlegung des DiplomatiST für die Peacetime if _humenPlayer > 1 then for _teampId = 1, _humenPlayer do local _teamplayer = XNetwork.GameInformation_GetLogicPlayerTeam( _teampId ) for _oppopId = 1, _humenPlayer do if _teampId ~= OppoPlayer then local _oppoPlayer = XNetwork.GameInformation_GetLogicPlayerTeam( _oppopId ) if _teamplayer == _oppoPlayer then Logic.SetDiplomacyState( _oppopId, _teampId, Diplomacy.Friendly ) else Logic.SetDiplomacyState( _oppopId, _teampId, Diplomacy.Neutral ) end end end end end end end StartCountdown = function (_Limit, _Callback, _Show) assert(type(_Limit) == "number") Counter.Index = (Counter.Index or 0) + 1 if _Show and CountdownIsVisisble() then assert(false, "StartCountdown: A countdown is already visible") end Counter["counter" .. Counter.Index] = {Limit = _Limit, TickCount = 0, Callback = _Callback, Show = _Show, Finished = false} if _Show then MapLocal_StartCountDown(_Limit) end if Counter.JobId == nil then Counter.JobId = StartSimpleJob("CountdownTick") end return Counter.Index end StopCountdown = function(_Id) if Counter.Index == nil then return end if _Id == nil then for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) then if Counter["counter" .. i].Show then MapLocal_StopCountDown() end Counter["counter" .. i] = nil end end else if Counter.IsValid("counter" .. _Id) then if Counter["counter" .. _Id].Show then MapLocal_StopCountDown() end Counter["counter" .. _Id] = nil end end end CountdownTick = function() local empty = true for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) then if Counter.Tick("counter" .. i) then Counter["counter" .. i].Finished = true end if Counter["counter" .. i].Finished and not IsBriefingActive() then if Counter["counter" .. i].Show then MapLocal_StopCountDown() end -- callback function if type(Counter["counter" .. i].Callback) == "function" then Counter["counter" .. i].Callback() end Counter["counter" .. i] = nil end empty = false end end if empty then Counter.JobId = nil Counter.Index = nil return true end end CountdownIsVisisble = function() for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) and Counter["counter" .. i].Show then return true end end return false end end
Der Autor der Funktionen ist mir unbekannt.