Add: 适配B2B3,D2D3

- 修复超大地图时location2node出错
- 增加走路出错时, 重新定位相机
- 调整CD图的透视识别参数
- 修复开荒时每战过后重新定位相机的多余操作
This commit is contained in:
LmeSzinc 2020-05-24 00:17:53 +08:00
parent 7f27a7a729
commit d75930cda2
10 changed files with 162 additions and 12 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,43 @@
from module.campaign.campaign_base import CampaignBase
from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger
from campaign.event_20200521_cn.b1 import Config as ConfigBase
MAP = CampaignMap()
MAP.map_data = """
-- -- -- -- ++ -- -- -- -- ++ ++
-- -- -- -- -- -- ++ ++ -- -- --
++ -- -- -- -- -- ++ ++ -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
++ ++ -- -- -- -- ++ ++ -- -- --
++ -- -- -- -- -- -- -- -- -- --
"""
MAP.wall_data = """
· · | · · · · · · · · · ,
+ ,
· · · · · · · · · · | · ,
+ + + + + ,
· · | · · | · | · · · · | · · ,
+---+---+ | | + ,
· · · | · · | · · · · | · | · ,
+---+ +---+ +---+ +-- ,
· · · · · · · · · · · ,
,
· · · · · · · · · · · ,
,
· · · · · · · · · · · ,
"""
class Config(ConfigBase):
FLEET_BOSS = 2
MAP_HAS_WALL = True
MAP_SIREN_TEMPLATE = ['Algerie', 'Vauquelin']
class Campaign(CampaignBase):
MAP = MAP

View File

@ -0,0 +1,53 @@
from module.campaign.campaign_base import CampaignBase
from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger
from campaign.event_20200521_cn.b1 import Config as ConfigBase
MAP = CampaignMap()
MAP.map_data = """
-- -- -- -- -- -- -- -- -- -- -- -- -- ++
-- -- -- -- -- -- -- -- -- -- -- -- -- --
++ -- -- -- -- -- -- -- -- -- -- -- -- --
++ -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- ++ ++
-- ++ -- -- ++ ++ -- -- ++ ++ -- -- -- --
-- ++ -- -- ++ ++ -- -- ++ ++ -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- ++ ++
++ -- -- -- -- -- -- -- -- -- -- -- ++ ++
-- -- -- -- -- -- -- -- -- -- -- -- -- --
"""
MAP.camera_data = ['G8', 'G6', 'F3', 'I3']
MAP.wall_data = """
· · · · · | · · · · | · · · · · ,
+-----------+ +-----------+ ,
· · | · · · | · · · · | · · · | · · ,
| | | | ,
· · | · · · | · · · · | · · · | · · ,
+---+ +---+ +----+ +---+ ,
· · · | · · · · · · · · | · · · ,
| | ,
· · · | · · · · · · · · | · · · ,
| | ,
· · · | · · · · · · · · | · · · ,
| | ,
· · · | · · · · · · · · | · · · ,
| | ,
· · · | · · · · · · · · | · · · ,
| | ,
· · · | · · · · · · · · | · · · ,
+-----------+ +-----------+ ,
· · · · · · | · · | · · · · · · ,
"""
class Config(ConfigBase):
FLEET_BOSS = 2
MAP_HAS_WALL = True
MAP_SIREN_TEMPLATE = ['LaGalissonniere', 'Vauquelin']
class Campaign(CampaignBase):
MAP = MAP

View File

@ -31,13 +31,13 @@ class Config:
TRUST_EDGE_LINES = False
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
'height': (100, 235),
'height': (100, 255 - 16),
'width': 1,
'prominence': 10,
'distance': 35,
}
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
'height': (255 - 80, 255),
'height': (255 - 16, 255),
'prominence': 2,
'distance': 50,
'wlen': 1000

View File

