【配件】消音器

预制物名

homura_weapon_buff_silent

简介

“嘘!别说话!”——维克波顿女士

消音器是一个很有趣的配件,它可以大幅降低射击时的噪声,如果使用一把消音的枪在背后攻击敌人,你不会招引到它的仇恨。

制作消音器只需要一级工作台的科技,材料也非常的简单:1个保温石和2个木炭。在哈姆雷特dlc中,由于无法制作保温石,配方修改为4个铁矿和2个木炭。

图集

1.消音器 素材(画师:羽中)



2.使用消音手枪攻击猪人


一些八卦

为了设计这个物品的配方,作者想了很久,最终决定用保温石和木炭,因为这两个都是多孔疏松材料。
(当然,如果以后想到更好的配方就会修改)

代码实现

通过组件api修改combat组件,使得生物无法对背后的攻击者产生仇恨。

local function combatpostinit(combat)
    --计算两个角度之间的夹角
    local function CalcDeltaAngle(angle1,angle2,abs)
        local delta = math.mod(angle2 - angle1,360)  -- (-360~360)
        delta = delta < 0 and delta + 360 or delta     -- (0 ~ 360)
        if abs then
            return delta > 180 and 360 - delta or delta  -- (0~180)
        else
            return delta 
        end
    end

    --判断攻击者是否在挨打者背后的函数
    local function IsBack(attacker, target)
        if target:IsValid() and target.Transform and attacker:IsValid() and attacker.Transform then

            --angle1是挨打者面朝的角度
            local angle1 = target.Transform:GetRotation()
            --angle2是进攻者相对于挨打者的角度
            local angle2 = target:GetAngleToPoint(attacker:GetPosition())

            local deltaangle = CalcDeltaAngle(angle1,angle2,true)
            if deltaangle > 90 then
                --如果两个角度的差值大于90,我们认为进攻者位于挨打者的背后
                return true
            end
        end
    end  
   
    --修改设置仇恨目标的函数
    local old_settarget = combat.SetTarget
    function combat:SetTarget(new, ...)
        --如果攻击者有消音器,并且在挨打者背后,则直接返回,不执行设置目标的操作
        --注意,'homura: has silencer'是拥有消音器的标签,它会在发动攻击前添加到玩家身上,并在攻击后立刻移除

        if new and new:HasTag('homura: has silencer') and IsBack(new, self.inst) then
            return
        else
            return old_settarget(self, new, ...)
        end
    end
end

AddComponentPostInit("combat",combatpostinit)

你可能感兴趣的:(【配件】消音器)