Mit diesem Script könnt ihr die verbliebene Zeit eurer Flare anzeigen.
Der Timer läuft sobald Lara die Flare entzündet und beendet sich, sobald die Zeit abgelaufen ist.
Da eine Flare 60 sek. lang leuchtet, habe ich den Timer auf 60 Sek. gesetzt. Sollte die Zeit der Flare angepasst sein, ändert ihr einfach den Wert um.
Alles was ihr braucht ist dieses Script:
local Timer = require("Engine.Timer")
-- Level event functions
LevelFuncs.OnLoad = function() end
LevelFuncs.OnSave = function() end
LevelFuncs.OnStart = function()
end
LevelFuncs.OnLoop = function()
ShowFlareTimer()
end
LevelFuncs.OnEnd = function() end
-- initialize flare variables
local flare = false
local flareTimeSeconds = 60.0
LevelFuncs.__EndFlare = function()
flare = false
end
function ShowFlareTimer()
-- check for timer to begin
if Lara:GetWeaponType() == 7 and Lara:GetHandStatus() == 2 and not flare then
flare = true
--StartTimer
StartTimer()
end
end
function StartTimer()
-- starts timer
local flareTimer = Timer.Create(
"flareTimer", --name
flareTimeSeconds, -- seconds
false, -- loop
{minutes = false, seconds = true, deciseconds = true}, -- timer table
__EndFlare
)
flareTimer:Start()
end
Display More
Kurze Erklärung:
Da der Timer benutzt wird, müssen wir diesen auch vorher einbinden:
Es gibt einige Level Events, aber wir benötigen nur die OnLoop Funktion (da unsere Funktion jeden Frame des Spiels abgefragt werden muss - es muss quasi IMMER im Spiel gefragt werden, "Hat Lara eine Fackel entzündet?")
-- Level event functions
LevelFuncs.OnLoad = function() end
LevelFuncs.OnSave = function() end
LevelFuncs.OnStart = function() end
LevelFuncs.OnLoop = function()
ShowFlareTimer()
end
LevelFuncs.OnEnd = function() end
Da die Bedingung ob Lara die Fackel entzündet jeden Frame des Spiels abgefragt werden muss wird die Funktion im "OnLoop" aufgerufen.
Wir benötigen eine Hilfsvariable "flare" damit der Timer nicht öfter als einmal aufgerufen wird, nachdem Lara die Fackel entzündet und definieren die Dauer:
Standardmäßig ist flare = false, und wir können den Timer NUR dann starten wenn Lara den Weapon Type 7 , Hand Status 2 und flare = false ist:
if Lara:GetWeaponType() == 7 and Lara:GetHandStatus() == 2 and not flare then
Informationen woher die Werte für Weapon Type (7) und Hand Status (2) kommen, findest du hier:
Weapon Type:
https://tombengine.github.io/2%20classes/Ob…t:GetWeaponType
Hand Status:
https://tombengine.github.io/2%20classes/Ob…t:GetHandStatus
Wenn diese Bedingung erfüllt ist, ändern wir die Variable "flare" auf True damit diese Bedingung im nächsten Frame Loop nicht mehr erfüllt wird (und somit der Code innerhalb des "if" nicht mehr ausgeführt wird) und rufen unsere Funktion zum Starten des Timers auf:
Informationen wie der Timer grundsätzlich funktioniert, schaue hier:
599
Wenn der Timer abgelaufen ist wird die __EndFlare LevelFuncs. Funktion aufgerufen. Man muss tatsächlich eine Level.Funcs. Funktion aufrufen, damit es im Spiel keine Fehler gibt, da der Timer NUR LevelFuncs. als Funktionswert unterstützt.
Die beiden Unterstriche __ sind nur dazu da, dass die Funktion NICHT im Volume Event Fenster auftaucht, damit man unnötige Funktionen die dort nicht auftauchen sollen, unterdrückt.
local flareTimer = Timer.Create(
"flareTimer", --name
flareTimeSeconds, -- seconds
false, -- loop
{minutes = false, seconds = true, deciseconds = true}, -- timer table
__EndFlare
)
Die Funktion die nach dem Timer aufgerufen (gecalled) wird, setzt die flare Variable wieder auf false, damit ein neuer Kreislauf (neuer Timer) gestartet werden kann. Damit wäre die Bedingung in der if ( ... and not flare then ) wieder erfüllt (flare = false).