mirror of
https://github.com/Lost-MSth/Arcaea-server.git
synced 2025-12-14 08:06:23 +08:00
[Enhance] Support uncapped Kanae's skill
- Add support for `skill_kanae_uncap` - For Arcaea 5.2.6
This commit is contained in:
@@ -120,6 +120,18 @@ class Character(CollectionItemMixin):
|
||||
self.uncap_cores: list = []
|
||||
self.voice: list = None
|
||||
|
||||
@property
|
||||
def frag_value(self) -> float:
|
||||
return self.frag.get_value(self.level)
|
||||
|
||||
@property
|
||||
def prog_value(self) -> float:
|
||||
return self.prog.get_value(self.level)
|
||||
|
||||
@property
|
||||
def overdrive_value(self) -> float:
|
||||
return self.overdrive.get_value(self.level)
|
||||
|
||||
@property
|
||||
def skill_id_displayed(self) -> str:
|
||||
return None
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from .config_manager import Config
|
||||
|
||||
ARCAEA_SERVER_VERSION = 'v2.11.3.2.test'
|
||||
ARCAEA_SERVER_VERSION = 'v2.11.3.2'
|
||||
ARCAEA_LOG_DATBASE_VERSION = 'v1.1'
|
||||
|
||||
|
||||
|
||||
@@ -308,6 +308,7 @@ class UserInfo(User):
|
||||
self.max_stamina_notification_enabled = False
|
||||
self.prog_boost: int = 0
|
||||
self.beyond_boost_gauge: float = 0
|
||||
self.kanae_stored_prog: float = 0
|
||||
self.next_fragstam_ts: int = None
|
||||
self.world_mode_locked_end_ts: int = None
|
||||
self.current_map: 'Map' = None
|
||||
@@ -501,6 +502,7 @@ class UserInfo(User):
|
||||
"current_map": self.current_map.map_id,
|
||||
"prog_boost": self.prog_boost,
|
||||
"beyond_boost_gauge": self.beyond_boost_gauge,
|
||||
"kanae_stored_prog": self.kanae_stored_prog,
|
||||
"next_fragstam_ts": self.next_fragstam_ts,
|
||||
"max_stamina_ts": self.stamina.max_stamina_ts,
|
||||
"stamina": self.stamina.stamina,
|
||||
@@ -559,6 +561,7 @@ class UserInfo(User):
|
||||
self.stamina.set_value(x[32], x[33])
|
||||
self.world_mode_locked_end_ts = x[34] if x[34] else -1
|
||||
self.beyond_boost_gauge = x[35] if x[35] else 0
|
||||
self.kanae_stored_prog = x[36] if x[36] else 0
|
||||
|
||||
return self
|
||||
|
||||
@@ -616,7 +619,7 @@ class UserInfo(User):
|
||||
查询user表有关世界模式打歌的信息
|
||||
'''
|
||||
self.c.execute(
|
||||
'''select character_id, max_stamina_ts, stamina, is_skill_sealed, is_char_uncapped, is_char_uncapped_override, current_map, world_mode_locked_end_ts, beyond_boost_gauge from user where user_id=?''', (self.user_id,))
|
||||
'''select character_id, max_stamina_ts, stamina, is_skill_sealed, is_char_uncapped, is_char_uncapped_override, current_map, world_mode_locked_end_ts, beyond_boost_gauge, kanae_stored_prog from user where user_id=?''', (self.user_id,))
|
||||
x = self.c.fetchone()
|
||||
if not x:
|
||||
raise NoData('No user.', 108, -3)
|
||||
@@ -630,6 +633,7 @@ class UserInfo(User):
|
||||
self.current_map = UserMap(self.c, x[6], self)
|
||||
self.world_mode_locked_end_ts = x[7] if x[7] else -1
|
||||
self.beyond_boost_gauge = x[8] if x[8] else 0
|
||||
self.kanae_stored_prog = x[9] if x[9] else 0
|
||||
|
||||
@property
|
||||
def global_rank(self) -> int:
|
||||
|
||||
@@ -440,13 +440,14 @@ class UserStamina(Stamina):
|
||||
|
||||
class WorldSkillMixin:
|
||||
def before_calculate(self) -> None:
|
||||
factory_dict = {'skill_vita': self._skill_vita,
|
||||
'skill_mika': self._skill_mika,
|
||||
'skill_ilith_ivy': self._skill_ilith_ivy,
|
||||
'ilith_awakened_skill': self._ilith_awakened_skill,
|
||||
'skill_hikari_vanessa': self._skill_hikari_vanessa,
|
||||
'skill_mithra': self._skill_mithra
|
||||
}
|
||||
factory_dict = {
|
||||
'skill_vita': self._skill_vita,
|
||||
'skill_mika': self._skill_mika,
|
||||
'skill_ilith_ivy': self._skill_ilith_ivy,
|
||||
'ilith_awakened_skill': self._ilith_awakened_skill,
|
||||
'skill_hikari_vanessa': self._skill_hikari_vanessa,
|
||||
'skill_mithra': self._skill_mithra
|
||||
}
|
||||
if self.user_play.beyond_gauge == 0 and self.character_used.character_id == 35 and self.character_used.skill_id_displayed:
|
||||
self._special_tempest()
|
||||
|
||||
@@ -454,14 +455,15 @@ class WorldSkillMixin:
|
||||
factory_dict[self.character_used.skill_id_displayed]()
|
||||
|
||||
def after_climb(self) -> None:
|
||||
factory_dict = {'eto_uncap': self._eto_uncap,
|
||||
'ayu_uncap': self._ayu_uncap,
|
||||
'skill_fatalis': self._skill_fatalis,
|
||||
'skill_amane': self._skill_amane,
|
||||
'skill_maya': self._skill_maya,
|
||||
'luna_uncap': self._luna_uncap,
|
||||
'skill_kanae_uncap': self._skill_kanae_uncap
|
||||
}
|
||||
factory_dict = {
|
||||
'eto_uncap': self._eto_uncap,
|
||||
'ayu_uncap': self._ayu_uncap,
|
||||
'skill_fatalis': self._skill_fatalis,
|
||||
'skill_amane': self._skill_amane,
|
||||
'skill_maya': self._skill_maya,
|
||||
'luna_uncap': self._luna_uncap,
|
||||
'skill_kanae_uncap': self._skill_kanae_uncap
|
||||
}
|
||||
if self.character_used.skill_id_displayed in factory_dict:
|
||||
factory_dict[self.character_used.skill_id_displayed]()
|
||||
|
||||
@@ -597,8 +599,11 @@ class WorldSkillMixin:
|
||||
def _skill_kanae_uncap(self) -> None:
|
||||
'''
|
||||
kanae 觉醒技能,保存世界模式 progress 并在下次结算
|
||||
直接加减在 progress 最后
|
||||
技能存储 base_progress * PROG / 50,下一次消耗全部存储值(无视技能和搭档,但需要非技能隐藏状态)
|
||||
'''
|
||||
pass
|
||||
self.kanae_stored_progress = self.progress_normalized
|
||||
self.user.current_map.reclimb(self.final_progress)
|
||||
|
||||
|
||||
class BaseWorldPlay(WorldSkillMixin):
|
||||
@@ -615,12 +620,8 @@ class BaseWorldPlay(WorldSkillMixin):
|
||||
self.user_play = user_play
|
||||
self.character_used = None
|
||||
|
||||
self.progress_normalized: float = None
|
||||
self.character_bonus_progress_normalized: float = None
|
||||
|
||||
# kanae_stored_progress: float
|
||||
# kanae_added_progress: float
|
||||
# partner_multiply: float
|
||||
# wpaid: str
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
@@ -651,10 +652,7 @@ class BaseWorldPlay(WorldSkillMixin):
|
||||
"max_stamina_ts": self.user.stamina.max_stamina_ts,
|
||||
'world_mode_locked_end_ts': self.user.world_mode_locked_end_ts,
|
||||
'beyond_boost_gauge': self.user.beyond_boost_gauge,
|
||||
# 'kanae_stored_progress': 7114000, # 往群愿里塞
|
||||
# 'kanae_added_progress': 514000, # 群愿往外拿
|
||||
# 'wpaid': 'helloworld', # world play id ???
|
||||
# 'partner_multiply': 456, # ?
|
||||
}
|
||||
|
||||
if self.character_used.skill_id_displayed == 'skill_maya':
|
||||
@@ -691,11 +689,11 @@ class BaseWorldPlay(WorldSkillMixin):
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
def final_progress(self) -> float:
|
||||
def progress_normalized(self) -> float:
|
||||
raise NotImplementedError
|
||||
|
||||
def get_step(self) -> None:
|
||||
# to get self.progress_normalized
|
||||
@property
|
||||
def final_progress(self) -> float:
|
||||
raise NotImplementedError
|
||||
|
||||
def update(self) -> None:
|
||||
@@ -711,6 +709,9 @@ class BaseWorldPlay(WorldSkillMixin):
|
||||
self.user.character.select_character_info()
|
||||
if not self.user.is_skill_sealed:
|
||||
self.character_used = self.user.character
|
||||
if self.user_play.beyond_gauge == 0 and self.user.kanae_stored_prog > 0:
|
||||
# 实在不想拆开了,在这里判断一下,注意这段不会在 BeyondWorldPlay 中执行
|
||||
self.kanae_added_progress = self.user.kanae_stored_prog
|
||||
else:
|
||||
self.character_used.character_id = self.user.character.character_id
|
||||
self.character_used.level.level = self.user.character.level.level
|
||||
@@ -721,7 +722,6 @@ class BaseWorldPlay(WorldSkillMixin):
|
||||
|
||||
self.user.current_map.select_map_info()
|
||||
self.before_calculate()
|
||||
self.get_step()
|
||||
self.user.current_map.climb(self.final_progress)
|
||||
self.after_climb()
|
||||
|
||||
@@ -755,6 +755,10 @@ class WorldPlay(BaseWorldPlay):
|
||||
self.prog_tempest: float = None
|
||||
self.prog_skill_increase: float = None
|
||||
|
||||
self.kanae_added_progress: float = None # 群愿往外拿
|
||||
self.kanae_stored_progress: float = None # 往群愿里塞
|
||||
# self.user.kanae_stored_prog: float 群愿有的
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
r = super().to_dict()
|
||||
|
||||
@@ -773,6 +777,12 @@ class WorldPlay(BaseWorldPlay):
|
||||
r['char_stats']['prog'] += self.prog_tempest # 没试过要不要这样
|
||||
r['char_stats']['prog_tempest'] = self.prog_tempest
|
||||
|
||||
if self.kanae_added_progress is not None:
|
||||
r['kanae_added_progress'] = self.kanae_added_progress
|
||||
|
||||
if self.kanae_stored_progress is not None:
|
||||
r['kanae_stored_progress'] = self.kanae_stored_progress
|
||||
|
||||
r['partner_adjusted_prog'] = self.partner_adjusted_prog
|
||||
|
||||
r["user_map"]["steps"] = [x.to_dict()
|
||||
@@ -793,7 +803,7 @@ class WorldPlay(BaseWorldPlay):
|
||||
|
||||
@property
|
||||
def final_progress(self) -> float:
|
||||
return (self.progress_normalized + (self.character_bonus_progress_normalized or 0)) * self.step_times
|
||||
return (self.progress_normalized + (self.character_bonus_progress_normalized or 0)) * self.step_times + (self.kanae_added_progress or 0) - (self.kanae_stored_progress or 0)
|
||||
|
||||
@property
|
||||
def partner_adjusted_prog(self) -> float:
|
||||
@@ -805,9 +815,9 @@ class WorldPlay(BaseWorldPlay):
|
||||
prog += self.prog_skill_increase
|
||||
return prog
|
||||
|
||||
def get_step(self) -> None:
|
||||
self.progress_normalized = self.base_progress * \
|
||||
(self.partner_adjusted_prog / 50)
|
||||
@property
|
||||
def progress_normalized(self) -> float:
|
||||
return self.base_progress * (self.partner_adjusted_prog / 50)
|
||||
|
||||
def update(self) -> None:
|
||||
'''世界模式更新'''
|
||||
@@ -819,6 +829,17 @@ class WorldPlay(BaseWorldPlay):
|
||||
self.user.update_user_one_column(
|
||||
'beyond_boost_gauge', self.user.beyond_boost_gauge)
|
||||
|
||||
# 更新kanae存储进度
|
||||
if self.kanae_stored_progress is not None:
|
||||
self.user.kanae_stored_prog = self.kanae_stored_progress
|
||||
self.user.update_user_one_column(
|
||||
'kanae_stored_prog', self.user.kanae_stored_prog)
|
||||
return
|
||||
if self.kanae_added_progress is None:
|
||||
return
|
||||
self.kanae_stored_progress = 0
|
||||
self.user.update_user_one_column('kanae_stored_prog', 0)
|
||||
|
||||
|
||||
class BeyondWorldPlay(BaseWorldPlay):
|
||||
|
||||
@@ -844,6 +865,14 @@ class BeyondWorldPlay(BaseWorldPlay):
|
||||
def final_progress(self) -> float:
|
||||
return self.progress_normalized * self.step_times
|
||||
|
||||
@property
|
||||
def progress_normalized(self) -> float:
|
||||
overdrive = self.character_used.overdrive_value
|
||||
if self.over_skill_increase:
|
||||
overdrive += self.over_skill_increase
|
||||
|
||||
return self.base_progress * (overdrive / 50) * self.affinity_multiplier
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
r = super().to_dict()
|
||||
|
||||
@@ -851,6 +880,8 @@ class BeyondWorldPlay(BaseWorldPlay):
|
||||
r['pre_boost_progress'] = self.progress_normalized * \
|
||||
self.user_play.fragment_multiply / 100
|
||||
|
||||
# r['partner_multiply'] = self.affinity_multiplier # ?
|
||||
|
||||
if self.over_skill_increase is not None:
|
||||
r['char_stats']['over_skill_increase'] = self.over_skill_increase
|
||||
|
||||
@@ -870,12 +901,3 @@ class BeyondWorldPlay(BaseWorldPlay):
|
||||
self.user.beyond_boost_gauge = 0
|
||||
self.user.update_user_one_column(
|
||||
'beyond_boost_gauge', self.user.beyond_boost_gauge)
|
||||
|
||||
def get_step(self) -> None:
|
||||
overdrive = self.character_used.overdrive.get_value(
|
||||
self.character_used.level)
|
||||
if self.over_skill_increase:
|
||||
overdrive += self.over_skill_increase
|
||||
|
||||
self.progress_normalized = self.base_progress * \
|
||||
(overdrive / 50) * self.affinity_multiplier
|
||||
|
||||
@@ -34,7 +34,8 @@ next_fragstam_ts int,
|
||||
max_stamina_ts int,
|
||||
stamina int,
|
||||
world_mode_locked_end_ts int,
|
||||
beyond_boost_gauge real default 0
|
||||
beyond_boost_gauge real default 0,
|
||||
kanae_stored_prog real default 0
|
||||
);
|
||||
create table if not exists login(access_token text,
|
||||
user_id int,
|
||||
|
||||
@@ -60,7 +60,7 @@ def finale_end():
|
||||
return success_return({})
|
||||
|
||||
|
||||
@bp.route('/applog/me', methods=['POST'])
|
||||
@bp.route('/applog/me/log', methods=['POST'])
|
||||
def applog_me():
|
||||
# 异常日志,不处理
|
||||
return success_return({})
|
||||
|
||||
Reference in New Issue
Block a user