This commit is contained in:
wess09 2026-05-10 08:42:33 +08:00
commit cdbc5aef3d
2 changed files with 55 additions and 39 deletions

View File

@ -99,7 +99,11 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle
# For JP only
ocr = Ocr(MAP_NAME, lang='jp', letter=(157, 173, 192), threshold=127, name='OCR_OS_MAP_NAME')
name = ocr.ocr(self.device.image)
name = name.strip('\\/-—–-')
name = name.replace(' ', '')
# Normalize various dashes to standard hyphen
import re
name = re.sub(r'[\\/—–-−]', '-', name)
name = name.strip('-')
self.is_zone_name_hidden = '安全' in name
# Remove punctuations
for char in '':
@ -109,12 +113,15 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle
name = name.split('')[0]
if '' in name:
name = name.split('')[0]
# Remove '安全海域' or '秘密海域' at the end of jp ocr.
name = _remove_zone_suffix(
name,
('安全海域', '秘密海域', '異常海域', '要塞海域', '安全', '秘密', '異常', '要塞'),
trim_chars='-',
)
if '-' in name:
name = name.split('-')[0]
else:
# Remove '安全海域' or '秘密海域' at the end of jp ocr.
name = _remove_zone_suffix(
name,
('安全海域', '秘密海域', '異常海域', '要塞海域', '安全', '秘密', '異常', '要塞'),
)
# Kanji '一', '力' and '卜' are not used, while Katakana 'ー', 'カ' and 'ト' are misread as Kanji sometimes.
# Katakana 'ペ' may be misread as Hiragana 'ぺ'.
name = name.replace('', '').replace('', '').replace('', '').replace('', '')
@ -132,17 +139,24 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle
# For TW only
ocr = Ocr(MAP_NAME, lang='tw', letter=(198, 215, 239), threshold=127, name='OCR_OS_MAP_NAME')
name = ocr.ocr(self.device.image)
name = name.strip('\\/-—–-')
name = name.replace(' ', '')
# Normalize various dashes to standard hyphen
import re
name = re.sub(r'[\\/—–-−一]', '-', name)
name = name.strip('-')
self.is_zone_name_hidden = '安全' in name
# Remove '塞壬要塞海域'
if '' in name:
name = name.split('')[0]
# Remove '安全海域', '隱秘海域', '深淵海域' at the end of tw ocr.
name = _remove_zone_suffix(
name,
('安全海域', '隱秘海域', '深淵海域', '塞壬要塞海域', '安全', '隱秘', '深淵'),
trim_chars='一-',
)
if '-' in name:
name = name.split('-')[0]
else:
# Remove '安全海域', '隱秘海域', '深淵海域' at the end of tw ocr.
name = _remove_zone_suffix(
name,
('安全海域', '隱秘海域', '深淵海域', '塞壬要塞海域', '安全', '隱秘', '深淵'),
)
return name
@Config.when(SERVER=None)

View File

@ -87,13 +87,13 @@ class Combat(Combat_, MapEventHandler):
# self.emotion.reduce(fleet_index)
break
def _get_exp_info_sleep(self):
return (1.5, 2) if self.__os_combat_drop else (0.25, 0.5)
def handle_exp_info(self):
if self.is_combat_executing():
return False
if self.__os_combat_drop:
sleep = (1.5, 2)
else:
sleep = (0.25, 0.5)
sleep = self._get_exp_info_sleep()
if self.appear_then_click(EXP_INFO_S):
self.device.sleep(sleep)
return True
@ -193,36 +193,38 @@ class Combat(Combat_, MapEventHandler):
logger.info('Continuous combat detected')
continue
def handle_auto_search_battle_status(self, drop=None):
if self.appear(BATTLE_STATUS_C, interval=self.battle_status_click_interval):
logger.warning('Battle Status C')
# raise GameStuckError('Battle status C')
def _handle_single_battle_status(self, status_button, status_letter, drop):
if self.appear(status_button, interval=self.battle_status_click_interval):
if status_letter == 'S':
logger.info(f'Battle Status {status_letter}')
else:
logger.warning(f'Battle Status {status_letter}')
if drop:
drop.handle_add(self)
else:
self.device.sleep((0.25, 0.5))
self.device.click(BATTLE_STATUS_C)
return True
if self.appear(BATTLE_STATUS_D, interval=self.battle_status_click_interval):
logger.warning('Battle Status D')
# raise GameStuckError('Battle Status D')
if drop:
drop.handle_add(self)
else:
self.device.sleep((0.25, 0.5))
self.device.click(BATTLE_STATUS_D)
self.device.click(status_button)
return True
return False
def handle_auto_search_battle_status(self, drop=None):
for status_button, status_letter in [
(BATTLE_STATUS_S, 'S'),
(BATTLE_STATUS_A, 'A'),
(BATTLE_STATUS_B, 'B'),
(BATTLE_STATUS_C, 'C'),
(BATTLE_STATUS_D, 'D'),
]:
if self._handle_single_battle_status(status_button, status_letter, drop):
return True
return False
def handle_auto_search_exp_info(self):
if self.appear_then_click(EXP_INFO_C):
self.device.sleep((0.25, 0.5))
return True
if self.appear_then_click(EXP_INFO_D):
self.device.sleep((0.25, 0.5))
return True
sleep = self._get_exp_info_sleep()
for exp_info_button in [EXP_INFO_S, EXP_INFO_A, EXP_INFO_B, EXP_INFO_C, EXP_INFO_D]:
if self.appear_then_click(exp_info_button):
self.device.sleep(sleep)
return True
return False
def auto_search_combat(self, drop=None):