Skip to content

Commit 053b8ae

Browse files
authored
Merge pull request #1708 from LmeSzinc/bug_fix
Bug fix
2 parents 65af4db + 1ce70da commit 053b8ae

14 files changed

Lines changed: 105 additions & 28 deletions

File tree

assets/jp/ui/DORM_FEED_CANCEL.png

-1.63 KB
Loading

campaign/campaign_main/campaign_13_1.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ class Campaign(CampaignBase):
6464
MAP = MAP
6565

6666
def battle_0(self):
67-
if self.clear_filter_enemy('2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=1):
67+
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=1):
6868
return True
6969

7070
return self.battle_default()
7171

7272
def battle_5(self):
73-
if self.clear_filter_enemy('2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
73+
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
7474
return True
7575

7676
return self.battle_default()

campaign/campaign_main/campaign_13_2.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ class Campaign(CampaignBase):
5454
MAP = MAP
5555

5656
def battle_0(self):
57-
if self.clear_filter_enemy('2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=1):
57+
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=1):
5858
return True
5959

6060
return self.battle_default()
6161

6262
def battle_5(self):
63-
if self.clear_filter_enemy('2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
63+
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
6464
return True
6565

6666
return self.battle_default()

campaign/campaign_main/campaign_13_3.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ class Campaign(CampaignBase):
5656
def battle_0(self):
5757
if self.clear_siren():
5858
return True
59-
if self.clear_filter_enemy('2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=1):
59+
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=1):
6060
return True
6161

6262
return self.battle_default()
6363

6464
def battle_5(self):
6565
if self.clear_siren():
6666
return True
67-
if self.clear_filter_enemy('2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
67+
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
6868
return True
6969

7070
return self.battle_default()

campaign/campaign_main/campaign_13_4.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,15 @@ class Campaign(CampaignBase):
7575
MAP = MAP
7676

7777
def battle_0(self):
78-
if self.clear_filter_enemy('2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
78+
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
7979
return True
8080

8181
return self.battle_default()
8282

8383
def battle_3(self):
8484
self.pick_up_ammo()
8585

86-
if self.clear_filter_enemy('2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
86+
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
8787
return True
8888

8989
return self.battle_default()

campaign/campaign_main/campaign_6_1.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ class Config:
4848
# EDGE_LINES_HOUGHLINES_THRESHOLD = 40
4949
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
5050

51+
# W6 has 3 enemies in a row, avoid detecting as map edge
52+
HOMO_EDGE_HOUGHLINES_THRESHOLD = 240
53+
5154

5255
class Campaign(CampaignBase):
5356
MAP = MAP

module/handler/info_handler.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ def handle_mission_popup_ack(self):
229229
"""
230230
story_popup_timeout = Timer(10, count=20)
231231
map_has_clear_mode = False # Will be override in fast_forward.py
232+
map_is_threat_safe = False
232233

233234
_story_confirm = Timer(0.5, count=1)
234235
# Area to detect the options, should include at least 3 options.
@@ -332,7 +333,10 @@ def story_skip(self, drop=None):
332333

333334
def handle_story_skip(self, drop=None):
334335
# Rerun events in clear mode but still have stories.
335-
if self.map_has_clear_mode and self.config.Campaign_Event != 'event_20201012_cn':
336+
# No stories in clear mode
337+
# but B3/D3 still have stories til threat safe
338+
# No more stories at threat safe
339+
if self.map_is_threat_safe and self.config.Campaign_Event != 'event_20201012_cn':
336340
return False
337341

338342
return self.story_skip(drop=drop)

module/os/fleet.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ def pre_process(self, image):
5454
return image
5555

5656

57+
FLEET_LOW_RESOLVE = Button(
58+
area=(144, 148, 170, 175), color=(255, 44, 33), button=(144, 148, 170, 175),
59+
name='FLEET_LOW_RESOLVE')
60+
61+
5762
class OSFleet(OSCamera, Combat, Fleet, OSAsh):
5863
def _goto(self, location, expected=''):
5964
super()._goto(location, expected)
@@ -186,6 +191,13 @@ def hp_get(self):
186191
def lv_get(self, after_battle=False):
187192
pass
188193

194+
def fleet_low_resolve_appear(self):
195+
"""
196+
Whether low resolve debuff appears on current fleet
197+
"""
198+
return self.image_color_count(
199+
FLEET_LOW_RESOLVE, color=FLEET_LOW_RESOLVE.color, threshold=221, count=250)
200+
189201
def get_sea_grids(self):
190202
"""
191203
Get sea grids on current view
@@ -584,9 +596,15 @@ def boss_clear(self, has_fleet_step=True):
584596
self.os_order_execute(recon_scan=False, submarine_call=True)
585597
continue
586598

587-
# Attack
599+
# Switch fleet
588600
self.fleet_set(fleet.fleet_index)
589601
self.handle_os_map_fleet_lock(enable=False)
602+
if self.fleet_low_resolve_appear():
603+
logger.warning('Skip using current fleet because of the low resolve debuff')
604+
self.boss_goto(location=fleet.standby_loca, has_fleet_step=has_fleet_step, drop=drop)
605+
continue
606+
607+
# Attack
590608
self.boss_goto(location=(0, 0), has_fleet_step=has_fleet_step, drop=drop)
591609

592610
# End

module/os/map.py

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import inflection
22

3-
from module.base.button import Button
43
from module.base.timer import Timer
54
from module.config.utils import get_os_reset_remain
65
from module.exception import CampaignEnd, RequestHumanTakeover
@@ -12,12 +11,9 @@
1211
from module.os.fleet import OSFleet
1312
from module.os.globe_camera import GlobeCamera
1413
from module.os.globe_operation import RewardUncollectedError
14+
from module.os_handler.assets import AUTO_SEARCH_OS_MAP_OPTION_OFF, AUTO_SEARCH_OS_MAP_OPTION_ON
1515
from module.ui.ui import page_os
1616

17-
FLEET_LOW_RESOLVE = Button(
18-
area=(144, 148, 170, 175), color=(255, 44, 33), button=(144, 148, 170, 175),
19-
name='FLEET_LOW_RESOLVE')
20-
2117

2218
class OSMap(OSFleet, Map, GlobeCamera):
2319
def os_init(self):
@@ -65,6 +61,7 @@ def os_init(self):
6561
# self.map_init()
6662
self.hp_reset()
6763
self.handle_after_auto_search()
64+
self.handle_current_fleet_resolve(revert=False)
6865

6966
# Exit from special zones types, only SAFE and DANGEROUS are acceptable.
7067
if self.is_in_special_zone():
@@ -259,7 +256,7 @@ def fleet_resolve(self, revert=True):
259256
if revert and prev != self.zone:
260257
self.globe_goto(prev)
261258

262-
def handle_fleet_resolve(self, revert=True):
259+
def handle_fleet_resolve(self, revert=False):
263260
"""
264261
Check each fleet if afflicted with the low
265262
resolve debuff
@@ -275,12 +272,11 @@ def handle_fleet_resolve(self, revert=True):
275272
logger.info('OS is in a special zone type, skip fleet resolve')
276273
return False
277274

278-
for _ in range(1, 5):
279-
if not self.fleet_set(_):
275+
for index in [1, 2, 3, 4]:
276+
if not self.fleet_set(index):
280277
self.device.screenshot()
281278

282-
if self.image_color_count(FLEET_LOW_RESOLVE, color=FLEET_LOW_RESOLVE.color,
283-
threshold=221, count=250):
279+
if self.fleet_low_resolve_appear():
284280
logger.info('At least one fleet is afflicted with '
285281
'the low resolve debuff')
286282
self.fleet_resolve(revert)
@@ -290,6 +286,27 @@ def handle_fleet_resolve(self, revert=True):
290286
'the low resolve debuff')
291287
return False
292288

289+
def handle_current_fleet_resolve(self, revert=False):
290+
"""
291+
Similar to handle_fleet_resolve,
292+
but check current fleet only for better performance at initialization
293+
294+
Args:
295+
revert (bool): If go back to previous zone.
296+
297+
Returns:
298+
bool:
299+
"""
300+
if self.fleet_low_resolve_appear():
301+
logger.info('Current fleet is afflicted with '
302+
'the low resolve debuff')
303+
self.fleet_resolve(revert)
304+
return True
305+
306+
logger.info('Current fleet is not afflicted with '
307+
'the low resolve debuff')
308+
return False
309+
293310
def handle_fleet_emp_debuff(self):
294311
"""
295312
EMP debuff limits fleet step to 1 and messes auto search up.
@@ -398,6 +415,7 @@ def os_auto_search_daemon(self, drop=None, skip_first_screenshot=True):
398415
else:
399416
self.device.screenshot()
400417

418+
# End
401419
if not unlock_checked and unlock_check_timer.reached():
402420
logger.critical('Unable to use auto search in current zone')
403421
logger.critical('Please finish the story mode of OpSi to unlock auto search '
@@ -413,6 +431,12 @@ def os_auto_search_daemon(self, drop=None, skip_first_screenshot=True):
413431
died_timer.reset()
414432
else:
415433
died_timer.reset()
434+
435+
if not unlock_checked:
436+
if self.appear(AUTO_SEARCH_OS_MAP_OPTION_OFF, offset=(5, 120)):
437+
unlock_checked = True
438+
elif self.appear(AUTO_SEARCH_OS_MAP_OPTION_ON, offset=(5, 120)):
439+
unlock_checked = True
416440
if self.handle_os_auto_search_map_option(drop=drop, enable=success):
417441
unlock_checked = True
418442
continue

module/os/operation_siren.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from module.config.utils import (get_os_next_reset,
44
get_os_reset_remain,
55
DEFAULT_TIME)
6-
from module.exception import RequestHumanTakeover, ScriptError
6+
from module.exception import RequestHumanTakeover, GameStuckError, ScriptError
77
from module.logger import logger
88
from module.map.map_grids import SelectedGrids
99
from module.os.fleet import BossFleet
@@ -266,7 +266,7 @@ def os_explore(self):
266266
self.globe_goto(0)
267267

268268
logger.critical('Failed to solve the locked zone')
269-
raise RequestHumanTakeover
269+
raise GameStuckError
270270

271271
def clear_obscure(self):
272272
"""

0 commit comments

Comments
 (0)