gmod吧 关注:88,404贴子:1,903,273
  • 70回复贴,共1

[小提醒]目前GMOD插件开发中可能令人不快的一个bug

只看楼主收藏回复

该bug是这两天在写插件时偶遇的,本身影响范围并大,但非常烦,在这里具体的描述一下:
在使用hook.Add EntityTakeDamage的情况下,只要玩家或npc使用hl2默认的Hitscan武器(撬棍,手枪和smg等子弹“瞬间”击中目标的武器),引用GetInflictor()函数返回的值不是武器本身而是攻击者。影响的范围并不大,仅限hl2默认武器中的hitscan类型,而smg的榴弹、手榴弹等投掷物和RPG、Ar2能量球和十字弓等发射物本身并不受到影响。非hl2原生武器暂时不受到影响。
可能你会觉得这个bug本身没什么大不了的,但是当你想修改撬棍造成的的伤害的时候,麻烦就来了:出于未知的原因,GMOD移除了调整撬棍伤害的convar,在cfg里也不见踪影。你必须通过判定伤害的来源然后通过EntityTakeDamage/CTakeDamageInfo进行修改,而上述bug就让这种方法绕路子了。一般来说只能通过GetActiveWeapon()来进行判断,但是这种判断的逻辑存在漏洞。因此,当你装备了撬棍而通过其他方式造成伤害,它也会成为修改的对象,引发潜在的冲突。
目前的解决办法:撬棍的DamageType是128,通过添加伤害类型判定来减小逻辑漏洞,不过这个也只是治标不治本,真正解决问题的办法是等待官方段修复。


IP属地:陕西来自Android客户端1楼2018-08-26 05:08回复
    NB,不过问一下,如果把逆风笑烧人的技能改成造成持续的特定的伤害应该咋整?还有,为什么我的NPC添加了音效并放大却还是听不见?


    来自手机贴吧2楼2018-08-26 06:59
    回复(6)
      好在我只搞点模型


      IP属地:北京来自iPhone客户端3楼2018-08-26 09:42
      回复
        for k, v in pairs( player.GetAll() ) do
        ...
        local function XXX()
        timer.Create( "UniqueName1", 1, 1, function() XXX end )
        end
        hook.Add( "Initialize", "Timer Example", XXX )
        像这样的格式吗?


        7楼2018-08-27 17:59
        收起回复
          我自己写的,没有经过测试,仅供参考


          IP属地:陕西来自Android客户端8楼2018-08-27 18:08
          回复(3)
            if self:GetNWInt( "lw", 0 ) == 3 then
            ...
            for k, v in pairs( player.GetAll() ) do
            v:EmitSound("lubenweibot/2and17.mp3")
            timer.Simple( "2and17", 4, 0, function()
            v:TakeDamage( 17 )
            if ( v:Health <= 0 ) then
            timer.Remove( "2and17" )
            end
            end)
            end
            end
            我对着上面的试了试,结果还是出现错误


            9楼2018-08-27 18:19
            回复
              现在问题来了,我想让我的NPC遥控某一个指定的NPC,那么它的模板应该是什么样的


              12楼2018-08-28 12:11
              回复(22)

                要是制造延迟应该怎么加?


                15楼2018-08-28 15:03
                回复(6)

                  怎样让玩家的画面出现如图所示黄框框出的材质(倒立),然后就这样维持5秒?


                  17楼2018-08-28 15:46
                  回复(5)
                    最简单的问题,让我的NPC放出来的时候播放音效并显示HUD文字,应该怎么搞


                    18楼2018-08-29 07:38
                    收起回复


                      IP属地:北京来自iPhone客户端19楼2018-08-29 15:29
                      回复
                        你可以尝试另外一种思路 自己写一个近战武器 可以是撬棍或者其他 然后再写一个插件 吧所有捡起来的撬棍或者地图里的撬棍实体换成你写的这个撬棍 我以前偷懒经常这么干


                        IP属地:湖北20楼2018-09-03 03:03
                        回复(2)
                          何必非要纠结官方修不修撬棍 你自己写个不就得了


                          IP属地:湖北21楼2018-09-03 03:03
                          回复(2)
                            把NPC传送到另外一个NPC这种代码的模板可以告诉我吗?


                            22楼2018-09-08 18:19
                            回复(5)
                              if not ent:IsPlayer() and ent:IsValid() then
                              ent:Remove()
                              local effectdata = EffectData()
                              effectdata:SetOrigin( self:GetPos() )
                              util.Effect( "Explosion", effectdata )
                              if ent:GetClass() == "npc_nicobot" then
                              PrintMessage(HUD_PRINTTALK,"Nico?走开!我是无敌的!哈哈哈哈")
                              PrintMessage(HUD_PRINTCENTER,"Nico?走开!我是无敌的!哈哈哈哈")
                              end
                              end
                              我就是想把这个代码改一下,把追踪Nico实体并吞掉改成直接传送到niko实体的那个坐标


                              24楼2018-09-08 18:56
                              回复