1

マウス ボタンと R キーの両方を使用する 3 つの機能を持つ Garry's Mod で武器を作成しています。Garry はクールなので、SetNextPrimaryFire() と SetNextSecondaryFire() を使用してマウス ボタン攻撃の遅延を簡単に設定できました。残念ながら、他のキーに設定されているような便利な機能はありません。それで、見知らぬ人が私にこれを試すように勧めました。

function SWEP:SetNextUltFire(time)
    self.ultdelay = time
end

function SWEP:Think()

    if self.Owner:KeyPressed( IN_RELOAD ) and self.ultdelay <= CurTime() then
        walkspeed = 800
        runspeed = 800
        self:EmitSound(self.WeaponSounds2[math.random(1,#self.WeaponSounds2)], 100, 100)
        self.Owner:SetWalkSpeed(800);self.Owner:SetRunSpeed(800)
        firerate = 0.15
        timer.Create("stopult", 10, 1, function()
            self.Owner:SetWalkSpeed(250);self.Owner:SetRunSpeed(500);
            firerate = 0.3; self:SendWeaponAnim( ACT_VM_RELOAD );self:SetNextPrimaryFire( CurTime() + 2.8 );
            walkspeed = 250; runspeed = 500 end)
        self:SetNextUltFire(CurTime()+15)
    end
end

SWEP:Think() の下の最初の行から「and self.ultdelay <= CurTime()」を削除すると、コードは問題なく動作しますが、目的の 15 秒の遅延が適用されず、R が押されるたびに関数が実行されます. それが存在する場合、関数は完全に動作を停止し、[エラー] lua/weapons/lucian/shared.lua:103: nil と番号 1 を比較しようとしました。不明 - lua/weapons/lucian/shared.lua:103 という結果になります。

4

1 に答える 1

0

103 行目を次のように変更してみてください。

if self.Owner:KeyPressed( IN_RELOAD ) and (not self.ultdelay or self.ultdelay <= CurTime()) then

これを行う必要があるのは、SWEP:Initialize で値を設定していないためです。設定ultdelayされていない値を比較しようとしているため、エラー メッセージが表示されます。

于 2013-10-03T14:10:20.560 に答える