2021年9月29日 星期三

【教程】莫娜占卜铺 - 从零开始的DSL代码编写(圣遗物自定义配装)_世界信息

时间:2023-03-07 19:54:16来源 : 哔哩哔哩

由于B站不支持Markdown和富文本,想得到最佳浏览体验请联系本人取得原文档


【资料图】

问题:Mona的计算器使用其内置算法,如“期望伤害”,“最高伤害”的单技能计算。无法计算某些流派和手法的伤害(比如烈绽放烟绯,自定义蒸发和绽放的比例)

解决:自己动手写DSL代码

参考:综合了以下3篇帖子 + Mona的github文档

分享用于莫娜占卜铺的六命/低命/蒸发夜兰DSL代码

如何为了深渊配置自己的圣遗物?以莫娜占卜铺为例

圣遗物配装工具莫娜占卜铺从入门到精

https://github.com/wormtql/genshin_artifact

使用方式

DSL代码有两种使用方式:

在Mona的【计算-计算器】中进行配装

查具体角色的数据

在【MONA-DSL】中列出所有要考虑的dmg

result = 所有dmg的加权和

代码框底下的蓝条[与最大计算伤害的百分比]/[该组圣遗物计算伤害]

在Mona的【附加功能-Playground】中计算伤害

查具体角色的数据

列出所有要考虑的dmg

print()打印出来

普通&增幅伤害

普通元素/物理伤害、融化/蒸发伤害等

注意:普通伤害有2级属性,都要写

dmg [伤害名] = [角色名].[技能名]([对应状态])

1级属性:

[伤害名].normal普通

[伤害名].melt融化

[伤害名].vaporize蒸发

[伤害名].aggravate雷激化

[伤害名].spread蔓激化

.bloom绽放

hyperbloom超绽放

burgeon烈绽放

2级属性:

e期望伤害

c暴击伤害

n非暴击伤害

例:神里,普攻第1段,发生在冲刺之后,融化,期望伤害

dmg a = KamisatoAyaka.Normal1({ after_dash: true })

print(a.melt.e)

剧变反应

聚变反应:扩散、感电、超载、超导、碎冰

路径:mona_core/src/damage/transformative_damage.rs

dmg = [角色名].transformative

属性:

swirl_cryo冰扩散

swirl_pyro火扩散

swirl_electro雷扩散

swirl_hydro水扩散

overload超载

electro_charged感电

super_conduct超导

shatter碎冰

crystallize结晶盾

属性声明

直接取得角色的实时面板属性,例如充能、元素精通等(角色面板在内部采用DAG+懒更新的方式)

prop [变量名] = [角色名].[属性名]

属性:

recharge充能

atk攻击

hp生命

def防御

em精通

crit0暴击率(不含特定技能和特定元素伤害的加成)

cd0暴击伤害(不含特定技能和特定元素伤害的加成)

heal治疗加成

注意:

buff的覆盖没法调整,都是按全覆盖来算

获取属性我能想到的一种用法是用来转化成目标函数的一部分,比如说钟离我希望如果生命够高,那伤害低一些就低一些,我可以接受用2伤害换1血量的话,那就可以把生命值x2加到目标函数里,第二种用法就是覆盖率,比如说我知道某几次攻击是在某个攻击力buff消失后,那么我可以给那几次攻击乘上“减去buff的面板攻击力/面板攻击力”这个系数,暴击爆伤都有类似的转换方法,但是增伤不行,因为增伤在dsl里没法获取

内置函数

print()

type()

max()min()

查询具体角色

具体角色的数据:mona_core/src/character/characters

元素:anemo风、cryo冰、Pyro火、Hydro水、Electro雷、Dendro

搜索CharacterName—— CharacterName::RaidenShogun

搜索skillmap—— 技能名,和网站上的技能名是对应的(通用技能的中文名不会写出来)

搜索ItemConfig—— 特殊的状态,比如烟绯的灼灼、雷神的环

例:雷神大招,在其e技能下,愿力层数57

dmg q = RaidenShogun.Q1({under_e:true,resolve_stack:57})

例子

夜兰

// 列出所有伤害 

dmg Q1=Yelan.Q1 //Q开启伤害 

dmg Q2=Yelan.Q2 //Q协同伤害(每跳) 

dmg E=Yelan.E1 //E伤害 

dmg C6=Yelan.Charged3C6 //C6破局矢伤害 

dmg Z=Yelan.Charged3 //破局矢伤害 

// result=所有伤害的加权和 

result=Q1.normal.e +Q1.normal.e * 0.9014 * 7 + //利用Q开启伤害的90.14%倍模拟C2的14%生命倍率水箭,需将Q设置为13级才是此比例,10级比例为1.0646 

Q2.normal.e * 3 * 16 

+E.normal.e * 2 +C6.normal.e * 5 +Z.normal.e *2 //两次手动重击的破局矢,依据自己的手法不同可以去掉,大约占总倍率的4%

神里

// 1 设置Q最大 

dmg Q = KamisatoAyaka.Q1({after_dash:true}) //冲刺天赋触发后 

result = Q.normal.e

// 2 大招期望输出融化和普通各占一半,且伤害发生在冲刺之后(天赋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,    // 瞄准    Charged2,    // 一段蓄力    Charged3,    // 霜华失 - 命中    Charged4,    // 霜华失 - 绽放    Plunging1,    Plunging2,    Plunging3,    E1,    Q1}

特殊状态:

talent1_rate唯此一心

talent2_rate天地交泰

纯重击

dmg b = Ganyu.Charged3result = b.normal.e

烟绯

名字:Yanfei

技能:

pub enum YanfeiDamageEnum {    Normal1,       // 一段伤害    Normal2,       // 二段伤害    Normal3,       // 三段伤害    Charged1,      // 重击-无印    Charged2,      // 重击-1层    Charged3,      // 重击-2层    Charged4,      // 重击-3层    Charged5,      // 重击-4层    DmgTalent2,    // 天赋2-额外    Plunging1,     // 下坠期间    Plunging2,     // 低空坠地    Plunging3,     // 高空坠地    E1,            // E技能 - 丹书立约    Q1,            // Q技能 - 凭此结契}

特殊状态:

after_q灼灼

关键词:

(责任编辑:黄俊飞)

推荐内容

Back to Top