Skip to content

Commit 55fe1ec

Browse files
committed
Add: GemsFarming emotion control
1 parent eb7f367 commit 55fe1ec

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':
@@ -206,13 +250,15 @@ def flagship_change_execute(self):
206250
candidate = self.get_common_rarity_cv()
207251
if candidate:
208252
ship = max(candidate, key=lambda s: (s.level, s.emotion))
253+
self._new_fleet_emotion = min(ship.emotion, self._new_fleet_emotion) if self._new_fleet_emotion else ship.emotion
209254
self.dock_select_one(ship.button)
210255
self.dock_reset()
211256
self.dock_select_confirm(check_button=page_fleet.check_button)
212257
logger.info('Change flagship success')
213258
return True
214259

215260
logger.info('Change flagship failed, no CV in common rarity.')
261+
self._new_fleet_emotion = 0
216262
self.dock_reset()
217263
self.ui_leave_ship()
218264
return False
@@ -312,13 +358,15 @@ def vanguard_change_execute(self):
312358
candidate = self.get_common_rarity_dd(min_emotion=self.min_emotion)
313359
if candidate:
314360
ship = max(candidate, key=lambda s: s.emotion)
361+
self._new_fleet_emotion = min(ship.emotion, self._new_fleet_emotion) if self._new_fleet_emotion else ship.emotion
315362
self.dock_select_one(ship.button)
316363
self.dock_reset()
317364
self.dock_select_confirm(check_button=page_fleet.check_button)
318365
logger.info('Change vanguard success')
319366
return True
320367

321368
logger.info('Change vanguard failed, no DD in common rarity.')
369+
self._new_fleet_emotion = 0
322370
self.dock_reset()
323371
self.ui_leave_ship()
324372
return False
@@ -361,7 +409,7 @@ def triggered_stop_condition(self, oil_check=True):
361409
logger.hr('TRIGGERED LV32 LIMIT')
362410
return True
363411

364-
if self.campaign.map_is_auto_search and self.campaign.config.GEMS_EMOTION_TRIGGERED:
412+
if self.campaign.config.GEMS_EMOTION_TRIGGERED:
365413
self._trigger_emotion = True
366414
logger.hr('TRIGGERED EMOTION LIMIT')
367415
return True
@@ -385,17 +433,23 @@ def run(self, name, folder='campaign_main', mode='normal', total=0):
385433
try:
386434
super().run(name=name, folder=folder, total=total)
387435
except CampaignEnd as e:
388-
if e.args[0] == 'Emotion withdraw':
436+
if "Emotion" in e.args[0]:
389437
self._trigger_emotion = True
390438
else:
391439
raise e
392440

393441
# End
394442
if self._trigger_lv32 or self._trigger_emotion:
443+
self._new_fleet_emotion = 150
395444
success = self.flagship_change()
396445
if self.change_vanguard:
397446
success = success and self.vanguard_change()
398447

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

0 commit comments

Comments
 (0)