系统奶修正(115级+婚房) #5
@@ -37,8 +37,9 @@ class CalcCarryMixin(CharacterBase):
|
|||||||
# 力智系数
|
# 力智系数
|
||||||
value0_1 = getattr(self, attrs[0])
|
value0_1 = getattr(self, attrs[0])
|
||||||
value0_2 = 获取基础属性(self.角色, self.职业)[0] if attrs[0] == 'STR' else 获取基础属性(self.角色, self.职业)[1]
|
value0_2 = 获取基础属性(self.角色, self.职业)[0] if attrs[0] == 'STR' else 获取基础属性(self.角色, self.职业)[1]
|
||||||
|
marriage_correction = getattr(self, 'system_buff_marriage_correction', 0) if attrs[0] == 'STR' else 0
|
||||||
# 系统奶及奶系增幅
|
# 系统奶及奶系增幅
|
||||||
value = value0_1 + ((value0_1 - value0_2) * 3.08 + 2886) * (1 if DSB else 0) + (170000 + 300000) * (1 if BUFF else 0)
|
value = value0_1 + ((value0_1 - value0_2 - marriage_correction) * 3.08 + 2886) * (1 if DSB else 0) + (170000 + 300000) * (1 if BUFF else 0)
|
||||||
ratio_0: float = value / 250 + 1
|
ratio_0: float = value / 250 + 1
|
||||||
# 物理/魔法/独立攻击力
|
# 物理/魔法/独立攻击力
|
||||||
ratio_1: float = getattr(self, attrs[1]) + 30000 * (1 if BUFF else 0)
|
ratio_1: float = getattr(self, attrs[1]) + 30000 * (1 if BUFF else 0)
|
||||||
|
|||||||
@@ -916,8 +916,9 @@ class Character(CharacterProperty):
|
|||||||
# 力智系数
|
# 力智系数
|
||||||
value0_1 = getattr(self, attrs[0])
|
value0_1 = getattr(self, attrs[0])
|
||||||
value0_2 = 获取基础属性(self.角色, self.职业)[0] if attrs[0] == 'STR' else 获取基础属性(self.角色, self.职业)[1]
|
value0_2 = 获取基础属性(self.角色, self.职业)[0] if attrs[0] == 'STR' else 获取基础属性(self.角色, self.职业)[1]
|
||||||
|
marriage_correction = getattr(self, 'system_buff_marriage_correction', 0) if attrs[0] == 'STR' else 0
|
||||||
# 系统奶及奶系增幅
|
# 系统奶及奶系增幅
|
||||||
value = value0_1 + ((value0_1 - value0_2) * 3.08 + 2886) * (1 if DSB else 0) + (170000 + 300000) * (1 if BUFF else 0)
|
value = value0_1 + ((value0_1 - value0_2 - marriage_correction) * 3.08 + 2886) * (1 if DSB else 0) + (170000 + 300000) * (1 if BUFF else 0)
|
||||||
ratio_0: float = value / 250 + 1
|
ratio_0: float = value / 250 + 1
|
||||||
# 物理/魔法/独立攻击力
|
# 物理/魔法/独立攻击力
|
||||||
ratio_1: float = getattr(self, attrs[1]) + 30000 * (1 if BUFF else 0)
|
ratio_1: float = getattr(self, attrs[1]) + 30000 * (1 if BUFF else 0)
|
||||||
|
|||||||
@@ -342,7 +342,7 @@ def 精通计算(装备等级, 品质, 强化等级, 部位, 甲类, 属性='',
|
|||||||
|
|
||||||
# region 角色基础属性
|
# region 角色基础属性
|
||||||
|
|
||||||
当前等级 = 110
|
当前等级 = 115
|
||||||
|
|
||||||
# 力量 体力 智力 精神
|
# 力量 体力 智力 精神
|
||||||
角色基础系数 = {
|
角色基础系数 = {
|
||||||
@@ -389,7 +389,7 @@ def 精通计算(装备等级, 品质, 强化等级, 部位, 甲类, 属性='',
|
|||||||
'枪炮师-神枪手(女)': (5.5, 5.5, 3.5, 3.5),
|
'枪炮师-神枪手(女)': (5.5, 5.5, 3.5, 3.5),
|
||||||
'机械师-神枪手(女)': (3.5, 3.5, 5.5, 5.5),
|
'机械师-神枪手(女)': (3.5, 3.5, 5.5, 5.5),
|
||||||
'弹药专家-神枪手(女)': (4.7, 4.3, 4.7, 4.3),
|
'弹药专家-神枪手(女)': (4.7, 4.3, 4.7, 4.3),
|
||||||
'协战师-神枪手(女)': (3.5, 5.5, 3.5, 5.5),
|
'协战师-神枪手(女)': (5.5, 3, 4, 5.5),
|
||||||
'漫游枪手-神枪手(男)': (5.5, 5.5, 3.5, 3.5),
|
'漫游枪手-神枪手(男)': (5.5, 5.5, 3.5, 3.5),
|
||||||
'枪炮师-神枪手(男)': (5.5, 5.5, 3.5, 3.5),
|
'枪炮师-神枪手(男)': (5.5, 5.5, 3.5, 3.5),
|
||||||
'机械师-神枪手(男)': (3.5, 3.5, 5.5, 5.5),
|
'机械师-神枪手(男)': (3.5, 3.5, 5.5, 5.5),
|
||||||
@@ -403,9 +403,9 @@ def 精通计算(装备等级, 品质, 强化等级, 部位, 甲类, 属性='',
|
|||||||
'召唤师-魔法师(女)': (3.8, 3.7, 5.3, 5.2),
|
'召唤师-魔法师(女)': (3.8, 3.7, 5.3, 5.2),
|
||||||
'战斗法师-魔法师(女)': (5, 4, 5, 4),
|
'战斗法师-魔法师(女)': (5, 4, 5, 4),
|
||||||
'魔道学者-魔法师(女)': (4.5, 4, 5.2, 4.3),
|
'魔道学者-魔法师(女)': (4.5, 4, 5.2, 4.3),
|
||||||
'小魔女-魔法师(女)': (4.7, 4.8, 5.5, 4.5),
|
'小魔女-魔法师(女)': (3.5, 4.5, 5.5, 4.5),
|
||||||
'元素爆破师-魔法师(男)': (3.5, 3.5, 5.5, 5.5),
|
'元素爆破师-魔法师(男)': (3.5, 3.5, 5.5, 5.5),
|
||||||
'冰结师-魔法师(男)': (3.5, 3.7, 5.5, 5.2),
|
'冰结师-魔法师(男)': (3.5, 3.8, 5.5, 5.2),
|
||||||
'血法师-魔法师(男)': (5.5, 5.5, 3.5, 3.5),
|
'血法师-魔法师(男)': (5.5, 5.5, 3.5, 3.5),
|
||||||
'逐风者-魔法师(男)': (5.5, 5.2, 3.5, 3.8),
|
'逐风者-魔法师(男)': (5.5, 5.2, 3.5, 3.8),
|
||||||
'次元行者-魔法师(男)': (3.5, 3.5, 5.5, 5.5),
|
'次元行者-魔法师(男)': (3.5, 3.5, 5.5, 5.5),
|
||||||
@@ -425,7 +425,7 @@ def 精通计算(装备等级, 品质, 强化等级, 部位, 甲类, 属性='',
|
|||||||
'暗殿骑士-鬼剑士(女)': (3.5, 3.5, 5.5, 5.5),
|
'暗殿骑士-鬼剑士(女)': (3.5, 3.5, 5.5, 5.5),
|
||||||
'契魔者-鬼剑士(女)': (5.5, 5.5, 3.5, 3.5),
|
'契魔者-鬼剑士(女)': (5.5, 5.5, 3.5, 3.5),
|
||||||
'流浪武士-鬼剑士(女)': (5.5, 5.5, 3.5, 3.5),
|
'流浪武士-鬼剑士(女)': (5.5, 5.5, 3.5, 3.5),
|
||||||
'圣骑士-圣职者(男)': (3.5, 5.5, 4.5, 5.5),
|
'圣骑士-圣职者(男)': (3.5, 5.5, 3.5, 5.5),
|
||||||
'蓝拳圣使-圣职者(男)': (5.2, 5, 3.9, 3.9),
|
'蓝拳圣使-圣职者(男)': (5.2, 5, 3.9, 3.9),
|
||||||
'驱魔师-圣职者(男)': (5, 4, 5, 4),
|
'驱魔师-圣职者(男)': (5, 4, 5, 4),
|
||||||
'复仇者-圣职者(男)': (3.5, 3.5, 5.5, 5.5),
|
'复仇者-圣职者(男)': (3.5, 3.5, 5.5, 5.5),
|
||||||
@@ -438,8 +438,8 @@ def 精通计算(装备等级, 品质, 强化等级, 部位, 甲类, 属性='',
|
|||||||
# todo
|
# todo
|
||||||
'缪斯-弓箭手': (3.5, 5.5, 3.5, 5.5),
|
'缪斯-弓箭手': (3.5, 5.5, 3.5, 5.5),
|
||||||
'旅人-弓箭手': (5.5, 5.5, 3.5, 3.5),
|
'旅人-弓箭手': (5.5, 5.5, 3.5, 3.5),
|
||||||
'猎人-弓箭手': (5.5, 5.5, 3.5, 3.5),
|
'猎人-弓箭手': (5.5, 5, 3.5, 4),
|
||||||
'妖护使-弓箭手': (5.5, 5.5, 5.5, 3.5),
|
'妖护使-弓箭手': (3.5, 3.5, 5.5, 5.5),
|
||||||
'奇美拉-弓箭手': (5.5, 5.5, 3.5, 3.5),
|
'奇美拉-弓箭手': (5.5, 5.5, 3.5, 3.5),
|
||||||
#
|
#
|
||||||
'破浪者-帝国骑士': (6, 5.5, 3.5, 3.5),
|
'破浪者-帝国骑士': (6, 5.5, 3.5, 3.5),
|
||||||
@@ -601,11 +601,11 @@ def 精通计算(装备等级, 品质, 强化等级, 部位, 甲类, 属性='',
|
|||||||
def 获取基础属性(角色, 职业):
|
def 获取基础属性(角色, 职业):
|
||||||
角色数据 = 角色基础系数[角色]
|
角色数据 = 角色基础系数[角色]
|
||||||
职业数据 = 职业基础数据[职业 + '-' + 角色]
|
职业数据 = 职业基础数据[职业 + '-' + 角色]
|
||||||
# TODO 将93 + 当前等级 角色基础数据+94 角色成长全部+1
|
基础补正 = 当前等级 - 7
|
||||||
力量 = int(角色数据[4] + 角色数据[0] * min(14, 当前等级 - 1) + 94 + (职业数据[0] + 1) * max(当前等级 - 15, 0))
|
力量 = int(角色数据[4] + 角色数据[0] * min(14, 当前等级 - 1) + 基础补正 + (职业数据[0] + 1) * max(当前等级 - 15, 0))
|
||||||
体力 = int(角色数据[5] + 角色数据[1] * min(14, 当前等级 - 1) + 94 + (职业数据[1] + 1) * max(当前等级 - 15, 0))
|
体力 = int(角色数据[5] + 角色数据[1] * min(14, 当前等级 - 1) + 基础补正 + (职业数据[1] + 1) * max(当前等级 - 15, 0))
|
||||||
智力 = int(角色数据[6] + 角色数据[2] * min(14, 当前等级 - 1) + 94 + (职业数据[2] + 1) * max(当前等级 - 15, 0))
|
智力 = int(角色数据[6] + 角色数据[2] * min(14, 当前等级 - 1) + 基础补正 + (职业数据[2] + 1) * max(当前等级 - 15, 0))
|
||||||
精神 = int(角色数据[7] + 角色数据[3] * min(14, 当前等级 - 1) + 94 + (职业数据[3] + 1) * max(当前等级 - 15, 0))
|
精神 = int(角色数据[7] + 角色数据[3] * min(14, 当前等级 - 1) + 基础补正 + (职业数据[3] + 1) * max(当前等级 - 15, 0))
|
||||||
return (力量, 智力, 体力, 精神)
|
return (力量, 智力, 体力, 精神)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ def sundry_7(char: CharacterProperty, *args):
|
|||||||
婚房婚戒
|
婚房婚戒
|
||||||
婚戒属强不享受辟邪玉加成
|
婚戒属强不享受辟邪玉加成
|
||||||
"""
|
"""
|
||||||
|
char.system_buff_marriage_correction = 0
|
||||||
# 婚戒
|
# 婚戒
|
||||||
if args[0] == 1:
|
if args[0] == 1:
|
||||||
char.SetStatus(全属强=1)
|
char.SetStatus(全属强=1)
|
||||||
@@ -72,6 +73,7 @@ def sundry_7(char: CharacterProperty, *args):
|
|||||||
char.SetStatus(体精=8)
|
char.SetStatus(体精=8)
|
||||||
elif args[1] == 2:
|
elif args[1] == 2:
|
||||||
char.SetStatus(体精=10, 力智=15)
|
char.SetStatus(体精=10, 力智=15)
|
||||||
|
char.system_buff_marriage_correction = 15
|
||||||
|
|
||||||
|
|
||||||
@register
|
@register
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from core.basic.formula import 当前等级, 获取基础属性
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
('role', 'job', 'expected'),
|
||||||
|
[
|
||||||
|
('格斗家(女)', '气功师', (635, 818, 635, 818)),
|
||||||
|
('神枪手(女)', '协战师', (827, 676, 577, 826)),
|
||||||
|
('圣职者(男)', '圣骑士', (630, 618, 831, 827)),
|
||||||
|
('魔法师(女)', '小魔女', (618, 835, 718, 735)),
|
||||||
|
('魔法师(男)', '冰结师', (611, 843, 648, 805)),
|
||||||
|
('弓箭手', '猎人', (828, 625, 778, 675)),
|
||||||
|
('弓箭手', '妖护使', (628, 825, 628, 825)),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_level_115_base_attributes_match_2604_sheet(role, job, expected):
|
||||||
|
assert 当前等级 == 115
|
||||||
|
assert 获取基础属性(role, job) == expected
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
from types import SimpleNamespace
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from core.basic.character import calc_carry
|
||||||
|
from core.basic.character.calc_carry import CalcCarryMixin
|
||||||
|
from core.equipment.version_0.sundry import sundry_7
|
||||||
|
|
||||||
|
|
||||||
|
class StatusTarget:
|
||||||
|
def __init__(self):
|
||||||
|
self.status_calls = []
|
||||||
|
|
||||||
|
def SetStatus(self, **kwargs):
|
||||||
|
self.status_calls.append(kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def make_carry(output_type: str):
|
||||||
|
return SimpleNamespace(
|
||||||
|
输出类型=output_type,
|
||||||
|
角色='test-role',
|
||||||
|
职业='test-job',
|
||||||
|
STR=8700,
|
||||||
|
INT=8700,
|
||||||
|
AtkP=4500,
|
||||||
|
AtkM=4500,
|
||||||
|
AtkI=4500,
|
||||||
|
PAtkP=1,
|
||||||
|
PAtkM=1,
|
||||||
|
PAtkI=1,
|
||||||
|
ElementDB={'火': 0},
|
||||||
|
buff=1,
|
||||||
|
SkillAttack=1,
|
||||||
|
jade_effect=SimpleNamespace(SkillAttack=0, AttackP=0),
|
||||||
|
Attack=0,
|
||||||
|
AttackP=1,
|
||||||
|
ElementIncrease=1,
|
||||||
|
system_buff_marriage_correction=15,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_marriage_attributes_enable_system_buff_correction():
|
||||||
|
target = StatusTarget()
|
||||||
|
|
||||||
|
sundry_7(target, 4, 2)
|
||||||
|
|
||||||
|
assert target.system_buff_marriage_correction == 15
|
||||||
|
assert {'体精': 10, '力智': 15} in target.status_calls
|
||||||
|
|
||||||
|
|
||||||
|
def test_marriage_correction_resets_when_attribute_is_not_selected():
|
||||||
|
target = StatusTarget()
|
||||||
|
sundry_7(target, 4, 2)
|
||||||
|
|
||||||
|
sundry_7(target, 4, 0)
|
||||||
|
|
||||||
|
assert target.system_buff_marriage_correction == 0
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
('output_type', 'expected_correction'),
|
||||||
|
[
|
||||||
|
('物理百分比', 15),
|
||||||
|
('魔法百分比', 0),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_system_buff_applies_marriage_correction_by_main_stat(
|
||||||
|
monkeypatch, output_type, expected_correction
|
||||||
|
):
|
||||||
|
monkeypatch.setattr(calc_carry, '获取基础属性', lambda *_: (818, 818, 818, 818))
|
||||||
|
carry = make_carry(output_type)
|
||||||
|
|
||||||
|
ratios = CalcCarryMixin.calc_damage_ration(carry, DSB=True, BUFF=False)
|
||||||
|
|
||||||
|
system_buff = (8700 - 818 - expected_correction) * 3.08 + 2886
|
||||||
|
assert ratios[0] == pytest.approx((8700 + system_buff) / 250 + 1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_system_buff_matches_2604_sheet_light_nen_example():
|
||||||
|
carry = make_carry('魔法百分比')
|
||||||
|
carry.角色 = '格斗家(女)'
|
||||||
|
carry.职业 = '气功师'
|
||||||
|
|
||||||
|
ratios = CalcCarryMixin.calc_damage_ration(carry, DSB=True, BUFF=False)
|
||||||
|
|
||||||
|
final_intelligence = (ratios[0] - 1) * 250
|
||||||
|
assert final_intelligence - 8700 == pytest.approx(27162.56)
|
||||||
|
assert final_intelligence == pytest.approx(35862.56)
|
||||||
Reference in New Issue
Block a user