2014-09-02 3 views
1

У меня есть этот набор в моей секции перезагрузки lua, и я бы хотел установить для него функцию восстановления, как для первичного огня и вторичного огня. Есть ли способ сделать это? Вот мой код.Lua установить время восстановления для перезагрузки

function SWEP:Reload() 
    if Chaos == 0 then 
     Chaos = 1 
     self.Owner:SetModel("models/_tails_ models/characters/sonic heroes/super_sonic/supersonic.mdl") 
     self.Weapon:EmitSound("weapons/now.wav") 
    elseif Chaos == 1 then 
     Chaos = 0 
     self.Owner:SetModel("models/_tails_ models/characters/sonic heroes/sonic/sonic.mdl") 
    end 
end 

ответ

3

os.time() должен сделать трюк. Вы можете взглянуть на documentation на веб-сайте Lua.

Логика, позволяющая что-то произойти только после sometime - проверить время, прошедшее с момента последнего использования функции. Логически, это было бы -

timeElapsed = lastTimeOfUse - timeNow 

Если timeElapsed > cooldownPeriod затем разрешить событие иметь место и установить lastTimeOfUse = timeNow.


Если вы имеете в виду что-то вроде функции перезагрузки будет работать только после того, как (изменить его к чему-либо) секунд, попробуйте следующее: -

-- Settings 
cooldown = 60 -- Cooldown period in Seconds 

-- Reload function with cooldown 
local lastReloadTime=0; 
function SWEP:Reload() 
    if ((os.time()-lastReloadTime)>cooldown) then -- Allows only after cooldown time is over 
     if Chaos == 0 then 
      Chaos = 1 
      self.Owner:SetModel("models/_tails_ models/characters/sonic heroes/super_sonic/supersonic.mdl") 
      self.Weapon:EmitSound("weapons/now.wav") 
     elseif Chaos == 1 then 
      Chaos = 0 
      self.Owner:SetModel("models/_tails_ models/characters/sonic heroes/sonic/sonic.mdl") 
     end 
     lastReloadTime=os.time() -- Sets this time as last using time of Reload 
    end 
end 

Основываясь на ваш комментарий , если вы хотите закоротить звук до определенного времени, что-то вроде этого должно работать

-- Settings 
durationOfPlayback = 3 -- for how long you want to play the sound in seconds 

-- Specifications 
durationOfSoundFile = 1 -- length of sound file in seconds 

-- Sound playback for a specific time cooldown 
noOfTimesToPlay = math.floor(durationOfPlayback/durationOfSoundFile) 
function SWEP:Reload() 
    ... 
    for i = 1, noOfTimesToPlay do 
    { 
      self.Weapon:EmitSound("weapons/now.wav") 
      lastSoundTime=os.time() 

      --This line will make the loop wait till 1 playback is complete 
      while((os.time()-lastSoundTime)<durationOfSoundFile) do end 
    } 
    ... 
end 
+0

Прошу прощения за какое-либо замешательство, с которым я столкнулся. Но я редактировал свой вопрос, что я имел в виду. Я тоже опубликую его здесь. «Я имею в виду, что я могу установить таймер для части emitsound, извините за любую путаницу». На самом деле то, что вы предоставили, может быть только тем, что мне нужно, но может также спросить, так как мне любопытно. В любом случае, чтобы установить таймер на self.weapon: emitsound part. –

+0

Не обращайте внимания на все, что я сказал, что сработало! Спасибо, много человек! Я очень ценю это :) –

+0

Да, тогда вам придется использовать ту же технику для звуковой части излучателя, используя другую переменную, называемую lastSoundTime, и, зацикливая ее до истечения периода охлаждения. Позвольте мне попытаться отредактировать мой ответ. Добро пожаловать :) Продолжайте отличную работу и подавите свое воображение. – Chique

Смежные вопросы