预制物名
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)
网友评论