Lua设定了重新加载的冷却时间

时间:2014-09-02 20:29:23

标签: lua garrys-mod

我在lua reload部分设置了这个设置,我很乐意为它设置一个冷却功能,就像是如何进行主火和二次火力一样。反正有吗?这是我的代码。

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

1 个答案:

答案 0 :(得分:3)

os.time()应该做到这一点。 您可以在Lua网站上查看documentation

仅在某个时间之后允许某事发生的逻辑是检查自上次使用该函数以来经过的时间。 从逻辑上讲,它将是 -

timeElapsed = lastTimeOfUse - timeNow

如果timeElapsed > cooldownPeriod然后允许事件发生并设置lastTimeOfUse = timeNow


如果您的意思是重新加载功能只能在 60 (更改为任何内容)秒之后才能运行,请尝试以下操作: -

-- 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