mirror of
https://gitee.com/sui-feng-cb/AzurLaneAutoScript1
synced 2026-03-30 09:43:51 +08:00
AlasGG
This commit is contained in:
72
campaign/campaign_main/campaign_10_1.py
Normal file
72
campaign/campaign_main/campaign_10_1.py
Normal file
@@ -0,0 +1,72 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('10-1')
|
||||
MAP.shape = 'G6'
|
||||
MAP.camera_data = ['D3']
|
||||
MAP.camera_data_spawn_point = ['D1', 'D4']
|
||||
MAP.map_data = """
|
||||
SP -- ++ -- ME ME --
|
||||
-- -- ++ Me ME ME ME
|
||||
-- Me ME ME ++ ++ MB
|
||||
-- ME Me ME ME ++ MB
|
||||
-- -- ++ -- Me ME ME
|
||||
SP -- ++ ++ -- -- ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 40 50
|
||||
50 50 50 30 30 50 40
|
||||
50 40 30 30 30 50 05
|
||||
50 25 20 20 30 50 05
|
||||
50 50 50 15 10 10 05
|
||||
50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 4},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([B4, C4, D4, E5, F5, G5])
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
89
campaign/campaign_main/campaign_10_2.py
Normal file
89
campaign/campaign_main/campaign_10_2.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('10-2')
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D2', 'E3', 'E4']
|
||||
MAP.camera_data_spawn_point = ['E4']
|
||||
MAP.map_data = """
|
||||
Me -- ME ME -- ++ ME MB
|
||||
-- ++ ++ -- ME ++ ME ME
|
||||
-- SP ++ ++ __ ME Me ++
|
||||
-- SP ++ ++ -- ME Me ++
|
||||
-- ++ ++ -- ME ++ ME ME
|
||||
-- Me ME ME -- ++ ME MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 4},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([B6, C6, D6, E5, F4, G2, [G1, H2], G3, G4, G5, [H5, G6]])
|
||||
|
||||
|
||||
class Config:
|
||||
DETECTION_BACKEND = 'homography'
|
||||
HOMO_STORAGE = ((7, 6), [(471.806, 82.471), (1249.283, 82.471), (420.72, 615.64), (1435.387, 615.64)])
|
||||
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 30
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 30
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.3
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (150, 255 - 24),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 24, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'width': (0, 10),
|
||||
'wlen': 1000,
|
||||
}
|
||||
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom'
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
88
campaign/campaign_main/campaign_10_3.py
Normal file
88
campaign/campaign_main/campaign_10_3.py
Normal file
@@ -0,0 +1,88 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('10-3')
|
||||
MAP.shape = 'I6'
|
||||
MAP.camera_data = ['D2', 'E3', 'F4']
|
||||
MAP.camera_data_spawn_point = ['E3']
|
||||
MAP.map_data = """
|
||||
Me -- ME -- ME MB ++ -- MM
|
||||
-- ++ ++ ++ ME MB ++ -- --
|
||||
-- Me -- ME ME ME __ ME --
|
||||
-- -- ++ ++ MB ME ME Me ++
|
||||
-- -- SP SP ++ ++ ++ ME MB
|
||||
++ -- -- -- Me -- ME ME ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
90 90 90 90 40 10 90 90 90
|
||||
90 90 90 90 30 10 90 90 90
|
||||
90 90 90 90 20 05 20 90 90
|
||||
90 90 90 90 10 15 20 30 90
|
||||
90 90 90 90 90 90 90 40 40
|
||||
90 90 90 90 80 70 60 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 4},
|
||||
{'battle': 1, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([E6, G6, H6, E5, H4, G4, F4, F3])
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 35
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 35
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.2
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (150, 255 - 24),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 24, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'width': (0, 10),
|
||||
'wlen': 1000,
|
||||
}
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
89
campaign/campaign_main/campaign_10_4.py
Normal file
89
campaign/campaign_main/campaign_10_4.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('10-4')
|
||||
MAP.shape = 'I6'
|
||||
MAP.camera_data = ['D2', 'F4']
|
||||
MAP.camera_data_spawn_point = ['D4']
|
||||
MAP.map_data = """
|
||||
MB ME ME -- ++ MB -- ++ ++
|
||||
ME ME ++ ME ++ -- Me -- ++
|
||||
-- __ ME Me ME ++ ME ME --
|
||||
++ ++ ++ -- ME -- Me ++ ME
|
||||
SP -- -- Me -- ++ __ ME --
|
||||
SP -- -- -- Me ++ ME -- MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 30 30 10 10 10 10 10 10
|
||||
5 30 10 30 10 10 5 10 10
|
||||
10 10 5 4 30 10 5 30 10
|
||||
10 10 10 10 10 10 5 10 30
|
||||
10 10 10 10 10 10 10 30 10
|
||||
10 10 10 10 30 10 5 10 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 4},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
|
||||
= MAP.flatten()
|
||||
|
||||
step_on = SelectedGrids([E4, D3, G4, C3])
|
||||
road_main = RoadGrids([D5, E4, D3, C3, A2, G4, H5, G3, G2])
|
||||
roadblocks_d4 = RoadGrids([[D5, E6], E4, D3])
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (150, 255 - 24),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 24, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'width': (0, 10),
|
||||
'wlen': 1000,
|
||||
}
|
||||
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom'
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(step_on, roadblocks=[roadblocks_d4]):
|
||||
return True
|
||||
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
71
campaign/campaign_main/campaign_11_1.py
Normal file
71
campaign/campaign_main/campaign_11_1.py
Normal file
@@ -0,0 +1,71 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('11-1')
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D3', 'E4']
|
||||
MAP.camera_data_spawn_point = ['D4']
|
||||
MAP.map_data = """
|
||||
-- -- ME -- ME -- -- MB
|
||||
MB ME __ ME -- ++ ++ --
|
||||
++ Me -- ++ ME MB ++ ME
|
||||
-- -- ++ ++ __ ME ME --
|
||||
SP -- -- -- Me ME -- ++
|
||||
++ SP -- -- ++ -- MB ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([B2, B3, E5, F4, G4, H3])
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 30
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 30
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.2
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
89
campaign/campaign_main/campaign_11_2.py
Normal file
89
campaign/campaign_main/campaign_11_2.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('11-2')
|
||||
MAP.shape = 'K6'
|
||||
MAP.camera_data = ['F4', 'G3', 'H4']
|
||||
MAP.camera_data_spawn_point = ['D4']
|
||||
MAP.map_data = """
|
||||
++ ++ ++ -- -- ++ -- ME -- Me --
|
||||
-- -- -- Me -- __ Me ++ ++ ME --
|
||||
SP -- ++ -- -- ME ME MM ++ -- ME
|
||||
SP -- ++ -- ME -- ++ ME -- MB MB
|
||||
-- ++ ++ ++ __ ME ME -- ++ ++ ++
|
||||
-- -- ME -- -- ++ -- ME -- -- MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
90 90 90 90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 10 05 90 90
|
||||
90 90 90 90 90 25 20 15 90 90 90
|
||||
90 90 90 40 35 30 90 90 90 90 90
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([C6, F5, G5, H4, H6])
|
||||
|
||||
|
||||
class Config:
|
||||
DETECTION_BACKEND = 'homography'
|
||||
HOMO_STORAGE = ((6, 6), [(579.064, 82.271), (1248.248, 82.271), (562.795, 616.581), (1438.283, 616.581)])
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 30
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 30
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.2
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (150, 255 - 24),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 24, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'wlen': 1000,
|
||||
}
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
|
||||
def handle_boss_appear_refocus(self, preset=(-3, -2)):
|
||||
return super().handle_boss_appear_refocus(preset)
|
||||
84
campaign/campaign_main/campaign_11_3.py
Normal file
84
campaign/campaign_main/campaign_11_3.py
Normal file
@@ -0,0 +1,84 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('11-3')
|
||||
MAP.shape = 'I7'
|
||||
MAP.camera_data = ['D3', 'F5']
|
||||
MAP.camera_data_spawn_point = ['D5']
|
||||
MAP.map_data = """
|
||||
++ -- -- ME -- Me ++ ++ ++
|
||||
__ ME ME -- Me -- ME -- __
|
||||
-- -- ME -- -- ME -- ME --
|
||||
MB ++ ++ -- ++ ++ ++ -- ME
|
||||
++ ++ ++ MB -- ME __ ME --
|
||||
SP -- -- Me -- ME ++ ME --
|
||||
SP -- -- -- ++ -- ME -- MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
90 90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90 90
|
||||
90 90 90 90 90 90 90 90 90
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([C2, D6, F6, G7])
|
||||
|
||||
|
||||
class Config:
|
||||
DETECTION_BACKEND = 'homography'
|
||||
HOMO_STORAGE = ((5, 4), [(133.207, 81.356), (696.903, 81.356), (44.566, 406.051), (705.278, 406.051)])
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 30
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 30
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.2
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (150, 255 - 24),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 24, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'width': (0, 10),
|
||||
'wlen': 1000,
|
||||
}
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
return self.fleet_boss.clear_boss()
|
||||
93
campaign/campaign_main/campaign_11_4.py
Normal file
93
campaign/campaign_main/campaign_11_4.py
Normal file
@@ -0,0 +1,93 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('11-4')
|
||||
MAP.shape = 'J8'
|
||||
MAP.camera_data = ['D2', 'D6', 'G2', 'G6']
|
||||
MAP.camera_data_spawn_point = ['D2', 'G2']
|
||||
MAP.map_data = """
|
||||
MB MB ++ -- -- -- ++ MB -- --
|
||||
-- -- ++ ME -- Me ++ -- -- ME
|
||||
ME __ ME -- ++ -- __ -- ME --
|
||||
-- ++ -- -- SP SP -- Me -- --
|
||||
MB -- ME -- -- -- -- ++ ++ ++
|
||||
++ ++ ++ -- Me -- Me __ -- ME
|
||||
-- -- ME __ -- ++ -- ++ ME --
|
||||
MB -- -- ME -- ++ -- ME -- MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 10 10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \
|
||||
= MAP.flatten()
|
||||
|
||||
step_on = SelectedGrids([C3])
|
||||
road_boss = RoadGrids([C3, H4, [C5, C7], G6, G8])
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 35
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 35
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.3
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (150, 255 - 24),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 24, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'width': (0, 10),
|
||||
'wlen': 1000,
|
||||
}
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(step_on, roadblocks=[road_boss]):
|
||||
return True
|
||||
|
||||
if self.clear_roadblocks([road_boss]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_boss]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.clear_roadblocks([road_boss])
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
89
campaign/campaign_main/campaign_12_1.py
Normal file
89
campaign/campaign_main/campaign_12_1.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D2', 'D4', 'E2', 'E4']
|
||||
MAP.camera_data_spawn_point = ['D4', 'E4']
|
||||
MAP.map_data = """
|
||||
ME -- ME Me -- -- ++ ++
|
||||
++ ME -- ++ ME ME ME ME
|
||||
++ __ Me ++ ++ __ Me --
|
||||
-- ME -- ME ME ME -- Me
|
||||
ME ++ ++ SP SP -- ++ MB
|
||||
ME -- Me ME -- Me ++ MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([F4, H4])
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 30
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 30
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.2
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (120, 255 - 49),
|
||||
'width': (1.5, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 49, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'wlen': 1000
|
||||
}
|
||||
HOMO_EDGE_COLOR_RANGE = (0, 49)
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
MAP_SWIPE_MULTIPLY = (0.977, 0.995)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (0.945, 0.962)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.917, 0.934)
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
68
campaign/campaign_main/campaign_12_2.py
Normal file
68
campaign/campaign_main/campaign_12_2.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from campaign.campaign_main.campaign_12_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'I7'
|
||||
MAP.camera_data = ['D2', 'D5', 'F2', 'F5']
|
||||
MAP.camera_data_spawn_point = ['D2', 'D5']
|
||||
MAP.map_data = """
|
||||
++ MB ME ME ++ -- ME Me --
|
||||
++ -- Me -- Me -- Me -- ++
|
||||
MB ME ++ ME SP ME -- ME ++
|
||||
MB __ ME -- SP ++ ++ __ Me
|
||||
++ -- -- Me ME -- ME -- ME
|
||||
-- ME ME ++ -- -- Me ME --
|
||||
ME -- Me -- ME ME -- ++ ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([[C4, D5], B3])
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
80
campaign/campaign_main/campaign_12_2_leveling.py
Normal file
80
campaign/campaign_main/campaign_12_2_leveling.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from campaign.campaign_main.campaign_12_1 import Config as ConfigBase
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'I7'
|
||||
MAP.camera_data = ['D2', 'D5', 'F2', 'F5']
|
||||
MAP.camera_data_spawn_point = ['D2', 'D5']
|
||||
MAP.map_data = """
|
||||
++ MB ME ME ++ -- ME Me --
|
||||
++ -- Me -- Me -- Me -- ++
|
||||
MB ME ++ ME SP ME -- ME ++
|
||||
MB __ ME -- SP ++ ++ __ Me
|
||||
++ -- -- Me ME -- ME -- ME
|
||||
-- ME ME ++ -- -- Me ME --
|
||||
ME -- Me -- ME ME -- ++ ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
ENABLE_AUTO_SEARCH = False
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
s3_enemy_count = 0
|
||||
|
||||
def check_s3_enemy(self):
|
||||
if self.battle_count == 0:
|
||||
self.s3_enemy_count = 0
|
||||
elif self.battle_count >= 5:
|
||||
self.withdraw()
|
||||
|
||||
current = self.map.select(is_enemy=True, enemy_scale=2) \
|
||||
.add(self.map.select(is_enemy=True, enemy_scale=1)) \
|
||||
.count
|
||||
logger.attr('S2_enemy', current)
|
||||
|
||||
if self.s3_enemy_count >= self.config.C122MediumLeveling_LargeEnemyTolerance and current == 0:
|
||||
self.withdraw()
|
||||
|
||||
def battle_0(self):
|
||||
self.check_s3_enemy()
|
||||
if self.clear_enemy(scale=(2,), genre=['light', 'main', 'treasure', 'enemy', 'carrier']):
|
||||
return True
|
||||
if self.clear_enemy(scale=(1,)):
|
||||
return True
|
||||
if self.clear_enemy(scale=(3,), genre=['light', 'carrier', 'enemy', 'treasure', 'main']):
|
||||
self.s3_enemy_count += 1
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
68
campaign/campaign_main/campaign_12_3.py
Normal file
68
campaign/campaign_main/campaign_12_3.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from campaign.campaign_main.campaign_12_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'J7'
|
||||
MAP.camera_data = ['D2', 'D5', 'G2', 'G5']
|
||||
MAP.camera_data_spawn_point = ['G5', 'D5']
|
||||
MAP.map_data = """
|
||||
MB ++ ++ ++ ME MB -- Me -- ME
|
||||
MB -- ME -- -- ME -- -- ++ MB
|
||||
-- ME __ ++ Me -- ME ++ ++ --
|
||||
MB -- ME -- -- ME -- __ Me ME
|
||||
-- ME -- ME Me -- Me -- ME ++
|
||||
++ -- ME Me -- ++ Me -- -- ++
|
||||
++ ME -- ME SP SP -- ME -- ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([H1, J1])
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
75
campaign/campaign_main/campaign_12_4.py
Normal file
75
campaign/campaign_main/campaign_12_4.py
Normal file
@@ -0,0 +1,75 @@
|
||||
from campaign.campaign_main.campaign_12_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('12-4')
|
||||
MAP.shape = 'K8'
|
||||
MAP.camera_data = ['D2', 'D6', 'H2', 'H6']
|
||||
MAP.camera_data_spawn_point = ['D6']
|
||||
MAP.map_data = """
|
||||
MB MB ME -- ME ++ ++ ++ MB MB ++
|
||||
ME ++ -- ME -- MA ++ ++ ME Me ++
|
||||
-- ME __ Me Me -- Me Me -- Me --
|
||||
++ -- ME ++ ++ Me ME __ ++ ++ ME
|
||||
++ ME ME -- ME ME -- ME -- ++ --
|
||||
++ __ Me Me -- Me ME ++ __ -- ME
|
||||
ME -- Me -- Me -- Me -- -- ME --
|
||||
-- -- -- ME SP SP ++ ++ ++ ME --
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([[H3, B6, C5]])
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.battle_count >= 3:
|
||||
self.pick_up_ammo()
|
||||
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
self.pick_up_ammo()
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
93
campaign/campaign_main/campaign_12_4_leveling.py
Normal file
93
campaign/campaign_main/campaign_12_4_leveling.py
Normal file
@@ -0,0 +1,93 @@
|
||||
from campaign.campaign_main.campaign_12_1 import Config as ConfigBase
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('12-4')
|
||||
MAP.shape = 'K8'
|
||||
MAP.camera_data = ['D2', 'D6', 'H2', 'H6']
|
||||
MAP.camera_data_spawn_point = ['D6']
|
||||
MAP.map_data = """
|
||||
MB MB ME -- ME ++ ++ ++ MB MB ++
|
||||
ME ++ -- ME -- MA ++ ++ ME Me ++
|
||||
-- ME __ Me Me -- Me Me -- Me --
|
||||
++ -- ME ++ ++ Me ME __ ++ ++ ME
|
||||
++ ME ME -- ME ME -- ME -- ++ --
|
||||
++ __ Me Me -- Me ME ++ __ -- ME
|
||||
ME -- Me -- Me -- Me -- -- ME --
|
||||
-- -- -- ME SP SP ++ ++ ++ ME --
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
ENABLE_AUTO_SEARCH = False
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
s3_enemy_count = 0
|
||||
non_s3_enemy_count = 0
|
||||
|
||||
def check_s3_enemy(self):
|
||||
if self.battle_count == 0:
|
||||
self.s3_enemy_count = 0
|
||||
self.non_s3_enemy_count = 0
|
||||
|
||||
current = self.map.select(is_enemy=True, enemy_scale=3).count
|
||||
logger.attr('S3_enemy', current)
|
||||
|
||||
if self.battle_count == self.config.C124LargeLeveling_NonLargeEnterTolerance \
|
||||
and self.config.C124LargeLeveling_NonLargeRetreatTolerance < 10:
|
||||
if self.s3_enemy_count + current == 0:
|
||||
self.withdraw()
|
||||
elif self.battle_count > self.config.C124LargeLeveling_NonLargeEnterTolerance:
|
||||
if self.non_s3_enemy_count >= self.config.C124LargeLeveling_NonLargeRetreatTolerance and current == 0:
|
||||
self.withdraw()
|
||||
|
||||
def battle_0(self):
|
||||
self.check_s3_enemy()
|
||||
|
||||
if self.battle_count >= self.config.C124LargeLeveling_PickupAmmo:
|
||||
self.pick_up_ammo()
|
||||
|
||||
if self.clear_enemy(scale=(3,), genre=['light', 'carrier', 'enemy', 'treasure', 'main']):
|
||||
self.s3_enemy_count += 1
|
||||
self.non_s3_enemy_count = 0
|
||||
return True
|
||||
if self.clear_enemy(scale=[2, 1]):
|
||||
self.non_s3_enemy_count += 1
|
||||
return True
|
||||
if not self.map.select(is_enemy=True, may_boss=False):
|
||||
logger.info('No more enemies.')
|
||||
self.withdraw()
|
||||
|
||||
return self.battle_default()
|
||||
124
campaign/campaign_main/campaign_12_4_timeout_leveling.py
Normal file
124
campaign/campaign_main/campaign_12_4_timeout_leveling.py
Normal file
@@ -0,0 +1,124 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.combat.assets import *
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
# MAP = MAP
|
||||
|
||||
def battle_default(self):
|
||||
if not self.map.select(enemy_scale=3, enemy_genre='Light'):
|
||||
self.withdraw()
|
||||
|
||||
def handle_combat_weapon_release(self):
|
||||
if self.appear_then_click(READY_AIR_RAID, interval=5):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def handle_battle_status(self, save_get_items=False):
|
||||
"""
|
||||
Args:
|
||||
save_get_items (bool):
|
||||
|
||||
Returns:
|
||||
bool:
|
||||
"""
|
||||
if self.is_combat_executing():
|
||||
return False
|
||||
if self.appear_then_click(BATTLE_STATUS_S, screenshot=save_get_items, genre='status', interval=self.battle_status_click_interval):
|
||||
if not save_get_items:
|
||||
self.device.sleep((0.25, 0.5))
|
||||
return True
|
||||
if self.appear_then_click(BATTLE_STATUS_A, screenshot=save_get_items, genre='status', interval=self.battle_status_click_interval):
|
||||
logger.warning('Battle status: A')
|
||||
if not save_get_items:
|
||||
self.device.sleep((0.25, 0.5))
|
||||
return True
|
||||
if self.appear_then_click(BATTLE_STATUS_B, screenshot=save_get_items, genre='status', interval=self.battle_status_click_interval):
|
||||
logger.warning('Battle Status B')
|
||||
if not save_get_items:
|
||||
self.device.sleep((0.25, 0.5))
|
||||
return True
|
||||
if self.appear_then_click(BATTLE_STATUS_C, screenshot=save_get_items, genre='status', interval=self.battle_status_click_interval):
|
||||
if not save_get_items:
|
||||
self.device.sleep((0.25, 0.5))
|
||||
return True
|
||||
if self.appear_then_click(BATTLE_STATUS_D, screenshot=save_get_items, genre='status', interval=self.battle_status_click_interval):
|
||||
logger.warning('Battle Status D')
|
||||
if not save_get_items:
|
||||
self.device.sleep((0.25, 0.5))
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def handle_get_items(self, save_get_items=False):
|
||||
"""
|
||||
Args:
|
||||
save_get_items (bool):
|
||||
|
||||
Returns:
|
||||
bool:
|
||||
"""
|
||||
if self.appear_then_click(GET_ITEMS_1, screenshot=save_get_items, genre='get_items', offset=5,
|
||||
interval=self.battle_status_click_interval):
|
||||
self.interval_reset(BATTLE_STATUS_S)
|
||||
self.interval_reset(BATTLE_STATUS_A)
|
||||
self.interval_reset(BATTLE_STATUS_B)
|
||||
self.interval_reset(BATTLE_STATUS_C)
|
||||
self.interval_reset(BATTLE_STATUS_D)
|
||||
return True
|
||||
if self.appear_then_click(GET_ITEMS_2, screenshot=save_get_items, genre='get_items', offset=5,
|
||||
interval=self.battle_status_click_interval):
|
||||
self.interval_reset(BATTLE_STATUS_S)
|
||||
self.interval_reset(BATTLE_STATUS_A)
|
||||
self.interval_reset(BATTLE_STATUS_B)
|
||||
self.interval_reset(BATTLE_STATUS_C)
|
||||
self.interval_reset(BATTLE_STATUS_D)
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def handle_exp_info(self):
|
||||
"""
|
||||
Returns:
|
||||
bool:
|
||||
"""
|
||||
if self.is_combat_executing():
|
||||
return False
|
||||
if self.appear_then_click(EXP_INFO_S):
|
||||
self.device.sleep((0.25, 0.5))
|
||||
return True
|
||||
if self.appear_then_click(EXP_INFO_A):
|
||||
self.device.sleep((0.25, 0.5))
|
||||
return True
|
||||
if self.appear_then_click(EXP_INFO_B):
|
||||
self.device.sleep((0.25, 0.5))
|
||||
return True
|
||||
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
|
||||
if self.appear_then_click(OPTS_INFO_D, offset=(20, 20)):
|
||||
self.device.sleep((0.25, 0.5))
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def combat(self, balance_hp=None, emotion_reduce=None, func=None, call_submarine_at_boss=None, save_get_items=None,
|
||||
expected_end=None, fleet_index=1):
|
||||
self.battle_status_click_interval = 7 if save_get_items else 0
|
||||
super().combat(balance_hp=False, expected_end='no_searching', auto_mode='hide_in_bottom_left', save_get_items=False)
|
||||
|
||||
|
||||
from module.config.config import AzurLaneConfig
|
||||
|
||||
az = Campaign(AzurLaneConfig('alas'))
|
||||
for n in range(10000):
|
||||
logger.hr(f'count: {n}')
|
||||
az.map_offensive()
|
||||
az.combat()
|
||||
80
campaign/campaign_main/campaign_13_1.py
Normal file
80
campaign/campaign_main/campaign_13_1.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('13-1')
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D2', 'D4', 'E2', 'E4']
|
||||
MAP.camera_data_spawn_point = ['D4']
|
||||
MAP.map_data = """
|
||||
ME -- ME Me ++ ++ ME MB
|
||||
++ ME -- ME -- ++ ME --
|
||||
++ __ Me ME -- -- Me --
|
||||
ME ME ++ ME ME -- __ --
|
||||
ME -- SP SP -- -- ++ --
|
||||
ME -- Me ME Me Me ++ MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (120, 255 - 49),
|
||||
'width': (1.5, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 49, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'wlen': 1000
|
||||
}
|
||||
HOMO_EDGE_COLOR_RANGE = (0, 49)
|
||||
MAP_SWIPE_MULTIPLY = (0.994, 1.013)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (0.961, 0.979)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.933, 0.950)
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
return self.fleet_boss.clear_boss()
|
||||
69
campaign/campaign_main/campaign_13_2.py
Normal file
69
campaign/campaign_main/campaign_13_2.py
Normal file
@@ -0,0 +1,69 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_13_1 import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('13-2')
|
||||
MAP.shape = 'I7'
|
||||
MAP.camera_data = ['D2', 'D5', 'F2', 'F5']
|
||||
MAP.camera_data_spawn_point = ['D2', 'D5']
|
||||
MAP.map_data = """
|
||||
++ Me ME ME ++ Me ME Me --
|
||||
++ -- -- -- -- -- ++ ++ ++
|
||||
MB -- SP ++ ++ -- ME ME ME
|
||||
MB -- SP -- ++ -- -- __ Me
|
||||
ME __ -- -- ME -- ME -- --
|
||||
ME ME ME ++ ME -- Me ME MB
|
||||
ME -- Me Me ME ME Me ++ ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
pass
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
return self.fleet_boss.clear_boss()
|
||||
73
campaign/campaign_main/campaign_13_3.py
Normal file
73
campaign/campaign_main/campaign_13_3.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_13_1 import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('13-3')
|
||||
MAP.shape = 'J7'
|
||||
MAP.camera_data = ['D2', 'D5', 'G2', 'G5']
|
||||
MAP.camera_data_spawn_point = ['G5', 'D5']
|
||||
MAP.map_data = """
|
||||
++ ++ ++ ME ME MB -- Me ++ --
|
||||
MB Me ME ME -- ME -- -- ++ MB
|
||||
MB -- -- -- Me ++ ME __ -- --
|
||||
MB __ -- ++ ++ ME -- -- Me ME
|
||||
ME ME -- ++ ++ -- Me -- ME ++
|
||||
++ -- ME Me SP SP Me -- -- ME
|
||||
++ ME -- ME -- -- -- ME -- ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 3},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
pass
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_siren():
|
||||
return True
|
||||
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
if self.clear_siren():
|
||||
return True
|
||||
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
return self.fleet_boss.clear_boss()
|
||||
92
campaign/campaign_main/campaign_13_4.py
Normal file
92
campaign/campaign_main/campaign_13_4.py
Normal file
@@ -0,0 +1,92 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_13_1 import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('13-4')
|
||||
MAP.shape = 'K8'
|
||||
MAP.camera_data = ['D2', 'D4', 'D6', 'H2', 'H4', 'H6']
|
||||
MAP.camera_data_spawn_point = ['D2', 'D6']
|
||||
MAP.map_data = """
|
||||
MB ME ME -- ME ++ ++ ++ MB MB ++
|
||||
MB __ ME ME ME -- __ MA -- Me ++
|
||||
ME -- -- Me Me -- Me Me -- Me ME
|
||||
++ SP -- ME ++ Me -- -- -- -- ME
|
||||
++ SP ME -- ME -- -- ME ++ ++ --
|
||||
++ -- -- -- Me -- ME Me ++ ++ ME
|
||||
ME ME Me -- -- -- Me -- -- ME --
|
||||
-- ME Me ME -- -- ++ ++ -- ME --
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 90 90 90 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
90 50 50 50 50 50 50 50 50 90 50
|
||||
90 90 50 50 50 50 50 50 50 90 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 3},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 2},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5, 'enemy': 1},
|
||||
{'battle': 6},
|
||||
{'battle': 7, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (150, 255 - 24),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 24, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'width': (0, 10),
|
||||
'wlen': 1000,
|
||||
}
|
||||
|
||||
|
||||
# step_on = SelectedGrids([A7, B1, B7, C7, D2, D3, G7, J2, K4, K6])
|
||||
# road_main = RoadGrids([A7, B1, B7, C7, D2, D3, [G7, J2], K4, K6])
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.pick_up_ammo()
|
||||
|
||||
if self.clear_filter_enemy('1L > 1M > 2L > 2M > 3L > 2E > 3E > 2C > 3C > 3M', preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_7(self):
|
||||
return self.fleet_boss.clear_boss()
|
||||
84
campaign/campaign_main/campaign_14_1.py
Normal file
84
campaign/campaign_main/campaign_14_1.py
Normal file
@@ -0,0 +1,84 @@
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_14_base import CampaignBase
|
||||
from .campaign_14_base import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('14-1')
|
||||
MAP.shape = 'H7'
|
||||
MAP.camera_data = ['D2', 'D5', 'E2', 'E5']
|
||||
MAP.camera_data_spawn_point = ['E5']
|
||||
MAP.map_data = """
|
||||
MB ++ ++ ME Me -- ME ME
|
||||
MB ME ++ ME __ ME -- --
|
||||
-- ME Me -- -- -- ME ++
|
||||
-- __ -- Me ME ME Me ++
|
||||
-- ++ MM -- ME Me -- --
|
||||
-- ME ME -- -- -- Me ME
|
||||
MB ME -- ++ ++ SP SP ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 70 60 60 60 60
|
||||
50 50 50 60 60 60 60 60
|
||||
50 50 50 60 60 60 60 60
|
||||
50 50 50 50 60 60 60 60
|
||||
50 50 50 50 50 50 60 60
|
||||
50 50 50 50 50 50 50 60
|
||||
50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
# MAP_SIREN_TEMPLATE = ['0']
|
||||
# MOVABLE_ENEMY_TURN = (2,)
|
||||
# MAP_HAS_SIREN = True
|
||||
# MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = False
|
||||
MAP_HAS_FLEET_STEP = False
|
||||
MAP_HAS_AMBUSH = True
|
||||
# MAP_HAS_MYSTERY = True
|
||||
# ===== End of generated config =====
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.pick_up_light_house(E3)
|
||||
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
self.pick_up_light_house(E3)
|
||||
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
self.fleet_boss.pick_up_flare(C5)
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
93
campaign/campaign_main/campaign_14_2.py
Normal file
93
campaign/campaign_main/campaign_14_2.py
Normal file
@@ -0,0 +1,93 @@
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_14_base import CampaignBase
|
||||
from .campaign_14_base import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('14-2')
|
||||
MAP.shape = 'I8'
|
||||
MAP.camera_data = ['D2', 'D6', 'F2', 'F6']
|
||||
MAP.camera_data_spawn_point = ['F2']
|
||||
MAP.map_data = """
|
||||
MB MB ++ -- ME -- ME ++ ++
|
||||
-- ME ++ ME -- Me -- SP SP
|
||||
-- -- Me Me Me -- -- ME ME
|
||||
ME __ -- Me -- ME -- -- ME
|
||||
MM ME -- -- Me -- -- ME ++
|
||||
++ ++ ++ -- ++ -- ME ME ME
|
||||
Me MB ME __ -- -- Me MM ME
|
||||
ME -- -- -- ME ME ++ ++ ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 60 60 60 50 50 50
|
||||
50 50 50 60 60 50 50 50 50
|
||||
50 50 50 60 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 60 70
|
||||
50 50 50 50 50 50 50 60 80
|
||||
50 50 50 50 50 50 50 50 90
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, \
|
||||
= MAP.flatten()
|
||||
road_H7 = RoadGrids([[G6, G7, H6], [G6, G7, H7]])
|
||||
road_A5 = RoadGrids([[A4, B5]])
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
# MAP_SIREN_TEMPLATE = ['0']
|
||||
# MOVABLE_ENEMY_TURN = (2,)
|
||||
# MAP_HAS_SIREN = True
|
||||
# MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = False
|
||||
MAP_HAS_FLEET_STEP = False
|
||||
MAP_HAS_AMBUSH = True
|
||||
# MAP_HAS_MYSTERY = True
|
||||
# ===== End of generated config =====
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
# 14-2 do not have light house
|
||||
|
||||
if not self.picked_flare and H7.is_accessible and A5.is_accessible:
|
||||
self.fleet_boss.pick_up_flare(H7)
|
||||
self.fleet_boss.pick_up_flare(A5)
|
||||
self.fleet_boss.goto(D6)
|
||||
self.fleet_1.switch_to()
|
||||
|
||||
if self.clear_roadblocks([road_A5, road_H7], weakest=True):
|
||||
return True
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
return self.fleet_boss.clear_boss()
|
||||
96
campaign/campaign_main/campaign_14_3.py
Normal file
96
campaign/campaign_main/campaign_14_3.py
Normal file
@@ -0,0 +1,96 @@
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_14_base import CampaignBase
|
||||
from .campaign_14_base import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('14-3')
|
||||
MAP.shape = 'J8'
|
||||
MAP.camera_data = ['D2', 'D6', 'G2', 'G6']
|
||||
MAP.camera_data_spawn_point = ['G2']
|
||||
MAP.map_data = """
|
||||
ME ++ ++ ++ -- ME ++ ++ ME ME
|
||||
-- Me ME -- ME -- ++ ++ ME --
|
||||
MB -- ME ME -- -- SP SP ME Me
|
||||
-- __ -- ++ -- ME Me -- ME --
|
||||
MB -- Me MM -- ME -- Me ++ ++
|
||||
ME -- Me ME -- Me ME ME ME ++
|
||||
++ -- ME __ ME Me ++ Me ME --
|
||||
MB -- MB MB -- ++ ++ -- ME --
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 40 40 40 50 50 50 50 50
|
||||
50 50 40 40 40 50 50 50 50 50
|
||||
50 50 40 40 50 50 50 50 50 50
|
||||
50 50 40 40 50 50 50 50 50 50
|
||||
50 50 40 40 50 50 50 50 50 50
|
||||
50 50 40 40 50 50 50 50 50 50
|
||||
50 50 40 40 40 50 50 50 50 50
|
||||
50 50 40 40 40 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 4},
|
||||
{'battle': 1, 'enemy': 3},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
MAP.spawn_data_loop = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 3},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
# MAP_SIREN_TEMPLATE = ['0']
|
||||
# MOVABLE_ENEMY_TURN = (2,)
|
||||
# MAP_HAS_SIREN = True
|
||||
# MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = False
|
||||
MAP_HAS_FLEET_STEP = False
|
||||
MAP_HAS_AMBUSH = True
|
||||
# MAP_HAS_MYSTERY = True
|
||||
# ===== End of generated config =====
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.pick_up_light_house(J7)
|
||||
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
self.pick_up_light_house(J7)
|
||||
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
self.fleet_boss.pick_up_flare(D5)
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
151
campaign/campaign_main/campaign_14_4.py
Normal file
151
campaign/campaign_main/campaign_14_4.py
Normal file
@@ -0,0 +1,151 @@
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_14_base import CampaignBase
|
||||
from .campaign_14_base import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('14-4')
|
||||
MAP.shape = 'K9'
|
||||
MAP.camera_data = ['D2', 'D5', 'D7', 'H2', 'H5', 'H7']
|
||||
MAP.camera_data_spawn_point = ['H2']
|
||||
MAP.map_covered = ['A4']
|
||||
MAP.map_data = """
|
||||
ME -- ++ ++ -- ME ME ME ++ ++ ++
|
||||
-- ME ME ME ME ME ME -- SP SP --
|
||||
MB -- __ -- -- -- -- -- ME -- --
|
||||
MB ME -- Me Me -- Me ++ ++ -- ME
|
||||
MM -- Me ME -- Me -- MA ++ -- ME
|
||||
++ ME ME -- ++ -- ME -- ME -- --
|
||||
++ -- ME Me Me ME -- -- -- -- ++
|
||||
-- -- -- -- -- __ -- ME ME -- ME
|
||||
-- -- ++ MB MB ++ ++ MM ME ME ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
40 40 40 40 50 50 50 50 50 50 50
|
||||
40 40 40 40 50 50 50 50 50 50 50
|
||||
40 40 40 40 50 50 50 50 50 50 50
|
||||
40 40 40 40 50 50 50 50 50 50 50
|
||||
40 40 40 40 50 50 50 50 50 50 50
|
||||
40 40 40 40 50 50 50 50 50 50 50
|
||||
40 40 40 40 50 50 50 50 50 50 50
|
||||
50 10 50 50 50 50 50 40 40 50 50
|
||||
50 50 50 50 50 50 50 50 50 40 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 3},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 2},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5, 'enemy': 1},
|
||||
{'battle': 6},
|
||||
{'battle': 7, 'boss': 1},
|
||||
]
|
||||
MAP.spawn_data_loop = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 3},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 2},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5, 'enemy': 1},
|
||||
{'battle': 6},
|
||||
{'battle': 7, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \
|
||||
A9, B9, C9, D9, E9, F9, G9, H9, I9, J9, K9, \
|
||||
= MAP.flatten()
|
||||
|
||||
# 14-4 has special enemy spawn mechanism
|
||||
# After entering map or each battle, enemies spawn on these nodes:
|
||||
# ['C2', 'D3', 'D4', 'H8', 'I7'], and 'B8' must spawns an enemy
|
||||
# ['A1', 'B2', 'B6', 'C7']
|
||||
# ['F5', 'G4', 'G6', 'I8', 'J9']
|
||||
# ['F2', 'G1', 'H2', 'K4', 'K5']
|
||||
# ['C5', 'C6', 'D5']
|
||||
# ['E8', 'G8']
|
||||
OVERRIDE = CampaignMap('14-4')
|
||||
OVERRIDE.map_data = """
|
||||
ME -- -- -- -- -- ME -- -- -- --
|
||||
-- ME ME -- -- ME -- ME -- -- --
|
||||
-- -- -- ME -- -- -- -- -- -- --
|
||||
-- -- -- ME -- -- ME -- -- -- ME
|
||||
-- -- ME ME -- ME -- -- -- -- ME
|
||||
-- ME ME -- -- -- ME -- -- -- --
|
||||
-- -- ME -- -- -- -- -- ME -- --
|
||||
-- ME -- -- ME -- ME ME ME -- --
|
||||
-- -- -- -- -- -- -- -- -- ME --
|
||||
"""
|
||||
road_A8 = RoadGrids([B8])
|
||||
road_H9 = RoadGrids([[H8, I8, J9], ])
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
# MAP_SIREN_TEMPLATE = ['0']
|
||||
# MOVABLE_ENEMY_TURN = (2,)
|
||||
# MAP_HAS_SIREN = True
|
||||
# MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = False
|
||||
MAP_HAS_FLEET_STEP = False
|
||||
MAP_HAS_AMBUSH = True
|
||||
# MAP_HAS_MYSTERY = True
|
||||
# ===== End of generated config =====
|
||||
|
||||
MAP_WALK_USE_CURRENT_FLEET = True
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def map_data_init(self, map_):
|
||||
super().map_data_init(map_)
|
||||
for override_grid in OVERRIDE:
|
||||
# Set may_enemy, but keep may_ambush
|
||||
self.map[override_grid.location].may_enemy = override_grid.may_enemy
|
||||
|
||||
def battle_0(self):
|
||||
self.pick_up_light_house(A9)
|
||||
|
||||
if self.clear_roadblocks([road_A8, road_H9], weakest=False):
|
||||
return True
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.pick_up_light_house(A9)
|
||||
self.pick_up_ammo()
|
||||
self.pick_up_flare(H9)
|
||||
|
||||
if self.clear_roadblocks([road_A8, road_H9], weakest=False):
|
||||
return True
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
self.pick_up_light_house(A9)
|
||||
self.pick_up_ammo()
|
||||
self.pick_up_flare(H9)
|
||||
|
||||
if self.clear_roadblocks([road_A8, road_H9], weakest=False):
|
||||
return True
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_7(self):
|
||||
self.fleet_boss.pick_up_flare(A5)
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
74
campaign/campaign_main/campaign_14_base.py
Normal file
74
campaign/campaign_main/campaign_14_base.py
Normal file
@@ -0,0 +1,74 @@
|
||||
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
||||
from module.logger import logger
|
||||
|
||||
|
||||
class Config:
|
||||
HOMO_EDGE_COLOR_RANGE = (0, 12)
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
MAP_SWIPE_MULTIPLY = (1.006, 1.025)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (0.973, 0.991)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.944, 0.961)
|
||||
|
||||
# Disabled because having errors
|
||||
MAP_SWIPE_PREDICT_WITH_SEA_GRIDS = False
|
||||
# Ambushes can be avoid by having more DDs.
|
||||
MAP_WALK_OPTIMIZE = False
|
||||
|
||||
|
||||
class CampaignBase(CampaignBase_):
|
||||
ENEMY_FILTER = '1T > 1L > 1E > 1M > 2T > 2L > 2E > 2M > 3T > 3L > 3E > 3M'
|
||||
picked_light_house = []
|
||||
picked_flare = []
|
||||
|
||||
def map_data_init(self, map_):
|
||||
super().map_data_init(map_)
|
||||
self.picked_light_house = []
|
||||
self.picked_flare = []
|
||||
|
||||
def handle_mystery_items(self, button=None, drop=None):
|
||||
"""
|
||||
Handle get flares, but not counted as mystery.
|
||||
"""
|
||||
super().handle_mystery_items(button=button, drop=None)
|
||||
return False
|
||||
|
||||
def pick_up_flare(self, grid):
|
||||
"""
|
||||
Args:
|
||||
grid (GridInfo):
|
||||
|
||||
Returns:
|
||||
bool: False
|
||||
"""
|
||||
grid.is_flare = True
|
||||
if grid in self.picked_flare:
|
||||
logger.info(f'Flares {grid} already picked up')
|
||||
elif grid.is_accessible:
|
||||
logger.info(f'Pick up flares on {grid}')
|
||||
# get_items shows after flares picked up.
|
||||
self.goto(grid)
|
||||
self.picked_flare.append(grid)
|
||||
else:
|
||||
logger.info(f'Flares {grid} not accessible, will check in next battle')
|
||||
|
||||
return False
|
||||
|
||||
def pick_up_light_house(self, grid):
|
||||
"""
|
||||
Args:
|
||||
grid (GridInfo):
|
||||
|
||||
Returns:
|
||||
bool: False
|
||||
"""
|
||||
if grid in self.picked_light_house:
|
||||
logger.info(f'Light house {grid} already picked up')
|
||||
elif grid.is_accessible:
|
||||
logger.info(f'Pick up light house on {grid}')
|
||||
self.goto(grid)
|
||||
self.picked_light_house.append(grid)
|
||||
self.ensure_no_info_bar()
|
||||
else:
|
||||
logger.info(f'Light house {grid} not accessible, will check in next battle')
|
||||
|
||||
return False
|
||||
104
campaign/campaign_main/campaign_15_1.py
Normal file
104
campaign/campaign_main/campaign_15_1.py
Normal file
@@ -0,0 +1,104 @@
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import SelectedGrids, RoadGrids
|
||||
|
||||
from .campaign_15_base import CampaignBase
|
||||
from .campaign_15_base import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('15-1')
|
||||
MAP.shape = 'H7'
|
||||
MAP.camera_data = ['C2', 'C5', 'E2', 'E5']
|
||||
MAP.camera_data_spawn_point = ['C5']
|
||||
MAP.camera_sight = (-2, -1, 3, 2)
|
||||
MAP.map_data = """
|
||||
Me Me ME ++ ME MB ++ ++
|
||||
ME ME Me ME Me -- MB ++
|
||||
++ Me ME -- Me -- -- MB
|
||||
++ ME -- -- -- __ Me --
|
||||
-- ME -- ME ME Me -- ME
|
||||
ME -- -- ME ++ -- ME --
|
||||
-- SP SP -- Me -- ME --
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 5},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3},
|
||||
{'battle': 4},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
# MAP_SIREN_TEMPLATE = ['0']
|
||||
# MOVABLE_ENEMY_TURN = (2,)
|
||||
# MAP_HAS_SIREN = True
|
||||
# MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = False
|
||||
MAP_HAS_FLEET_STEP = False
|
||||
MAP_HAS_AMBUSH = True
|
||||
# MAP_HAS_MYSTERY = True
|
||||
# ===== End of generated config =====
|
||||
|
||||
MAP_WALK_USE_CURRENT_FLEET = True
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_function(self):
|
||||
if self.config.MAP_CLEAR_ALL_THIS_TIME \
|
||||
and self.battle_count == 0 and not self.map_is_clear_mode:
|
||||
func = self.FUNCTION_NAME_BASE + str(self.battle_count)
|
||||
logger.info(f'Using function: {func}')
|
||||
func = self.__getattribute__(func)
|
||||
result = func()
|
||||
return result
|
||||
|
||||
return super().battle_function()
|
||||
|
||||
def battle_0(self):
|
||||
if not self.map_is_clear_mode and self.map_has_mob_move:
|
||||
self.mob_move(B3, C3)
|
||||
if B1.is_accessible:
|
||||
self.clear_chosen_enemy(B1)
|
||||
return True
|
||||
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_1(self):
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
return self.fleet_boss.clear_boss()
|
||||
106
campaign/campaign_main/campaign_15_2.py
Normal file
106
campaign/campaign_main/campaign_15_2.py
Normal file
@@ -0,0 +1,106 @@
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import SelectedGrids, RoadGrids
|
||||
|
||||
from .campaign_15_base import CampaignBase
|
||||
from .campaign_15_base import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('15-2')
|
||||
MAP.shape = 'I8'
|
||||
MAP.camera_data = ['C2', 'C6', 'F2', 'F6']
|
||||
MAP.camera_data_spawn_point = ['F2']
|
||||
MAP.camera_sight = (-2, -1, 3, 2)
|
||||
MAP.map_data = """
|
||||
ME -- ME ME Me -- ++ ++ ++
|
||||
ME -- -- ++ ME ME ME SP SP
|
||||
-- ME ME Me -- -- -- -- --
|
||||
-- -- -- -- -- ME ME Me --
|
||||
ME -- ++ ME Me -- ME ME --
|
||||
Me -- ME __ ME ++ ++ ++ Me
|
||||
++ MB -- ME ME ++ Me MB --
|
||||
++ MB ME -- ME Me -- -- ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 6},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3},
|
||||
{'battle': 4},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
# MAP_SIREN_TEMPLATE = ['0']
|
||||
# MOVABLE_ENEMY_TURN = (2,)
|
||||
# MAP_HAS_SIREN = True
|
||||
# MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = False
|
||||
MAP_HAS_FLEET_STEP = False
|
||||
MAP_HAS_AMBUSH = True
|
||||
# MAP_HAS_MYSTERY = True
|
||||
# ===== End of generated config =====
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_function(self):
|
||||
if self.config.MAP_CLEAR_ALL_THIS_TIME \
|
||||
and self.battle_count == 0 and not self.map_is_clear_mode:
|
||||
func = self.FUNCTION_NAME_BASE + str(self.battle_count)
|
||||
logger.info(f'Using function: {func}')
|
||||
func = self.__getattribute__(func)
|
||||
result = func()
|
||||
return result
|
||||
|
||||
return super().battle_function()
|
||||
|
||||
def battle_0(self):
|
||||
if not self.map_is_clear_mode and self.map_has_mob_move:
|
||||
self.mob_move(I6, I7)
|
||||
self.mob_move(I7, H7)
|
||||
if G7.is_accessible:
|
||||
self.clear_chosen_enemy(G7)
|
||||
return True
|
||||
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_1(self):
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
return self.fleet_boss.clear_boss()
|
||||
119
campaign/campaign_main/campaign_15_3.py
Normal file
119
campaign/campaign_main/campaign_15_3.py
Normal file
@@ -0,0 +1,119 @@
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import SelectedGrids, RoadGrids
|
||||
|
||||
from .campaign_15_base import CampaignBase, W15GridInfo
|
||||
from .campaign_15_base import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('15-3')
|
||||
MAP.grid_class = W15GridInfo
|
||||
MAP.shape = 'J8'
|
||||
MAP.camera_data = ['C2', 'C6', 'G2', 'G6']
|
||||
MAP.camera_data_spawn_point = ['G6']
|
||||
MAP.camera_sight = (-2, -1, 3, 2)
|
||||
MAP.map_data = """
|
||||
Me -- ++ ME ME ME -- ME -- ME
|
||||
-- ME ++ Me -- Me ME Me ME --
|
||||
ME Me ME ME Me -- ++ MB -- ME
|
||||
++ -- -- ME ME Me ++ ++ __ ME
|
||||
Me ME -- ++ Me -- ME MS -- Me
|
||||
ME ME -- -- ME ME ME -- -- ME
|
||||
Me -- __ -- -- ME -- -- ++ ++
|
||||
++ ++ ++ Me -- -- SP SP ++ ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 5},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1, 'siren': 1},
|
||||
{'battle': 4, 'enemy': 2},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
# MAP_SIREN_TEMPLATE = ['BOSS']
|
||||
# MOVABLE_ENEMY_TURN = (2,)
|
||||
# MAP_HAS_SIREN = True
|
||||
# MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = False
|
||||
MAP_HAS_FLEET_STEP = False
|
||||
MAP_HAS_AMBUSH = True
|
||||
# MAP_HAS_MYSTERY = True
|
||||
# ===== End of generated config =====
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_function(self):
|
||||
if not self.config.MAP_CLEAR_ALL_THIS_TIME:
|
||||
return super().battle_function()
|
||||
|
||||
if self.battle_count == 3 \
|
||||
or (self.battle_count == 0 and not self.map_is_clear_mode):
|
||||
func = self.FUNCTION_NAME_BASE + str(self.battle_count)
|
||||
logger.info(f'Using function: {func}')
|
||||
func = self.__getattribute__(func)
|
||||
result = func()
|
||||
return result
|
||||
|
||||
return super().battle_function()
|
||||
|
||||
def battle_0(self):
|
||||
if not self.map_is_clear_mode and self.map_has_mob_move:
|
||||
self.mob_move(B3, B4)
|
||||
if A1.is_accessible:
|
||||
self.clear_chosen_enemy(A1)
|
||||
return True
|
||||
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_1(self):
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.clear_chosen_enemy(H5, expected='siren')
|
||||
return True
|
||||
|
||||
def battle_4(self):
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
return self.fleet_boss.clear_boss()
|
||||
151
campaign/campaign_main/campaign_15_4.py
Normal file
151
campaign/campaign_main/campaign_15_4.py
Normal file
@@ -0,0 +1,151 @@
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import SelectedGrids, RoadGrids
|
||||
|
||||
from .campaign_15_base import CampaignBase, W15GridInfo
|
||||
from .campaign_15_base import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('15-4')
|
||||
MAP.grid_class = W15GridInfo
|
||||
MAP.shape = 'K9'
|
||||
MAP.camera_data = ['C2', 'C5', 'C7', 'F2', 'F5', 'F7', 'H2', 'H5', 'H7']
|
||||
MAP.camera_data_spawn_point = ['H2']
|
||||
MAP.camera_sight = (-2, -1, 3, 2)
|
||||
MAP.map_data = """
|
||||
Me -- ME ME Me -- ME ++ ++ ME ME
|
||||
ME -- -- -- -- ME -- ++ ++ -- ME
|
||||
++ -- -- MS -- -- ME SP SP ME Me
|
||||
++ ME -- ++ ++ -- -- -- -- ME --
|
||||
-- Me ME MA ++ ME -- MS -- -- ME
|
||||
ME ME ME -- -- -- -- ++ ME -- Me
|
||||
ME -- __ -- ME ME -- ME ME -- ++
|
||||
-- -- ++ -- Me -- ME ME ME Me ME
|
||||
MB Me -- ME ME Me ++ ++ ++ -- Me
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 8},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1, 'siren': 1},
|
||||
{'battle': 4, 'enemy': 2},
|
||||
{'battle': 5},
|
||||
{'battle': 6, 'siren': 1},
|
||||
{'battle': 7, 'enemy': 1},
|
||||
{'battle': 8, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \
|
||||
A9, B9, C9, D9, E9, F9, G9, H9, I9, J9, K9, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
# MAP_SIREN_TEMPLATE = ['BOSS']
|
||||
# MOVABLE_ENEMY_TURN = (2,)
|
||||
# MAP_HAS_SIREN = True
|
||||
# MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = False
|
||||
MAP_HAS_FLEET_STEP = False
|
||||
MAP_HAS_AMBUSH = True
|
||||
# MAP_HAS_MYSTERY = True
|
||||
# ===== End of generated config =====
|
||||
|
||||
MAP_SWIPE_MULTIPLY = (1.055, 1.075)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.020, 1.039)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.990, 1.008)
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_function(self):
|
||||
if not self.config.MAP_CLEAR_ALL_THIS_TIME:
|
||||
return super().battle_function()
|
||||
|
||||
if self.battle_count in [3, 6] \
|
||||
or (self.battle_count in [0, 1] and not self.map_is_clear_mode):
|
||||
func = self.FUNCTION_NAME_BASE + str(self.battle_count)
|
||||
logger.info(f'Using function: {func}')
|
||||
func = self.__getattribute__(func)
|
||||
result = func()
|
||||
return result
|
||||
|
||||
return super().battle_function()
|
||||
|
||||
def battle_0(self):
|
||||
if not self.map_is_clear_mode and self.map_has_mob_move:
|
||||
self.mob_move(J8, K8)
|
||||
if K9.is_accessible:
|
||||
self.clear_chosen_enemy(K9)
|
||||
return True
|
||||
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_1(self):
|
||||
if not self.map_is_clear_mode:
|
||||
if A1.is_accessible:
|
||||
self.clear_chosen_enemy(A1)
|
||||
return True
|
||||
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_2(self):
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
if not self.map_is_clear_mode:
|
||||
self.fleet_boss.clear_chosen_enemy(H5, expected='siren')
|
||||
self.fleet_1.switch_to()
|
||||
return True
|
||||
else:
|
||||
self.pick_up_ammo()
|
||||
self.clear_chosen_enemy(H5, expected='siren')
|
||||
return True
|
||||
|
||||
def battle_4(self):
|
||||
self.pick_up_ammo()
|
||||
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_6(self):
|
||||
self.clear_chosen_enemy(D3, expected='siren')
|
||||
return True
|
||||
|
||||
def battle_7(self):
|
||||
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_8(self):
|
||||
return self.fleet_boss.clear_boss()
|
||||
218
campaign/campaign_main/campaign_15_base.py
Normal file
218
campaign/campaign_main/campaign_15_base.py
Normal file
@@ -0,0 +1,218 @@
|
||||
from module.base.mask import Mask
|
||||
from module.base.timer import Timer
|
||||
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
||||
from module.handler.assets import STRATEGY_OPENED
|
||||
from module.logger import logger
|
||||
from module.map.map_grids import SelectedGrids
|
||||
from module.map.utils import location_ensure
|
||||
from module.map_detection.grid import GridInfo
|
||||
from module.map_detection.utils_assets import ASSETS
|
||||
|
||||
MASK_MAP_UI_W15 = Mask(file='./assets/mask/MASK_MAP_UI_W15.png')
|
||||
|
||||
|
||||
class Config:
|
||||
# Ambushes can be avoid by having more DDs.
|
||||
MAP_WALK_OPTIMIZE = False
|
||||
MAP_HAS_MYSTERY = False
|
||||
MAP_ENEMY_TEMPLATE = ['Light', 'Main', 'Carrier', 'CarrierSpecial']
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (80, 255 - 33),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
MAP_SWIPE_MULTIPLY = (0.993, 1.011)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (0.960, 0.978)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.932, 0.949)
|
||||
|
||||
|
||||
class W15GridInfo(GridInfo):
|
||||
def merge(self, info, mode='normal'):
|
||||
# Consider boss as siren
|
||||
if info.is_boss:
|
||||
if not self.is_land and self.may_siren:
|
||||
self.is_siren = True
|
||||
self.enemy_scale = 0
|
||||
self.enemy_genre = ''
|
||||
return True
|
||||
|
||||
return super().merge(info, mode=mode)
|
||||
|
||||
|
||||
class CampaignBase(CampaignBase_):
|
||||
ENEMY_FILTER = '1T > 1L > 1E > 1M > 2T > 2L > 2E > 2M > 3T > 3L > 3E > 3M'
|
||||
|
||||
def map_data_init(self, map_):
|
||||
super().map_data_init(map_)
|
||||
# Patch ui_mask, get rid of supporting fleet
|
||||
_ = ASSETS.ui_mask
|
||||
ASSETS.ui_mask = MASK_MAP_UI_W15.image
|
||||
|
||||
map_has_mob_move = True
|
||||
|
||||
def strategy_set_execute(self, formation_index=None, sub_view=None, sub_hunt=None):
|
||||
super().strategy_set_execute(
|
||||
formation_index=formation_index,
|
||||
sub_view=sub_view,
|
||||
sub_hunt=sub_hunt,
|
||||
)
|
||||
self.map_has_mob_move = (self.strategy_get_mob_move_remain() > 0)
|
||||
logger.attr("Map has mob move", self.map_has_mob_move)
|
||||
|
||||
def _map_swipe(self, vector, box=(239, 159, 1175, 628)):
|
||||
# Left border to 239, avoid swiping on support fleet
|
||||
return super()._map_swipe(vector, box=box)
|
||||
|
||||
def mob_movable(self, location, target):
|
||||
"""
|
||||
Check if mob is movable from location to target.
|
||||
This requires that:
|
||||
1. both location and target are grids in the map (not exceeding the boundaries)
|
||||
2. Manhattan distance between location and target is 1.
|
||||
3. location is a mob fleet
|
||||
4. target is a sea grid
|
||||
|
||||
Args:
|
||||
location (tuple): Location of mob.
|
||||
target (tuple): Destination.
|
||||
|
||||
Returns:
|
||||
bool: if movable.
|
||||
"""
|
||||
location = location_ensure(location)
|
||||
target = location_ensure(target)
|
||||
movable = True
|
||||
|
||||
try:
|
||||
logger.info(f'location: {self.map[location]}, target: {self.map[target]}')
|
||||
except KeyError as e:
|
||||
logger.exception(f'Given coordinates are outside the map.')
|
||||
raise e
|
||||
|
||||
if abs(location[0] - target[0]) + abs(location[1] - target[1]) != 1:
|
||||
logger.error(f'{self.map[target]} is not adjacent from {self.map[location]}.')
|
||||
movable = False
|
||||
|
||||
if not self.map[location].is_enemy:
|
||||
logger.error(f'{self.map[location]} is not a mob fleet.')
|
||||
movable = False
|
||||
|
||||
if not self.map[target].is_sea:
|
||||
logger.error(f'{self.map[target]} is not a sea grid.')
|
||||
movable = False
|
||||
|
||||
if not movable:
|
||||
logger.error(f'Cannot move from {self.map[location]} to {self.map[target]}.')
|
||||
|
||||
return movable
|
||||
|
||||
def _mob_move(self, location, target):
|
||||
"""
|
||||
Move mob from location to target, and confirm if successfully moved.
|
||||
|
||||
Args:
|
||||
location (tuple, str, GridInfo): Location of mob.
|
||||
target (tuple, str, GridInfo): Destination.
|
||||
|
||||
Returns:
|
||||
bool: If mob moved.
|
||||
|
||||
Pages:
|
||||
in: MOB_MOVE_CANCEL
|
||||
out: STRATEGY_OPENED
|
||||
"""
|
||||
location = location_ensure(location)
|
||||
target = location_ensure(target)
|
||||
|
||||
view_target = SelectedGrids([self.map[location], self.map[target]]) \
|
||||
.sort_by_camera_distance(self.camera)[1]
|
||||
self.in_sight(view_target)
|
||||
origin_grid = self.convert_global_to_local(location)
|
||||
origin_grid.__str__ = location
|
||||
target_grid = self.convert_global_to_local(target)
|
||||
target_grid.__str__ = target
|
||||
|
||||
logger.info('Select mob to move')
|
||||
skip_first_screenshot = True
|
||||
interval = Timer(2, count=4)
|
||||
while 1:
|
||||
if skip_first_screenshot:
|
||||
skip_first_screenshot = False
|
||||
else:
|
||||
self.device.screenshot()
|
||||
|
||||
# End
|
||||
if self.is_in_strategy_mob_move():
|
||||
self.view.update(image=self.device.image)
|
||||
if origin_grid.predict_mob_move_icon():
|
||||
break
|
||||
# Click
|
||||
if interval.reached() and self.is_in_strategy_mob_move():
|
||||
self.device.click(origin_grid)
|
||||
interval.reset()
|
||||
continue
|
||||
|
||||
logger.info('Select target grid')
|
||||
skip_first_screenshot = True
|
||||
interval = Timer(2, count=4)
|
||||
while 1:
|
||||
if skip_first_screenshot:
|
||||
skip_first_screenshot = False
|
||||
else:
|
||||
self.device.screenshot()
|
||||
|
||||
# End
|
||||
if self.appear(STRATEGY_OPENED, offset=(120, 120)):
|
||||
break
|
||||
# Click
|
||||
if interval.reached() and self.is_in_strategy_mob_move():
|
||||
self.device.click(target_grid)
|
||||
interval.reset()
|
||||
continue
|
||||
if self.handle_popup_confirm('MOB_MOVE'):
|
||||
continue
|
||||
|
||||
def _mob_move_info_change(self, location, target):
|
||||
location = location_ensure(location)
|
||||
target = location_ensure(target)
|
||||
self.map[target].enemy_scale = self.map[location].enemy_scale
|
||||
self.map[location].enemy_scale = 0
|
||||
self.map[target].enemy_genre = self.map[location].enemy_genre
|
||||
self.map[location].enemy_genre = None
|
||||
self.map[target].is_boss = self.map[location].is_boss
|
||||
self.map[location].is_boss = False
|
||||
self.map[target].is_enemy = True
|
||||
self.map[location].is_enemy = False
|
||||
|
||||
def mob_move(self, location, target):
|
||||
"""
|
||||
Open strategy, move mob fleet from location to target, close strategy.
|
||||
|
||||
Args:
|
||||
location (tuple, str, GridInfo): Location of mob.
|
||||
target (tuple, str, GridInfo): Destination.
|
||||
|
||||
Returns:
|
||||
bool: If mob moved
|
||||
|
||||
Pages:
|
||||
in: IN_MAP
|
||||
out: IN_MAP
|
||||
"""
|
||||
if not self.mob_movable(location, target):
|
||||
return False
|
||||
|
||||
self.strategy_open()
|
||||
remain = self.strategy_get_mob_move_remain()
|
||||
if remain == 0:
|
||||
logger.warning(f'No remain mob move trials, will abandon moving')
|
||||
self.strategy_close()
|
||||
return False
|
||||
self.strategy_mob_move_enter()
|
||||
self._mob_move(location, target)
|
||||
self.strategy_close(skip_first_screenshot=False)
|
||||
|
||||
self._mob_move_info_change(location, target)
|
||||
self.find_path_initial()
|
||||
self.map.show()
|
||||
52
campaign/campaign_main/campaign_1_1.py
Normal file
52
campaign/campaign_main/campaign_1_1.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'G1'
|
||||
MAP.camera_data = ['D1']
|
||||
MAP.camera_data_spawn_point = ['D1']
|
||||
MAP.map_data = """
|
||||
SP -- -- -- -- ME MB
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 1},
|
||||
{'battle': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config:
|
||||
FLEET_2 = 0
|
||||
SUBMARINE = 0
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (120, 255 - 49),
|
||||
'width': (1.5, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 49, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'wlen': 1000
|
||||
}
|
||||
HOMO_EDGE_COLOR_RANGE = (0, 49)
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 80
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
return self.battle_default()
|
||||
|
||||
def battle_1(self):
|
||||
return self.clear_boss()
|
||||
|
||||
def handle_boss_appear_refocus(self, preset=(-3, 0)):
|
||||
return super().handle_boss_appear_refocus(preset)
|
||||
37
campaign/campaign_main/campaign_1_1_affinity_farming.py
Normal file
37
campaign/campaign_main/campaign_1_1_affinity_farming.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import numpy as np
|
||||
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.exception import CampaignEnd, ScriptEnd
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_1_1 import MAP
|
||||
from .campaign_1_1 import Config as ConfigBase
|
||||
|
||||
A1, B1, C1, D1, E1, F1, G1, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
ENABLE_FAST_FORWARD = False
|
||||
ENABLE_AUTO_SEARCH = False
|
||||
AMBUSH_EVADE = False
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
affinity_battle = 0
|
||||
|
||||
def battle_default(self):
|
||||
while self.affinity_battle < self.config.C11AffinityFarming_RunCount:
|
||||
logger.attr('Affinity_battle', f'{self.affinity_battle}/{self.config.C11AffinityFarming_RunCount}')
|
||||
self.goto(C1)
|
||||
self.affinity_battle += 1
|
||||
self.goto(D1 if np.random.uniform() < 0.7 else B1)
|
||||
|
||||
# End
|
||||
try:
|
||||
self.withdraw()
|
||||
except CampaignEnd:
|
||||
raise ScriptEnd('Reach condition: Affinity farming battle count')
|
||||
36
campaign/campaign_main/campaign_1_2.py
Normal file
36
campaign/campaign_main/campaign_1_2.py
Normal file
@@ -0,0 +1,36 @@
|
||||
from campaign.campaign_main.campaign_1_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'E3'
|
||||
MAP.camera_data = ['C1']
|
||||
MAP.camera_data_spawn_point = ['C1']
|
||||
MAP.map_data = """
|
||||
SP -- ME Me MB
|
||||
-- ++ -- -- ++
|
||||
-- -- ME MM ++
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 1, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, \
|
||||
A2, B2, C2, D2, E2, \
|
||||
A3, B3, C3, D3, E3, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
return self.battle_default()
|
||||
|
||||
def battle_2(self):
|
||||
self.clear_all_mystery()
|
||||
return self.clear_boss()
|
||||
36
campaign/campaign_main/campaign_1_3.py
Normal file
36
campaign/campaign_main/campaign_1_3.py
Normal file
@@ -0,0 +1,36 @@
|
||||
from campaign.campaign_main.campaign_1_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'F3'
|
||||
MAP.camera_data = ['C1']
|
||||
MAP.camera_data_spawn_point = ['C1']
|
||||
MAP.map_data = """
|
||||
++ ++ ++ -- MB --
|
||||
-- ME -- ME -- --
|
||||
SP -- ++ -- -- MM
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 1, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, \
|
||||
A2, B2, C2, D2, E2, F2, \
|
||||
A3, B3, C3, D3, E3, F3, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
return self.battle_default()
|
||||
|
||||
def battle_2(self):
|
||||
self.clear_all_mystery()
|
||||
return self.clear_boss()
|
||||
35
campaign/campaign_main/campaign_1_4.py
Normal file
35
campaign/campaign_main/campaign_1_4.py
Normal file
@@ -0,0 +1,35 @@
|
||||
from campaign.campaign_main.campaign_1_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'G3'
|
||||
MAP.camera_data = ['D1']
|
||||
MAP.camera_data_spawn_point = ['D1']
|
||||
MAP.map_data = """
|
||||
SP -- ME -- ++ ++ ++
|
||||
++ ++ ME -- MA ++ ++
|
||||
++ ++ ++ ME -- ME MB
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2},
|
||||
{'battle': 3, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
return self.clear_boss()
|
||||
73
campaign/campaign_main/campaign_2_1.py
Normal file
73
campaign/campaign_main/campaign_2_1.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'F4'
|
||||
MAP.camera_data = ['C2']
|
||||
MAP.camera_data_spawn_point = ['C1']
|
||||
MAP.map_data = """
|
||||
-- SP ME -- ME --
|
||||
SP -- ++ ++ ME MM
|
||||
++ -- ME -- ME ME
|
||||
++ ++ ++ MB -- ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
40 40 40 40 40 40
|
||||
30 30 30 30 30 30
|
||||
20 20 20 20 20 30
|
||||
10 10 10 10 10 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, \
|
||||
A2, B2, C2, D2, E2, F2, \
|
||||
A3, B3, C3, D3, E3, F3, \
|
||||
A4, B4, C4, D4, E4, F4, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config:
|
||||
FLEET_BOSS = 1
|
||||
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (120, 255 - 49),
|
||||
'width': (1.5, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 49, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'wlen': 1000
|
||||
}
|
||||
HOMO_EDGE_COLOR_RANGE = (0, 49)
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_2(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
if not self.check_accessibility(D4, fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
|
||||
def handle_boss_appear_refocus(self, preset=(0, -2)):
|
||||
return super().handle_boss_appear_refocus(preset)
|
||||
53
campaign/campaign_main/campaign_2_2.py
Normal file
53
campaign/campaign_main/campaign_2_2.py
Normal file
@@ -0,0 +1,53 @@
|
||||
from campaign.campaign_main.campaign_2_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'G5'
|
||||
MAP.camera_data = ['D3']
|
||||
MAP.camera_data_spawn_point = ['D3']
|
||||
MAP.map_data = """
|
||||
++ ++ ++ MB ++ ++ ++
|
||||
++ ++ ++ ME MA ++ ++
|
||||
-- ME -- ME -- -- ME
|
||||
SP -- ME -- -- ME ME
|
||||
-- ME -- -- SP ME MM
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10
|
||||
50 50 50 50 50 50 50
|
||||
30 30 30 30 30 30 30
|
||||
30 30 30 30 30 30 30
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 2, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
if not self.check_accessibility(D1, fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
53
campaign/campaign_main/campaign_2_3.py
Normal file
53
campaign/campaign_main/campaign_2_3.py
Normal file
@@ -0,0 +1,53 @@
|
||||
from campaign.campaign_main.campaign_2_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'F5'
|
||||
MAP.camera_data = ['D3']
|
||||
MAP.camera_data_spawn_point = ['D1', 'D3']
|
||||
MAP.map_data = """
|
||||
SP -- ME -- MB ++
|
||||
-- ME -- ME ++ ++
|
||||
-- -- ME -- -- ++
|
||||
SP -- -- ME ME --
|
||||
++ ++ ++ -- ME MM
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 10 11 10 10 10
|
||||
50 50 10 12 10 10
|
||||
20 20 20 20 20 20
|
||||
20 20 20 20 30 30
|
||||
30 30 30 30 30 30
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 2, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, \
|
||||
A2, B2, C2, D2, E2, F2, \
|
||||
A3, B3, C3, D3, E3, F3, \
|
||||
A4, B4, C4, D4, E4, F4, \
|
||||
A5, B5, C5, D5, E5, F5, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
if not self.check_accessibility(E1, fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
63
campaign/campaign_main/campaign_2_4.py
Normal file
63
campaign/campaign_main/campaign_2_4.py
Normal file
@@ -0,0 +1,63 @@
|
||||
from campaign.campaign_main.campaign_2_1 import Config as ConfigBase
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'G4'
|
||||
MAP.camera_data = ['D2']
|
||||
MAP.camera_data_spawn_point = ['D2']
|
||||
MAP.map_data = """
|
||||
-- ++ ++ ++ ME ME MB
|
||||
SP -- ME -- -- ME --
|
||||
-- -- ME -- ME ++ ++
|
||||
-- ME -- SP -- MA ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
20 20 20 20 12 11 10
|
||||
20 20 20 20 10 10 10
|
||||
20 20 20 20 30 20 20
|
||||
20 20 20 20 20 20 20
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 2, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([[F2, F1], [F2, E1]])
|
||||
|
||||
class Config(ConfigBase):
|
||||
# Don't know why 2-4 is slimmer
|
||||
# 2-1 is /_\ and 2-4 is like |_|
|
||||
MID_DIFF_RANGE_H = (121 - 3, 121 + 3)
|
||||
MID_DIFF_RANGE_V = (121 - 3, 121 + 3)
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
# Even adding these precautions, there is still possibility that F2 and E1 spawns at the same time.
|
||||
# However adding these can reduce the other possibilities.
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
if not self.check_accessibility(G1, fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
75
campaign/campaign_main/campaign_3_1.py
Normal file
75
campaign/campaign_main/campaign_3_1.py
Normal file
@@ -0,0 +1,75 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'G4'
|
||||
MAP.camera_data = ['D2']
|
||||
MAP.camera_data_spawn_point = ['D1', 'D2']
|
||||
MAP.map_data = """
|
||||
SP -- ME -- ME MB --
|
||||
-- ME -- ME -- ME MB
|
||||
++ ++ ME -- ME -- --
|
||||
++ ++ SP ME MM ++ ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
30 30 30 20 10 10 10
|
||||
30 30 30 20 10 09 10
|
||||
40 40 40 20 10 10 10
|
||||
40 40 40 20 20 10 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 2, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config:
|
||||
FLEET_BOSS = 1
|
||||
MAP_MYSTERY_HAS_CARRIER = True
|
||||
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 75
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (120, 255 - 49),
|
||||
'width': (1.5, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 49, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'wlen': 1000
|
||||
}
|
||||
HOMO_EDGE_COLOR_RANGE = (0, 49)
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
if self.fleet_2_rescue(G2):
|
||||
return True
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
if not self.check_accessibility(G2, fleet='boss'):
|
||||
return self.fleet_boss.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
55
campaign/campaign_main/campaign_3_2.py
Normal file
55
campaign/campaign_main/campaign_3_2.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from campaign.campaign_main.campaign_3_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H4'
|
||||
MAP.camera_data = ['E2']
|
||||
MAP.camera_data_spawn_point = ['D1', 'D2']
|
||||
MAP.map_data = """
|
||||
SP -- -- ME -- ME ME MB
|
||||
++ ++ ME -- ME ++ ++ ++
|
||||
-- ++ -- ME -- MA ++ ++
|
||||
SP ME -- -- ME MM -- ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 30 30 20 10 09
|
||||
50 50 40 40 30 20 10 10
|
||||
50 50 50 40 40 50 20 20
|
||||
50 50 50 50 35 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 2, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
if self.fleet_2_rescue(H1):
|
||||
return True
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
if not self.check_accessibility(H1, fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
62
campaign/campaign_main/campaign_3_3.py
Normal file
62
campaign/campaign_main/campaign_3_3.py
Normal file
@@ -0,0 +1,62 @@
|
||||
from campaign.campaign_main.campaign_3_1 import Config as ConfigBase
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'F5'
|
||||
MAP.camera_data = ['D3']
|
||||
MAP.camera_data_spawn_point = ['D3']
|
||||
MAP.map_data = """
|
||||
++ ++ ME MM ++ ++
|
||||
++ ++ -- ME -- SP
|
||||
-- ++ ME -- ME --
|
||||
MB ME -- ME -- --
|
||||
-- ME ME SP ME SP
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 30 30 50 50
|
||||
50 50 30 30 50 50
|
||||
50 50 20 30 50 50
|
||||
09 10 11 20 50 50
|
||||
10 10 11 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, \
|
||||
A2, B2, C2, D2, E2, F2, \
|
||||
A3, B3, C3, D3, E3, F3, \
|
||||
A4, B4, C4, D4, E4, F4, \
|
||||
A5, B5, C5, D5, E5, F5, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
if self.fleet_2_rescue(A4):
|
||||
return True
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
if not self.check_accessibility(A4, fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
77
campaign/campaign_main/campaign_3_4.py
Normal file
77
campaign/campaign_main/campaign_3_4.py
Normal file
@@ -0,0 +1,77 @@
|
||||
from campaign.campaign_main.campaign_3_1 import Config as Config31
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H4'
|
||||
MAP.camera_data = ['E2']
|
||||
MAP.camera_data_spawn_point = ['D1', 'D2']
|
||||
# WIKI的图是错的: https://wiki.biligame.com/blhx/3-4
|
||||
# A3有岛, 假图害人
|
||||
MAP.map_data = """
|
||||
SP -- -- ME -- ++ ++ ++
|
||||
SP ME -- ME -- MA ++ ++
|
||||
++ -- ME __ ME ME -- MB
|
||||
SP ME -- ME -- -- ME MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
40 40 40 40 40 40 40 40
|
||||
40 40 40 30 30 30 30 30
|
||||
40 40 30 30 20 10 10 09
|
||||
40 40 30 20 20 10 10 09
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(Config31):
|
||||
MAP_MYSTERY_HAS_CARRIER = False
|
||||
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (120, 255 - 75),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 40, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'wlen': 1000
|
||||
}
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
if self.fleet_2_rescue(H3):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
if not self.check_accessibility(H3, fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
|
||||
# def handle_boss_appear_refocus(self):
|
||||
# for data in self.map.spawn_data:
|
||||
# if data.get('battle') == self.battle_count and data.get('boss', 0):
|
||||
# self.map_swipe((-3, -1))
|
||||
#
|
||||
# return super().handle_boss_appear_refocus()
|
||||
80
campaign/campaign_main/campaign_4_1.py
Normal file
80
campaign/campaign_main/campaign_4_1.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'F6'
|
||||
MAP.camera_data = ['C2', 'C4']
|
||||
MAP.camera_data_spawn_point = ['C2']
|
||||
MAP.map_data = """
|
||||
ME -- SP -- -- SP
|
||||
-- -- -- -- -- ME
|
||||
ME ME ++ ++ ME SP
|
||||
-- -- MB ++ -- ME
|
||||
ME -- ME MM ME --
|
||||
-- MB ++ ++ ++ ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50
|
||||
50 10 10 10 10 20
|
||||
20 10 10 10 10 20
|
||||
20 10 10 10 10 20
|
||||
50 10 10 10 10 20
|
||||
50 10 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, \
|
||||
A2, B2, C2, D2, E2, F2, \
|
||||
A3, B3, C3, D3, E3, F3, \
|
||||
A4, B4, C4, D4, E4, F4, \
|
||||
A5, B5, C5, D5, E5, F5, \
|
||||
A6, B6, C6, D6, E6, F6, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config:
|
||||
FLEET_BOSS = 1
|
||||
|
||||
MAP_MYSTERY_HAS_CARRIER = True
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (120, 255 - 33),
|
||||
'width': (1.5, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 33, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'wlen': 1000
|
||||
}
|
||||
HOMO_EDGE_COLOR_RANGE = (0, 33)
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
MAP_AMBUSH_OVERLAY_TRANSPARENCY_THRESHOLD = 0.3
|
||||
MAP_AIR_RAID_OVERLAY_TRANSPARENCY_THRESHOLD = 0.25
|
||||
MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
63
campaign/campaign_main/campaign_4_2.py
Normal file
63
campaign/campaign_main/campaign_4_2.py
Normal file
@@ -0,0 +1,63 @@
|
||||
from campaign.campaign_main.campaign_4_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'F6'
|
||||
MAP.camera_data = ['D2', 'D4']
|
||||
MAP.camera_data_spawn_point = ['D2']
|
||||
# WIKI的图有错: https://wiki.biligame.com/blhx/4-2
|
||||
# D5是敌人刷新点, 假图害人
|
||||
MAP.map_data = """
|
||||
++ ++ ++ ME SP --
|
||||
SP -- -- -- ME --
|
||||
-- -- ME ME -- ME
|
||||
SP -- -- -- -- MB
|
||||
++ ++ ME ME -- ME
|
||||
++ ++ -- MB ME MM
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50
|
||||
50 50 50 50 50 50
|
||||
50 50 50 50 50 50
|
||||
50 50 50 10 10 10
|
||||
50 50 20 10 10 20
|
||||
50 50 20 10 10 20
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, \
|
||||
A2, B2, C2, D2, E2, F2, \
|
||||
A3, B3, C3, D3, E3, F3, \
|
||||
A4, B4, C4, D4, E4, F4, \
|
||||
A5, B5, C5, D5, E5, F5, \
|
||||
A6, B6, C6, D6, E6, F6, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
MAP_AMBUSH_OVERLAY_TRANSPARENCY_THRESHOLD = 0.3
|
||||
MAP_AIR_RAID_OVERLAY_TRANSPARENCY_THRESHOLD = 0.25
|
||||
MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
62
campaign/campaign_main/campaign_4_3.py
Normal file
62
campaign/campaign_main/campaign_4_3.py
Normal file
@@ -0,0 +1,62 @@
|
||||
from campaign.campaign_main.campaign_4_1 import Config as Config41
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'G4'
|
||||
MAP.camera_data = ['D2']
|
||||
MAP.camera_data_spawn_point = ['D1']
|
||||
MAP.map_data = """
|
||||
SP ME -- ME -- SP MB
|
||||
-- -- ME -- ME -- ME
|
||||
++ ++ ME -- -- MB MM
|
||||
++ ++ MB -- ME -- ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 10 10
|
||||
50 50 50 50 50 10 20
|
||||
50 50 20 10 10 10 10
|
||||
50 50 10 10 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(Config41):
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
MAP_AMBUSH_OVERLAY_TRANSPARENCY_THRESHOLD = 0.3
|
||||
MAP_AIR_RAID_OVERLAY_TRANSPARENCY_THRESHOLD = 0.25
|
||||
MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
72
campaign/campaign_main/campaign_4_4.py
Normal file
72
campaign/campaign_main/campaign_4_4.py
Normal file
@@ -0,0 +1,72 @@
|
||||
from campaign.campaign_main.campaign_4_1 import Config as Config41
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D2', 'D4']
|
||||
MAP.camera_data_spawn_point = ['E2', 'E4']
|
||||
MAP.map_data = """
|
||||
++ ++ MB ME SP -- ++ ++
|
||||
++ ++ ME __ ME ME ++ ++
|
||||
++ ++ -- ME -- -- -- SP
|
||||
++ ++ -- ME ++ ME -- --
|
||||
++ ++ ME -- ++ -- ME --
|
||||
MB ME -- ME -- ME -- SP
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 10 20 50 50 50 50
|
||||
50 50 10 20 50 50 50 50
|
||||
50 50 10 20 50 50 50 50
|
||||
50 50 10 20 50 50 50 50
|
||||
50 50 10 20 50 50 50 50
|
||||
10 10 10 20 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 2, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([B6, [C4, D6], [C5, D4], [D3, C2], [C2, D1]])
|
||||
|
||||
|
||||
class Config(Config41):
|
||||
MAP_MYSTERY_HAS_CARRIER = False
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
MAP_AMBUSH_OVERLAY_TRANSPARENCY_THRESHOLD = 0.3
|
||||
MAP_AIR_RAID_OVERLAY_TRANSPARENCY_THRESHOLD = 0.25
|
||||
MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
77
campaign/campaign_main/campaign_5_1.py
Normal file
77
campaign/campaign_main/campaign_5_1.py
Normal file
@@ -0,0 +1,77 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D2', 'D4']
|
||||
MAP.camera_data_spawn_point = ['D2', 'D4']
|
||||
MAP.map_data = """
|
||||
MB MM ME ++ ++ ++ ++ ++
|
||||
SP -- -- -- ME -- -- MB
|
||||
-- -- ME ME -- -- SP ME
|
||||
-- ME -- ME -- ME ME MB
|
||||
SP -- ME -- -- -- ++ ++
|
||||
MB ME -- ME -- MA ++ ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 10 50 50 50 50 50 50
|
||||
10 10 10 10 10 10 10 10
|
||||
10 20 20 20 10 10 10 10
|
||||
10 20 20 20 10 50 10 10
|
||||
10 10 10 10 10 50 50 50
|
||||
10 20 20 20 20 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config:
|
||||
FLEET_BOSS = 1
|
||||
MAP_MYSTERY_HAS_CARRIER = True
|
||||
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (120, 255 - 49),
|
||||
'width': (1.5, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 49, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'wlen': 1000
|
||||
}
|
||||
HOMO_EDGE_COLOR_RANGE = (0, 49)
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
56
campaign/campaign_main/campaign_5_2.py
Normal file
56
campaign/campaign_main/campaign_5_2.py
Normal file
@@ -0,0 +1,56 @@
|
||||
from campaign.campaign_main.campaign_5_1 import Config
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H5'
|
||||
MAP.camera_data = ['D3', 'E3']
|
||||
MAP.camera_data_spawn_point = ['D2', 'D3']
|
||||
MAP.map_data = """
|
||||
++ ++ ++ -- MB -- ME SP
|
||||
SP -- ME -- ++ ++ -- ME
|
||||
-- ME -- -- MB ++ MB --
|
||||
-- -- ME -- ME -- -- ME
|
||||
ME -- SP ME -- ME ME MM
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 10 10 20 20 30
|
||||
50 50 30 10 10 10 20 30
|
||||
50 30 30 10 10 10 10 30
|
||||
50 50 30 10 10 10 10 20
|
||||
50 50 50 30 30 30 20 20
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
60
campaign/campaign_main/campaign_5_3.py
Normal file
60
campaign/campaign_main/campaign_5_3.py
Normal file
@@ -0,0 +1,60 @@
|
||||
from campaign.campaign_main.campaign_5_1 import Config as ConfigBase
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'G5'
|
||||
MAP.camera_data = ['D2', 'D3']
|
||||
MAP.camera_data_spawn_point = ['D2', 'D3']
|
||||
MAP.map_data = """
|
||||
++ MB ME SP ME MB ME
|
||||
++ ME -- ME -- -- --
|
||||
++ ME ++ MM ME -- ME
|
||||
++ -- -- ME MB ME --
|
||||
SP ME -- -- ME -- SP
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 10 20 20 20 10 50
|
||||
50 10 10 10 10 10 50
|
||||
50 50 50 10 10 50 50
|
||||
50 20 20 10 10 50 50
|
||||
50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3, 'mystery': 1},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.battle_default()
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
70
campaign/campaign_main/campaign_5_4.py
Normal file
70
campaign/campaign_main/campaign_5_4.py
Normal file
@@ -0,0 +1,70 @@
|
||||
from campaign.campaign_main.campaign_5_1 import Config as Config51
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H5'
|
||||
MAP.camera_data = ['D3', 'E3']
|
||||
MAP.camera_data_spawn_point = ['D2', 'E3']
|
||||
MAP.map_data = """
|
||||
++ ++ ++ SP MB ME -- MB
|
||||
SP -- ME -- ME -- ME SP
|
||||
-- -- -- ++ ++ ME __ ME
|
||||
ME MB ME MA ++ -- ME --
|
||||
++ ++ ME -- MB ME -- MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 10 20 30 30
|
||||
50 50 10 10 10 10 30 30
|
||||
50 50 10 10 10 10 30 25
|
||||
50 10 10 10 10 10 30 30
|
||||
50 50 50 10 10 10 30 30
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 2},
|
||||
{'battle': 4, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_center = RoadGrids([C2, [E2, F1], C4, F5, [F3, G2, H3], [F3, G4, H3]])
|
||||
road_ring = RoadGrids([[E2, F1], [F1, G2, H3], [F5, G4, H3], [F3, G2, H3], [F3, G4, H3]])
|
||||
|
||||
|
||||
class Config(Config51):
|
||||
MAP_MYSTERY_HAS_CARRIER = False
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_roadblocks([road_center]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_ring]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_center]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_ring]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
82
campaign/campaign_main/campaign_6_1.py
Normal file
82
campaign/campaign_main/campaign_6_1.py
Normal file
@@ -0,0 +1,82 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H5'
|
||||
MAP.camera_data = ['D3', 'E2']
|
||||
MAP.camera_data_spawn_point = ['D2']
|
||||
MAP.map_data = """
|
||||
ME MB SP ME -- -- ME MM
|
||||
-- ME -- ME -- ME SP ME
|
||||
SP -- ME MM ME -- MM --
|
||||
++ ++ ME -- -- ME ME ME
|
||||
++ ++ MM ME MB ++ -- MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 10 10 50 50 50 20 20
|
||||
50 50 10 10 50 50 20 20
|
||||
50 50 50 10 10 10 10 30
|
||||
50 50 20 10 10 50 10 10
|
||||
50 50 20 20 10 50 10 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 3, 'enemy': 2},
|
||||
{'battle': 4, 'enemy': 1, 'mystery': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
= MAP.flatten()
|
||||
|
||||
step_on = SelectedGrids([E3, C3, G4, D2])
|
||||
road_boss = RoadGrids([C1, C2, [C3, D2], D4, E4, [E3, F4], F3, G3, H3, [G4, H4]])
|
||||
road_mystery = RoadGrids([[C4, D5], D4, G2, [G1, H2]])
|
||||
|
||||
|
||||
class Config:
|
||||
FLEET_BOSS = 1
|
||||
MAP_MYSTERY_HAS_CARRIER = True
|
||||
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
# EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
|
||||
# W6 has 3 enemies in a row, avoid detecting as map edge
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 240
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(step_on, roadblocks=[road_boss]):
|
||||
return True
|
||||
|
||||
if self.clear_roadblocks([road_boss]):
|
||||
return True
|
||||
if self.clear_roadblocks([road_mystery]):
|
||||
return True
|
||||
self.clear_all_mystery()
|
||||
if self.clear_potential_roadblocks([road_boss]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_mystery]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.clear_roadblocks([road_boss])
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
77
campaign/campaign_main/campaign_6_2.py
Normal file
77
campaign/campaign_main/campaign_6_2.py
Normal file
@@ -0,0 +1,77 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D3', 'D4', 'E4']
|
||||
MAP.camera_data_spawn_point = ['D2']
|
||||
MAP.map_data = """
|
||||
-- -- ME -- ME ++ ++ ++
|
||||
SP -- -- ME ME ME SP --
|
||||
-- ME -- ++ ++ -- ME --
|
||||
-- MM ME MA ++ ME MM ME
|
||||
ME ++ ++ -- MB -- ++ MB
|
||||
-- MB -- ++ ++ ME MB ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 40 40 40 40 50 50
|
||||
50 50 40 40 40 40 40 40
|
||||
10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 20
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1, 'mystery': 1},
|
||||
{'battle': 3, 'enemy': 2},
|
||||
{'battle': 4, 'enemy': 1, 'mystery': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
step_on = SelectedGrids([C4, F4, A5, H4, F6])
|
||||
road_boss = RoadGrids([B6, A6, A5, A4, B4, C4, D4, D5, E5, F5, F6, F4, G4, H4])
|
||||
|
||||
|
||||
class Config:
|
||||
FLEET_BOSS = 1
|
||||
MAP_MYSTERY_HAS_CARRIER = True
|
||||
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
# EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(step_on, roadblocks=[road_boss]):
|
||||
return True
|
||||
|
||||
if self.clear_roadblocks([road_boss]):
|
||||
return True
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.clear_roadblocks([road_boss])
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
90
campaign/campaign_main/campaign_6_3.py
Normal file
90
campaign/campaign_main/campaign_6_3.py
Normal file
@@ -0,0 +1,90 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H5'
|
||||
MAP.camera_data = ['D3', 'E2']
|
||||
MAP.camera_data_spawn_point = ['D3', 'E2']
|
||||
# WIKI的图有错: https://wiki.biligame.com/blhx/6-3
|
||||
# G3是出生点, 假图害人
|
||||
MAP.map_data = """
|
||||
MB -- ME SP -- ME ME MM
|
||||
ME -- -- ++ ++ -- ME --
|
||||
-- -- ME MB ++ ME SP MB
|
||||
SP -- ME -- ME -- ME ME
|
||||
++ ME -- ME SP ME -- MM
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 10 50 50 50 50 50 10
|
||||
50 10 10 10 10 50 50 10
|
||||
50 50 10 10 10 20 10 10
|
||||
50 50 10 10 10 10 10 30
|
||||
50 50 20 20 20 20 10 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 4},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1, 'mystery': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
= MAP.flatten()
|
||||
|
||||
step_on = SelectedGrids([E4, G2, C3, C4, F3])
|
||||
road_boss = RoadGrids([
|
||||
A1, [B1, A2], B2, [C2, B3], [B3, C3], [B4, C3], [C3, C4], [C4, D3], D4, # A1 - D4
|
||||
[G3, H4], [G3, G4], G3, [F3, G4], F4, [E4, F5], [E4, E5], [E4, D5] # H3 - D4
|
||||
])
|
||||
road_in_map = RoadGrids([
|
||||
A1, [B1, A2], B2, [C2, B3], [B3, C3], [B4, C3], [C3, C4], [C4, D3], D4, # A1 - D4
|
||||
[G3, H4], [G3, G4], G3, [F3, G4], F4, [E4, F5], [E4, E5], [E4, D5], # H3 - D4
|
||||
D1, C1, [B1, C2], # D1 - C2
|
||||
E1, F1, [G1, F2], [G2, F2], [F3, G2] # E1 - G3
|
||||
])
|
||||
road_mystery = RoadGrids([[F5, G4], [H4, G5], H2])
|
||||
|
||||
|
||||
class Config:
|
||||
FLEET_BOSS = 1
|
||||
MAP_MYSTERY_HAS_CARRIER = True
|
||||
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
# EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(step_on, roadblocks=[road_in_map]):
|
||||
return True
|
||||
|
||||
if self.clear_roadblocks([road_boss]):
|
||||
return True
|
||||
if self.clear_roadblocks([road_mystery]):
|
||||
return True
|
||||
self.clear_all_mystery()
|
||||
if self.clear_potential_roadblocks([road_boss]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_mystery]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.clear_roadblocks([road_boss])
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
82
campaign/campaign_main/campaign_6_4.py
Normal file
82
campaign/campaign_main/campaign_6_4.py
Normal file
@@ -0,0 +1,82 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D2', 'D4', 'E2', 'E4']
|
||||
MAP.camera_data_spawn_point = ['D2', 'D4']
|
||||
MAP.map_data = """
|
||||
-- ME MB MB -- ME ++ ++
|
||||
MB SP ME -- ME MM MA ++
|
||||
-- ++ ME -- -- ME SP ME
|
||||
ME __ -- ME ME __ ME MB
|
||||
-- ME -- MB ++ ME -- ME
|
||||
MB ME -- SP -- ME -- --
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 40 40 40 50 50 50 50
|
||||
40 40 20 20 20 20 50 50
|
||||
10 50 10 10 10 10 10 20
|
||||
10 10 10 10 30 30 30 40
|
||||
10 20 20 40 40 50 50 50
|
||||
30 40 30 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 4},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1, 'mystery': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
step_on = SelectedGrids([C2, C3, D4, F3, G4])
|
||||
road_boss = RoadGrids([
|
||||
[A5, B6], [A4, B5, B6], C4, C5, [C3, D4], D3, # A6 - D3
|
||||
[C5, D3], # D5 - D3
|
||||
[B1, B2], [B1, C2], [C1, C2], [C2, D1], [C2, D2], # A2 - D3
|
||||
[H3, G4], [G3, G4], [F3, G4], [F3, F4], [F2, F3, E4], [E2, F3, E4], E3 # H4 - D3
|
||||
])
|
||||
|
||||
|
||||
class Config:
|
||||
FLEET_BOSS = 1
|
||||
MAP_MYSTERY_HAS_CARRIER = True
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(step_on, roadblocks=[road_boss]):
|
||||
return True
|
||||
|
||||
if self.clear_roadblocks([road_boss]):
|
||||
return True
|
||||
self.clear_all_mystery()
|
||||
if self.clear_potential_roadblocks([road_boss]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
if self.config.FLEET_BOSS == 1:
|
||||
self.pick_up_ammo()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
return self.clear_roadblocks([road_boss])
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
58
campaign/campaign_main/campaign_7_1.py
Normal file
58
campaign/campaign_main/campaign_7_1.py
Normal file
@@ -0,0 +1,58 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap()
|
||||
MAP.shape = 'H3'
|
||||
MAP.camera_data = ['C1', 'E1']
|
||||
MAP.camera_data_spawn_point = ['C1']
|
||||
MAP.map_data = """
|
||||
-- ME ME MM ME -- ++ ++
|
||||
SP ME ++ ++ ME ME ++ ++
|
||||
SP -- ++ ++ -- ME ME MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
40 30 21 20 17 15 50 50
|
||||
40 40 50 50 16 13 50 50
|
||||
40 40 50 50 14 12 11 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1, 'mystery': 1},
|
||||
{'battle': 4},
|
||||
{'battle': 5, 'boss': 1},
|
||||
]
|
||||
|
||||
|
||||
class Config:
|
||||
SUBMARINE = 0
|
||||
FLEET_BOSS = 2
|
||||
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
MID_DIFF_RANGE_H = (140 - 3, 140 + 3)
|
||||
MID_DIFF_RANGE_V = (143 - 3, 143 + 3)
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
MAP_AMBUSH_OVERLAY_TRANSPARENCY_THRESHOLD = 0.45
|
||||
MAP_AIR_RAID_OVERLAY_TRANSPARENCY_THRESHOLD = 0.45
|
||||
|
||||
def battle_0(self):
|
||||
self.clear_all_mystery()
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.fleet_boss.brute_clear_boss()
|
||||
|
||||
def handle_boss_appear_refocus(self, preset=(-3, -2)):
|
||||
return super().handle_boss_appear_refocus(preset)
|
||||
90
campaign/campaign_main/campaign_7_2.py
Normal file
90
campaign/campaign_main/campaign_7_2.py
Normal file
@@ -0,0 +1,90 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('7-2')
|
||||
MAP.shape = 'H5'
|
||||
MAP.camera_data = ['D2', 'D3']
|
||||
MAP.camera_data_spawn_point = ['D2', 'D3']
|
||||
MAP.map_data = """
|
||||
ME ++ ME -- ME ME -- SP
|
||||
MM ++ ++ MM -- -- ME --
|
||||
ME -- ME MB ME -- ME MM
|
||||
-- ME -- MM -- ME ++ ++
|
||||
SP -- ME ME -- ME ++ ++
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
40 30 30 30 30 30 30 30
|
||||
20 20 20 10 20 20 20 20
|
||||
10 10 10 10 10 10 10 10
|
||||
20 20 20 10 20 20 20 20
|
||||
30 30 30 30 30 30 30 30
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 2, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 3, 'enemy': 1, 'mystery': 2},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5 = MAP.flatten()
|
||||
|
||||
ROAD_MAIN = RoadGrids([A3, [C3, B4, C5], [F1, G2, G3]])
|
||||
GRIDS_FOR_FASTER = SelectedGrids([A3, C3, E3, G3])
|
||||
FLEET_2_STEP_ON = SelectedGrids([A3, G3, C3, E3])
|
||||
|
||||
|
||||
class Config:
|
||||
SUBMARINE = 0
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(FLEET_2_STEP_ON, roadblocks=[ROAD_MAIN]):
|
||||
return True
|
||||
|
||||
ignore = None
|
||||
if self.fleet_at(A3, fleet=2) and A1.enemy_scale != 3 and not self.fleet_at(A1, fleet=1):
|
||||
ignore = SelectedGrids([A2])
|
||||
if self.fleet_at(G3, fleet=2):
|
||||
ignore = SelectedGrids([H3])
|
||||
self.clear_all_mystery(nearby=False, ignore=ignore)
|
||||
|
||||
if self.clear_roadblocks([ROAD_MAIN], strongest=True):
|
||||
return True
|
||||
|
||||
if self.clear_enemy(scale=(3,)):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([ROAD_MAIN], strongest=True):
|
||||
return True
|
||||
|
||||
if self.clear_enemy(strongest=True):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
ignore = None
|
||||
if self.fleet_at(A3, fleet=2):
|
||||
ignore = SelectedGrids([A2])
|
||||
if self.fleet_at(G3, fleet=2):
|
||||
ignore = SelectedGrids([H3])
|
||||
self.clear_all_mystery(nearby=False, ignore=ignore)
|
||||
|
||||
if self.clear_roadblocks([ROAD_MAIN]):
|
||||
return True
|
||||
|
||||
if self.fleet_at(A3, fleet=2) and A2.is_mystery:
|
||||
self.fleet_2.clear_chosen_mystery(A2)
|
||||
if self.fleet_at(G3, fleet=2) and H3.is_mystery:
|
||||
self.fleet_2.clear_chosen_mystery(H3)
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
86
campaign/campaign_main/campaign_7_2_mystery_farming.py
Normal file
86
campaign/campaign_main/campaign_7_2_mystery_farming.py
Normal file
@@ -0,0 +1,86 @@
|
||||
from campaign.campaign_main.campaign_7_2 import MAP
|
||||
from campaign.campaign_main.campaign_7_2 import Config as ConfigBase
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
# MAP.in_map_swipe_preset_data = (-1, 0)
|
||||
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5 = MAP.flatten()
|
||||
|
||||
ROAD_MAIN = RoadGrids([A3, [C3, B4, C5], [F1, G2, G3]])
|
||||
GRIDS_FOR_FASTER = SelectedGrids([A3, C3, E3, G3])
|
||||
FLEET_2_STEP_ON = SelectedGrids([A3, G3, C3, E3])
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
ENABLE_AUTO_SEARCH = False
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.config.C72MysteryFarming_StepOnA3:
|
||||
if self.fleet_2_step_on(FLEET_2_STEP_ON, roadblocks=[ROAD_MAIN]):
|
||||
return True
|
||||
|
||||
ignore = None
|
||||
if self.fleet_at(A3, fleet=2) and A1.enemy_scale != 3 and not self.fleet_at(A1, fleet=1):
|
||||
ignore = SelectedGrids([A2])
|
||||
if self.fleet_at(G3, fleet=2):
|
||||
ignore = SelectedGrids([H3])
|
||||
|
||||
self.clear_all_mystery(nearby=False, ignore=ignore)
|
||||
else:
|
||||
self.clear_all_mystery(nearby=False)
|
||||
|
||||
if self.clear_roadblocks([ROAD_MAIN], strongest=True):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([ROAD_MAIN], strongest=True):
|
||||
return True
|
||||
|
||||
if self.clear_enemy(scale=(3,)):
|
||||
return True
|
||||
|
||||
if self.clear_grids_for_faster(GRIDS_FOR_FASTER, scale=(2,)):
|
||||
return True
|
||||
if self.clear_enemy(scale=(2,)):
|
||||
return True
|
||||
if self.clear_grids_for_faster(GRIDS_FOR_FASTER):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
if self.config.C72MysteryFarming_StepOnA3:
|
||||
ignore = None
|
||||
if self.fleet_at(A3, fleet=2):
|
||||
ignore = SelectedGrids([A2])
|
||||
if self.fleet_at(G3, fleet=2):
|
||||
ignore = SelectedGrids([H3])
|
||||
self.clear_all_mystery(nearby=False, ignore=ignore)
|
||||
|
||||
if self.fleet_at(A3, fleet=2) and A2.is_mystery:
|
||||
self.fleet_2.clear_chosen_mystery(A2)
|
||||
if self.fleet_at(G3, fleet=2) and H3.is_mystery:
|
||||
self.fleet_2.clear_chosen_mystery(H3)
|
||||
else:
|
||||
self.clear_all_mystery(nearby=False)
|
||||
|
||||
if self.map.select(is_mystery=True, is_accessible=False):
|
||||
logger.info('Roadblock blocks mystery.')
|
||||
if self.fleet_1.clear_roadblocks([ROAD_MAIN]):
|
||||
return True
|
||||
|
||||
if not self.map.select(is_mystery=True):
|
||||
self.withdraw()
|
||||
|
||||
@property
|
||||
def _map_battle(self):
|
||||
return 3
|
||||
95
campaign/campaign_main/campaign_7_3.py
Normal file
95
campaign/campaign_main/campaign_7_3.py
Normal file
@@ -0,0 +1,95 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('7-3')
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D2', 'D4', 'E2', 'E4']
|
||||
MAP.camera_data_spawn_point = ['E4']
|
||||
MAP.map_data = """
|
||||
MB ME -- -- ME -- ME MB
|
||||
ME MM ++ ME -- ME MM ME
|
||||
-- ME -- SP -- ++ ++ ++
|
||||
ME -- ME -- SP -- ++ ++
|
||||
MM ++ ++ ++ MM ME ++ MB
|
||||
ME ME MB ++ ME -- ME ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 40 30 30 20 20 20 10
|
||||
30 30 10 30 20 30 30 40
|
||||
30 20 10 10 10 10 10 10
|
||||
20 20 30 10 10 10 10 10
|
||||
30 10 10 10 10 20 10 10
|
||||
30 40 10 10 20 20 30 40
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 2, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 3, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 4, 'enemy': 1, 'mystery': 1},
|
||||
{'battle': 5, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
# road_a1 = RoadGrids([[A2, B1], [A2, B3], [B3, A4], [A4, B3, D2, E1], [C4, B3, D2, E1]])
|
||||
road_a1 = RoadGrids([[A2, B1], [A2, B3], [B3, A4], [B3, C4]]) \
|
||||
.combine(RoadGrids([A2, [E1, D2]]))
|
||||
road_c6 = RoadGrids([B6, A6, A4, [B3, C4]])
|
||||
road_h1 = RoadGrids([[H2, G1], [G1, F2], [F2, E1]])
|
||||
road_h5 = RoadGrids([H6, G6, [E6, F5]])
|
||||
roads = [road_a1, road_c6, road_h1, road_h5]
|
||||
fleet_2_step_on = SelectedGrids([A4, B3, E1, F5])
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
# EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(fleet_2_step_on, roadblocks=roads):
|
||||
return True
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
if self.clear_roadblocks(roads):
|
||||
return True
|
||||
if self.clear_potential_roadblocks(roads):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
boss = boss[0]
|
||||
if boss == A1:
|
||||
road_boss = [road_a1]
|
||||
elif boss == C6:
|
||||
road_boss = [road_c6]
|
||||
elif boss == H1:
|
||||
road_boss = [road_h1]
|
||||
elif boss == H5:
|
||||
road_boss = [road_h5]
|
||||
else:
|
||||
logger.warning(f'Unexpected boss grid: {boss}')
|
||||
road_boss = roads
|
||||
|
||||
if not self.check_accessibility(boss, fleet='boss'):
|
||||
return self.clear_roadblocks(road_boss)
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
91
campaign/campaign_main/campaign_7_4.py
Normal file
91
campaign/campaign_main/campaign_7_4.py
Normal file
@@ -0,0 +1,91 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('7-4')
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['C2', 'C4', 'E2', 'E4']
|
||||
MAP.camera_data_spawn_point = ['D2', 'D4']
|
||||
MAP.map_data = """
|
||||
MB ME ME -- ++ ++ ++ MB
|
||||
ME __ -- ME SP -- SP --
|
||||
-- ++ ME -- -- ME -- ME
|
||||
ME ++ ++ ++ ME -- ME --
|
||||
SP -- MA ++ ME ++ __ ME
|
||||
MM -- MM ME -- ME MB --
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 20 50 10 10 10 10 10
|
||||
04 10 10 07 10 10 10 10
|
||||
10 10 05 10 10 40 10 20
|
||||
04 50 50 50 30 10 06 10
|
||||
50 50 50 50 30 10 10 20
|
||||
50 50 50 50 30 30 10 30
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 3, 'mystery': 1},
|
||||
{'battle': 3, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 4, 'enemy': 2},
|
||||
{'battle': 5, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_a1 = RoadGrids([A2 , [C3, D2]])
|
||||
road_g6 = RoadGrids([G4])
|
||||
roads = [road_a1, road_g6]
|
||||
|
||||
fleet_2_step_on = SelectedGrids([A4, A2, G4, D2, C3])
|
||||
road_a5 = RoadGrids([A4, A2, [C3, D2]]) \
|
||||
.combine(RoadGrids([G4]))
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
# EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(fleet_2_step_on, roadblocks=[road_a5]):
|
||||
return True
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
if self.clear_roadblocks(roads):
|
||||
return True
|
||||
if self.clear_potential_roadblocks(roads):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_3(self):
|
||||
if self.fleet_2_step_on(fleet_2_step_on, roadblocks=[road_a5]):
|
||||
return True
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
if self.fleet_boss_index == 1:
|
||||
self.pick_up_ammo()
|
||||
|
||||
if self.clear_roadblocks(roads):
|
||||
return True
|
||||
if self.clear_potential_roadblocks(roads):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
return self.fleet_boss.clear_boss()
|
||||
65
campaign/campaign_main/campaign_8_1.py
Normal file
65
campaign/campaign_main/campaign_8_1.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('8-1')
|
||||
MAP.shape = 'I3'
|
||||
MAP.camera_data = ['D1', 'F1']
|
||||
MAP.camera_data_spawn_point = ['D1', 'F1']
|
||||
MAP.map_data = """
|
||||
SP -- ++ ++ ME -- ME MB ++
|
||||
SP -- ++ ++ ME -- ME -- ME
|
||||
-- ME ME -- ME ++ ME ME MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 21 30 50
|
||||
50 50 50 50 25 24 20 12 11
|
||||
50 45 40 31 30 50 22 10 20
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 35
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 35
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.3
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (120, 255 - 49),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 49, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'width': (0, 10),
|
||||
'wlen': 1000,
|
||||
}
|
||||
HOMO_EDGE_COLOR_RANGE = (0, 49)
|
||||
MAP_SWIPE_MULTIPLY = (1.127, 1.148)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.090, 1.110)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.058, 1.077)
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
return self.brute_clear_boss()
|
||||
73
campaign/campaign_main/campaign_8_2.py
Normal file
73
campaign/campaign_main/campaign_8_2.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_8_1 import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('8-3')
|
||||
MAP.shape = 'H5'
|
||||
MAP.camera_data = ['D2', 'D3', 'E3']
|
||||
MAP.camera_data_spawn_point = ['E3']
|
||||
MAP.map_data = """
|
||||
MB ME -- ++ ++ ME -- MB
|
||||
ME ME ME -- ++ ME ME --
|
||||
-- ME -- ME ME -- ME ME
|
||||
ME ++ ++ -- ME ++ ++ ME
|
||||
MM ++ ++ ME ME SP -- SP
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 35 20 90 90 40 50 50
|
||||
30 40 25 90 90 25 30 50
|
||||
20 20 20 10 10 20 20 35
|
||||
50 90 90 60 60 90 90 90
|
||||
90 90 90 70 80 90 90 90
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_A1 = RoadGrids([[A2, B1], [B1, B2, B3], [A2, B2, C2], [B3, C2], D3])
|
||||
road_H1 = RoadGrids([[F1, G2, H3], [F1, G2, G3], [F2, G2, H3], [F2, G3], E3])
|
||||
road_MY = RoadGrids([A4, [A2, B3]])
|
||||
road_middle = RoadGrids([E5, [D5, E4], D3]) \
|
||||
.combine(RoadGrids([H4, H3, [F1, G2, G3], [F2, G3], E3]))
|
||||
step_on = SelectedGrids([D3, E3])
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(step_on, roadblocks=[road_middle]):
|
||||
return True
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
if self.clear_roadblocks([road_A1, road_H1]):
|
||||
return True
|
||||
if self.mystery_count < 1 and self.clear_roadblocks([road_MY]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_A1, road_H1]):
|
||||
return True
|
||||
if self.clear_first_roadblocks([road_A1, road_H1]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
return self.brute_clear_boss()
|
||||
80
campaign/campaign_main/campaign_8_3.py
Normal file
80
campaign/campaign_main/campaign_8_3.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_8_1 import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('8-3')
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D3', 'D4', 'E3', 'E4']
|
||||
MAP.map_data = """
|
||||
MB -- ME ME ME ME -- MB
|
||||
-- ME MM ++ ++ __ ME --
|
||||
ME ++ ++ SP -- ME -- ME
|
||||
ME MA ++ -- SP ++ ME ME
|
||||
MM ME __ ME ++ ++ ME --
|
||||
MB -- ME ME ME ME -- MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 40 90 90 30 50 50
|
||||
50 50 50 90 90 20 40 50
|
||||
40 90 90 10 10 10 20 20
|
||||
30 90 90 10 10 90 40 30
|
||||
20 20 20 10 90 90 40 50
|
||||
50 30 30 80 80 80 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 2, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_middle = RoadGrids([D5, F3])
|
||||
step_on = SelectedGrids([D5, F3])
|
||||
# There's one enemy spawn along with boss, so have to make sure there are multiple roads are cleared.
|
||||
# Here use separate roads instead of RoadGrids.combine().
|
||||
road_H1 = RoadGrids([F3, [F1, G2, H3]])
|
||||
road_A6 = RoadGrids([D5, [B5, C6]])
|
||||
road_A1_left = RoadGrids([A4, A3])
|
||||
road_A1_upper = RoadGrids([F1, E1, D1, C1])
|
||||
road_H6_bottom = RoadGrids([D6, E6, F6])
|
||||
road_H6_right = RoadGrids([[H3, G4], [G4, H4], [H4, G5]])
|
||||
road_MY = RoadGrids([[B2, C1]])
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
pass
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(step_on, roadblocks=[road_middle]):
|
||||
return True
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
if self.clear_roadblocks([road_A6, road_H1, road_A1_left, road_A1_upper, road_H6_bottom, road_H6_right]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_A6, road_H1, road_A1_left, road_A1_upper, road_H6_bottom, road_H6_right]):
|
||||
return True
|
||||
if self.clear_roadblocks([road_MY]):
|
||||
return True
|
||||
if self.clear_first_roadblocks([road_A6, road_H1, road_A1_left, road_A1_upper, road_H6_bottom, road_H6_right]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
return self.brute_clear_boss()
|
||||
78
campaign/campaign_main/campaign_8_4.py
Normal file
78
campaign/campaign_main/campaign_8_4.py
Normal file
@@ -0,0 +1,78 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
from .campaign_8_1 import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('8-4')
|
||||
MAP.shape = 'H7'
|
||||
MAP.camera_data = ['D3', 'E3', 'E5']
|
||||
MAP.camera_data_spawn_point = ['C1']
|
||||
MAP.map_data = """
|
||||
++ SP -- -- ME -- ME --
|
||||
SP -- -- ME -- ++ ++ --
|
||||
-- -- ME ++ ++ MM ME ME
|
||||
++ ++ -- ++ ++ ME ME --
|
||||
MA ++ ME -- ME __ ME ++
|
||||
ME ME __ ME ++ ++ -- ME
|
||||
-- ME ME MM ME -- ME MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 90 90 90 90 90
|
||||
50 50 50 90 90 90 90 90
|
||||
50 50 45 90 90 50 50 90
|
||||
90 90 40 90 90 30 31 90
|
||||
50 90 30 30 20 14 12 90
|
||||
30 27 35 25 90 90 20 10
|
||||
30 28 26 20 13 15 10 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 3, 'enemy': 1, 'mystery': 1},
|
||||
{'battle': 4, 'enemy': 2, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_D7 = RoadGrids([G7, E7]).combine(RoadGrids([G5, E5, [C5, D6], [D6, C7]]))
|
||||
road_F3 = RoadGrids([G5, [F4, G4], [F4, G3]])
|
||||
road_main = RoadGrids([[G7, H6]])
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
pass
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
# Need to increase this threshold a little bit, because of mis-detection on dark background
|
||||
MAP_AMBUSH_OVERLAY_TRANSPARENCY_THRESHOLD = 0.45
|
||||
MAP_AIR_RAID_OVERLAY_TRANSPARENCY_THRESHOLD = 0.45 # Usually (0.50, 0.53)
|
||||
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
self.clear_all_mystery()
|
||||
|
||||
if self.clear_roadblocks([road_D7, road_F3, road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_D7, road_F3, road_main]):
|
||||
return True
|
||||
if self.clear_first_roadblocks([road_D7, road_F3, road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
self.clear_all_mystery()
|
||||
|
||||
return self.brute_clear_boss()
|
||||
38
campaign/campaign_main/campaign_8_4_leveling.py
Normal file
38
campaign/campaign_main/campaign_8_4_leveling.py
Normal file
@@ -0,0 +1,38 @@
|
||||
from .campaign_8_4 import Campaign as CampaignBase
|
||||
from .campaign_8_4 import Config as ConfigBase
|
||||
from .campaign_8_4 import *
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
ENABLE_AUTO_SEARCH = False
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
def battle_0(self):
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
self.clear_all_mystery()
|
||||
if self.map.select(is_mystery=True, is_accessible_1=False, is_accessible_2=True):
|
||||
self.fleet_2.clear_all_mystery()
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
if self.clear_roadblocks([road_D7, road_F3, road_main], strongest=True):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_D7, road_F3, road_main], scale=(3,)):
|
||||
return True
|
||||
if self.clear_enemy(scale=(3,)):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_D7, road_F3, road_main], strongest=True):
|
||||
return True
|
||||
if self.clear_first_roadblocks([road_D7, road_F3, road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_4(self):
|
||||
self.clear_all_mystery()
|
||||
if self.map.select(is_mystery=True, is_accessible_1=False, is_accessible_2=True):
|
||||
self.fleet_2.clear_all_mystery()
|
||||
self.fleet_2_push_forward()
|
||||
|
||||
return self.brute_clear_boss()
|
||||
72
campaign/campaign_main/campaign_9_1.py
Normal file
72
campaign/campaign_main/campaign_9_1.py
Normal file
@@ -0,0 +1,72 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('9-2')
|
||||
MAP.shape = 'H5'
|
||||
MAP.camera_data = ['E3']
|
||||
MAP.camera_data_spawn_point = ['C1', 'C3']
|
||||
MAP.map_data = """
|
||||
SP -- ++ ++ ++ Me -- MB
|
||||
++ -- ++ ++ ++ ME ++ ++
|
||||
-- ME -- ME ME Me ++ ++
|
||||
-- -- ++ -- ME ++ ME MB
|
||||
SP SP ++ ME -- Me ME ME
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
90 90 90 90 90 30 30 30
|
||||
90 90 90 90 90 30 90 90
|
||||
90 80 70 60 50 30 90 90
|
||||
90 90 90 90 50 90 30 30
|
||||
90 90 90 90 40 40 30 30
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
= MAP.flatten()
|
||||
|
||||
# Might have wrong prediction on D5
|
||||
MAP.ignore_prediction(D5, enemy_scale=1, enemy_genre='Enemy')
|
||||
road_main = RoadGrids([B3, D3, [D5, E4], F5, G5, [G4, H5], H4, E3, F3, F2, F1])
|
||||
step_on = SelectedGrids([F3, E4])
|
||||
|
||||
|
||||
class Config:
|
||||
SUBMARINE = 0
|
||||
HOMO_STORAGE = ((9, 5), [(214.274, 100.482), (1300.358, 100.482), (79.666, 584.209), (1505.19, 584.209)])
|
||||
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom'
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_2_step_on(step_on, roadblocks=[road_main]):
|
||||
return True
|
||||
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
106
campaign/campaign_main/campaign_9_2.py
Normal file
106
campaign/campaign_main/campaign_9_2.py
Normal file
@@ -0,0 +1,106 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('9-2')
|
||||
MAP.shape = 'I5'
|
||||
MAP.camera_data = ['D3', 'E3']
|
||||
MAP.camera_data_spawn_point = ['D3']
|
||||
MAP.map_data = """
|
||||
++ ++ ME -- MB ME -- Me --
|
||||
MM ++ ME ME MB ME ++ ME --
|
||||
ME -- Me ++ ++ ++ ++ Me ++
|
||||
-- ++ -- -- ++ SP -- ME --
|
||||
-- ME -- SP ++ SP -- -- --
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 10 30 10 10 10 10 10 10
|
||||
10 10 20 30 10 30 10 10 10
|
||||
30 10 20 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10
|
||||
10 30 10 10 10 10 10 10 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2, 'mystery': 1},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([C3, C2, [C1, D2], F1, H1, H2, H3, H4])
|
||||
|
||||
|
||||
class Config:
|
||||
SUBMARINE = 0
|
||||
MAP_HAS_MYSTERY = True
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (150, 255 - 24),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 24, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'width': (0, 10),
|
||||
'wlen': 1000,
|
||||
}
|
||||
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.fleet_at(D5, fleet=2):
|
||||
self.map.weight_data = """
|
||||
10 10 30 10 10 20 30 40 10
|
||||
10 10 10 10 10 30 10 50 10
|
||||
30 10 10 10 10 10 10 60 10
|
||||
10 10 10 10 10 10 10 70 10
|
||||
10 30 10 10 10 10 10 10 10
|
||||
"""
|
||||
if self.fleet_at(F4, fleet=2):
|
||||
self.map.weight_data = """
|
||||
10 10 30 10 10 10 10 10 10
|
||||
10 10 20 30 10 30 10 10 10
|
||||
30 10 20 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10
|
||||
10 30 10 10 10 10 10 10 10
|
||||
"""
|
||||
if self.fleet_at(F5, fleet=2):
|
||||
self.map.weight_data = """
|
||||
10 10 30 10 10 10 10 10 10
|
||||
10 10 20 30 10 30 10 10 10
|
||||
30 10 20 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10
|
||||
10 30 10 10 10 10 10 10 10
|
||||
"""
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
82
campaign/campaign_main/campaign_9_3.py
Normal file
82
campaign/campaign_main/campaign_9_3.py
Normal file
@@ -0,0 +1,82 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('9-3')
|
||||
MAP.shape = 'H6'
|
||||
MAP.camera_data = ['D3', 'E4']
|
||||
MAP.camera_data_spawn_point = ['E4']
|
||||
MAP.map_data = """
|
||||
MB -- ME -- ME -- ++ MB
|
||||
ME ++ ++ ++ MB ME ++ --
|
||||
Me __ -- SP ++ ME ME --
|
||||
-- -- ME ++ SP -- __ Me
|
||||
++ -- Me MB ++ ++ ++ --
|
||||
++ ++ -- ME -- ME ME MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 20 10
|
||||
10 10 20 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([A2, A3, C5, D6, F2, F3, F6, G6, H4])
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (150, 255 - 24),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 24, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'width': (0, 10),
|
||||
'wlen': 1000,
|
||||
}
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
85
campaign/campaign_main/campaign_9_4.py
Normal file
85
campaign/campaign_main/campaign_9_4.py
Normal file
@@ -0,0 +1,85 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.logger import logger
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import RoadGrids, SelectedGrids
|
||||
|
||||
MAP = CampaignMap('9-4')
|
||||
MAP.shape = 'I6'
|
||||
MAP.camera_data = ['D3', 'F3', 'F4']
|
||||
MAP.camera_data_spawn_point = ['D4']
|
||||
MAP.map_data = """
|
||||
MB -- ME -- ++ ++ ++ -- MB
|
||||
-- ++ __ ME -- ME Me ME --
|
||||
Me -- ME -- ME -- __ ++ --
|
||||
ME -- ++ ++ -- -- Me __ ME
|
||||
SP -- MA ++ ME -- ++ ME --
|
||||
SP -- -- ME -- ME ++ -- MB
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
10 10 20 10 10 10 10 10 10
|
||||
10 10 10 20 10 10 10 10 10
|
||||
10 10 20 10 20 10 10 10 10
|
||||
20 10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10
|
||||
10 10 10 10 10 10 10 10 10
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 3},
|
||||
{'battle': 1, 'enemy': 2},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 2},
|
||||
{'battle': 5, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
|
||||
= MAP.flatten()
|
||||
|
||||
road_main = RoadGrids([A3, D6, [E5, F6], G4, I4])
|
||||
|
||||
|
||||
class Config:
|
||||
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
EDGE_LINES_HOUGHLINES_THRESHOLD = 40
|
||||
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (150, 255 - 24),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 24, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'width': (0, 10),
|
||||
'wlen': 1000,
|
||||
}
|
||||
|
||||
|
||||
class Campaign(CampaignBase):
|
||||
MAP = MAP
|
||||
|
||||
def battle_0(self):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
if self.clear_potential_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.battle_default()
|
||||
|
||||
def battle_5(self):
|
||||
if self.config.FLEET_BOSS == 1:
|
||||
self.pick_up_ammo()
|
||||
|
||||
boss = self.map.select(is_boss=True)
|
||||
if boss:
|
||||
if not self.check_accessibility(boss[0], fleet='boss'):
|
||||
if self.clear_roadblocks([road_main]):
|
||||
return True
|
||||
|
||||
return self.fleet_boss.clear_boss()
|
||||
Reference in New Issue
Block a user