【教程】莫娜占卜鋪 - DSL代碼 (圣遺物自定義配裝)
問(wèn)題:Mona的計(jì)算器使用其內(nèi)置算法,如“期望傷害”,“最高傷害”的單技能計(jì)算。無(wú)法計(jì)算某些流派和手法的傷害(比如烈綻放煙緋,自定義蒸發(fā)和綻放的比例)
解決:自己寫DSL代碼
參考:綜合了以下3篇帖子的 + Mona的github文檔
分享用于莫娜占卜鋪的六命/低命/蒸發(fā)夜蘭DSL代碼
如何為了深淵配置自己的圣遺物?以莫娜占卜鋪為例
圣遺物配裝工具莫娜占卜鋪從入門到精
使用方式
DSL代碼有兩種使用方式:
在Mona的【計(jì)算-計(jì)算器】中進(jìn)行配裝
查具體角色的數(shù)據(jù)
在【MONA-DSL】中列出所有要考慮的
dmg
result = 所有dmg的加權(quán)和
代碼框底下的藍(lán)條
[與最大計(jì)算傷害的百分比]/[該組圣遺物計(jì)算傷害]
在Mona的【附加功能-Playground】中計(jì)算傷害
查具體角色的數(shù)據(jù)
列出所有要考慮的
dmg
print()
打印出來(lái)
普通&增幅傷害
普通元素/物理傷害、融化/蒸發(fā)傷害等
注意:普通傷害有2級(jí)屬性,都要寫
dmg [傷害名] = [角色名].[技能名]([對(duì)應(yīng)狀態(tài)])
1級(jí)屬性:
[傷害名].normal
?普通[傷害名].melt
?融化[傷害名].vaporize
?蒸發(fā)[傷害名].aggravate
?雷激化[傷害名].spread
?草激化
2級(jí)屬性:
e
期望傷害c
暴擊傷害n
非暴擊傷害
例:神里,普攻第1段,發(fā)生在沖刺之后,融化,期望傷害
dmg a = KamisatoAyaka.Normal1({ after_dash: true })
print(a.melt.e)
劇變反應(yīng)
聚變反應(yīng):擴(kuò)散、感電、超載、超導(dǎo)、碎冰
dmg = [角色名].transformative
屬性:
swirl_cryo
冰擴(kuò)散swirl_pyro
火擴(kuò)散swirl_electro
雷擴(kuò)散swirl_hydro
水?dāng)U散overload
超載electro_charged
感電super_conduct
超導(dǎo)shatter
碎冰
屬性聲明
直接取得角色的實(shí)時(shí)面板屬性,例如充能、元素精通等(角色面板在內(nèi)部采用DAG+懶更新的方式)
prop [變量名] = [角色名].[屬性名]
屬性:
recharge
充能atk
攻擊hp
生命def
防御em
精通crit0
暴擊率(不含特定技能和特定元素傷害的加成)cd0
暴擊傷害(不含特定技能和特定元素傷害的加成)heal
治療加成
注意:
buff的覆蓋沒法調(diào)整,都是按全覆蓋來(lái)算
獲取屬性我能想到的一種用法是用來(lái)轉(zhuǎn)化成目標(biāo)函數(shù)的一部分,比如說(shuō)鐘離我希望如果生命夠高,那傷害低一些就低一些,我可以接受用2傷害換1血量的話,那就可以把生命值x2加到目標(biāo)函數(shù)里,第二種用法就是覆蓋率,比如說(shuō)我知道某幾次攻擊是在某個(gè)攻擊力buff消失后,那么我可以給那幾次攻擊乘上“減去buff的面板攻擊力/面板攻擊力”這個(gè)系數(shù),暴擊爆傷都有類似的轉(zhuǎn)換方法,但是增傷不行,因?yàn)樵鰝赿sl里沒法獲取
內(nèi)置函數(shù)
print()
type()
max()
?min()
查詢具體角色
具體角色的數(shù)據(jù):mona_core/src/character/characters
元素:anemo
風(fēng)、cryo
冰
搜索CharacterName
—— CharacterName::RaidenShogun
搜索skillmap
—— 技能名,和網(wǎng)站上的技能名是對(duì)應(yīng)的(通用技能的中文名不會(huì)寫出來(lái))
搜索ItemConfig
—— 特殊的狀態(tài),比如煙緋的灼灼、雷神的環(huán)
例:雷神大招,在其e技能下,愿力層數(shù)57
dmg q = RaidenShogun.Q1({under_e:true,resolve_stack:57})
例子
夜蘭
// 列出所有傷害
dmg Q1=Yelan.Q1 //Q開啟傷害
dmg Q2=Yelan.Q2 //Q協(xié)同傷害(每跳)
dmg E=Yelan.E1 //E傷害
dmg C6=Yelan.Charged3C6 //C6破局矢?jìng)?/code>
dmg Z=Yelan.Charged3 //破局矢?jìng)?/code>
// result=所有傷害的加權(quán)和
result=Q1.normal.e +
Q1.normal.e * 0.9014 * 7 + //利用Q開啟傷害的90.14%倍模擬C2的14%生命倍率水箭,需將Q設(shè)置為13級(jí)才是此比例,10級(jí)比例為1.0646
Q2.normal.e * 3 * 16 +
E.normal.e * 2 +
C6.normal.e * 5 +
Z.normal.e *2 //兩次手動(dòng)重?fù)舻钠凭质?,依?jù)自己的手法不同可以去掉,大約占總倍率的4%
神里
// 1 設(shè)置Q最大
dmg Q = KamisatoAyaka.Q1({after_dash:true}) //沖刺天賦觸發(fā)后
result = Q.normal.e
// 2 大招期望輸出融化和普通各占一半,且傷害發(fā)生在沖刺之后(天賦18%冰傷加成)
dmg q = KamisatoAyaka.Q1({ after_dash: true })
normal = q.normal.e
melt = q.melt.e
result = normal + melt
甘雨
名字:Ganyu
技能:
pub enum GanyuDamageEnum {
Normal1,
Normal2,
Normal3,
Normal4,
Normal5,
Normal6,
Charged1, ? ?// 瞄準(zhǔn)
Charged2, ? ?// 一段蓄力
Charged3, ? ?// 霜華失 - 命中
Charged4, ? ?// 霜華失 - 綻放
Plunging1,
Plunging2,
Plunging3,
E1,
Q1
}
特殊狀態(tài):
talent1_rate
?唯此一心talent2_rate
?天地交泰
純重?fù)?/p>
dmg b = Ganyu.Charged3
result = b.normal.e
煙緋
名字:Yanfei
技能:
pub enum YanfeiDamageEnum {
Normal1, ? ? ? // 一段傷害
Normal2, ? ? ? // 二段傷害
Normal3, ? ? ? // 三段傷害
Charged1, ? ? ?// 重?fù)?無(wú)印
Charged2, ? ? ?// 重?fù)?1層
Charged3, ? ? ?// 重?fù)?2層
Charged4, ? ? ?// 重?fù)?3層
Charged5, ? ? ?// 重?fù)?4層
DmgTalent2, ? ?// 天賦2-額外
Plunging1, ? ? // 下墜期間
Plunging2, ? ? // 低空墜地
Plunging3, ? ? // 高空墜地
E1, ? ? ? ? ? ?// E技能 - 丹書立約
Q1, ? ? ? ? ? ?// Q技能 - 憑此結(jié)契
}
特殊狀態(tài):
after_q
?灼灼