1

私はこれを 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
4

1 に答える 1

3

os.time()トリックを行う必要があります。Lua の Web サイトでドキュメントを参照できます。

しばらくしてから何かが発生することを許可する背後にあるロジックは、関数が最後に使用されてからの経過時間をチェックすることです。論理的には、それは -

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
于 2014-09-02T21:02:07.137 に答える