Creación de Timer.


Un Timer es un script el cual podremos agregar a cualquier function para que en un determinado tiempo, Segundos, suceda algo!, ya sea la finalización de la misión,  que de un objetivo cumplido, la llegada de enemigos, amigos, etc.. 

Ademas de crear timer simples también se puede crear un Timer con un mensaje en pantalla con la cuenta regresiva y así dar a conocer al jugador de cuanto tiempo le queda para arrancar de un mortero.  



Los ejemplos que usare han sido usados en mas de alguna misión creada por mi. y les daré un ejemplo MSSN  para que puedan utilizarlo y analizarlo en el editor de misiones. 


Ejemplo 1:
Al entrar el jugador a la zona, se detecta la caída de un Mortero enemigo, El Timer es de 10 segundos lo cual da tiempo para arrancar de la zona. 


function onEnter_triggerzone(zoneName, unitName)
OFP:disableEvent("onEnter_triggerzone")
OFP:addTimer("TEMPO", 1000); --Se crea el Timer llamado TEMPO.
remain = 10   --Duración del Timer.
end

function onTimer_TEMPO ()
remain = remain - 1  --Quita 1 segundo de la cuenta
OFP:displaySystemMessage("Mortero Detectado:"..remain); --Mensaje en pantalla.
OFP:displaySystemMessage("\n \n \n \n \n");  --Cuenta en pantalla.
if (remain == 0) then   --Al llegar la cuenta a 0 cae el mortero.
OFP:callArtilleryStrike("1", "waypoint", "HeavyMortar", "HE", "Single");
end
OFP:setTimer ("TEMPO", 1000);
end

El Script anterior lo podremos ver y analizar en el siguiente link:

DESCARGAR EJEMPLO MSSN.



Ejemplo 2:
En este Script apreciamos que al matar al oficial enemigo HAN se activa el Mortero en 15 segundos. Ademas se agrega un Speech a la linea de código de la muerte de HAN y el tipo de mortero final es "Harassing" por lo tanto caerán varios morteros en la zona al azar.

function onDeath_han(victim, killer)
OFP:callArtilleryStrike("1","ba10lsbbamI2","Mortar","Smoke","Single");
OFP:playPlayerSpeech({"inf7_08_m02_02"});  --speech
OFP:addTimer("JDD", 1000);
remain = 15
end
function onTimer_JDD ()
remain = remain - 1
OFP:displaySystemMessage("MORTAR DETECTED : " .. remain )
OFP:displaySystemMessage(" \n \n \n")
if (remain == 0) then
OFP:callArtilleryStrike("1", "ba10lsbbamI2", "HeavyMortar", "HE", "Harassing")
OFP:removeTimer("JDD");
end
  OFP:setTimer("JDD", 1000)
end

Nota:
En este ejemplo el nombre del mortero es JDD y la caída es en un objeto y no en un waypoint como en el ejemplo anterior.

DESCARGAR EJEMPLO MSSN


Ejemplo 3:
Pero no solo para morteros se puede utilizar los Timer, también sirven  finalizar misiones o para capturar zonas. En el siguiente ejemplo deberemos estar 20 segundos en la zona para que se de por cumplido un objetivo.


function onEnter_Triggerzone( )
OFP:disableEvent(" onEnter_Triggerzone")
OFP:addTimer("CAPTURE", 1000);
remain = 0 --La cuenta comienza en cero.
end

function onTimer_CAPTURE ()
remain = remain + 1  --Agrega 1 segundo a la cuenta.
OFP:displaySystemMessage("TIEMPO DE CAPTURA : " .. remain )
OFP:displaySystemMessage(" \n \n \n")
if (remain == 20) then  --Al llegar la cuenta a 20 el objetivo se cumple.
OFP:setObjectiveState("objective", "COMPLETED");
OFP:removeTimer("CAPTURE");
end
  OFP:setTimer("CAPTURE", 1000)
end

Nota:
En este ejemplo observamos que el timer comienza en cero y que al llegar a 20 segundos el objetivo se completa. 

DESCARGAR EJEMPLO MSSN,

Como han podido ver en los diferentes ejemplo las posibilidades de usar y modificar el script son infinitas, solo les queda la imaginación de ustedes para implementarlo correctamente en su misión...

suerte.