Skip to content

Commit f850274

Browse files
committed
Add: GemsFarming emotion control
1 parent 22a3056 commit f850274

1 file changed

Lines changed: 59 additions & 5 deletions

File tree

module/campaign/gems_farming.py

Lines changed: 59 additions & 5 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':
@@ -205,16 +249,18 @@ def get_common_rarity_cv(self, max_level=31, min_emotion=0):
205249

206250
def flagship_change_execute(self):
207251
self.ui_enter_ship(FLEET_ENTER_FLAGSHIP, long_click=False)
208-
candidate = self.get_common_rarity_cv()
252+
candidate = self.get_common_rarity_cv(min_emotion=self.min_emotion)
209253
if candidate:
210254
ship = max(candidate, key=lambda s: (s.level, s.emotion))
255+
self._new_fleet_emotion = min(ship.emotion, self._new_fleet_emotion) if self._new_fleet_emotion else ship.emotion
211256
self.dock_select_one(ship.button)
212257
self.dock_reset()
213258
self.dock_select_confirm(check_button=page_fleet.check_button)
214259
logger.info('Change flagship success')
215260
return True
216261

217262
logger.info('Change flagship failed, no CV in common rarity.')
263+
self._new_fleet_emotion = 0
218264
self.dock_reset()
219265
self.ui_leave_ship()
220266
return False
@@ -314,13 +360,15 @@ def vanguard_change_execute(self):
314360
candidate = self.get_common_rarity_dd(min_emotion=self.min_emotion)
315361
if candidate:
316362
ship = max(candidate, key=lambda s: s.emotion)
363+
self._new_fleet_emotion = min(ship.emotion, self._new_fleet_emotion) if self._new_fleet_emotion else ship.emotion
317364
self.dock_select_one(ship.button)
318365
self.dock_reset()
319366
self.dock_select_confirm(check_button=page_fleet.check_button)
320367
logger.info('Change vanguard success')
321368
return True
322369

323370
logger.info('Change vanguard failed, no DD in common rarity.')
371+
self._new_fleet_emotion = 0
324372
self.dock_reset()
325373
self.ui_leave_ship()
326374
return False
@@ -363,7 +411,7 @@ def triggered_stop_condition(self, oil_check=True):
363411
logger.hr('TRIGGERED LV32 LIMIT')
364412
return True
365413

366-
if self.campaign.map_is_auto_search and self.campaign.config.GEMS_EMOTION_TRIGGERED:
414+
if self.campaign.config.GEMS_EMOTION_TRIGGERED:
367415
self._trigger_emotion = True
368416
logger.hr('TRIGGERED EMOTION LIMIT')
369417
return True
@@ -387,17 +435,23 @@ def run(self, name, folder='campaign_main', mode='normal', total=0):
387435
try:
388436
super().run(name=name, folder=folder, total=total)
389437
except CampaignEnd as e:
390-
if e.args[0] == 'Emotion withdraw':
438+
if "Emotion" in e.args[0]:
391439
self._trigger_emotion = True
392440
else:
393441
raise e
394442

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

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

0 commit comments

Comments
 (0)