@ -1,8 +1,5 @@
from module.campaign.campaign_base import CampaignBase
from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger
MAP = CampaignMap()
MAP.map_data = '''
@ -55,13 +52,13 @@ class Config:
TRUST_EDGE_LINES = False
COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
'height': (100, 235),
'height': (100, 255 - 16),
'width': 1,
'prominence': 10,
'distance': 35,
}
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
'height': (255 - 80, 255),
'height': (255 - 16, 255),
'prominence': 2,
'distance': 50,
'wlen': 1000
@ -74,7 +71,9 @@ class Campaign(CampaignBase):
def battle_0(self):
if self.clear_siren():
return True
if self.clear_enemy(scale=(2, 1)):
if self.clear_enemy(scale=(1,)):
return True
if self.clear_enemy(scale=(2,), genre=['light', 'main', 'carrier']):
return True
if self.clear_enemy(genre=['light', 'main']):
return True

View File

@ -15,6 +15,7 @@ MAP.map_data = """
++ ++ -- -- -- -- ++ ++ -- -- --
++ -- -- -- -- -- -- -- -- -- --
"""
MAP.camera_data = ['D3', 'D5', 'F3', 'F5', 'H3', 'H5']
MAP.wall_data = """
· · | · · · · · · · · · ,
+ ,
@ -34,7 +35,7 @@ MAP.wall_data = """
class Config(ConfigBase):
MAP_HAS_WALL = True
MAP_SIREN_TEMPLATE = ['Algerie', 'LaGalissonniere']
MAP_SIREN_TEMPLATE = ['Algerie', 'Vauquelin']
class Campaign(CampaignBase):

View File

@ -0,0 +1,51 @@
from module.campaign.campaign_base import CampaignBase
from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger
from campaign.event_20200521_cn.d1 import Config as ConfigBase
MAP = CampaignMap()
MAP.map_data = """
-- -- -- -- -- -- -- -- -- -- -- -- -- ++
-- -- -- -- -- -- -- -- -- -- -- -- -- --
++ -- -- -- -- -- -- -- -- -- -- -- -- --
++ -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- ++ ++
-- ++ -- -- ++ ++ -- -- ++ ++ -- -- -- --
-- ++ -- -- ++ ++ -- -- ++ ++ -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- ++ ++
++ -- -- -- -- -- -- -- -- -- -- -- ++ ++
-- -- -- -- -- -- -- -- -- -- -- -- -- --
"""
MAP.camera_data = ['G8', 'G6', 'F3', 'I3']
MAP.wall_data = """
· · · · · | · · · · | · · · · · ,
+-----------+ +-----------+ ,
· · | · · · | · · · · | · · · | · · ,
| | | | ,
· · | · · · | · · · · | · · · | · · ,
+---+ +---+ +----+ +---+ ,
· · · | · · · · · · · · | · · · ,
| | ,
· · · | · · · · · · · · | · · · ,
| | ,
· · · | · · · · · · · · | · · · ,
| | ,
· · · | · · · · · · · · | · · · ,
| | ,
· · · | · · · · · · · · | · · · ,
| | ,
· · · | · · · · · · · · | · · · ,
+-----------+ +-----------+ ,
· · · · · · | · · | · · · · · · ,
"""
class Config(ConfigBase):
MAP_HAS_WALL = True
MAP_SIREN_TEMPLATE = ['LaGalissonniere', 'Vauquelin']
class Campaign(CampaignBase):
MAP = MAP

View File

@ -174,7 +174,7 @@ def node2location(node):
Returns:
tuple: Example: (6, 4)
"""
return ord(node[0]) % 32 - 1, int(node[1]) - 1
return ord(node[0]) % 32 - 1, int(node[1:]) - 1
def location2node(location):

View File

@ -181,6 +181,7 @@ class Fleet(Camera, MapOperation, AmbushHandler):
break
if walk_timeout.reached():
logger.warning('Walk timeout. Retrying.')
self.ensure_edge_insight()
break
# End
@ -210,6 +211,8 @@ class Fleet(Camera, MapOperation, AmbushHandler):
try:
self._goto(node, expected=expected if node == nodes[-1] else '')
except MapWalkError:
logger.warning('Map walk error.')
self.ensure_edge_insight()
nodes_ = self.map.find_path(node, step=1)
for node_ in nodes_:
self._goto(node_, expected=expected if node == nodes[-1] else '')
@ -461,7 +464,6 @@ class Fleet(Camera, MapOperation, AmbushHandler):
appear = True
if self.config.POOR_MAP_DATA:
appear = True
self.device.screenshot()
grids = Grids(self.device.image, config=self.config)
grids.predict()
@ -469,7 +471,7 @@ class Fleet(Camera, MapOperation, AmbushHandler):
for grid in grids:
if grid.is_boss:
logger.info('Catch camera re-positioning after boss appear')
appear = True
for g in self.map:
g.wipe_out()
break

View File

@ -25,5 +25,6 @@ TEMPLATE_SIREN_2 = Template(file='./assets/template/TEMPLATE_SIREN_2.png')
TEMPLATE_SIREN_3 = Template(file='./assets/template/TEMPLATE_SIREN_3.png')
TEMPLATE_SIREN_Algerie = Template(file='./assets/template/TEMPLATE_SIREN_Algerie.png')
TEMPLATE_SIREN_LaGalissonniere = Template(file='./assets/template/TEMPLATE_SIREN_LaGalissonniere.png')
TEMPLATE_SIREN_Vauquelin = Template(file='./assets/template/TEMPLATE_SIREN_Vauquelin.png')
TEMPLATE_STAGE_CLEAR = Template(file='./assets/template/TEMPLATE_STAGE_CLEAR.png')
TEMPLATE_STAGE_PERCENT = Template(file='./assets/template/TEMPLATE_STAGE_PERCENT.png')