Skip to content

Commit fc27503

Browse files
committed
Add: GemsFarming emotion control
1 parent f323721 commit fc27503

1 file changed

Lines changed: 58 additions & 4 deletions

File tree

module/campaign/gems_farming.py

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1+
from datetime import datetime
2+
3+
import numpy as np
4+
5+
from module.base.decorator import cached_property
16
from module.campaign.campaign_base import CampaignBase
27
from module.campaign.run import CampaignRun
38
from module.combat.assets import BATTLE_PREPARATION
9+
from module.combat.emotion import Emotion
410
from module.equipment.assets import *
511
from module.equipment.equipment import Equipment
612
from module.exception import CampaignEnd
@@ -63,15 +69,51 @@ def handle_combat_low_emotion(self):
6369
raise CampaignEnd('Emotion withdraw')
6470

6571

72+
class GemsEmotion(Emotion):
73+
def check_reduce(self, battle):
74+
"""
75+
Override Emotion.check_reduce to trigger stop condition when emotion is too low before battle.
76+
"""
77+
method = self.config.Fleet_FleetOrder
78+
if method == 'fleet1_all_fleet2_standby':
79+
battle = (battle, 0)
80+
elif method == 'fleet1_standby_fleet2_all':
81+
battle = (0, battle)
82+
83+
battle = tuple(np.array(battle) * self.reduce_per_battle_before_entering)
84+
logger.info(f'Expect emotion reduce: {battle}')
85+
86+
self.update()
87+
self.record()
88+
self.show()
89+
recovered = max([f.get_recovered(b) for f, b in zip(self.fleets, battle)])
90+
if recovered > datetime.now():
91+
self.config.GEMS_EMOTION_TRIGGERED = True
92+
raise CampaignEnd('Emotion control')
93+
94+
def wait(self, fleet_index):
95+
"""
96+
Override Emotion.wait to trigger stop condition when emotion is too low after battle.
97+
"""
98+
self.update()
99+
self.record()
100+
self.show()
101+
fleet = self.fleets[fleet_index - 1]
102+
recovered = fleet.get_recovered(expected_reduce=self.reduce_per_battle)
103+
if recovered > datetime.now():
104+
self.config.GEMS_EMOTION_TRIGGERED = True
105+
106+
66107
class GemsFarming(CampaignRun, Dock):
67108
def load_campaign(self, name, folder='campaign_main'):
68109
super().load_campaign(name, folder)
69110

70111
class GemsCampaign(GemsCampaignOverride, self.module.Campaign):
71-
pass
112+
@cached_property
113+
def emotion(self):
114+
return GemsEmotion(config=self.config)
72115

73116
self.campaign = GemsCampaign(device=self.campaign.device, config=self.campaign.config)
74-
self.campaign.config.override(Emotion_Mode='ignore')
75117
self.campaign.config.override(EnemyPriority_EnemyScaleBalanceWeight='S1_enemy_first')
76118

77119
@property
@@ -97,6 +139,8 @@ def max_level(self):
97139
def min_emotion(self):
98140
return (2 + self.campaign._map_battle) * self.campaign.emotion.reduce_per_battle
99141

142+
_new_fleet_emotion = 0
143+
100144
@property
101145
def fleet_to_attack_index(self):
102146
if self.config.Fleet_FleetOrder == 'fleet1_standby_fleet2_all':
@@ -209,13 +253,15 @@ def flagship_change_execute(self):
209253
candidate = self.get_common_rarity_cv()
210254
if candidate:
211255
ship = max(candidate, key=lambda s: (s.level, s.emotion))
256+
self._new_fleet_emotion = min(ship.emotion, self._new_fleet_emotion) if self._new_fleet_emotion else ship.emotion
212257
self.dock_select_one(ship.button)
213258
self.dock_reset()
214259
self.dock_select_confirm(check_button=page_fleet.check_button)
215260
logger.info('Change flagship success')
216261
return True
217262

218263
logger.info('Change flagship failed, no CV in common rarity.')
264+
self._new_fleet_emotion = 0
219265
self.dock_reset()
220266
self.ui_leave_ship()
221267
return False
@@ -315,13 +361,15 @@ def vanguard_change_execute(self):
315361
candidate = self.get_common_rarity_dd(min_emotion=self.min_emotion)
316362
if candidate:
317363
ship = max(candidate, key=lambda s: s.emotion)
364+
self._new_fleet_emotion = min(ship.emotion, self._new_fleet_emotion) if self._new_fleet_emotion else ship.emotion
318365
self.dock_select_one(ship.button)
319366
self.dock_reset()
320367
self.dock_select_confirm(check_button=page_fleet.check_button)
321368
logger.info('Change vanguard success')
322369
return True
323370

324371
logger.info('Change vanguard failed, no DD in common rarity.')
372+
self._new_fleet_emotion = 0
325373
self.dock_reset()
326374
self.ui_leave_ship()
327375
return False
@@ -364,7 +412,7 @@ def triggered_stop_condition(self, oil_check=True):
364412
logger.hr('TRIGGERED LV32 LIMIT')
365413
return True
366414

367-
if self.campaign.map_is_auto_search and self.campaign.config.GEMS_EMOTION_TRIGGERED:
415+
if self.campaign.config.GEMS_EMOTION_TRIGGERED:
368416
self._trigger_emotion = True
369417
logger.hr('TRIGGERED EMOTION LIMIT')
370418
return True
@@ -388,17 +436,23 @@ def run(self, name, folder='campaign_main', mode='normal', total=0):
388436
try:
389437
super().run(name=name, folder=folder, total=total)
390438
except CampaignEnd as e:
391-
if e.args[0] == 'Emotion withdraw':
439+
if "Emotion" in e.args[0]:
392440
self._trigger_emotion = True
393441
else:
394442
raise e
395443

396444
# End
397445
if self._trigger_lv32 or self._trigger_emotion:
446+
self._new_fleet_emotion = 150
398447
success = self.flagship_change()
399448
if self.change_vanguard:
400449
success = success and self.vanguard_change()
401450

451+
if self.fleet_to_attack == 2:
452+
self.campaign.config.set_record(Emotion_Fleet2Value=self._new_fleet_emotion)
453+
else:
454+
self.campaign.config.set_record(Emotion_Fleet1Value=self._new_fleet_emotion)
455+
402456
if is_limit and self.config.StopCondition_RunCount <= 0:
403457
logger.hr('Triggered stop condition: Run count')
404458
self.config.StopCondition_RunCount = 0

0 commit comments

Comments
 (0)