逗游網(wǎng):值得大家信賴的游戲下載站!

微信:doyo_game
關(guān)注逗游
單機(jī)首頁 游戲庫 排行榜 資訊 攻略 專題 合集 工具補(bǔ)丁 手機(jī)游戲 正版商城
所在位置:攻略中心 > 圖文攻略 > 雨中冒險(xiǎn)2 > 正文

雨中冒險(xiǎn)2Proc系數(shù)及機(jī)制詳解 觸發(fā)流內(nèi)核剖析

發(fā)布時(shí)間:2021-04-08 13:31 來源:百度貼吧  作者:冥府烏鴉

 

雨中冒險(xiǎn)2觸發(fā)流是游戲中的一個(gè)經(jīng)典流派,游戲中各種類型的裝備如何觸發(fā)?下面一起來看看雨中冒險(xiǎn)2Proc系數(shù)及機(jī)制詳解

雨中冒險(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

進(jìn)入《雨中冒險(xiǎn)2》專區(qū)
查看更多《雨中冒險(xiǎn)2》攻略
標(biāo)簽: 
http://m.4uh5.cn/article/437750復(fù)制本文地址
閱讀本文后,您的心情是:(選擇后可查看結(jié)果)
 
惡心
憤怒
強(qiáng)贊
感動(dòng)
路過
無聊
雷囧
關(guān)注
今日關(guān)注游戲
游戲?qū)n}
IGN 9分以上作品 愿者上鉤釣魚的那點(diǎn)趣事 深冬之寒,來一起看看游戲中精美的雪景吧