預制物名
homura_weapon_buff_silent
簡介
“噓!別說話!”——維克波頓女士
消音器是一個很有趣的配件,它可以大幅降低射擊時的噪聲,如果使用一把消音的槍在背后攻擊敵人,你不會招引到它的仇恨。
制作消音器只需要一級工作臺的科技,材料也非常的簡單:1個保溫石和2個木炭。在哈姆雷特dlc中,由于無法制作保溫石,配方修改為4個鐵礦和2個木炭。
圖集
1.消音器 素材(畫師:羽中)

2.使用消音手槍攻擊豬人

一些八卦
為了設(shè)計這個物品的配方,作者想了很久,最終決定用保溫石和木炭,因為這兩個都是多孔疏松材料。
(當然,如果以后想到更好的配方就會修改)
代碼實現(xiàn)
通過組件api修改combat組件,使得生物無法對背后的攻擊者產(chǎn)生仇恨。
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
--判斷攻擊者是否在挨打者背后的函數(shù)
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
--修改設(shè)置仇恨目標的函數(shù)
local old_settarget = combat.SetTarget
function combat:SetTarget(new, ...)
--如果攻擊者有消音器,并且在挨打者背后,則直接返回,不執(zhí)行設(shè)置目標的操作
--注意,'homura: has silencer'是擁有消音器的標簽,它會在發(fā)動攻擊前添加到玩家身上,并在攻擊后立刻移除
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)