很多人玩 Dota 的時(shí)候總說彭谁,臉太黑了,劍圣都不暴擊允扇,暴擊的話對面英雄就帶走了缠局,但是暴擊真的看臉嗎?其實(shí)不然蔼两,當(dāng)你深刻理解偽隨機(jī)算法——Dota 里對各種概率型攻擊內(nèi)置的算法(Pseudo Random Distribution甩鳄,簡稱 PRD 逞度,不是需求文檔!)额划,我想你還是可以對暴擊進(jìn)行一些人為干預(yù)的。這就是你 dota 水平邁向另一個(gè)境界的時(shí)候了档泽。
偽隨機(jī)跟真隨機(jī)有什么區(qū)別俊戳?來舉個(gè)例子吧,假如劍圣的暴擊幾率為 20%馆匿,那么真隨機(jī)的情況下抑胎,系統(tǒng)隨機(jī)在1~100里面生產(chǎn)一個(gè)整數(shù),如果生成的整數(shù)小于等于 20渐北,那這次攻擊就判定為暴擊阿逃。這個(gè)時(shí)候就有可能出現(xiàn)連續(xù) 5 次攻擊全是跳劈,臉黑得選手可能連續(xù) 10 次攻擊也沒有一次暴擊赃蛛。而極限的情況就是恃锉,你的 BM 或者 PA 可能一整場都在暴擊(臥槽,你丫開掛呢)呕臂,或者你打完一整場都沒暴擊過一次(簡直豬隊(duì)友啊不能忍)破托。而偽隨機(jī)呢,就是用來解決「減少連續(xù)性暴擊歧蒋,減少連續(xù)性沒暴擊」這個(gè)問題土砂。
還是拿劍圣 20% 暴擊概率舉例,這時(shí)候劍圣第一次攻擊暴擊的概率是 5.57%谜洽,而下次的攻擊就會(huì)是 11.14%萝映,如果第二次還沒暴擊,那么接下來的第三次攻擊的暴擊概率就提升到了 16.71%阐虚,每次都加 5.57% 序臂,直到第 17 次攻擊就會(huì)是 100.26% 的保證性暴擊( (⊙o⊙)…,好像還真有臉黑的情況存在)敌呈。暴擊之后回到之前的 5.57%贸宏,這樣在多次的攻擊后會(huì)形成平均 20% 暴擊的幾率造寝。
使用 PRD 機(jī)制的事件
進(jìn)攻類,暴擊吭练、重?fù)艚肓㈦p刀、漩渦
防御類鲫咽,山嶺的皮膚签赃,所有盾類
不受 PRD 機(jī)制控制的物品有
碎骨錘,深淵之刀的暈分尸,蝴蝶/天堂之戟的閃锦聊。
概率公式
p(N) = C * N
P(N) 表示在第 N 次攻擊時(shí)該動(dòng)作發(fā)生的概率(下面還是以暴擊舉例吧),N 表示第 N次修正概率后的攻擊次數(shù)(最小值為1)箩绍,C 表示暴擊發(fā)生的初始概率以及每次攻擊之后概率的增量孔庭,是個(gè)簡單地線性關(guān)系。當(dāng) N 足夠多得時(shí)候材蛛,P(N)總會(huì)趨向于1圆到。在以下的文章里,技能描述上的概率會(huì)以 P(E) 來代替卑吭,表示期望值芽淡。
下面有兩個(gè)表來描述常數(shù) C 。P(E) 表示期望值豆赏,C 是常數(shù)挣菲。MAX N 表示理論上疊加到100%暴擊之前的最后一次攻擊計(jì)數(shù),舉個(gè)例子掷邦,如下表白胀,比如的暴擊幾率是45%,C 是0.24931耙饰,那么N就是4纹笼,因?yàn)橹暗倪B續(xù)4次攻擊都可以是普通攻擊(第4次攻擊的),但第五次的時(shí)候苟跪,必定暴擊廷痘。
當(dāng)然以上得理論值不是暴雪實(shí)際中應(yīng)用的數(shù)值,實(shí)際應(yīng)用是如下表
在上面表中可以發(fā)現(xiàn)件已,當(dāng)暴擊幾率到一定值得時(shí)候笋额,實(shí)際暴擊幾率 P(actual) 就低于P(E) ,這后面就會(huì)涉及到暴擊收益遞減的問題,這里就不深入討論了篷扩,dota里面的暴擊也不是那么好堆兄猩,如果 WOW 的話倒是可以討論一下。
再把兩個(gè)圖放一起對比,好好感受一下枢冤。常數(shù)C在在30%的時(shí)候?qū)嶋H值跟理論值還是很接近的鸠姨,但是超過這個(gè)值以后,誤差就開始大了淹真。
那么引起這個(gè)概率偏差的原因是什么呢讶迁?簡單歸納是由以下兩點(diǎn)因素造成
1.常數(shù) C 的有效位數(shù)。我們可以從上面的表格中看到核蘸,在實(shí)際運(yùn)算中我們沒有采用無限小數(shù)位而是取了一個(gè)近似的5位有效數(shù)字巍糯,造成了之后的誤差。如果是采取動(dòng)態(tài)實(shí)時(shí)算法來獲取 C 的話客扎,這會(huì)使每一次攻擊動(dòng)作的判定都會(huì)耗費(fèi)非常多的 CPU 資源祟峦,因此選取了一種靜態(tài)的 look up table ,以節(jié)省游戲資源徙鱼。
2.所有的數(shù)值都是為天梯地圖準(zhǔn)備的宅楞,而不是普通用戶自己編輯的地圖。我們可以發(fā)現(xiàn)天梯地圖里面技能概率值最大的特殊攻擊是牛頭人的粉碎疆偿,觸發(fā)幾率為 25%咱筛,再回頭看看,在 30% 以下杆故,實(shí)際技能觸發(fā)概率和期望概率是基本一致的,30% 以后的 C值 都是在用之前的數(shù)據(jù)擬合的溉愁。所以大幾率觸發(fā)的事件目前來看并不重要处铛,而且暴雪粑粑也不關(guān)心這些情況。
那么知道以上算法后拐揭,對我們DOTA有什么指導(dǎo)意義呢撤蟆?來個(gè)下面的場景,上路二塔附近團(tuán)戰(zhàn)馬上開打堂污,你操控劍圣先去打普通怪物家肯,連續(xù)兩次(如果貪心的話你可以湊3次或者更多,看你感覺...)攻擊不暴擊的話盟猖,你就可以上去開戰(zhàn)了讨衣,這樣第一刀上去必然暴擊,這肯定會(huì)提高你這次團(tuán)戰(zhàn)的 DPS式镐。
一些注意事項(xiàng)反镇,很重要
雖然知道暴雪引擎內(nèi)置了 PRD 算法,但很多機(jī)制還是得通過游戲觀察推理得到娘汞,因?yàn)椴⒉恢辣┭┑降资侨绾芜\(yùn)用 PRD 算法歹茶。比如你在攻擊建筑物的時(shí)候攻擊計(jì)數(shù)不會(huì)增加( 一段時(shí)間拆塔之后,回頭給一刀敵方英雄,不會(huì)100%暴擊 )惊豺。你的攻擊計(jì)數(shù)也不會(huì)因?yàn)閷Ψ接⑿鄣拈W避(比如蝴蝶燎孟、PA 自帶的閃避技能)、高地造成的丟失而增加尸昧,但其中有一個(gè)例外缤弦,那就是虛空的「回到過去」,這個(gè)技能的機(jī)制是一種魔法效果彻磁,因此你的攻擊被虛空「回到過去」時(shí)碍沐,你的攻擊計(jì)數(shù)是會(huì)疊加的。
對于法球效果衷蜓,在內(nèi)置冷卻期間攻擊計(jì)數(shù)不會(huì)停止累提。對于一個(gè)英雄同時(shí)擁有多項(xiàng) PRD 機(jī)制的技能,攻擊計(jì)數(shù)是獨(dú)立的磁浇。而一旦其中某個(gè)技能事件觸發(fā)斋陪,所有的攻擊計(jì)數(shù)都會(huì)歸0,重新開始計(jì)數(shù)置吓。當(dāng)然每個(gè)幻想都有自己獨(dú)立的攻擊計(jì)數(shù)无虚。