逗游網(wǎng):值得大家信賴的游戲下載站!
發(fā)布時間:2021-04-08 13:31 來源:百度貼吧 作者:冥府烏鴉
雨中冒險2觸發(fā)流是游戲中的一個經(jīng)典流派,游戲中各種類型的裝備如何觸發(fā)?下面一起來看看雨中冒險2Proc系數(shù)及機制詳解
首先,雨中冒險2(下稱ROR2)的傷害機制是這樣的。
玩家使用技能 Skill,通過 投射物/球體/其他方式 造成了各種類型的傷害,代碼里賦予一個 DamageInfo 的 類 用于記錄本次技能造成的傷害。
DamageInfo 經(jīng)過 GlobalEventMangaer 類的 OnHitEnemy 事件,判斷技能擊中敵人后產(chǎn)生的各種效果,判斷各種物品的觸發(fā)。判斷完畢后,開始計算傷害-------進入 HealthComponent 類 的 TakeDamage 事件,從而計算最終傷害。
而我們今天這篇文章的重點,將注重于 OnHitEnemy 這個事件里,使用 Proc Coefficient 觸發(fā)系數(shù) 進行計算觸發(fā)型道具的原理。
任何角色造成的傷害都屬于 DamageInfo 類。而這個類里有一個 float 屬性 是 procCoefficient。
這個屬性影響了我們的各類擊中后觸發(fā)的效果以及傷害。
我們拿我們最熟悉的光頭 Commando 來舉例
Double Tap 雙擊 技能 擁有1 proc系數(shù),同時造成100%的傷害。
那么在你擁有5個粘性炸彈,1個 MK1 導彈的時候。
一次技能 有 (5x5)x 1 =25% 的概率觸發(fā) 粘性炸彈,造成100% x 180%=180%的合計傷害。
一次技能 有 (10%)x 1 =10% 的概率觸發(fā) 一個導彈,造成100% x 300%=300%的合計傷害。
以光頭作為模板,我們來看看其他擁有不同的傷害和proc系數(shù)的技能是怎么樣的。
Auto-Nailgun 自動釘槍 技能 擁有 0.6 proc系數(shù),同時造成70%的傷害。
那么在你擁有5個粘性炸彈,1個 MK1 導彈的時候。
一發(fā)釘子 有 (5x5)x 0.6 =15% 的概率觸發(fā) 粘性炸彈,造成70% x 180%=126% 的合計傷害。
一發(fā)釘子 有 (10%)x 0.6 =6% 的概率觸發(fā) 一個導彈,造成70% x 300%=210% 的合計傷害。
發(fā)現(xiàn)了嗎?對于輸出頻率高的小車,作者 hopoo 選擇了引入 proc系數(shù) 這一機制來平衡 高攻擊頻率和其他技能的觸發(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 的游戲設計思想討論#1 里,開發(fā)者對Proc系數(shù)的描述是這樣的:
"MUL-T的釘槍,每根釘子的proc系數(shù)很低,只有0.4,而大多數(shù)角色都是1.0,所以他觸發(fā)道具的速度并不比其他角色快上一大堆。" - 引自NaKyle,2019年03月30日。
(備注,之后小車的proc系數(shù)從0.4改成了0.6,重振頹勢,復興小車榮耀 我輩義不容辭)
作者引入Proc 系數(shù)這一概念,有效地將攻擊頻率快,但是傷害低的技能 和 攻擊頻率慢,但是傷害高的技能 ,在觸發(fā)道具的數(shù)值上作出了合理的平衡。
那么。如果一次傷害, DamegeInfo 的proc系數(shù)是0的情況呢?
如果一次傷害的proc系數(shù)為0,那么接下來所有觸發(fā)內(nèi)容都不會被響應。
相信細心的讀者可能已經(jīng)聯(lián)想到了,有時候你的導彈/火球 會觸發(fā)尤克里里,冰環(huán)火環(huán)等裝備。
要知道,觸發(fā)的特效造成的傷害,也是會進入OnHitEnemy這一事件響應中的。而觸發(fā)道具的傷害都含有自己的proc系數(shù)。
那么為什么我們不會看見導彈 觸發(fā) 尤克里里,尤克里里再觸發(fā)導彈的死循環(huán)?
這里就要引入一個新的概念,叫做 procChainMask 我稱之為 Proc連鎖機制。
在OnhitEnemy事件中,計算完各類保證傷害正常的代碼,保證Proc系數(shù)不為0的情況之下,我們造成的傷害會經(jīng)過第一層判斷。
if (damageInfo.crit){GlobalEventManager.instance.OnCrit(component, master, damageInfo.procCoefficient, damageInfo.procChainMask);}
如果角色的crit暴擊率大于100,那么這次傷害會直接判斷并標記為為暴擊,接下來在TakeDamage事件里使得最終傷害翻倍。
Proc系數(shù)不影響暴擊,暴擊獨立于Proc系統(tǒng)。
if (!damageInfo.procChainMask.HasProc(ProcType.Missile)){this.ProcMissile(inventory.GetItemCount(RoR2Content.Items.Missile), component, master, teamIndex, damageInfo.procChainMask, victim, damageInfo);}
而接下來,就是判斷是否觸發(fā)各類道具的時刻了。
我們可以看到,如果這次傷害,也就是 damageinfo 的 procChainMask 屬性 不具有 導彈的 ProcType 觸發(fā)種類,那么就會進入觸發(fā)導彈的判斷。
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);}
首先會通過隨機數(shù)判斷是否觸發(fā)導彈,而這個隨機數(shù)的概率判斷會經(jīng)過proc系數(shù)的一次修正。
所以小車觸發(fā)導彈的幾率會是10f x 0.6 = 6%。
然后計算堆疊數(shù),判斷出這次Projectile 投射物的 基礎傷害。
如果成功觸發(fā)導彈,則會發(fā)射出一個導彈(廢話)
而這個導彈被一個語句賦予了一個屬性。
procChainMask2.AddProc(ProcType.Missile);
這個導彈之后造成的傷害,也就是屬于這個導彈的damageinfo ,會被打上一個導彈的ProcType。
就像是你對一個人施放了魔咒,刻下了一個印記,那么這個印記就不會再被別人重復刻上。
然后回頭看看之前的觸發(fā)語句。
if (!damageInfo.procChainMask.HasProc(ProcType.Missile))
如果這次傷害 Damageinfo 里不具有 ProcType.Missile 導彈屬性。那么才會進入判斷導彈的觸發(fā)。
也就是說,這解決了一個問題,導彈是不會重復觸發(fā)導彈的。
那么導彈觸發(fā)的尤克里里,會不會再觸發(fā)導彈?
答案是不會。
為什么?
因為ProcChainMask 是繼承的,猶如鏈條一般。
發(fā)射出去的導彈具有 ProcType.Missile 的屬性,而如果這個導彈觸發(fā)了別的道具,那么別的道具造成的傷害 Damageinfo 里,也會有這個屬性。
也就是說,導彈觸發(fā)的尤克里里,造成的閃電彈射傷害,已經(jīng)被導彈玷污了(霧),再也沒法觸發(fā)導彈了。
同理,導彈觸發(fā)的熔巖鉆機,迸射出的火球也不能再觸發(fā)導彈。
這就是 Proc 連鎖機制,保證游戲傷害平衡而不卡死的關(guān)鍵。
了解了以上內(nèi)容,我們就可以對癥下藥,更合理地構(gòu)建自己的build了。
附錄1
Q:為什么我拿了很多撬棍和水晶,還是沒法觸發(fā)火環(huán)?
if (damageInfo.damage / component.damage >= 4f && component.HasBuff(RoR2Content.Buffs.ElementalRingsReady))
首先必須你造成的傷害 DamageInfo,具有不為 0 的 proc系數(shù)。
其次必須你造成的總計傷害數(shù)值,是你 面板傷害 的 400%。
而撬棍和水晶的傷害加成,并不是計算在DamageInfo 里面的,而是通過TakeDamage事件里的最終傷害加成實現(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;}
同時這里有一個很簡單粗暴的暴擊雙倍傷害代碼,也是放在TakeDamage事件里的。
所以如果想觸發(fā)冰火環(huán),你需要讓技能的傷害x道具的傷害 超過400%。
比如如果你是光頭,想用平A M1 觸發(fā) 火環(huán),那你需要2個導彈,發(fā)射一發(fā)導彈造成600%的傷害,才能觸發(fā)。
如果你是鐵拳Loader,平A只有340%,那么你如果觸發(fā)1個導彈,就是1020%的傷害,絕對能觸發(fā)火環(huán)。
附錄2
常見物品的Proc系數(shù)和影響范圍 (T1 T2 T3 TB TE為 白綠紅黃裝 )
影響范圍
T1 三尖匕首:影響 觸發(fā)幾率 和 持續(xù)時間
T1 眩暈手雷:觸發(fā)幾率
T1 黏彈:觸發(fā)幾率
T2 AtG導彈MK.1:觸發(fā)幾率
T2 尤克里里:觸發(fā)幾率
T2 吸血種子:回復量
T2 捕食本能:攻速Buff 持續(xù)時間
T2 收割者鐮刀:回復量
T3 完美巨獸:爆炸半徑
T3 感應肉鉤:觸發(fā)幾率
*T3 禿鷲蘇醒
火焰精英(伊芙利特的卓越):燃燒 持續(xù)時間
冰霜精英(她的噬咬擁抱):減速 持續(xù)時間
天青石精英(幽靈頭飾):減速 持續(xù)時間
孔雀石精英(恩庫哈吶的反駁):禁療Buff 持續(xù)時間
T3 粉碎的正義:減甲 持續(xù)時間
TB 熔融鉆機:觸發(fā)幾率
TB 電能鉆機:觸發(fā)幾率
Proc系數(shù)
非列出的幸存者技能均為1。
Acrid 絕命毒師 shift 腐蝕跳躍 酸池持續(xù)傷害 0.1
Artificer 工匠 M2 充能完畢的納米炸彈 能量卷須 0.3
Bandit 盜賊 M1 迸射 每個彈丸0.5. (5個彈丸)
Captain 船長 M1 火神霰彈槍 每個彈丸0.75(8個彈丸)
Captain 船長 R 軌道補給信標 0 (?)
Commando M2 突擊隊員(指揮官) 相位爆破 0.5 (8個彈丸)
Engineer 工程師 R TR58碳化器炮塔 平A 0.6 (移動炮臺)
Huntress 女獵手 M1 疾風 0.7 (3下)
Loader 裝彈手 R M551電塔 0.5
MUL-T 多面手 M1 自動釘槍 0.6(12個釘子)
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 (和鬼火不同機制!)
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 感應肉鉤 0.33
T3 不穩(wěn)定的特斯拉線圈 0.3
TE 前子蓄能器 觸須 0.1
TL 異端幻象 爆炸傷害1,觸碰傷害0.1
上一篇: 《風卷殘云》制作人: 做中國自己的功夫
下一篇: 永劫無間操作指南 鍵鼠及手柄鍵位詳解