逗游網(wǎng):值得大家信賴的游戲下載站!
發(fā)布時(shí)間:2021-04-08 13:31 來源:百度貼吧 作者:冥府烏鴉
雨中冒險(xiǎn)2觸發(fā)流是游戲中的一個(gè)經(jīng)典流派,游戲中各種類型的裝備如何觸發(fā)?下面一起來看看雨中冒險(xiǎn)2Proc系數(shù)及機(jī)制詳解
首先,雨中冒險(xiǎn)2(下稱ROR2)的傷害機(jī)制是這樣的。
玩家使用技能 Skill,通過 投射物/球體/其他方式 造成了各種類型的傷害,代碼里賦予一個(gè) DamageInfo 的 類 用于記錄本次技能造成的傷害。
DamageInfo 經(jīng)過 GlobalEventMangaer 類的 OnHitEnemy 事件,判斷技能擊中敵人后產(chǎn)生的各種效果,判斷各種物品的觸發(fā)。判斷完畢后,開始計(jì)算傷害-------進(jìn)入 HealthComponent 類 的 TakeDamage 事件,從而計(jì)算最終傷害。
而我們今天這篇文章的重點(diǎn),將注重于 OnHitEnemy 這個(gè)事件里,使用 Proc Coefficient 觸發(fā)系數(shù) 進(jìn)行計(jì)算觸發(fā)型道具的原理。
任何角色造成的傷害都屬于 DamageInfo 類。而這個(gè)類里有一個(gè) float 屬性 是 procCoefficient。
這個(gè)屬性影響了我們的各類擊中后觸發(fā)的效果以及傷害。
我們拿我們最熟悉的光頭 Commando 來舉例
Double Tap 雙擊 技能 擁有1 proc系數(shù),同時(shí)造成100%的傷害。
那么在你擁有5個(gè)粘性炸彈,1個(gè) MK1 導(dǎo)彈的時(shí)候。
一次技能 有 (5x5)x 1 =25% 的概率觸發(fā) 粘性炸彈,造成100% x 180%=180%的合計(jì)傷害。
一次技能 有 (10%)x 1 =10% 的概率觸發(fā) 一個(gè)導(dǎo)彈,造成100% x 300%=300%的合計(jì)傷害。
以光頭作為模板,我們來看看其他擁有不同的傷害和proc系數(shù)的技能是怎么樣的。
Auto-Nailgun 自動(dòng)釘槍 技能 擁有 0.6 proc系數(shù),同時(shí)造成70%的傷害。
那么在你擁有5個(gè)粘性炸彈,1個(gè) MK1 導(dǎo)彈的時(shí)候。
一發(fā)釘子 有 (5x5)x 0.6 =15% 的概率觸發(fā) 粘性炸彈,造成70% x 180%=126% 的合計(jì)傷害。
一發(fā)釘子 有 (10%)x 0.6 =6% 的概率觸發(fā) 一個(gè)導(dǎo)彈,造成70% x 300%=210% 的合計(jì)傷害。
發(fā)現(xiàn)了嗎?對(duì)于輸出頻率高的小車,作者 hopoo 選擇了引入 proc系數(shù) 這一機(jī)制來平衡 高攻擊頻率和其他技能的觸發(fā)平衡。
In Hopoo Games Development Thoughts #1, the developers introduced the concept of proc coefficient like so:
"MUL-T’s nailgun has a low proc coefficient per nail of 0.4 compared to most character’s 1.0, so he isn’t proccing stuff a ton faster than other characters." - Quote from NaKyle, 03/30-2019.
在 Hopoo Games 的游戲設(shè)計(jì)思想討論#1 里,開發(fā)者對(duì)Proc系數(shù)的描述是這樣的:
"MUL-T的釘槍,每根釘子的proc系數(shù)很低,只有0.4,而大多數(shù)角色都是1.0,所以他觸發(fā)道具的速度并不比其他角色快上一大堆。" - 引自NaKyle,2019年03月30日。
(備注,之后小車的proc系數(shù)從0.4改成了0.6,重振頹勢(shì),復(fù)興小車榮耀 我輩義不容辭)
作者引入Proc 系數(shù)這一概念,有效地將攻擊頻率快,但是傷害低的技能 和 攻擊頻率慢,但是傷害高的技能 ,在觸發(fā)道具的數(shù)值上作出了合理的平衡。
那么。如果一次傷害, DamegeInfo 的proc系數(shù)是0的情況呢?
如果一次傷害的proc系數(shù)為0,那么接下來所有觸發(fā)內(nèi)容都不會(huì)被響應(yīng)。
相信細(xì)心的讀者可能已經(jīng)聯(lián)想到了,有時(shí)候你的導(dǎo)彈/火球 會(huì)觸發(fā)尤克里里,冰環(huán)火環(huán)等裝備。
要知道,觸發(fā)的特效造成的傷害,也是會(huì)進(jìn)入OnHitEnemy這一事件響應(yīng)中的。而觸發(fā)道具的傷害都含有自己的proc系數(shù)。
那么為什么我們不會(huì)看見導(dǎo)彈 觸發(fā) 尤克里里,尤克里里再觸發(fā)導(dǎo)彈的死循環(huán)?
這里就要引入一個(gè)新的概念,叫做 procChainMask 我稱之為 Proc連鎖機(jī)制。
在OnhitEnemy事件中,計(jì)算完各類保證傷害正常的代碼,保證Proc系數(shù)不為0的情況之下,我們?cè)斐傻膫?huì)經(jīng)過第一層判斷。
if (damageInfo.crit){GlobalEventManager.instance.OnCrit(component, master, damageInfo.procCoefficient, damageInfo.procChainMask);}
如果角色的crit暴擊率大于100,那么這次傷害會(huì)直接判斷并標(biāo)記為為暴擊,接下來在TakeDamage事件里使得最終傷害翻倍。
Proc系數(shù)不影響暴擊,暴擊獨(dú)立于Proc系統(tǒng)。
if (!damageInfo.procChainMask.HasProc(ProcType.Missile)){this.ProcMissile(inventory.GetItemCount(RoR2Content.Items.Missile), component, master, teamIndex, damageInfo.procChainMask, victim, damageInfo);}
而接下來,就是判斷是否觸發(fā)各類道具的時(shí)刻了。
我們可以看到,如果這次傷害,也就是 damageinfo 的 procChainMask 屬性 不具有 導(dǎo)彈的 ProcType 觸發(fā)種類,那么就會(huì)進(jìn)入觸發(fā)導(dǎo)彈的判斷。
if (Util.CheckRoll(10f * damageInfo.procCoefficient, attackerMaster)){float damageCoefficient = 3f * (float)stack;float damage = Util.OnHitProcDamage(damageInfo.damage, attackerBody.damage, damageCoefficient);ProcChainMask procChainMask2 = procChainMask;procChainMask2.AddProc(ProcType.Missile);FireProjectileInfo fireProjectileInfo = new FireProjectileInfo{projectilePrefab = this.missilePrefab,position = position,rotation = Util.QuaternionSafeLookRotation(up),procChainMask = procChainMask2,target = victim,owner = gameObject,damage = damage,crit = damageInfo.crit,force = 200f,damageColorIndex = DamageColorIndex.Item};ProjectileManager.instance.FireProjectile(fireProjectileInfo);}
首先會(huì)通過隨機(jī)數(shù)判斷是否觸發(fā)導(dǎo)彈,而這個(gè)隨機(jī)數(shù)的概率判斷會(huì)經(jīng)過proc系數(shù)的一次修正。
所以小車觸發(fā)導(dǎo)彈的幾率會(huì)是10f x 0.6 = 6%。
然后計(jì)算堆疊數(shù),判斷出這次Projectile 投射物的 基礎(chǔ)傷害。
如果成功觸發(fā)導(dǎo)彈,則會(huì)發(fā)射出一個(gè)導(dǎo)彈(廢話)
而這個(gè)導(dǎo)彈被一個(gè)語句賦予了一個(gè)屬性。
procChainMask2.AddProc(ProcType.Missile);
這個(gè)導(dǎo)彈之后造成的傷害,也就是屬于這個(gè)導(dǎo)彈的damageinfo ,會(huì)被打上一個(gè)導(dǎo)彈的ProcType。
就像是你對(duì)一個(gè)人施放了魔咒,刻下了一個(gè)印記,那么這個(gè)印記就不會(huì)再被別人重復(fù)刻上。
然后回頭看看之前的觸發(fā)語句。
if (!damageInfo.procChainMask.HasProc(ProcType.Missile))
如果這次傷害 Damageinfo 里不具有 ProcType.Missile 導(dǎo)彈屬性。那么才會(huì)進(jìn)入判斷導(dǎo)彈的觸發(fā)。
也就是說,這解決了一個(gè)問題,導(dǎo)彈是不會(huì)重復(fù)觸發(fā)導(dǎo)彈的。
那么導(dǎo)彈觸發(fā)的尤克里里,會(huì)不會(huì)再觸發(fā)導(dǎo)彈?
答案是不會(huì)。
為什么?
因?yàn)镻rocChainMask 是繼承的,猶如鏈條一般。
發(fā)射出去的導(dǎo)彈具有 ProcType.Missile 的屬性,而如果這個(gè)導(dǎo)彈觸發(fā)了別的道具,那么別的道具造成的傷害 Damageinfo 里,也會(huì)有這個(gè)屬性。
也就是說,導(dǎo)彈觸發(fā)的尤克里里,造成的閃電彈射傷害,已經(jīng)被導(dǎo)彈玷污了(霧),再也沒法觸發(fā)導(dǎo)彈了。
同理,導(dǎo)彈觸發(fā)的熔巖鉆機(jī),迸射出的火球也不能再觸發(fā)導(dǎo)彈。
這就是 Proc 連鎖機(jī)制,保證游戲傷害平衡而不卡死的關(guān)鍵。
了解了以上內(nèi)容,我們就可以對(duì)癥下藥,更合理地構(gòu)建自己的build了。
附錄1
Q:為什么我拿了很多撬棍和水晶,還是沒法觸發(fā)火環(huán)?
if (damageInfo.damage / component.damage >= 4f && component.HasBuff(RoR2Content.Buffs.ElementalRingsReady))
首先必須你造成的傷害 DamageInfo,具有不為 0 的 proc系數(shù)。
其次必須你造成的總計(jì)傷害數(shù)值,是你 面板傷害 的 400%。
而撬棍和水晶的傷害加成,并不是計(jì)算在DamageInfo 里面的,而是通過TakeDamage事件里的最終傷害加成實(shí)現(xiàn)的。也就是提高終傷并不能觸碰到冰火環(huán)的閾值。
int itemCount2 = master.inventory.GetItemCount(RoR2Content.Items.NearbyDamageBonus);if (itemCount2 > 0 && vector.sqrMagnitude <= 169f){damageInfo.damageColorIndex = DamageColorIndex.Nearby;num *= 1f + (float)itemCount2 * 0.2f;......
上為凝神水晶的代碼,可以看到只是提高終傷數(shù)值 num. 而不是修改damageinfo的damage屬性.
if (damageInfo.crit){num *= 2f;}
同時(shí)這里有一個(gè)很簡單粗暴的暴擊雙倍傷害代碼,也是放在TakeDamage事件里的。
所以如果想觸發(fā)冰火環(huán),你需要讓技能的傷害x道具的傷害 超過400%。
比如如果你是光頭,想用平A M1 觸發(fā) 火環(huán),那你需要2個(gè)導(dǎo)彈,發(fā)射一發(fā)導(dǎo)彈造成600%的傷害,才能觸發(fā)。
如果你是鐵拳Loader,平A只有340%,那么你如果觸發(fā)1個(gè)導(dǎo)彈,就是1020%的傷害,絕對(duì)能觸發(fā)火環(huán)。
附錄2
常見物品的Proc系數(shù)和影響范圍 (T1 T2 T3 TB TE為 白綠紅黃裝 )
影響范圍
T1 三尖匕首:影響 觸發(fā)幾率 和 持續(xù)時(shí)間
T1 眩暈手雷:觸發(fā)幾率
T1 黏彈:觸發(fā)幾率
T2 AtG導(dǎo)彈MK.1:觸發(fā)幾率
T2 尤克里里:觸發(fā)幾率
T2 吸血種子:回復(fù)量
T2 捕食本能:攻速Buff 持續(xù)時(shí)間
T2 收割者鐮刀:回復(fù)量
T3 完美巨獸:爆炸半徑
T3 感應(yīng)肉鉤:觸發(fā)幾率
*T3 禿鷲蘇醒
火焰精英(伊芙利特的卓越):燃燒 持續(xù)時(shí)間
冰霜精英(她的噬咬擁抱):減速 持續(xù)時(shí)間
天青石精英(幽靈頭飾):減速 持續(xù)時(shí)間
孔雀石精英(恩庫哈吶的反駁):禁療Buff 持續(xù)時(shí)間
T3 粉碎的正義:減甲 持續(xù)時(shí)間
TB 熔融鉆機(jī):觸發(fā)幾率
TB 電能鉆機(jī):觸發(fā)幾率
Proc系數(shù)
非列出的幸存者技能均為1。
Acrid 絕命毒師 shift 腐蝕跳躍 酸池持續(xù)傷害 0.1
Artificer 工匠 M2 充能完畢的納米炸彈 能量卷須 0.3
Bandit 盜賊 M1 迸射 每個(gè)彈丸0.5. (5個(gè)彈丸)
Captain 船長 M1 火神霰彈槍 每個(gè)彈丸0.75(8個(gè)彈丸)
Captain 船長 R 軌道補(bǔ)給信標(biāo) 0 (?)
Commando M2 突擊隊(duì)員(指揮官) 相位爆破 0.5 (8個(gè)彈丸)
Engineer 工程師 R TR58碳化器炮塔 平A 0.6 (移動(dòng)炮臺(tái))
Huntress 女獵手 M1 疾風(fēng) 0.7 (3下)
Loader 裝彈手 R M551電塔 0.5
MUL-T 多面手 M1 自動(dòng)釘槍 0.6(12個(gè)釘子)
MUL-T 多面手 M2 爆破筒 0.3(子母彈)
Rex 雷克斯 M1 命令:注射 0.5 (3下)
Rex 雷克斯 M2 命令:鉆孔 0.5
Rex 雷克斯 shift 樹莓齊射 0.5
Rex 雷克斯 R 觸須生長 0(持續(xù)傷害)
物品,非列出的均為1。
T1 一捆煙花 0.2
T1 黏彈 0
T1 汽油 0 (和鬼火不同機(jī)制!)
T2 魯納德的手環(huán) 0
T2 賈羅的手環(huán) 0
T2 剃刀尖網(wǎng) 0.5
T2 尤克里里 0.2
T2 鬼火 1 (wiki寫的1,目前沒研究出來能不能觸發(fā),代碼里看不太明白)
T3 完美巨獸 0
T3 儀式匕首 1
T3 冰霜圣物 0.2
T3 恩庫哈吶的意見 0.2
T3 共鳴圓盤 穿刺 1 爆炸 0
T3 感應(yīng)肉鉤 0.33
T3 不穩(wěn)定的特斯拉線圈 0.3
TE 前子蓄能器 觸須 0.1
TL 異端幻象 爆炸傷害1,觸碰傷害0.1
《罪惡都市》決定版數(shù)據(jù)在Steam后臺(tái)更新
《Apex英雄》日蝕戰(zhàn)斗通行證預(yù)告 全新傳說皮膚等
《霍格沃茨之遺》登上Steam愿望單排行榜榜首
《布蘭博:山丘之王》試玩Demo上線 2023年發(fā)售
《刀劍神域》“今日正式發(fā)售” 官方發(fā)布周年紀(jì)念禮盒
《七龍珠:破界斗士》公布賽季更新路線圖
《獵天使魔女3》通過NS模擬器 在PC上以4K/60幀運(yùn)行
《刺客信條:幻景》樂曲“Into the light”欣賞
《獵天使魔女3》首日更新 改進(jìn)防走光模式調(diào)整平衡
《生化危機(jī)8》云游戲版發(fā)售預(yù)告公布 今日登陸Switch
雨中冒險(xiǎn)2風(fēng)暴探尋者復(fù)活隊(duì)友方法分享
雨中冒險(xiǎn)2風(fēng)暴探尋者虛假子嗣解鎖攻略
雨中冒險(xiǎn)2超級(jí)清道夫裝備介紹與打法攻略
雨中冒險(xiǎn)2虛空幸存者版本工程師發(fā)育思路分享
雨中冒險(xiǎn)2虛空裝備組合搭配推薦 虛空裝備強(qiáng)度分
05-10雨中冒險(xiǎn)2虛空幸存者版本小車流血流BD分享
04-08雨中冒險(xiǎn)2工程師蘑菇流配裝攻略 蘑菇流道具選擇
03-28雨中冒險(xiǎn)2工程師自我中心流配裝攻略 自我中心道
03-28雨中冒險(xiǎn)2工程師創(chuàng)世之環(huán)流配裝攻略 創(chuàng)世之環(huán)道
03-28雨中冒險(xiǎn)2工程師反甲流配裝攻略 反甲流道具選擇
03-28