修复契魔者魔刃狂舞影子伤害计算 #9
@@ -922,7 +922,7 @@ class Skill28(ActiveSkill):
|
|||||||
data4 = data0
|
data4 = data0
|
||||||
hit4 = 10
|
hit4 = 10
|
||||||
|
|
||||||
data5 = data1
|
data5 = data2
|
||||||
hit5 = 1
|
hit5 = 1
|
||||||
power4 = 0
|
power4 = 0
|
||||||
power5 = 0
|
power5 = 0
|
||||||
@@ -1403,8 +1403,8 @@ class Skill36(PassiveSkill):
|
|||||||
{"data":data0,"type":"*skillDamage","exceptSkills":["魔刃狂舞","蛇腹剑 : 缠","唤魔 : 塔莫斯之袭"]},
|
{"data":data0,"type":"*skillDamage","exceptSkills":["魔刃狂舞","蛇腹剑 : 缠","唤魔 : 塔莫斯之袭"]},
|
||||||
{"data":data1,"type":"+power8","skills":["蛇腹剑 : 缠"]},
|
{"data":data1,"type":"+power8","skills":["蛇腹剑 : 缠"]},
|
||||||
{"data":data1,"type":"+power9","skills":["蛇腹剑 : 缠"]},
|
{"data":data1,"type":"+power9","skills":["蛇腹剑 : 缠"]},
|
||||||
{"data":data2,"type":"+power4","skills":["魔刃狂舞"]},
|
{"data":data3,"type":"+power4","skills":["魔刃狂舞"]},
|
||||||
{"data":data2,"type":"+power5","skills":["魔刃狂舞"]},
|
{"data":data3,"type":"+power5","skills":["魔刃狂舞"]},
|
||||||
{"data":data4,"type":"+hit1","skills":["唤魔 : 塔莫斯之袭"],"ratio": 1},
|
{"data":data4,"type":"+hit1","skills":["唤魔 : 塔莫斯之袭"],"ratio": 1},
|
||||||
{"data":data5,"type":"*power3","skills":["唤魔 : 塔莫斯之袭"]}
|
{"data":data5,"type":"*power3","skills":["唤魔 : 塔莫斯之袭"]}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
import ast
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
SKILL_FILE = (
|
||||||
|
Path(__file__).resolve().parents[2]
|
||||||
|
/ "core"
|
||||||
|
/ "character"
|
||||||
|
/ "GF"
|
||||||
|
/ "swordman_female"
|
||||||
|
/ "demon_slayer.py"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _skill_class(name: str) -> ast.ClassDef:
|
||||||
|
module = ast.parse(SKILL_FILE.read_text(encoding="utf-8"))
|
||||||
|
return next(
|
||||||
|
node
|
||||||
|
for node in module.body
|
||||||
|
if isinstance(node, ast.ClassDef)
|
||||||
|
and any(
|
||||||
|
isinstance(item, ast.Assign)
|
||||||
|
and any(isinstance(target, ast.Name) and target.id == "name" for target in item.targets)
|
||||||
|
and isinstance(item.value, ast.Constant)
|
||||||
|
and item.value.value == name
|
||||||
|
for item in node.body
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_blade_dance_shadow_uses_final_hit_damage_not_hit_count():
|
||||||
|
skill = _skill_class("魔刃狂舞")
|
||||||
|
shadow_final_hit = next(
|
||||||
|
item
|
||||||
|
for item in skill.body
|
||||||
|
if isinstance(item, ast.Assign)
|
||||||
|
and any(isinstance(target, ast.Name) and target.id == "data5" for target in item.targets)
|
||||||
|
)
|
||||||
|
|
||||||
|
assert isinstance(shadow_final_hit.value, ast.Name)
|
||||||
|
assert shadow_final_hit.value.id == "data2"
|
||||||
|
|
||||||
|
|
||||||
|
def test_blade_dance_shadow_uses_its_own_passive_ratio():
|
||||||
|
passive = _skill_class("唤魔 : 弑神剑")
|
||||||
|
associations = next(
|
||||||
|
item.value
|
||||||
|
for item in passive.body
|
||||||
|
if isinstance(item, ast.Assign)
|
||||||
|
and any(isinstance(target, ast.Name) and target.id == "associate" for target in item.targets)
|
||||||
|
)
|
||||||
|
shadow_associations = [
|
||||||
|
dict(zip((key.value for key in entry.keys), entry.values))
|
||||||
|
for entry in associations.elts
|
||||||
|
if isinstance(entry, ast.Dict)
|
||||||
|
]
|
||||||
|
|
||||||
|
for power in ("+power4", "+power5"):
|
||||||
|
association = next(
|
||||||
|
entry
|
||||||
|
for entry in shadow_associations
|
||||||
|
if isinstance(entry.get("type"), ast.Constant)
|
||||||
|
and entry["type"].value == power
|
||||||
|
)
|
||||||
|
assert isinstance(association["data"], ast.Name)
|
||||||
|
assert association["data"].id == "data3"
|
||||||
Reference in New Issue
Block a user