diff --git a/latest version/core/character.py b/latest version/core/character.py index 72f3e22..66ca7d9 100644 --- a/latest version/core/character.py +++ b/latest version/core/character.py @@ -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 diff --git a/latest version/core/constant.py b/latest version/core/constant.py index 2756606..8f2b4b4 100644 --- a/latest version/core/constant.py +++ b/latest version/core/constant.py @@ -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' diff --git a/latest version/core/user.py b/latest version/core/user.py index dc135e3..12f712f 100644 --- a/latest version/core/user.py +++ b/latest version/core/user.py @@ -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: diff --git a/latest version/core/world.py b/latest version/core/world.py index d2ec611..93ff3e5 100644 --- a/latest version/core/world.py +++ b/latest version/core/world.py @@ -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 diff --git a/latest version/database/init/tables.sql b/latest version/database/init/tables.sql index 5e8d8f2..0a6d3c7 100644 --- a/latest version/database/init/tables.sql +++ b/latest version/database/init/tables.sql @@ -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, diff --git a/latest version/server/others.py b/latest version/server/others.py index b8e7c1b..58d1d47 100644 --- a/latest version/server/others.py +++ b/latest version/server/others.py @@ -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({})