我发现我自己写的 LUA 脚本武器 SWEP 有个通病,就是按下左键或者右键能听到ti的一声(HL2没弹药的音效)。
如果写了 AmmoType 并且我不实际发射弹药,也会看见和听见一颗 AR2 子弹射出去,但是没有任何伤害。

以前我的尝试都没有成功,今天我终于找到了异常的根源。

原因就是我只在 SERVER 里添置了 SWEP:PrimaryAttack() ,没有在 CLIENT 里添置 SWEP:PrimaryAttack()
如果不写 SWEP:PrimaryAttack() , GMod 就会自动按照默认设计,发射一颗子弹(仅仅是客户端的子弹,服务器根本不知道你射了)。同理还有 SWEP:SecondaryAttack()

为什么今天发现了问题呢,是因为我在 SHARED 加了一个 hook ,然后发现只有我的 CLIENT 在报告发射。

hook.Add(
    "EntityFireBullets",
    "abcdefgh12354895714896",
    function(ent, data)
        if not IsValid(ent) then return end
        print(ent, "发射了子弹")
    end
)

为什么以前没有发现,是因为以前我都是 SWEP.Primary.ClipSize = -1
以前我的子弹数量都是 -1 ,压根没有子弹,就只能听到HL2没弹药的音效。
然后我还tm不知道在哪里关这个音效。

为什么别人家的武器都没有这个事情呢。
是因为别人都喜欢直接写在 shared.lua 里面。

function SWEP:PrimaryAttack()
    if CLIENT then return end
end

可不叫离谱吗。

气死我了。
所以特此写下本文。