From 6838a0b903e132e55ae82af65daaed35903e160c Mon Sep 17 00:00:00 2001 From: CMHopeSunshine <277073121@qq.com> Date: Sat, 17 Sep 2022 15:07:31 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E4=BC=A4=E5=AE=B3=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=A2=9E=E5=8A=A0=E9=83=A8=E5=88=86=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E6=BF=80=E5=8C=96=E5=8F=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LittlePaimon/config/data/alias.json | 12 +- LittlePaimon/config/data/roles_data.json | 417 +++++++++++++++--- LittlePaimon/config/data/score.json | 25 +- LittlePaimon/config/data/upheaval.json | 178 ++++---- .../plugins/Paimon_Info/damage_cal.py | 53 ++- .../plugins/Paimon_Info/damage_model.py | 135 +++++- 6 files changed, 628 insertions(+), 192 deletions(-) diff --git a/LittlePaimon/config/data/alias.json b/LittlePaimon/config/data/alias.json index ee231ca..2e7e1bf 100644 --- a/LittlePaimon/config/data/alias.json +++ b/LittlePaimon/config/data/alias.json @@ -47,14 +47,22 @@ "10000058": ["八重神子", "神子", "八重", "狐狸", "屑狐狸"], "10000062": ["埃洛伊"], "10000063": ["申鹤", "小姨", "小姨妈"], - "10000064": ["云堇", "云先生"], + "10000064": ["云堇", "云先生", "云瑾"], "10000066": ["神里绫人", "0人", "大舅子", "小舅子", "绫人", "神里哥", "凌人", "神里凌人"], "10000060": ["夜兰", "夜阑", "叶兰"], "10000065": ["久岐忍", "忍者", "阿卡丽", "97忍", "97人"], "10000059": ["鹿野院平藏", "近战法师", "平藏", "小鹿"], "10000067": ["柯莱", "科莱"], "10000068": ["多莉", "克隆羊", "商人"], - "10000069": ["提纳里", "小驴", "小提"] + "10000069": ["提纳里", "小驴", "小提"], + "10000098": ["妮露", "舞女"], + "10000099": ["赛诺", "风纪官"], + "10000100": ["坎蒂丝", "潘森"], + "10000101": ["纳西妲", "草神", "艹神", "小草王", "小吉祥草王", "草萝莉", "艹萝莉"], + "10000102": ["散兵", "伞兵", "国崩", "卢本伟", "大炮", "sb"], + "10000103": ["迪希雅"], + "10000104": ["艾尔海森", "苏"], + "10000105": ["白术"] }, "武器": { "磐岩结绿": [ diff --git a/LittlePaimon/config/data/roles_data.json b/LittlePaimon/config/data/roles_data.json index 4d20165..17405d5 100644 --- a/LittlePaimon/config/data/roles_data.json +++ b/LittlePaimon/config/data/roles_data.json @@ -23418,77 +23418,386 @@ "element": "雷", "weapon": "双手剑", "date": "2022年09月09日", - "tag": "治疗、能量回复、炼金返还", + "tag": "治疗、能量回复、炼金返还、自身附魔", "birthday": "12月21日", "mission": "待补充", "introduce": "神出鬼没的旅行百货商人,最喜欢亮闪闪的摩拉。", "destiny_name": "神灯座", "destiny": { - "追加投资": "", - "特许经营": "", - "百巧千奇": "", - "酌盈剂虚": "", - "物超所值": "", - "漫掷万镒": "" + "追加投资": "断除烦恼炮命中后产生的售后服务弹增加1枚。", + "特许经营": "在战斗状态中,当灯中幽精为相连的角色进行治疗时,将从该角色处发射一枚镇灵炮,造成相当于多莉攻击力50%的伤害。", + "百巧千奇": "卡萨扎莱宫的无微不至的技能等级提高3级。", + "酌盈剂虚": "与灯中幽精相连的角色,依据当前的生命值与元素能量,获得以下提升:", + "物超所值": "镇灵之灯·烦恼解决炮的技能等级提高3级。", + "漫掷万镒": "多莉施放镇灵之灯·烦恼解决炮后的3秒内,将获得以下效果:" }, "attribute": { "hp": { - "1": "", - "20": "", - "40": "", - "50": "", - "60": "", - "70": "", - "80": "", - "90": "" + "1": "1039", + "20": "2670", + "40": "5163", + "50": "6573", + "60": "8168", + "70": "9577", + "80": "10987", + "90": "12397" }, "atk": { - "1": "", - "20": "", - "40": "", - "50": "", - "60": "", - "70": "", - "80": "", - "90": "" + "1": "19", + "20": "48", + "40": "93", + "50": "118", + "60": "147", + "70": "172", + "80": "198", + "90": "223" }, "def": { - "1": "", - "20": "", - "40": "", - "50": "", - "60": "", - "70": "", - "80": "", - "90": "" + "1": "61", + "20": "156", + "40": "301", + "50": "384", + "60": "477", + "70": "559", + "80": "641", + "90": "723" }, - "attribute": "", + "attribute": "生命值加成", "attributes": { - "1": "0", - "20": "0", - "40": "0", - "50": "", - "60": "", - "70": "", - "80": "", - "90": "" + "1": "0%", + "20": "0%", + "40": "0%", + "50": "6%", + "60": "12%", + "70": "12%", + "80": "18%", + "90": "24%" } }, "skill": { "普通攻击·妙显剑舞·改": { "描述": "普通攻击进行至多三段的连续挥砍。重击持续消耗体力,旋转大剑攻击周围的敌人。停止旋转时,会进行一次格外有力的挥砍。下落攻击从空中下坠冲击地面,攻击下落路径上的敌人,并在落地时造成范围伤害。", - "数值": { } + "数值": { + "一段伤害": [ + "90.2%", + "97.6%", + "104.9%", + "115.4%", + "122.7%", + "131.1%", + "142.7%", + "154.2%", + "165.7%", + "178.3%", + "190.9%", + "", + "", + "", + "" + ], + "二段伤害": [ + "41.1%+43.1%", + "44.4%+46.6%", + "47.8%+50.1%", + "52.5%+55.2%", + "55.9%+58.7%", + "59.7%+62.7%", + "65%+68.2%", + "70.2%+73.7%", + "75.5%+79.2%", + "81.2%+85.2%", + "85.9%+91.3%", + "", + "", + "", + "" + ], + "三段伤害": [ + "128.4%", + "138.8%", + "149.3%", + "164.2%", + "174.7%", + "186.6%", + "203%", + "219.5%", + "235.9%", + "253.8%", + "271.7%", + "", + "", + "", + "" + ], + "重击循环伤害": [ + "62.5%", + "67.6%", + "72.7%", + "80%", + "85.1%", + "90.9%", + "98.9%", + "106.9%", + "114.9%", + "123.6%", + "133.6%", + "", + "", + "", + "" + ], + "重击终结伤害": [ + "113%", + "122%", + "132%", + "145%", + "154%", + "164%", + "179%", + "193%", + "208%", + "224%", + "242%", + "", + "", + "", + "" + ], + "重击体力消耗": [ + "每秒40.0点", + "每秒40.0点", + "每秒40.0点", + "每秒40.0点", + "每秒40.0点", + "每秒40.0点", + "每秒40.0点", + "每秒40.0点", + "每秒40.0点", + "每秒40.0点", + "每秒40.0点", + "", + "", + "", + "" + ], + "最大持续时间": [ + "5.0秒", + "5.0秒", + "5.0秒", + "5.0秒", + "5.0秒", + "5.0秒", + "5.0秒", + "5.0秒", + "5.0秒", + "5.0秒", + "5.0秒", + "", + "", + "", + "" + ], + "下坠期间伤害": [ + "74.6%", + "80.7%", + "86.7%", + "95.4%", + "101.5%", + "108.4%", + "118%", + "127.5%", + "137%", + "147.4%", + "157.8%", + "", + "", + "", + "" + ], + "低空/高空坠地冲击伤害": [ + "149%/186%", + "161%/201%", + "173%/217%", + "191%/238%", + "203%/253%", + "217%/271%", + "236%/295%", + "255%/318%", + "274%/342%", + "295%/368%", + "316%/394%", + "", + "", + "", + "" + ] + } }, - "镇灯之灵·烦恼解决炮": { + "镇灵之灯·烦恼解决炮": { "描述": "示意镇灵之灯向敌人发射断除烦恼炮,造成雷元素伤害。断除烦恼炮命中后,将会产生2枚能自行追踪附近敌人的售后服务弹,造成雷元素伤害。据说,无论想要解决什么样的烦恼,只要出价足够合适,多莉都能办得到。", - "数值": { } + "数值": { + "断除烦恼炮伤害": [ + "147.3%", + "158.3%", + "169.4%", + "184.1%", + "195.1%", + "206.2%", + "220.9%", + "235.6%", + "250.4%", + "265.1%", + "279.8%", + "294.6%", + "313%", + "", + "" + ], + "售后服务弹伤害": [ + "31.6%", + "33.9%", + "36.3%", + "39.5%", + "41.8%", + "44.2%", + "47.3%", + "50.5%", + "53.7%", + "56.8%", + "60%", + "63.1%", + "67.1%", + "", + "" + ], + "冷却时间": [ + "9秒", + "9秒", + "9秒", + "9秒", + "9秒", + "9秒", + "9秒", + "9秒", + "9秒", + "9秒", + "9秒", + "9秒", + "9秒", + "", + "" + ] + } }, "卡萨扎莱宫的无微不至": { "描述": "召唤灯中幽精,为顾客提供形形色色的帮助。灯中幽精会与附近的角色相连。与灯中幽精相连的角色将会:\n\n持续恢复生命值,回复量受益于多莉的生命值上限;\n持续获得元素能量;\n处于雷元素附着状态下。\n此外,角色与灯中幽精之间的连接触碰敌人时,将每0.4秒对敌人造成一次雷元素伤害。同时只能存在一个灯中幽精。\n\n「嗯?客人是挑中了这盏灯吗?哎呀…您的品味还真好呢!只不过,这个可是无价之宝。就比如说,不管别人出多少摩拉,客人您也不会把您旁边那个小吉祥物卖出去吧?」", - "数值": { } + "数值": { + "连接伤害": [ + "16%", + "17%", + "18%", + "20%", + "21%", + "22%", + "24%", + "25%", + "27%", + "29%", + "30%", + "32%", + "34%", + "", + "" + ], + "持续治疗量": [ + "6.7%生命值上限+642", + "7.2%生命值上限+706", + "7.7%生命值上限+776", + "8.3%生命值上限+851", + "8.8%生命值上限+931", + "9.3%生命值上限+1017", + "10%生命值上限+1107", + "10.7%生命值上限+1204", + "11.3%生命值上限+1305", + "12%生命值上限+1412", + "12.7%生命值上限+1525", + "13.3%生命值上限+1643", + "14.2%生命值上限+1766", + "", + "" + ], + "元素能量回复": [ + "1.6", + "1.7", + "1.8", + "1.9", + "2", + "2.1", + "2.2", + "2.3", + "2.4", + "2.5", + "2.5", + "2.5", + "2.5", + "", + "" + ], + "持续时间": [ + "12秒", + "12秒", + "12秒", + "12秒", + "12秒", + "12秒", + "12秒", + "12秒", + "12秒", + "12秒", + "12秒", + "12秒", + "12秒", + "", + "" + ], + "冷却时间": [ + "20秒", + "20秒", + "20秒", + "20秒", + "20秒", + "20秒", + "20秒", + "20秒", + "20秒", + "20秒", + "20秒", + "20秒", + "20秒", + "", + "" + ], + "元素能量": [ + "80", + "80", + "80", + "80", + "80", + "80", + "80", + "80", + "80", + "80", + "80", + "80", + "80", + "", + "" + ] + } }, - "披沙沥金": "", - "利上加利": "", + "披沙沥金": "与灯中幽精相连的角色在触发感电、超导、超载、原激化、超激化、超绽放、雷元素扩散或雷元素结晶反应后,镇灵之灯·烦恼解决炮的冷却时间缩短1秒。该效果每3秒至多触发一次。", + "利上加利": "镇灵之灯·烦恼解决炮的断除烦恼炮或售后服务弹命中敌人时,基于多莉的元素充能效率,每100%为多莉恢复5点元素能量。每次施放镇灵之灯·烦恼解决炮只能通过这种方式恢复一次元素能量,并至多恢复15点元素能量。", "意外订单": "合成角色与武器培养素材时,有25%的概率返还部分合成材料。" }, "cv": { @@ -23499,14 +23808,14 @@ }, "food": "料理未知", "story": [ - "", - "", - "", - "", - "", - "", - "", - "" + "「多莉·桑歌玛哈巴依,艾尔卡萨扎莱宫之主,无所不有的超级大商人!」\n拿到多莉的名片,引入眼帘的便是这句气派的宣言。\n事实上,多莉确实是须弥诸多商人中最特别的一个。\n她已经坐拥无数财富,却依旧对赚取摩拉抱有极高的热情;\n她麾下有数支赫赫有名的商队,却依旧会亲自去须弥各地推销自己的宝贝。\n而她售卖的东西也让人眼花缭乱:特制旅行包、野外烘干机、全自动雪球发射器…只要出得起摩拉,似乎能够从他手上买到任何东西。", + "「哎呀哎呀,客人是要去沙漠吗?我这里可是有好东西呢。」\n「雨林潮湿,里面还有毒蛇猛兽,不做好准备可不行。来来来,带上这个,现在可是八折促销中!」\n「等下客人,你该不会是要从这里过去吧?前面有好多好多魔物,不如在我这买把武器防身吧。」\n「想去阿赫塔蒙柱王遗迹?这你可问对人了。首先你得有一套完整的取水工具,碰巧我可以提供喔。」\n须弥的旅人中流传着一个故事。\n据说当你即将踏足危险的地方,就有机会见到一个等待已久的小小身影。\n无论是在险峻的山脉、荒芜的沙漠、幽暗的雨林,还是魔物丛生的无人区,都能看到她的笑脸。\n相传她的身上总是带着各种神奇的宝贝,能够帮助旅人度过眼下的难关。\n——当然,收费也绝不便宜。\n「在绝望中获得帮助」与「一口气失去大量摩拉」两种完全不同的心情交织在一起,往往让旅人既爱又恨。\n而多莉总是会贴心地无视他们脸上纠结的神色,将收到的摩拉装入鼓鼓的钱包,微笑着离开。\n「多谢惠顾喔,嘿嘿。」", + "在外人看来,多莉的生意似乎一直在蒸蒸日上,然而只有多莉自己清楚,她其实多次遇到过旁人无法想象的瓶颈。\n曾经有一段时间,来自须弥各地的订单源源不断地送到多莉的手上,但多莉却无法按期交付这么多的货物。\n因为周边几条商道的货运量十分有限,难以承载如此规模的大宗商品运输。\n商队的成员劝多莉回绝部分订单,这样依旧能凭借现有的商道维持稳定收益。假以时日,富甲一方应该不成问题。\n但多莉却做了一个非常冒险的举措:她一边接下订单,一边与妙论派展开合作,在公认的危险地区开辟新的商道。\n她将这些新商道开放给周边的商队,并借此成立商会、整合资源,终于突破了原先的瓶颈。\n时至今日,整个须弥境内都能见到多莉新修建的商道,「桑歌玛哈巴依老爷」的名声也越传越广。\n与之一同流传的,还有多莉当初对商队成员说的话:\n「我不会放弃任何订单,那是蠢蘑菇才会做的事。」\n「我会赚到所有能赚的摩拉,要问为什么的话,因为摩拉就在那里。」", + "多莉曾经患过严重的失眠症,夜晚总会莫名其妙地睡不着,第二天顶着浓浓的黑眼圈去商会。\n就算请最好的医生也诊断不出病因,安神香点了一根又一根,不仅没有带来睡意,反而把多莉呛得不停咳嗽。\n就在这个时候,有一位路过的医生对多莉说:\n「听说有人会在床头放一个沙漏,听着细沙落下的声音入眠。」\n多莉尝试几天后以失败告终,但她突然灵机一动,找人定制了一款超大沙漏。\n沙漏里面装的不是沙子,而是亮闪闪的摩拉。\n夜晚,听着摩拉敲击的声音,多莉终于睡了一个好觉。\n此后,多莉在「应对失眠」这件事上也算小有心得:\n「睡饱饱的秘诀,在于让自己心安。」", + "或许是爱屋及乌,除了摩拉之外,多莉对于「能够带来摩拉的家伙」也很感兴趣。\n比如她手下的商队主要靠驮兽运货,多莉就给驮兽修建了一座「乐园」,让它们休息的时候可以在里面随意奔跑。\n她会为驮兽挑选非常精细的饲料,保证它们营养均衡,长得健壮漂亮。\n当然,作为精明的商人,她也不会放过任何商机。\n不同品种的驮兽在一起玩闹,让乐园看上去颇为有趣。多莉借机招揽游客进来观赏,通过销售门票、餐饮、纪念品的方式迅速回本。\n她对驮兽的喜爱是真的,借此小赚一笔也是真的。\n在这一点上,最有发言权的或许是多莉灯中的镇灵。它最初是被多莉骗入灯中,但直到现在也没有离开。\n每次战斗时多莉都把它叫出来,但打完之后多莉却又会满足它的心愿。\n有时镇灵会想,传说中的故事或许是反的——\n灯中装着的其实是一个超强的打手,拿着灯的才是能实现愿望的神灵。", + "没有人知道多莉与艾莉丝相遇的具体过程,但她们确实是一对让人艳羡的合作伙伴。\n艾莉丝周游世界各地,不会一直停留在须弥,但每过一段时间,她就会托人将自己的新发明寄给多莉。\n而多莉也会在售卖之后,想办法将摩拉送到艾莉丝手上。\n有时艾莉丝会附一封信,告诉多莉自己最近身处险地,摩拉可以先存放在多莉那里。\n多莉却执意派人携带摩拉赶往距离艾莉丝最近的安全地区,以保证艾莉丝能够第一时间拿到摩拉。\n人工费、运输费、保险费…各项费用相加并非一笔小钱,多莉却毫不吝啬,主动掏腰包提前支付。\n「大善人多莉从不拖欠回款。」\n「而且,艾莉丝女士的开销也不小,必须保证她时时刻刻有钱可用。」\n多莉总是念叨着这些话,不厌其烦地反复确认摩拉是否送到。\n即使现在艾莉丝已经不是多莉唯一的供货商,多莉仍将这视为最重要的事。\n也许在她心里,一直记得相遇那天许下的承诺。\n「你想要数不清的摩拉?可以呀。我可以提供给你各种神奇道具,卖出去多少就看你的本事啦。」\n「请放心。我会卖出高高的价格,换来多多的摩拉,以最快的速度送到你的手上…我会成为你最好的合作伙伴。」", + "为了更好地聆听摩拉发出的美妙声响,多莉亲自定制了一款「摩拉音乐盒」。\n音乐盒的正上方有一个开口,开口的大小刚好可以容许一枚摩拉通过。\n当摩拉被投入音乐盒后,便会沿着音乐盒内复杂的机关轨道滚动,并时不时发出轻盈美妙的撞击声。\n撞击声此起彼伏,汇聚成一首悠扬的乐章,多莉也会在空旷的艾尔卡萨扎莱宫中旋转起舞。\n「摩拉,摩拉,亮闪闪的摩拉。」\n「摩拉,摩拉,数不清的摩拉。」\n「美丽的摩拉,是我的摩拉。」\n「别人的摩拉,快快来我家。」\n明明是如此熟悉的歌曲,却总是百听不厌。\n音乐演奏到最后,多莉也会向并不存在的观众深深一躬。\n恰在此时摩拉落入音乐盒的最底部,与那里堆积如山的摩拉相碰——\n伴随着一声清脆的「啪嗒」声,一切完美落幕。\n意犹未尽的多莉总是会选择向音乐盒中再投一枚摩拉。", + "两位年龄相仿的小女孩牵着手,哼着轻微变调的歌谣,并肩走过天真烂漫的时光。\n她们在春天折野花戴在彼此的耳旁,光着脚蹚过夏天的溪水。\n在秋天一同从金色的沙丘滑下,依偎在冬天的阳光里看同一本书。\n时间仿佛很长,怎么也过不完。\n直到年长一些的姐姐忽然开始不停咳血,家里围了许许多多陌生的大人。\n他们一本正经地解释着旁人难以理解的病情,随后对着家徒四壁的房屋摇头叹气。\n不知道发生了什么的妹妹每天都去探望,姐姐总是露出明亮的笑容:\n「没事。休息一下就会好的啦。」\n看着她的笑容,天真的妹妹也流露出期待的眼神,甚至开始幻想下次一起出游的日子。\n直到某一天,正在讲故事的姐姐忽然伸手攥紧了胸口的衣服。\n她瘦削的身体栽倒在床上,妹妹伸手去抱她,才发现她的身体很轻很轻。\n…就像一根羽毛,慢慢飘向所有人都触摸不到的远方。\n后来,妹妹在她的枕头下找到了一张揉皱的纸条。\n那是医生开的药方,上面罗列着已经几乎绝迹的药材,只有少数私人收藏家那里还有存货。\n想要购买的话至少需要几千万摩拉,一个令穷困家庭不敢想象的价格。\n总是笑着摇头拒绝这个提议的姐姐,或许只敢在深夜的时候看上几眼,幻想着那遥不可及的「活下去」的希望。\n妹妹将纸条收进衣服的口袋,默默地下了决心。\n「要赚多多的摩拉。」\n「这样就不会再看到亲近的人露出难过的笑脸,这样就不会再因为没有摩拉而失去什么…」\n也许就是在那时,神明的视线落在了她的身上。\n但对于「野心」疯涨的她来说,获得神之眼或许也只是一个开始。\n在今后的无数个日夜中,她不停地告诫自己保持清醒,同时在心里给自己打气:\n「只有执念是不够的。我会为了想要的东西不停努力,直至耗尽最后一分力气。」\n「桑歌玛哈巴依老爷,没有做不到的事。」" ] } } \ No newline at end of file diff --git a/LittlePaimon/config/data/score.json b/LittlePaimon/config/data/score.json index 3e05bc4..f7c21ed 100644 --- a/LittlePaimon/config/data/score.json +++ b/LittlePaimon/config/data/score.json @@ -257,7 +257,8 @@ "暴击率": 1, "暴击伤害": 1, "攻击力": 1, - "元素充能效率": 1 + "元素充能效率": 1, + "元素精通": 1 } }, "九条裟罗": { @@ -265,14 +266,16 @@ "暴击率": 1, "暴击伤害": 1, "攻击力": 1, - "元素充能效率": 1 + "元素充能效率": 1, + "元素精通": 1 } }, "刻晴": { "常规": { "暴击率": 1, "暴击伤害": 1, - "攻击力": 1 + "攻击力": 1, + "元素精通": 1 } }, "雷泽": { @@ -286,7 +289,8 @@ "常规": { "暴击率": 1, "暴击伤害": 1, - "攻击力": 1 + "攻击力": 1, + "元素精通": 1 } }, "丽莎": { @@ -294,7 +298,8 @@ "暴击率": 1, "暴击伤害": 1, "攻击力": 1, - "元素充能效率": 1 + "元素充能效率": 1, + "元素精通": 1 } }, "北斗": { @@ -302,7 +307,8 @@ "暴击率": 1, "暴击伤害": 1, "攻击力": 1, - "元素充能效率": 1 + "元素充能效率": 1, + "元素精通": 1 } }, "雷主": { @@ -310,7 +316,8 @@ "暴击率": 1, "暴击伤害": 1, "攻击力": 1, - "元素充能效率": 1 + "元素充能效率": 1, + "元素精通": 1 } }, "早柚": { @@ -556,9 +563,7 @@ }, "多莉": { "常规": { - "暴击率": 1, - "暴击伤害": 1, - "攻击力": 1, + "生命值": 1, "元素精通": 1, "元素充能效率": 1 } diff --git a/LittlePaimon/config/data/upheaval.json b/LittlePaimon/config/data/upheaval.json index 3fec45d..17afd04 100644 --- a/LittlePaimon/config/data/upheaval.json +++ b/LittlePaimon/config/data/upheaval.json @@ -1,92 +1,92 @@ [ - 9, - 9, - 10, - 11, - 11, - 12, - 13, - 14, - 16, - 17, - 19, - 20, - 22, - 24, - 27, - 30, - 32, - 35, - 38, - 40, - 43, - 46, - 49, - 51, - 54, - 57, - 59, - 61, - 65, - 68, - 71, - 75, - 78, - 81, - 85, - 88, + 8.6, + 9.3, + 10.0, + 10.6, + 11.3, + 12.3, + 13.3, + 14.4, + 15.7, + 17.1, + 18.6, + 20.3, + 22.2, + 24.3, + 26.9, + 29.5, + 32.2, + 34.9, + 37.6, + 40.3, + 43.1, + 45.9, + 48.6, + 51.4, + 54.2, + 56.6, + 59.1, + 61.5, + 64.9, + 68.2, + 71.3, + 74.5, + 77.7, + 80.9, + 84.6, + 88.3, 92, - 96, - 100, - 104, - 108, - 112, - 117, - 122, - 128, - 134, - 141, - 148, - 155, - 162, - 168, - 175, - 182, - 189, - 199, - 208, - 217, - 226, - 236, - 246, - 257, - 270, - 283, - 296, - 312, - 326, - 340, - 354, - 368, - 383, - 397, - 412, - 426, - 439, - 457, - 473, - 490, - 506, - 522, - 539, - 555, - 571, - 588, - 605, - 627, - 644, - 663, - 682, - 703, - 723 + 95.9, + 99.8, + 103.7, + 107.7, + 112.1, + 116.8, + 121.1, + 128.0, + 134.3, + 140.8, + 147.5, + 154.5, + 161.8, + 168.4, + 175.3, + 182.2, + 189.3, + 199.3, + 208.2, + 217.2, + 226.5, + 236.3, + 246.4, + 256.8, + 269.6, + 282.8, + 296.3, + 312.2, + 325.7, + 339.8, + 353.9, + 368.3, + 382.8, + 397.4, + 412.3, + 425.6, + 438.9, + 457.1, + 473.4, + 489.7, + 505.6, + 522.4, + 538.7, + 555.0, + 571.5, + 588.2, + 605.1, + 626.9, + 644.5, + 622.7, + 681.7, + 702.6, + 723.4 ] \ No newline at end of file diff --git a/LittlePaimon/plugins/Paimon_Info/damage_cal.py b/LittlePaimon/plugins/Paimon_Info/damage_cal.py index 9a8f01b..1207411 100644 --- a/LittlePaimon/plugins/Paimon_Info/damage_cal.py +++ b/LittlePaimon/plugins/Paimon_Info/damage_cal.py @@ -1,7 +1,7 @@ from copy import deepcopy from LittlePaimon.database.models import Character -from .damage_model import common_fix, draw_dmg_pic, udc, get_damage_multipiler, growth_reaction +from .damage_model import common_fix, draw_dmg_pic, udc, get_damage_multipiler, growth_reaction, intensify_reaction async def get_role_dmg(info: Character): @@ -26,11 +26,18 @@ async def get_role_dmg(info: Character): a[1] += f'+{ly[1]}' dmg_data['踢枪伤害'] = a elif info.name == '雷电将军': + r = intensify_reaction(info.level, '超激化', info.prop.elemental_mastery, info.prop.reaction_coefficient['激化']) info.damage_describe.insert(0, '满愿力') vq['增伤'] += dm['e增伤'] dci = 0.6 if len(info.constellation) >= 2 else 0 dmg_data['协同攻击'] = udc(dm['协同攻击'] * info.prop.attack, (info.prop.crit_rate + ve['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus['雷'] + ve['增伤'], info.level, dci=dci) - dmg_data['梦想一刀'] = udc((dm['梦想一刀基础'] + dm['梦想一刀愿力']) * info.prop.attack, (info.prop.crit_rate + vq['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus['雷'] + vq['增伤'], + dmg_data['梦想一刀'] = udc((dm['梦想一刀基础'] + dm['梦想一刀愿力']) * info.prop.attack, + (info.prop.crit_rate + vq['暴击率'], info.prop.crit_damage), + info.prop.dmg_bonus['雷'] + vq['增伤'], + info.level, dci=dci) + dmg_data['梦想一刀超激化'] = udc((dm['梦想一刀基础'] + dm['梦想一刀愿力']) * info.prop.attack + r, + (info.prop.crit_rate + vq['暴击率'], info.prop.crit_damage), + info.prop.dmg_bonus['雷'] + vq['增伤'], info.level, dci=dci) a1 = udc((dm['梦想一心重击基础'][0] + dm['梦想一心愿力']) * info.prop.attack, (info.prop.crit_rate + vq['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus['雷'] + vq['增伤'], info.level, dci=dci) @@ -41,26 +48,27 @@ async def get_role_dmg(info: Character): dmg_data['梦想一心能量'] = (str(round(dm['梦想一心能量'] * (1 + extra_energy) * 5, 1)),) elif info.name == '申鹤': dmg_data['冰翎加成'] = (str(int(dm['冰翎'] * info.prop.attack)),) - info.prop.dmg_bonus[-1] += 0.15 if info.level >= 40 else 0 + bl = int(dmg_data['冰翎加成'][0]) + info.prop.dmg_bonus['冰'] += 0.15 if info.level >= 40 else 0 vq['增伤'] += 0.15 if info.level >= 70 else 0 - dmg_data['战技长按'] = udc(dm['e长按'] * info.prop.attack, (info.prop.crit_rate + ve['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus[-1] + ve['增伤'], info.level, rcd=dm['大招减抗']) - dmg_data['大招持续伤害'] = udc(dm['大招持续'] * info.prop.attack, (info.prop.crit_rate + vq['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus[-1] + vq['增伤'], info.level, + dmg_data['战技长按'] = udc(dm['e长按'] * info.prop.attack + bl, (info.prop.crit_rate + ve['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus['冰'] + ve['增伤'], info.level, rcd=dm['大招减抗']) + dmg_data['大招持续伤害'] = udc(dm['大招持续'] * info.prop.attack + bl, (info.prop.crit_rate + vq['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus['冰'] + vq['增伤'], info.level, rcd=dm['大招减抗']) elif info.name == '珊瑚宫心海': adb = 0.15 * info.prop.healing_bonus if info.level >= 70 else 0 if len(info.constellation) >= 6: - info.prop.dmg_bonus[3] += 0.4 + info.prop.dmg_bonus['水'] += 0.4 info.damage_describe.insert(0, '六命触发') - ab = udc(dm['普攻第一段'] * info.prop.attack, (info.prop.crit_rate + va['普攻暴击率'], info.prop.crit_damage), info.prop.dmg_bonus[3] + va['普攻增伤'], info.level) - aq = udc(dm['普攻伤害提升'] * info.prop.health, (info.prop.crit_rate + va['普攻暴击率'], info.prop.crit_damage), info.prop.dmg_bonus[3] + adb + va['普攻增伤'], info.level) + ab = udc(dm['普攻第一段'] * info.prop.attack, (info.prop.crit_rate + va['普攻暴击率'], info.prop.crit_damage), info.prop.dmg_bonus['水'] + va['普攻增伤'], info.level) + aq = udc(dm['普攻伤害提升'] * info.prop.health, (info.prop.crit_rate + va['普攻暴击率'], info.prop.crit_damage), info.prop.dmg_bonus['水'] + adb + va['普攻增伤'], info.level) if len(ab) == 1: dmg_data['开大普攻第一段'] = (str(int(ab[0]) + int(aq[0])), ) else: dmg_data['开大普攻第一段'] = (str(int(ab[0]) + int(aq[0])), str(int(ab[1]) + int(aq[1]))) - dmg_data['开大战技伤害'] = udc(dm['水母伤害'] * info.prop.attack + dm['E伤害提升'] * info.prop.health, (info.prop.crit_rate + ve['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus[3] + ve['增伤'], info.level) - dmg_data['大招释放伤害'] = udc(dm['大招伤害'] * info.prop.health, (info.prop.crit_rate + vq['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus[3] + vq['增伤'], info.level) - dmg_data['开大普攻治疗量'] = (str(int((float(dm['大招治疗量'][0].replace('%生命值上限', '')) / 100.0 * info.prop.health + float(dm['大招治疗量'][1]) * (1 + info.prop.healing_bonus)))),) - dmg_data['战技治疗量'] = (str(int((float(dm['水母治疗量'][0].replace('%生命值上限', '')) / 100.0 * info.prop.health + float(dm['水母治疗量'][1]) * (1 + info.prop.healing_bonus)))),) + dmg_data['开大战技伤害'] = udc(dm['水母伤害'] * info.prop.attack + dm['E伤害提升'] * info.prop.health, (info.prop.crit_rate + ve['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus['水'] + ve['增伤'], info.level) + dmg_data['大招释放伤害'] = udc(dm['大招伤害'] * info.prop.health, (info.prop.crit_rate + vq['暴击率'], info.prop.crit_damage), info.prop.dmg_bonus['水'] + vq['增伤'], info.level) + dmg_data['开大普攻治疗量'] = (str(int((float(dm['大招治疗量'][0].replace('%生命值上限', '')) / 100.0 * info.prop.health + float(dm['大招治疗量'][1])) * (1 + info.prop.healing_bonus))),) + dmg_data['战技治疗量'] = (str(int((float(dm['水母治疗量'][0].replace('%生命值上限', '')) / 100.0 * info.prop.health + float(dm['水母治疗量'][1])) * (1 + info.prop.healing_bonus))),) else: dmg_data = get_dmg_data(info, dm, va, ve, vq) if info.damage_describe: @@ -75,7 +83,7 @@ def get_dmg_data(info: Character, dm: dict, va: dict, ve: dict, vq: dict) -> dic '暴击伤害': 0, '增伤': va['普攻增伤'], '额外倍率': va['普攻额外倍率'], - '减抗': 0, + '减抗': va['减抗'], '减防': 0 }, 'AZ': { @@ -83,7 +91,7 @@ def get_dmg_data(info: Character, dm: dict, va: dict, ve: dict, vq: dict) -> dic '暴击伤害': 0, '增伤': va['重击增伤'], '额外倍率': va['重击额外倍率'], - '减抗': 0, + '减抗': va['减抗'], '减防': 0 }, 'AX': { @@ -91,7 +99,7 @@ def get_dmg_data(info: Character, dm: dict, va: dict, ve: dict, vq: dict) -> dic '暴击伤害': 0, '增伤': va['下落攻击增伤'], '额外倍率': va['下落攻击额外倍率'], - '减抗': 0, + '减抗': va['减抗'], '减防': 0 }, 'E': { @@ -99,7 +107,7 @@ def get_dmg_data(info: Character, dm: dict, va: dict, ve: dict, vq: dict) -> dic '暴击伤害': 0, '增伤': ve['增伤'], '额外倍率': ve['额外倍率'], - '减抗': 0, + '减抗': ve['减抗'], '减防': 0 }, 'Q': { @@ -107,7 +115,7 @@ def get_dmg_data(info: Character, dm: dict, va: dict, ve: dict, vq: dict) -> dic '暴击伤害': 0, '增伤': vq['增伤'], '额外倍率': 0, - '减抗': 0, + '减抗': vq['减抗'], '减防': 0 }, } @@ -141,6 +149,7 @@ def get_dmg_data(info: Character, dm: dict, va: dict, ve: dict, vq: dict) -> dic dmg_data[skill_name] = (str(num), ) else: r = 1 # 反应系数 + j = 0 # 激化反应系数 n = '1' # 段数 e = '物理' # 伤害元素类型序号 t = '攻击力' # 倍率区类型 @@ -150,6 +159,8 @@ def get_dmg_data(info: Character, dm: dict, va: dict, ve: dict, vq: dict) -> dic for p in para[1:]: if p.startswith('r'): r = growth_reaction(info.prop.elemental_mastery, float(p[3:]), info.prop.reaction_coefficient[f'{p[1:3]}']) + if p.startswith('j'): + j = intensify_reaction(info.level, p[1:], info.prop.elemental_mastery, info.prop.reaction_coefficient['激化']) if p.startswith('n'): n = p[1:] if p.startswith('e'): @@ -157,13 +168,13 @@ def get_dmg_data(info: Character, dm: dict, va: dict, ve: dict, vq: dict) -> dic if p.startswith('t'): t = p[1:] if isinstance(num, tuple): - n1 = udc(num[0] * dmt[t] + v[skill_type]['额外倍率'], (info.prop.crit_rate + v[skill_type]['暴击率'], info.prop.crit_damage + v[skill_type]['暴击伤害']), info.prop.dmg_bonus[e] + v[skill_type]['增伤'], info.level, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) - n2 = udc(num[1] * dmt[t] + v[skill_type]['额外倍率'], (info.prop.crit_rate + v[skill_type]['暴击率'], info.prop.crit_damage + v[skill_type]['暴击伤害']), info.prop.dmg_bonus[e] + v[skill_type]['增伤'], info.level, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) + n1 = udc(num[0] * dmt[t] + v[skill_type]['额外倍率'] + j, (info.prop.crit_rate + v[skill_type]['暴击率'], info.prop.crit_damage + v[skill_type]['暴击伤害']), info.prop.dmg_bonus[e] + v[skill_type]['增伤'], info.level, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) + n2 = udc(num[1] * dmt[t] + v[skill_type]['额外倍率'] + j, (info.prop.crit_rate + v[skill_type]['暴击率'], info.prop.crit_damage + v[skill_type]['暴击伤害']), info.prop.dmg_bonus[e] + v[skill_type]['增伤'], info.level, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) dmg_data[skill_name] = (n1[0] + '+' + n2[0], n1[1] + '+' + n2[1]) else: if n == '1': - dmg_data[skill_name] = udc(num * dmt[t] + v[skill_type]['额外倍率'], (info.prop.crit_rate + v[skill_type]['暴击率'], info.prop.crit_damage + v[skill_type]['暴击伤害']), info.prop.dmg_bonus[e] + v[skill_type]['增伤'], info.level, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) + dmg_data[skill_name] = udc(num * dmt[t] + v[skill_type]['额外倍率'] + j, (info.prop.crit_rate + v[skill_type]['暴击率'], info.prop.crit_damage + v[skill_type]['暴击伤害']), info.prop.dmg_bonus[e] + v[skill_type]['增伤'], info.level, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) else: - dmg = udc(num * dmt[t] + v[skill_type]['额外倍率'], (info.prop.crit_rate + v[skill_type]['暴击率'], info.prop.crit_damage + v[skill_type]['暴击伤害']), info.prop.dmg_bonus[e] + v[skill_type]['增伤'], info.level, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) + dmg = udc(num * dmt[t] + v[skill_type]['额外倍率'] + j, (info.prop.crit_rate + v[skill_type]['暴击率'], info.prop.crit_damage + v[skill_type]['暴击伤害']), info.prop.dmg_bonus[e] + v[skill_type]['增伤'], info.level, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) dmg_data[skill_name] = (dmg[0] + '*' + n, dmg[1] + '*' + n) return dmg_data diff --git a/LittlePaimon/plugins/Paimon_Info/damage_model.py b/LittlePaimon/plugins/Paimon_Info/damage_model.py index 9f69a34..d1efc3b 100644 --- a/LittlePaimon/plugins/Paimon_Info/damage_model.py +++ b/LittlePaimon/plugins/Paimon_Info/damage_model.py @@ -1,4 +1,4 @@ -from pathlib import Path +import random from typing import Tuple, Dict, Optional, List, Union from LittlePaimon.config.path import JSON_DATA @@ -118,6 +118,20 @@ def upheaval_reaction(level: int, type: str, mastery: int = 0, extra_coefficient return base_coefficient * base_ratio * (1 + mastery_increase + extra_coefficient) * resistance +def intensify_reaction(level: int, type: str, mastery: int = 0, extra_coefficient: float = 0): + """ + 计算激化反应的伤害 + :param level: 等级 + :param type: 反应类型 + :param mastery: 元素精通 + :param extra_coefficient: 反应系数提高,如如雷4件套效果 + :return: 激化伤害 + """ + r = 2.3 if type == '超激化' else 2.5 + base_coefficient = upheaval_value[level - 1] + return r * base_coefficient * (1 + (mastery * 5) / (mastery + 1200)) * (1 + extra_coefficient) + + def weapon_common_fix(info: Character): """ 对武器的通用面板属性修正 @@ -127,13 +141,15 @@ def weapon_common_fix(info: Character): # 针对q的额外属性 extra_q = { '暴击率': 0, - '增伤': 0 + '增伤': 0, + '减抗': 0 } # 针对e的额外属性 extra_e = { '暴击率': 0, '增伤': 0, - '额外倍率': 0 + '额外倍率': 0, + '减抗': 0 } # 针对a的额外属性 extra_a = { @@ -145,12 +161,13 @@ def weapon_common_fix(info: Character): '重击额外倍率': 0, '下落攻击暴击率': 0, '下落攻击增伤': 0, - '下落攻击额外倍率': 0 + '下落攻击额外倍率': 0, + '减抗': 0 } # 单手剑 if info.weapon.name == '波乱月白经津': - for i in info.prop.dmg_bonus: - info.prop.dmg_bonus[i] = info.prop.dmg_bonus[i] + (0.09 + 0.03 * info.weapon.affix_level) + # for i in info.prop.dmg_bonus: + # info.prop.dmg_bonus[i] = info.prop.dmg_bonus[i] + (0.09 + 0.03 * info.weapon.affix_level) extra_a['普攻增伤'] += 2 * (0.15 + 0.05 * info.weapon.affix_level) info.damage_describe.append('波乱满层') elif info.weapon.name == '辰砂之纺锤': @@ -169,7 +186,7 @@ def weapon_common_fix(info: Character): elif info.weapon.name == '雾切之回光': # TODO 吃不满3层的角色 for i in info.prop.dmg_bonus: - info.prop.dmg_bonus[i] = info.prop.dmg_bonus[i] + (0.3 + 0.1 * info.weapon.affix_level) + info.prop.dmg_bonus[i] = info.prop.dmg_bonus[i] + (0.21 + 0.07 * info.weapon.affix_level) info.damage_describe.append('雾切满层') elif info.weapon.name == '铁蜂刺': for i in info.prop.dmg_bonus: @@ -283,6 +300,12 @@ def weapon_common_fix(info: Character): elif info.weapon.name == '弹弓': extra_a['普攻增伤'] += 0.3 + 0.06 * info.weapon.affix_level extra_a['重击增伤'] += 0.3 + 0.06 * info.weapon.affix_level + elif info.weapon.name == '猎人之径': + extra_a['重击额外倍率'] += info.prop.elemental_mastery * (1.2 + 0.4 * info.weapon.affix_level) + info.damage_describe.append('猎人弓触发') + elif info.weapon.name == '王下近侍': + info.prop.elemental_mastery += 40 + 20 * info.weapon.affix_level + info.damage_describe.append('王下近侍触发') # 长柄武器 elif info.weapon.name == '白缨枪': @@ -300,8 +323,8 @@ def weapon_common_fix(info: Character): info.prop.extra_attack += info.prop.base_attack * 0.18 + 0.06 * info.weapon.affix_level info.damage_describe.append('决斗单怪') elif info.weapon.name == '息灾': - for i in info.prop.dmg_bonus: - info.prop.dmg_bonus[i] = info.prop.dmg_bonus[i] + (0.09 + 0.03 * info.weapon.affix_level) + # for i in info.prop.dmg_bonus: + # info.prop.dmg_bonus[i] = info.prop.dmg_bonus[i] + (0.09 + 0.03 * info.weapon.affix_level) info.prop.extra_attack += info.prop.base_attack * 6 * (0.024 + 0.006 * info.weapon.affix_level) info.damage_describe.append('息灾前台满层') elif info.weapon.name == '薙草之稻光': @@ -320,7 +343,7 @@ def weapon_common_fix(info: Character): extra_e['增伤'] += 3 * (0.09 + 0.03 * info.weapon.affix_level) info.damage_describe.append('神乐满层') elif info.weapon.name == '不灭月华': - info.prop.healing_bonus += 0.075 + 0.025 * info.weapon.affix_level + # info.prop.healing_bonus += 0.075 + 0.025 * info.weapon.affix_level extra_a['普攻额外倍率'] += (0.005 + 0.005 * info.weapon.affix_level) * info.prop.health elif info.weapon.name == '白辰之环': for i in info.prop.dmg_bonus: @@ -334,9 +357,17 @@ def weapon_common_fix(info: Character): info.prop.dmg_bonus[i] = info.prop.dmg_bonus[i] + 4 * (0.06 + 0.02 * info.weapon.affix_level) info.damage_describe.append('四风满层') elif info.weapon.name == '流浪乐章': - for i in info.prop.dmg_bonus: - info.prop.dmg_bonus[i] = info.prop.dmg_bonus[i] + (0.36 + 0.12 * info.weapon.affix_level) - info.damage_describe.append('流浪触发增伤') + t = random.randint(1, 3) + if t == 1: + info.prop.extra_attack += (0.45 + 0.15 * info.weapon.affix_level) * info.prop.base_attack + info.damage_describe.append('流浪触发加攻') + elif t == 2: + for i in info.prop.dmg_bonus: + info.prop.dmg_bonus[i] = info.prop.dmg_bonus[i] + (0.36 + 0.12 * info.weapon.affix_level) + info.damage_describe.append('流浪触发增伤') + else: + info.prop.elemental_mastery += 180 + 60 * info.weapon.affix_level + info.damage_describe.append('流浪触发加精通') elif info.weapon.name == '万国诸海图谱': for i in info.prop.dmg_bonus: info.prop.dmg_bonus[i] = info.prop.dmg_bonus[i] + 2 * (0.06 + 0.02 * info.weapon.affix_level) @@ -354,6 +385,10 @@ def weapon_common_fix(info: Character): extra_q['增伤'] += 0.15 + 0.05 * info.weapon.affix_level extra_e['增伤'] += 0.15 + 0.05 * info.weapon.affix_level extra_a['普攻增伤'] += 0.15 + 0.05 * info.weapon.affix_level + elif info.weapon.name == '盈满之实': + info.prop.elemental_mastery += 5 * (21 + 3 * info.weapon.affix_level) + info.prop.extra_attack -= 5 * 0.05 * info.prop.base_attack + info.damage_describe.append('盈满之实满层') # 系列武器 elif info.weapon.name.startswith('千岩'): @@ -436,6 +471,13 @@ def common_fix(info: Character) -> Tuple[Character, dict, dict, dict]: info.prop.reaction_coefficient['融化'] += 0.15 info.prop.reaction_coefficient['超载'] += 0.4 info.prop.reaction_coefficient['燃烧'] += 0.4 + info.prop.reaction_coefficient['绽放'] += 0.4 + elif suit[0][0] == '如雷的盛怒': + info.prop.reaction_coefficient['超载'] += 0.4 + info.prop.reaction_coefficient['感电'] += 0.4 + info.prop.reaction_coefficient['超导'] += 0.4 + info.prop.reaction_coefficient['绽放'] += 0.4 + info.prop.reaction_coefficient['激化'] += 0.2 elif suit[0][0] == '翠绿之影': info.prop.reaction_coefficient['扩散'] += 0.6 elif suit[0][0] == '渡过烈火的贤人': @@ -482,6 +524,15 @@ def common_fix(info: Character) -> Tuple[Character, dict, dict, dict]: info.damage_describe.append('武人触发') elif suit[0][0] == '行者之心': extra_a['重击暴击率'] += 0.3 + elif suit[0][0] == '饰金之梦': + info.prop.elemental_mastery += 3 * 50 + info.prop.extra_attack += 0.14 * info.prop.base_attack + info.damage_describe.append('饰金之梦触发3不同元素') + elif suit[0][0] == '深林的记忆': + extra_a['减抗'] += 0.3 + extra_e['减抗'] += 0.3 + extra_q['减抗'] += 0.3 + info.damage_describe.append('草套减抗') return info, extra_q, extra_e, extra_a @@ -561,7 +612,9 @@ def get_damage_multipiler(info: Character) -> Optional[Dict[str, any]]: 'B:c4-攻击力': (info.prop.base_attack * 0.25, '四命触发'), 'AZ-e雷:重击': (float(az[0].replace('%', '')) / 100.0, float(az[1].replace('%', '')) / 100.0), 'E-e雷:战技斩击': float(skill_data['星斗归位']['数值']['斩击伤害'][level_e].replace('%', '')) / 100.0, - 'Q-e雷:大招尾刀': float(skill_data['天街巡游']['数值']['最后一击伤害'][level_q].replace('%', '')) / 100.0 + 'E-e雷-j超激化:战技斩击超激化': float(skill_data['星斗归位']['数值']['斩击伤害'][level_e].replace('%', '')) / 100.0, + 'Q-e雷:大招尾刀': float(skill_data['天街巡游']['数值']['最后一击伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e雷-j超激化:大招尾刀超激化': float(skill_data['天街巡游']['数值']['最后一击伤害'][level_q].replace('%', '')) / 100.0 } if info.name == '可莉': return { @@ -580,7 +633,9 @@ def get_damage_multipiler(info: Character) -> Optional[Dict[str, any]]: 'B:c6-减防-E': (0.6,), 'AZ-e雷:重击': float(skill_data['普通攻击·狐灵食罪式']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0, 'E-e雷:杀生樱满阶': float(skill_data['野干役咒·杀生樱']['数值'][e][level_e].replace('%', '')) / 100.0, + 'E-e雷-j超激化:杀生樱满阶超激化': float(skill_data['野干役咒·杀生樱']['数值'][e][level_e].replace('%', '')) / 100.0, 'Q-e雷:天狐霆雷': float(skill_data['大密法·天狐显真']['数值']['天狐霆雷伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e雷-j超激化:天狐霆雷超激化': float(skill_data['大密法·天狐显真']['数值']['天狐霆雷伤害'][level_q].replace('%', '')) / 100.0, } if info.name == '阿贝多': return { @@ -668,8 +723,10 @@ def get_damage_multipiler(info: Character) -> Optional[Dict[str, any]]: 'Q-e岩:大招每段': float(skill_data['天权崩玉']['数值']['每颗宝石伤害'][level_q].replace('%', '').replace('每个', '')) / 100.0, } if info.name == '菲谢尔': - dm = {'A:普攻第一段': float(skill_data['普通攻击·罪灭之矢']['数值']['一段伤害'][level_a].replace('%', '')) / 100.0} - dm['E-e雷:奥兹攻击'] = float(skill_data['夜巡影翼']['数值']['奥兹攻击伤害'][level_e].replace('%', '')) / 100.0 + dm = {'A:普攻第一段': float(skill_data['普通攻击·罪灭之矢']['数值']['一段伤害'][level_a].replace('%', '')) / 100.0, + 'E-e雷:奥兹攻击': float(skill_data['夜巡影翼']['数值']['奥兹攻击伤害'][level_e].replace('%', '')) / 100.0, + 'E-e雷-j超激化:奥兹攻击超激化': float(skill_data['夜巡影翼']['数值']['奥兹攻击伤害'][level_e].replace('%', '')) / 100.0, + } if len(info.constellation) >= 6: dm['E-e雷:奥兹协同攻击'] = 0.3 return dm @@ -678,6 +735,8 @@ def get_damage_multipiler(info: Character) -> Optional[Dict[str, any]]: 'B:c6-减抗-*': (0.15, '六命减抗'), 'E-e雷:完美弹反': float(skill_data['捉浪']['数值']['基础伤害'][level_e].replace('%', '')) / 100.0 + 2 * float( skill_data['捉浪']['数值']['每层伤害提升'][level_e].replace('%', '')) / 100.0, + 'E-e雷-j超激化:完美弹反超激化': float(skill_data['捉浪']['数值']['基础伤害'][level_e].replace('%', '')) / 100.0 + 2 * float( + skill_data['捉浪']['数值']['每层伤害提升'][level_e].replace('%', '')) / 100.0, 'Q-e雷:斫雷每段': float(skill_data['斫雷']['数值']['闪电伤害'][level_q].replace('%', '')) / 100.0 } if info.name == '诺艾尔': @@ -854,6 +913,50 @@ def get_damage_multipiler(info: Character) -> Optional[Dict[str, any]]: 1 + info.prop.healing_bonus)), 'Q-e冰:大招伤害': float(skill_data['仙法·救苦度厄']['数值']['技能伤害'][level_q].replace('%', '')) / 100.0, } + if info.name == '提纳里': + info.prop.elemental_mastery += 50 if info.level >= 50 else 0 + info.prop.elemental_mastery += 120 if len(info.constellation) >= 4 else 0 + return { + 'B:c1-暴击率-AZ': (0.15,), + 'B:c2-增伤-*': (0.2, '二命增伤'), + 'B:c4-增伤-*': (0, '四命精通'), + 'B:l70-增伤-AZ': (min(info.prop.elemental_mastery, 1000) * 0.0006, ), + 'B:l70-增伤-Q': (min(info.prop.elemental_mastery, 1000) * 0.0006,), + 'AZ-e草:重击花筥箭': float(skill_data['普通攻击·藏蕴破障']['数值']['花筥箭伤害'][level_a].replace('%', '')) / 100.0, + 'AZ-e草-j蔓激化:重击花筥箭蔓激化': float(skill_data['普通攻击·藏蕴破障']['数值']['花筥箭伤害'][level_a].replace('%', '')) / 100.0, + 'AZ-e草-n4:重击藏蕴花矢': float(skill_data['普通攻击·藏蕴破障']['数值']['藏蕴花矢伤害'][level_a].replace('%', '')) / 100.0, + 'Q-e草:缠藤箭': float(skill_data['造生缠藤箭']['数值']['缠藤箭伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e草-j蔓激化:缠藤箭蔓激化': float(skill_data['造生缠藤箭']['数值']['缠藤箭伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e草:次级缠藤箭-n6': float(skill_data['造生缠藤箭']['数值']['次级缠藤箭伤害'][level_q].replace('%', '')) / 100.0, + } + if info.name == '柯莱': + info.prop.elemental_mastery += 60 if len(info.constellation) >= 4 else 0 + return { + 'E-e草:飞叶轮': float(skill_data['拂花偈叶']['数值']['技能伤害'][level_e].replace('%', '')) / 100.0, + 'E-e草-j蔓激化:飞叶轮蔓激化': float(skill_data['拂花偈叶']['数值']['技能伤害'][level_e].replace('%', '')) / 100.0, + 'Q-e草:大招爆发伤害': float(skill_data['猫猫秘宝']['数值']['爆发伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e草-j蔓激化:大招爆发蔓激化': float(skill_data['猫猫秘宝']['数值']['爆发伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e草:大招持续伤害': float(skill_data['猫猫秘宝']['数值']['跃动伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e草-j蔓激化:大招持续蔓激化': float(skill_data['猫猫秘宝']['数值']['跃动伤害'][level_q].replace('%', '')) / 100.0 + } + if info.name == '多莉': + h = skill_data['卡萨扎莱宫的无微不至']['数值']['持续治疗量'][level_q].split('生命值上限+') + return { + 'E-e雷:断除烦恼炮': float(skill_data['镇灵之灯·烦恼解决炮']['数值']['断除烦恼炮伤害'][level_e].replace('%', '')) / 100.0, + 'T:大招持续治疗量': int(float(h[0].replace('%', '')) / 100.0 * info.prop.health + float(h[1]) * (1 + info.prop.healing_bonus)), + } + if info.name == '九条裟罗': + atk = float(skill_data['鸦羽天狗霆雷召咒']['数值']['攻击力加成比例'][level_e].replace('%', '')) / 100.0 * info.prop.base_attack + return { + 'T:乌羽攻击加成': int(atk), + 'B:l0-攻击力-*': (atk, ), + 'B:c6-暴击伤害-*': (0.6, ), + 'E-e雷:元素战技': float(skill_data['鸦羽天狗霆雷召咒']['数值']['天狗咒雷•伏伤害'][level_e].replace('%', '')) / 100.0, + 'Q-e雷:大招首段': float(skill_data['煌煌千道镇式']['数值']['天狗咒雷•金刚坏伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e雷-j超激化:大招首段超激化': float(skill_data['煌煌千道镇式']['数值']['天狗咒雷•金刚坏伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e雷:大招雷砾': float(skill_data['煌煌千道镇式']['数值']['天狗咒雷•雷砾伤害'][level_q].replace('%', '')) / 100.0, + } + async def draw_dmg_pic(dmg: Dict[str, Union[tuple, list]]) -> PMImage: