1
0
mirror of https://github.com/sui-feng-cb/AzurLaneAutoScript1.git synced 2026-06-18 00:25:42 +08:00

Add: [Tmp] Island Project

This commit is contained in:
2025-10-04 22:26:48 +08:00
parent dcac405bb2
commit ef42efcb40
37 changed files with 300 additions and 19310 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

After

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 B

After

Width:  |  Height:  |  Size: 283 B

View File

@@ -1564,182 +1564,8 @@
"FailureInterval": 120,
"ServerUpdate": "00:00"
},
"Island1": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Option3": 0,
"Option4": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu",
"Character3": "manjuu",
"SecondaryCharacter3": "manjuu",
"Character4": "manjuu",
"SecondaryCharacter4": "manjuu"
},
"Island2": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Option3": 0,
"Option4": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu",
"Character3": "manjuu",
"SecondaryCharacter3": "manjuu",
"Character4": "manjuu",
"SecondaryCharacter4": "manjuu"
},
"Island3": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Option3": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu",
"Character3": "manjuu",
"SecondaryCharacter3": "manjuu"
},
"Island4": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Option3": 0,
"Option4": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu",
"Character3": "manjuu",
"SecondaryCharacter3": "manjuu",
"Character4": "manjuu",
"SecondaryCharacter4": "manjuu"
},
"Island5": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Option3": 0,
"Option4": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu",
"Character3": "manjuu",
"SecondaryCharacter3": "manjuu",
"Character4": "manjuu",
"SecondaryCharacter4": "manjuu"
},
"Island6": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Option3": 0,
"Option4": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu",
"Character3": "manjuu",
"SecondaryCharacter3": "manjuu",
"Character4": "manjuu",
"SecondaryCharacter4": "manjuu"
},
"Island7": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu"
},
"Island8": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu"
},
"Island9": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu"
},
"Island10": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu"
},
"Island11": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu"
},
"Island12": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu"
},
"Island13": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu"
},
"Island14": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu"
},
"Island15": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu"
},
"Island16": {
"Receive": false,
"Option1": 0,
"Option2": 0,
"Character1": "manjuu",
"SecondaryCharacter1": "manjuu",
"Character2": "manjuu",
"SecondaryCharacter2": "manjuu"
"Island": {
"ReceiveMiningForaging": true
},
"Storage": {
"Storage": {}

File diff suppressed because it is too large Load Diff

View File

@@ -500,239 +500,8 @@ Awaken:
option: [ level120, level125 ]
Favourite:
value: false
_Island:
IslandOption4: &IslandOption4
value: 0
option: [ 0, 1, 2, 3, 4]
IslandOption5: &IslandOption5
value: 0
option: [ 0, 1, 2, 3, 4, 5]
IslandOption6: &IslandOption6
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6]
IslandOption7: &IslandOption7
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7]
IslandOption8: &IslandOption8
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]
IslandOption9: &IslandOption9
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
IslandOption10: &IslandOption10
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
IslandOption11: &IslandOption11
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ]
IslandOption12: &IslandOption12
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]
IslandOption16: &IslandOption16
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]
IslandCharacter: &IslandCharacter
value: manjuu
option:
- manjuu
- saratoga
- new_jersey
- tashkent
- lemalin
- shimakaze
- akashi
- ying_swei
- chao_ho
- william_d_porter
- chen_hai
- hood
- prinz_eugen
- tb
- oceana
- explorer
- unicorn
- cheshire
- amagi_chan
- helena
- atago
- friedrich_der_grobe
- javelin
- laffey
- takao
- yat_sen
- fei_yuen
- august_von_parseval
IslandSecondaryCharacter: &IslandSecondaryCharacter
<<: *IslandCharacter
Island1:
Receive: false
Option1: *IslandOption8
Option2: *IslandOption8
Option3: *IslandOption8
Option4: *IslandOption8
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Character3: *IslandCharacter
SecondaryCharacter3: *IslandSecondaryCharacter
Character4: *IslandCharacter
SecondaryCharacter4: *IslandSecondaryCharacter
Island2:
Receive: false
Option1:
value: 0
option: [ 0, 1 ]
Option2:
value: 0
option: [ 0, 2 ]
Option3:
value: 0
option: [ 0, 3 ]
Option4:
value: 0
option: [ 0, 4 ]
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Character3: *IslandCharacter
SecondaryCharacter3: *IslandSecondaryCharacter
Character4: *IslandCharacter
SecondaryCharacter4: *IslandSecondaryCharacter
Island3:
Receive: false
Option1: *IslandOption16
Option2: *IslandOption16
Option3: *IslandOption16
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Character3: *IslandCharacter
SecondaryCharacter3: *IslandSecondaryCharacter
Island4:
Receive: false
Option1: *IslandOption6
Option2: *IslandOption6
Option3: *IslandOption6
Option4: *IslandOption6
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Character3: *IslandCharacter
SecondaryCharacter3: *IslandSecondaryCharacter
Character4: *IslandCharacter
SecondaryCharacter4: *IslandSecondaryCharacter
Island5:
Receive: false
Option1: *IslandOption4
Option2: *IslandOption4
Option3: *IslandOption4
Option4: *IslandOption4
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Character3: *IslandCharacter
SecondaryCharacter3: *IslandSecondaryCharacter
Character4: *IslandCharacter
SecondaryCharacter4: *IslandSecondaryCharacter
Island6:
Receive: false
Option1: *IslandOption7
Option2: *IslandOption7
Option3: *IslandOption7
Option4: *IslandOption7
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Character3: *IslandCharacter
SecondaryCharacter3: *IslandSecondaryCharacter
Character4: *IslandCharacter
SecondaryCharacter4: *IslandSecondaryCharacter
Island7:
Receive: false
Option1: *IslandOption9
Option2: *IslandOption9
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Island8:
Receive: false
Option1: *IslandOption12
Option2: *IslandOption12
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Island9:
Receive: false
Option1: *IslandOption11
Option2: *IslandOption11
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Island10:
Receive: false
Option1: *IslandOption10
Option2: *IslandOption10
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Island11:
Receive: false
Option1: *IslandOption9
Option2: *IslandOption9
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Island12:
Receive: false
Option1: *IslandOption6
Option2: *IslandOption6
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Island13:
Receive: false
Option1: *IslandOption6
Option2: *IslandOption6
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Island14:
Receive: false
Option1: *IslandOption4
Option2: *IslandOption4
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Island15:
Receive: false
Option1: *IslandOption9
Option2: *IslandOption9
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Island16:
Receive: false
Option1: *IslandOption9
Option2: *IslandOption9
Character1: *IslandCharacter
SecondaryCharacter1: *IslandSecondaryCharacter
Character2: *IslandCharacter
SecondaryCharacter2: *IslandSecondaryCharacter
Island:
ReceiveMiningForaging: True
GeneralShop:
UseGems: false
Refresh: false

View File

@@ -228,22 +228,7 @@ Reward:
- Awaken
Island:
- Scheduler
- Island1
- Island2
- Island3
- Island4
- Island5
- Island6
- Island7
- Island8
- Island9
- Island10
- Island11
- Island12
- Island13
- Island14
- Island15
- Island16
- Island
# ==================== DailyMission ====================

View File

@@ -280,182 +280,8 @@ class GeneratedConfig:
Awaken_LevelCap = 'level120' # level120, level125
Awaken_Favourite = False
# Group `Island1`
Island1_Receive = False
Island1_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8
Island1_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8
Island1_Option3 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8
Island1_Option4 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8
Island1_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island1_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island1_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island1_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island1_Character3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island1_SecondaryCharacter3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island1_Character4 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island1_SecondaryCharacter4 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island2`
Island2_Receive = False
Island2_Option1 = 0 # 0, 1
Island2_Option2 = 0 # 0, 2
Island2_Option3 = 0 # 0, 3
Island2_Option4 = 0 # 0, 4
Island2_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island2_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island2_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island2_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island2_Character3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island2_SecondaryCharacter3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island2_Character4 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island2_SecondaryCharacter4 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island3`
Island3_Receive = False
Island3_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
Island3_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
Island3_Option3 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
Island3_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island3_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island3_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island3_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island3_Character3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island3_SecondaryCharacter3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island4`
Island4_Receive = False
Island4_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6
Island4_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6
Island4_Option3 = 0 # 0, 1, 2, 3, 4, 5, 6
Island4_Option4 = 0 # 0, 1, 2, 3, 4, 5, 6
Island4_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island4_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island4_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island4_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island4_Character3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island4_SecondaryCharacter3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island4_Character4 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island4_SecondaryCharacter4 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island5`
Island5_Receive = False
Island5_Option1 = 0 # 0, 1, 2, 3, 4
Island5_Option2 = 0 # 0, 1, 2, 3, 4
Island5_Option3 = 0 # 0, 1, 2, 3, 4
Island5_Option4 = 0 # 0, 1, 2, 3, 4
Island5_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island5_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island5_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island5_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island5_Character3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island5_SecondaryCharacter3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island5_Character4 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island5_SecondaryCharacter4 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island6`
Island6_Receive = False
Island6_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6, 7
Island6_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6, 7
Island6_Option3 = 0 # 0, 1, 2, 3, 4, 5, 6, 7
Island6_Option4 = 0 # 0, 1, 2, 3, 4, 5, 6, 7
Island6_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island6_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island6_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island6_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island6_Character3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island6_SecondaryCharacter3 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island6_Character4 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island6_SecondaryCharacter4 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island7`
Island7_Receive = False
Island7_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Island7_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Island7_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island7_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island7_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island7_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island8`
Island8_Receive = False
Island8_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Island8_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Island8_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island8_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island8_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island8_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island9`
Island9_Receive = False
Island9_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Island9_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Island9_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island9_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island9_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island9_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island10`
Island10_Receive = False
Island10_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Island10_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Island10_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island10_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island10_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island10_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island11`
Island11_Receive = False
Island11_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Island11_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Island11_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island11_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island11_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island11_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island12`
Island12_Receive = False
Island12_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6
Island12_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6
Island12_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island12_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island12_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island12_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island13`
Island13_Receive = False
Island13_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6
Island13_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6
Island13_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island13_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island13_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island13_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island14`
Island14_Receive = False
Island14_Option1 = 0 # 0, 1, 2, 3, 4
Island14_Option2 = 0 # 0, 1, 2, 3, 4
Island14_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island14_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island14_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island14_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island15`
Island15_Receive = False
Island15_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Island15_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Island15_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island15_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island15_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island15_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island16`
Island16_Receive = False
Island16_Option1 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Island16_Option2 = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Island16_Character1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island16_SecondaryCharacter1 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island16_Character2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
Island16_SecondaryCharacter2 = 'manjuu' # manjuu, saratoga, new_jersey, tashkent, lemalin, shimakaze, akashi, ying_swei, chao_ho, william_d_porter, chen_hai, hood, prinz_eugen, tb, oceana, explorer, unicorn, cheshire, amagi_chan, helena, atago, friedrich_der_grobe, javelin, laffey, takao, yat_sen, fei_yuen, august_von_parseval
# Group `Island`
Island_ReceiveMiningForaging = True
# Group `GeneralShop`
GeneralShop_UseGems = False

View File

@@ -28,6 +28,7 @@ class ManualConfig:
> RaidDaily > CoalitionSp > WarArchives > MaritimeEscort
> Event > Event2 > Raid > Hospital > HospitalEvent > Coalition > Main > Main2 > Main3
> OpsiMeowfficerFarming
> Island
> GemsFarming
> OpsiHazard1Leveling
"""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -4,113 +4,20 @@ from module.base.template import Template
# This file was automatically generated by dev_tools/button_extract.py.
# Don't modify it manually.
GET_ITEMS_ISLAND = Button(area={'cn': (588, 260, 692, 289), 'en': (588, 260, 692, 289), 'jp': (588, 260, 692, 289), 'tw': (588, 260, 692, 289)}, color={'cn': (178, 180, 180), 'en': (149, 151, 152), 'jp': (178, 180, 180), 'tw': (178, 180, 180)}, button={'cn': (0, 263, 129, 555), 'en': (588, 260, 692, 289), 'jp': (0, 263, 129, 555), 'tw': (0, 263, 129, 555)}, file={'cn': './assets/cn/island/GET_ITEMS_ISLAND.png', 'en': './assets/en/island/GET_ITEMS_ISLAND.png', 'jp': './assets/cn/island/GET_ITEMS_ISLAND.png', 'tw': './assets/cn/island/GET_ITEMS_ISLAND.png'})
ISLAND_AMOUNT_MAX = Button(area={'cn': (960, 382, 988, 405), 'en': (960, 382, 988, 405), 'jp': (960, 382, 988, 405), 'tw': (960, 382, 988, 405)}, color={'cn': (72, 72, 78), 'en': (78, 78, 84), 'jp': (72, 72, 78), 'tw': (72, 72, 78)}, button={'cn': (960, 382, 988, 405), 'en': (960, 382, 988, 405), 'jp': (960, 382, 988, 405), 'tw': (960, 382, 988, 405)}, file={'cn': './assets/cn/island/ISLAND_AMOUNT_MAX.png', 'en': './assets/en/island/ISLAND_AMOUNT_MAX.png', 'jp': './assets/cn/island/ISLAND_AMOUNT_MAX.png', 'tw': './assets/cn/island/ISLAND_AMOUNT_MAX.png'})
GET_ITEMS_ISLAND = Button(area={'cn': (588, 260, 692, 289), 'en': (588, 260, 692, 289), 'jp': (588, 260, 692, 289), 'tw': (588, 260, 692, 289)}, color={'cn': (178, 180, 180), 'en': (178, 180, 180), 'jp': (178, 180, 180), 'tw': (178, 180, 180)}, button={'cn': (0, 263, 129, 555), 'en': (0, 263, 129, 555), 'jp': (0, 263, 129, 555), 'tw': (0, 263, 129, 555)}, file={'cn': './assets/cn/island/GET_ITEMS_ISLAND.png', 'en': './assets/cn/island/GET_ITEMS_ISLAND.png', 'jp': './assets/cn/island/GET_ITEMS_ISLAND.png', 'tw': './assets/cn/island/GET_ITEMS_ISLAND.png'})
ISLAND_AMOUNT_MAX = Button(area={'cn': (960, 382, 988, 405), 'en': (960, 382, 988, 405), 'jp': (960, 382, 988, 405), 'tw': (960, 382, 988, 405)}, color={'cn': (72, 72, 78), 'en': (72, 72, 78), 'jp': (72, 72, 78), 'tw': (72, 72, 78)}, button={'cn': (960, 382, 988, 405), 'en': (960, 382, 988, 405), 'jp': (960, 382, 988, 405), 'tw': (960, 382, 988, 405)}, file={'cn': './assets/cn/island/ISLAND_AMOUNT_MAX.png', 'en': './assets/cn/island/ISLAND_AMOUNT_MAX.png', 'jp': './assets/cn/island/ISLAND_AMOUNT_MAX.png', 'tw': './assets/cn/island/ISLAND_AMOUNT_MAX.png'})
ISLAND_CLICK_SAFE_AREA = Button(area={'cn': (0, 263, 129, 555), 'en': (0, 263, 129, 555), 'jp': (0, 263, 129, 555), 'tw': (0, 263, 129, 555)}, color={'cn': (50, 52, 56), 'en': (50, 52, 56), 'jp': (50, 52, 56), 'tw': (50, 52, 56)}, button={'cn': (0, 263, 129, 555), 'en': (0, 263, 129, 555), 'jp': (0, 263, 129, 555), 'tw': (0, 263, 129, 555)}, file={'cn': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'en': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'jp': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'tw': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png'})
ISLAND_FRIEND = Button(area={'cn': (887, 648, 920, 675), 'en': (887, 648, 920, 675), 'jp': (887, 648, 920, 675), 'tw': (887, 648, 920, 675)}, color={'cn': (203, 213, 219), 'en': (203, 213, 219), 'jp': (203, 213, 219), 'tw': (203, 213, 219)}, button={'cn': (887, 648, 920, 675), 'en': (887, 648, 920, 675), 'jp': (887, 648, 920, 675), 'tw': (887, 648, 920, 675)}, file={'cn': './assets/cn/island/ISLAND_FRIEND.png', 'en': './assets/cn/island/ISLAND_FRIEND.png', 'jp': './assets/cn/island/ISLAND_FRIEND.png', 'tw': './assets/cn/island/ISLAND_FRIEND.png'})
ISLAND_FRIEND_CHECK = Button(area={'cn': (171, 22, 217, 45), 'en': (171, 22, 217, 45), 'jp': (171, 22, 217, 45), 'tw': (171, 22, 217, 45)}, color={'cn': (96, 102, 115), 'en': (96, 102, 115), 'jp': (96, 102, 115), 'tw': (96, 102, 115)}, button={'cn': (171, 22, 217, 45), 'en': (171, 22, 217, 45), 'jp': (171, 22, 217, 45), 'tw': (171, 22, 217, 45)}, file={'cn': './assets/cn/island/ISLAND_FRIEND_CHECK.png', 'en': './assets/cn/island/ISLAND_FRIEND_CHECK.png', 'jp': './assets/cn/island/ISLAND_FRIEND_CHECK.png', 'tw': './assets/cn/island/ISLAND_FRIEND_CHECK.png'})
ISLAND_FRIEND_LEAVE = Button(area={'cn': (380, 47, 406, 71), 'en': (380, 47, 406, 71), 'jp': (380, 47, 406, 71), 'tw': (380, 47, 406, 71)}, color={'cn': (183, 183, 183), 'en': (183, 183, 183), 'jp': (183, 183, 183), 'tw': (183, 183, 183)}, button={'cn': (380, 47, 406, 71), 'en': (380, 47, 406, 71), 'jp': (380, 47, 406, 71), 'tw': (380, 47, 406, 71)}, file={'cn': './assets/cn/island/ISLAND_FRIEND_LEAVE.png', 'en': './assets/cn/island/ISLAND_FRIEND_LEAVE.png', 'jp': './assets/cn/island/ISLAND_FRIEND_LEAVE.png', 'tw': './assets/cn/island/ISLAND_FRIEND_LEAVE.png'})
ISLAND_FRIEND_SCROLL = Button(area={'cn': (1256, 98, 1257, 694), 'en': (1256, 98, 1257, 694), 'jp': (1256, 98, 1257, 694), 'tw': (1256, 98, 1257, 694)}, color={'cn': (200, 199, 193), 'en': (200, 199, 193), 'jp': (200, 199, 193), 'tw': (200, 199, 193)}, button={'cn': (1256, 98, 1257, 694), 'en': (1256, 98, 1257, 694), 'jp': (1256, 98, 1257, 694), 'tw': (1256, 98, 1257, 694)}, file={'cn': './assets/cn/island/ISLAND_FRIEND_SCROLL.png', 'en': './assets/cn/island/ISLAND_FRIEND_SCROLL.png', 'jp': './assets/cn/island/ISLAND_FRIEND_SCROLL.png', 'tw': './assets/cn/island/ISLAND_FRIEND_SCROLL.png'})
ISLAND_INFO_EXIT = Button(area={'cn': (907, 160, 933, 187), 'en': (907, 160, 933, 187), 'jp': (907, 160, 933, 187), 'tw': (907, 160, 933, 187)}, color={'cn': (96, 96, 96), 'en': (96, 96, 96), 'jp': (96, 96, 96), 'tw': (96, 96, 96)}, button={'cn': (907, 160, 933, 187), 'en': (907, 160, 933, 187), 'jp': (907, 160, 933, 187), 'tw': (907, 160, 933, 187)}, file={'cn': './assets/cn/island/ISLAND_INFO_EXIT.png', 'en': './assets/cn/island/ISLAND_INFO_EXIT.png', 'jp': './assets/cn/island/ISLAND_INFO_EXIT.png', 'tw': './assets/cn/island/ISLAND_INFO_EXIT.png'})
ISLAND_MANAGEMENT = Button(area={'cn': (1077, 493, 1119, 533), 'en': (1077, 493, 1119, 533), 'jp': (1077, 493, 1119, 533), 'tw': (1077, 493, 1119, 533)}, color={'cn': (187, 224, 135), 'en': (187, 224, 135), 'jp': (187, 224, 135), 'tw': (187, 224, 135)}, button={'cn': (1077, 493, 1119, 533), 'en': (1077, 493, 1119, 533), 'jp': (1077, 493, 1119, 533), 'tw': (1077, 493, 1119, 533)}, file={'cn': './assets/cn/island/ISLAND_MANAGEMENT.png', 'en': './assets/cn/island/ISLAND_MANAGEMENT.png', 'jp': './assets/cn/island/ISLAND_MANAGEMENT.png', 'tw': './assets/cn/island/ISLAND_MANAGEMENT.png'})
ISLAND_MANAGEMENT_CHECK = Button(area={'cn': (123, 21, 304, 47), 'en': (123, 21, 304, 47), 'jp': (123, 21, 304, 47), 'tw': (123, 21, 304, 47)}, color={'cn': (77, 83, 96), 'en': (90, 96, 108), 'jp': (77, 83, 96), 'tw': (77, 83, 96)}, button={'cn': (123, 21, 304, 47), 'en': (123, 21, 304, 47), 'jp': (123, 21, 304, 47), 'tw': (123, 21, 304, 47)}, file={'cn': './assets/cn/island/ISLAND_MANAGEMENT_CHECK.png', 'en': './assets/en/island/ISLAND_MANAGEMENT_CHECK.png', 'jp': './assets/cn/island/ISLAND_MANAGEMENT_CHECK.png', 'tw': './assets/cn/island/ISLAND_MANAGEMENT_CHECK.png'})
ISLAND_MANAGEMENT_LOCKED = Button(area={'cn': (1092, 504, 1105, 520), 'en': (1092, 504, 1105, 520), 'jp': (1092, 504, 1105, 520), 'tw': (1092, 504, 1105, 520)}, color={'cn': (197, 206, 195), 'en': (197, 206, 195), 'jp': (197, 206, 195), 'tw': (197, 206, 195)}, button={'cn': (1092, 504, 1105, 520), 'en': (1092, 504, 1105, 520), 'jp': (1092, 504, 1105, 520), 'tw': (1092, 504, 1105, 520)}, file={'cn': './assets/cn/island/ISLAND_MANAGEMENT_LOCKED.png', 'en': './assets/cn/island/ISLAND_MANAGEMENT_LOCKED.png', 'jp': './assets/cn/island/ISLAND_MANAGEMENT_LOCKED.png', 'tw': './assets/cn/island/ISLAND_MANAGEMENT_LOCKED.png'})
ISLAND_PRODUCT_ITEMS = Button(area={'cn': (166, 68, 477, 652), 'en': (166, 68, 477, 652), 'jp': (166, 68, 477, 652), 'tw': (166, 68, 477, 652)}, color={'cn': (189, 200, 198), 'en': (189, 200, 198), 'jp': (189, 200, 198), 'tw': (189, 200, 198)}, button={'cn': (166, 68, 477, 652), 'en': (166, 68, 477, 652), 'jp': (166, 68, 477, 652), 'tw': (166, 68, 477, 652)}, file={'cn': './assets/cn/island/ISLAND_PRODUCT_ITEMS.png', 'en': './assets/cn/island/ISLAND_PRODUCT_ITEMS.png', 'jp': './assets/cn/island/ISLAND_PRODUCT_ITEMS.png', 'tw': './assets/cn/island/ISLAND_PRODUCT_ITEMS.png'})
ISLAND_PROJECT_CHARACTER = Button(area={'cn': (544, 149, 640, 549), 'en': (544, 149, 640, 549), 'jp': (544, 149, 640, 549), 'tw': (544, 149, 640, 549)}, color={'cn': (128, 128, 128), 'en': (128, 128, 128), 'jp': (128, 128, 128), 'tw': (128, 128, 128)}, button={'cn': (544, 149, 640, 549), 'en': (544, 149, 640, 549), 'jp': (544, 149, 640, 549), 'tw': (544, 149, 640, 549)}, file={'cn': './assets/cn/island/ISLAND_PROJECT_CHARACTER.png', 'en': './assets/cn/island/ISLAND_PROJECT_CHARACTER.png', 'jp': './assets/cn/island/ISLAND_PROJECT_CHARACTER.png', 'tw': './assets/cn/island/ISLAND_PROJECT_CHARACTER.png'})
ISLAND_PROJECT_SWIPE = Button(area={'cn': (690, 80, 721, 641), 'en': (690, 80, 721, 641), 'jp': (690, 80, 721, 641), 'tw': (690, 80, 721, 641)}, color={'cn': (215, 218, 213), 'en': (215, 218, 213), 'jp': (215, 218, 213), 'tw': (215, 218, 213)}, button={'cn': (690, 80, 721, 641), 'en': (690, 80, 721, 641), 'jp': (690, 80, 721, 641), 'tw': (690, 80, 721, 641)}, file={'cn': './assets/cn/island/ISLAND_PROJECT_SWIPE.png', 'en': './assets/cn/island/ISLAND_PROJECT_SWIPE.png', 'jp': './assets/cn/island/ISLAND_PROJECT_SWIPE.png', 'tw': './assets/cn/island/ISLAND_PROJECT_SWIPE.png'})
ISLAND_TRANSPORT = Button(area={'cn': (905, 335, 986, 358), 'en': (905, 335, 986, 358), 'jp': (905, 335, 986, 358), 'tw': (905, 335, 986, 358)}, color={'cn': (228, 192, 122), 'en': (234, 192, 102), 'jp': (228, 192, 122), 'tw': (228, 192, 122)}, button={'cn': (898, 328, 1031, 459), 'en': (905, 335, 986, 358), 'jp': (898, 328, 1031, 459), 'tw': (898, 328, 1031, 459)}, file={'cn': './assets/cn/island/ISLAND_TRANSPORT.png', 'en': './assets/en/island/ISLAND_TRANSPORT.png', 'jp': './assets/cn/island/ISLAND_TRANSPORT.png', 'tw': './assets/cn/island/ISLAND_TRANSPORT.png'})
ISLAND_TRANSPORT_CHECK = Button(area={'cn': (264, 154, 317, 180), 'en': (264, 154, 317, 180), 'jp': (264, 154, 317, 180), 'tw': (264, 154, 317, 180)}, color={'cn': (142, 143, 143), 'en': (22, 0, 0), 'jp': (142, 143, 143), 'tw': (142, 143, 143)}, button={'cn': (264, 154, 317, 180), 'en': (264, 154, 317, 180), 'jp': (264, 154, 317, 180), 'tw': (264, 154, 317, 180)}, file={'cn': './assets/cn/island/ISLAND_TRANSPORT_CHECK.png', 'en': './assets/en/island/ISLAND_TRANSPORT_CHECK.png', 'jp': './assets/cn/island/ISLAND_TRANSPORT_CHECK.png', 'tw': './assets/cn/island/ISLAND_TRANSPORT_CHECK.png'})
OCR_PRODUCTION_TIME = Button(area={'cn': (714, 611, 808, 631), 'en': (637, 603, 733, 623), 'jp': (714, 611, 808, 631), 'tw': (714, 611, 808, 631)}, color={'cn': (120, 210, 255), 'en': (132, 214, 255), 'jp': (120, 210, 255), 'tw': (120, 210, 255)}, button={'cn': (714, 611, 808, 631), 'en': (637, 603, 733, 623), 'jp': (714, 611, 808, 631), 'tw': (714, 611, 808, 631)}, file={'cn': './assets/cn/island/OCR_PRODUCTION_TIME.png', 'en': './assets/en/island/OCR_PRODUCTION_TIME.png', 'jp': './assets/cn/island/OCR_PRODUCTION_TIME.png', 'tw': './assets/cn/island/OCR_PRODUCTION_TIME.png'})
ISLAND_MANAGEMENT_CHECK = Button(area={'cn': (43, 633, 82, 681), 'en': (43, 633, 82, 681), 'jp': (43, 633, 82, 681), 'tw': (43, 633, 82, 681)}, color={'cn': (138, 138, 138), 'en': (138, 138, 138), 'jp': (138, 138, 138), 'tw': (138, 138, 138)}, button={'cn': (43, 633, 82, 681), 'en': (43, 633, 82, 681), 'jp': (43, 633, 82, 681), 'tw': (43, 633, 82, 681)}, file={'cn': './assets/cn/island/ISLAND_MANAGEMENT_CHECK.png', 'en': './assets/cn/island/ISLAND_MANAGEMENT_CHECK.png', 'jp': './assets/cn/island/ISLAND_MANAGEMENT_CHECK.png', 'tw': './assets/cn/island/ISLAND_MANAGEMENT_CHECK.png'})
OCR_PRODUCTION_TIME = Button(area={'cn': (714, 611, 808, 631), 'en': (714, 611, 808, 631), 'jp': (714, 611, 808, 631), 'tw': (714, 611, 808, 631)}, color={'cn': (120, 210, 255), 'en': (120, 210, 255), 'jp': (120, 210, 255), 'tw': (120, 210, 255)}, button={'cn': (714, 611, 808, 631), 'en': (714, 611, 808, 631), 'jp': (714, 611, 808, 631), 'tw': (714, 611, 808, 631)}, file={'cn': './assets/cn/island/OCR_PRODUCTION_TIME.png', 'en': './assets/cn/island/OCR_PRODUCTION_TIME.png', 'jp': './assets/cn/island/OCR_PRODUCTION_TIME.png', 'tw': './assets/cn/island/OCR_PRODUCTION_TIME.png'})
OCR_PRODUCTION_TIME_REMAIN = Button(area={'cn': (621, 427, 666, 439), 'en': (621, 427, 666, 439), 'jp': (621, 427, 666, 439), 'tw': (621, 427, 666, 439)}, color={'cn': (196, 203, 205), 'en': (196, 203, 205), 'jp': (196, 203, 205), 'tw': (196, 203, 205)}, button={'cn': (621, 427, 666, 439), 'en': (621, 427, 666, 439), 'jp': (621, 427, 666, 439), 'tw': (621, 427, 666, 439)}, file={'cn': './assets/cn/island/OCR_PRODUCTION_TIME_REMAIN.png', 'en': './assets/cn/island/OCR_PRODUCTION_TIME_REMAIN.png', 'jp': './assets/cn/island/OCR_PRODUCTION_TIME_REMAIN.png', 'tw': './assets/cn/island/OCR_PRODUCTION_TIME_REMAIN.png'})
OCR_TRANSPORT_REFRESH = Button(area={'cn': (716, 211, 805, 231), 'en': (716, 211, 805, 231), 'jp': (716, 211, 805, 231), 'tw': (716, 211, 805, 231)}, color={'cn': (176, 177, 175), 'en': (176, 177, 175), 'jp': (176, 177, 175), 'tw': (176, 177, 175)}, button={'cn': (716, 211, 805, 231), 'en': (716, 211, 805, 231), 'jp': (716, 211, 805, 231), 'tw': (716, 211, 805, 231)}, file={'cn': './assets/cn/island/OCR_TRANSPORT_REFRESH.png', 'en': './assets/cn/island/OCR_TRANSPORT_REFRESH.png', 'jp': './assets/cn/island/OCR_TRANSPORT_REFRESH.png', 'tw': './assets/cn/island/OCR_TRANSPORT_REFRESH.png'})
OCR_TRANSPORT_TIME = Button(area={'cn': (611, 139, 687, 154), 'en': (611, 139, 687, 154), 'jp': (611, 139, 687, 154), 'tw': (611, 139, 687, 154)}, color={'cn': (119, 119, 120), 'en': (119, 119, 120), 'jp': (119, 119, 120), 'tw': (119, 119, 120)}, button={'cn': (611, 139, 687, 154), 'en': (611, 139, 687, 154), 'jp': (611, 139, 687, 154), 'tw': (611, 139, 687, 154)}, file={'cn': './assets/cn/island/OCR_TRANSPORT_TIME.png', 'en': './assets/cn/island/OCR_TRANSPORT_TIME.png', 'jp': './assets/cn/island/OCR_TRANSPORT_TIME.png', 'tw': './assets/cn/island/OCR_TRANSPORT_TIME.png'})
OCR_TRANSPORT_TIME_REMAIN = Button(area={'cn': (753, 210, 842, 230), 'en': (753, 210, 842, 230), 'jp': (753, 210, 842, 230), 'tw': (753, 210, 842, 230)}, color={'cn': (252, 203, 127), 'en': (252, 203, 127), 'jp': (252, 203, 127), 'tw': (252, 203, 127)}, button={'cn': (753, 210, 842, 230), 'en': (753, 210, 842, 230), 'jp': (753, 210, 842, 230), 'tw': (753, 210, 842, 230)}, file={'cn': './assets/cn/island/OCR_TRANSPORT_TIME_REMAIN.png', 'en': './assets/cn/island/OCR_TRANSPORT_TIME_REMAIN.png', 'jp': './assets/cn/island/OCR_TRANSPORT_TIME_REMAIN.png', 'tw': './assets/cn/island/OCR_TRANSPORT_TIME_REMAIN.png'})
PEARL_CHECK = Button(area={'cn': (113, 22, 228, 45), 'en': (113, 22, 228, 45), 'jp': (113, 22, 228, 45), 'tw': (113, 22, 228, 45)}, color={'cn': (93, 98, 110), 'en': (93, 98, 110), 'jp': (93, 98, 110), 'tw': (93, 98, 110)}, button={'cn': (113, 22, 228, 45), 'en': (113, 22, 228, 45), 'jp': (113, 22, 228, 45), 'tw': (113, 22, 228, 45)}, file={'cn': './assets/cn/island/PEARL_CHECK.png', 'en': './assets/cn/island/PEARL_CHECK.png', 'jp': './assets/cn/island/PEARL_CHECK.png', 'tw': './assets/cn/island/PEARL_CHECK.png'})
PEARL_ENTER = Button(area={'cn': (809, 380, 836, 407), 'en': (809, 380, 836, 407), 'jp': (809, 380, 836, 407), 'tw': (809, 380, 836, 407)}, color={'cn': (192, 192, 192), 'en': (192, 192, 192), 'jp': (192, 192, 192), 'tw': (192, 192, 192)}, button={'cn': (809, 380, 836, 407), 'en': (809, 380, 836, 407), 'jp': (809, 380, 836, 407), 'tw': (809, 380, 836, 407)}, file={'cn': './assets/cn/island/PEARL_ENTER.png', 'en': './assets/cn/island/PEARL_ENTER.png', 'jp': './assets/cn/island/PEARL_ENTER.png', 'tw': './assets/cn/island/PEARL_ENTER.png'})
PEARL_PRICE_OCR = Button(area={'cn': (257, 357, 300, 377), 'en': (257, 357, 300, 377), 'jp': (257, 357, 300, 377), 'tw': (257, 357, 300, 377)}, color={'cn': (147, 148, 148), 'en': (147, 148, 148), 'jp': (147, 148, 148), 'tw': (147, 148, 148)}, button={'cn': (257, 357, 300, 377), 'en': (257, 357, 300, 377), 'jp': (257, 357, 300, 377), 'tw': (257, 357, 300, 377)}, file={'cn': './assets/cn/island/PEARL_PRICE_OCR.png', 'en': './assets/cn/island/PEARL_PRICE_OCR.png', 'jp': './assets/cn/island/PEARL_PRICE_OCR.png', 'tw': './assets/cn/island/PEARL_PRICE_OCR.png'})
PRODUCT_MANJUU_CHECK = Button(area={'cn': (535, 107, 575, 138), 'en': (535, 107, 575, 138), 'jp': (535, 107, 575, 138), 'tw': (535, 107, 575, 138)}, color={'cn': (199, 181, 124), 'en': (199, 181, 124), 'jp': (199, 181, 124), 'tw': (199, 181, 124)}, button={'cn': (535, 107, 575, 138), 'en': (535, 107, 575, 138), 'jp': (535, 107, 575, 138), 'tw': (535, 107, 575, 138)}, file={'cn': './assets/cn/island/PRODUCT_MANJUU_CHECK.png', 'en': './assets/cn/island/PRODUCT_MANJUU_CHECK.png', 'jp': './assets/cn/island/PRODUCT_MANJUU_CHECK.png', 'tw': './assets/cn/island/PRODUCT_MANJUU_CHECK.png'})
PROJECT_AKASHI_CHECK = Button(area={'cn': (1157, 176, 1217, 209), 'en': (1157, 176, 1217, 209), 'jp': (1157, 176, 1217, 209), 'tw': (1157, 176, 1217, 209)}, color={'cn': (173, 183, 168), 'en': (173, 183, 168), 'jp': (173, 183, 168), 'tw': (173, 183, 168)}, button={'cn': (1157, 176, 1217, 209), 'en': (1157, 176, 1217, 209), 'jp': (1157, 176, 1217, 209), 'tw': (1157, 176, 1217, 209)}, file={'cn': './assets/cn/island/PROJECT_AKASHI_CHECK.png', 'en': './assets/cn/island/PROJECT_AKASHI_CHECK.png', 'jp': './assets/cn/island/PROJECT_AKASHI_CHECK.png', 'tw': './assets/cn/island/PROJECT_AKASHI_CHECK.png'})
PROJECT_AMAGI_CHAN_CHECK = Button(area={'cn': (1152, 167, 1229, 215), 'en': (1152, 167, 1229, 215), 'jp': (1152, 167, 1229, 215), 'tw': (1152, 167, 1229, 215)}, color={'cn': (136, 114, 106), 'en': (136, 114, 106), 'jp': (136, 114, 106), 'tw': (136, 114, 106)}, button={'cn': (1152, 167, 1229, 215), 'en': (1152, 167, 1229, 215), 'jp': (1152, 167, 1229, 215), 'tw': (1152, 167, 1229, 215)}, file={'cn': './assets/cn/island/PROJECT_AMAGI_CHAN_CHECK.png', 'en': './assets/cn/island/PROJECT_AMAGI_CHAN_CHECK.png', 'jp': './assets/cn/island/PROJECT_AMAGI_CHAN_CHECK.png', 'tw': './assets/cn/island/PROJECT_AMAGI_CHAN_CHECK.png'})
PROJECT_ATAGO_CHECK = Button(area={'cn': (1161, 180, 1217, 211), 'en': (1161, 180, 1217, 211), 'jp': (1161, 180, 1217, 211), 'tw': (1161, 180, 1217, 211)}, color={'cn': (175, 156, 144), 'en': (175, 156, 144), 'jp': (175, 156, 144), 'tw': (175, 156, 144)}, button={'cn': (1161, 180, 1217, 211), 'en': (1161, 180, 1217, 211), 'jp': (1161, 180, 1217, 211), 'tw': (1161, 180, 1217, 211)}, file={'cn': './assets/cn/island/PROJECT_ATAGO_CHECK.png', 'en': './assets/cn/island/PROJECT_ATAGO_CHECK.png', 'jp': './assets/cn/island/PROJECT_ATAGO_CHECK.png', 'tw': './assets/cn/island/PROJECT_ATAGO_CHECK.png'})
PROJECT_AUGUST_VON_PARSEVAL_CHECK = Button(area={'cn': (1151, 168, 1226, 218), 'en': (1151, 168, 1226, 218), 'jp': (1151, 168, 1226, 218), 'tw': (1151, 168, 1226, 218)}, color={'cn': (122, 116, 124), 'en': (122, 116, 124), 'jp': (122, 116, 124), 'tw': (122, 116, 124)}, button={'cn': (1151, 168, 1226, 218), 'en': (1151, 168, 1226, 218), 'jp': (1151, 168, 1226, 218), 'tw': (1151, 168, 1226, 218)}, file={'cn': './assets/cn/island/PROJECT_AUGUST_VON_PARSEVAL_CHECK.png', 'en': './assets/cn/island/PROJECT_AUGUST_VON_PARSEVAL_CHECK.png', 'jp': './assets/cn/island/PROJECT_AUGUST_VON_PARSEVAL_CHECK.png', 'tw': './assets/cn/island/PROJECT_AUGUST_VON_PARSEVAL_CHECK.png'})
PROJECT_CHAO_HO_CHECK = Button(area={'cn': (1158, 174, 1218, 204), 'en': (1158, 174, 1218, 204), 'jp': (1158, 174, 1218, 204), 'tw': (1158, 174, 1218, 204)}, color={'cn': (182, 145, 150), 'en': (182, 145, 150), 'jp': (182, 145, 150), 'tw': (182, 145, 150)}, button={'cn': (1158, 174, 1218, 204), 'en': (1158, 174, 1218, 204), 'jp': (1158, 174, 1218, 204), 'tw': (1158, 174, 1218, 204)}, file={'cn': './assets/cn/island/PROJECT_CHAO_HO_CHECK.png', 'en': './assets/cn/island/PROJECT_CHAO_HO_CHECK.png', 'jp': './assets/cn/island/PROJECT_CHAO_HO_CHECK.png', 'tw': './assets/cn/island/PROJECT_CHAO_HO_CHECK.png'})
PROJECT_CHEN_HAI_CHECK = Button(area={'cn': (1162, 175, 1215, 206), 'en': (1162, 175, 1215, 206), 'jp': (1162, 175, 1215, 206), 'tw': (1162, 175, 1215, 206)}, color={'cn': (145, 134, 130), 'en': (145, 134, 130), 'jp': (145, 134, 130), 'tw': (145, 134, 130)}, button={'cn': (1162, 175, 1215, 206), 'en': (1162, 175, 1215, 206), 'jp': (1162, 175, 1215, 206), 'tw': (1162, 175, 1215, 206)}, file={'cn': './assets/cn/island/PROJECT_CHEN_HAI_CHECK.png', 'en': './assets/cn/island/PROJECT_CHEN_HAI_CHECK.png', 'jp': './assets/cn/island/PROJECT_CHEN_HAI_CHECK.png', 'tw': './assets/cn/island/PROJECT_CHEN_HAI_CHECK.png'})
PROJECT_CHESHIRE_CHECK = Button(area={'cn': (1161, 163, 1224, 207), 'en': (1161, 163, 1224, 207), 'jp': (1161, 163, 1224, 207), 'tw': (1161, 163, 1224, 207)}, color={'cn': (156, 150, 159), 'en': (156, 150, 159), 'jp': (156, 150, 159), 'tw': (156, 150, 159)}, button={'cn': (1161, 163, 1224, 207), 'en': (1161, 163, 1224, 207), 'jp': (1161, 163, 1224, 207), 'tw': (1161, 163, 1224, 207)}, file={'cn': './assets/cn/island/PROJECT_CHESHIRE_CHECK.png', 'en': './assets/cn/island/PROJECT_CHESHIRE_CHECK.png', 'jp': './assets/cn/island/PROJECT_CHESHIRE_CHECK.png', 'tw': './assets/cn/island/PROJECT_CHESHIRE_CHECK.png'})
PROJECT_COMPLETE = Button(area={'cn': (616, 431, 670, 444), 'en': (616, 431, 670, 444), 'jp': (616, 431, 670, 444), 'tw': (616, 431, 670, 444)}, color={'cn': (158, 222, 255), 'en': (158, 222, 255), 'jp': (158, 222, 255), 'tw': (158, 222, 255)}, button={'cn': (580, 533, 762, 584), 'en': (580, 533, 762, 584), 'jp': (580, 533, 762, 584), 'tw': (580, 533, 762, 584)}, file={'cn': './assets/cn/island/PROJECT_COMPLETE.png', 'en': './assets/cn/island/PROJECT_COMPLETE.png', 'jp': './assets/cn/island/PROJECT_COMPLETE.png', 'tw': './assets/cn/island/PROJECT_COMPLETE.png'})
PROJECT_EXPLORER_CHECK = Button(area={'cn': (1151, 168, 1223, 220), 'en': (1151, 168, 1223, 220), 'jp': (1151, 168, 1223, 220), 'tw': (1151, 168, 1223, 220)}, color={'cn': (200, 192, 189), 'en': (200, 192, 189), 'jp': (200, 192, 189), 'tw': (200, 192, 189)}, button={'cn': (1151, 168, 1223, 220), 'en': (1151, 168, 1223, 220), 'jp': (1151, 168, 1223, 220), 'tw': (1151, 168, 1223, 220)}, file={'cn': './assets/cn/island/PROJECT_EXPLORER_CHECK.png', 'en': './assets/cn/island/PROJECT_EXPLORER_CHECK.png', 'jp': './assets/cn/island/PROJECT_EXPLORER_CHECK.png', 'tw': './assets/cn/island/PROJECT_EXPLORER_CHECK.png'})
PROJECT_FEI_YUEN_CHECK = Button(area={'cn': (1148, 171, 1223, 226), 'en': (1148, 171, 1223, 226), 'jp': (1148, 171, 1223, 226), 'tw': (1148, 171, 1223, 226)}, color={'cn': (215, 206, 205), 'en': (215, 206, 205), 'jp': (215, 206, 205), 'tw': (215, 206, 205)}, button={'cn': (1148, 171, 1223, 226), 'en': (1148, 171, 1223, 226), 'jp': (1148, 171, 1223, 226), 'tw': (1148, 171, 1223, 226)}, file={'cn': './assets/cn/island/PROJECT_FEI_YUEN_CHECK.png', 'en': './assets/cn/island/PROJECT_FEI_YUEN_CHECK.png', 'jp': './assets/cn/island/PROJECT_FEI_YUEN_CHECK.png', 'tw': './assets/cn/island/PROJECT_FEI_YUEN_CHECK.png'})
PROJECT_FRIEDRICH_DER_GROBE_CHECK = Button(area={'cn': (1162, 177, 1217, 215), 'en': (1162, 177, 1217, 215), 'jp': (1162, 177, 1217, 215), 'tw': (1162, 177, 1217, 215)}, color={'cn': (106, 102, 100), 'en': (106, 102, 100), 'jp': (106, 102, 100), 'tw': (106, 102, 100)}, button={'cn': (1162, 177, 1217, 215), 'en': (1162, 177, 1217, 215), 'jp': (1162, 177, 1217, 215), 'tw': (1162, 177, 1217, 215)}, file={'cn': './assets/cn/island/PROJECT_FRIEDRICH_DER_GROBE_CHECK.png', 'en': './assets/cn/island/PROJECT_FRIEDRICH_DER_GROBE_CHECK.png', 'jp': './assets/cn/island/PROJECT_FRIEDRICH_DER_GROBE_CHECK.png', 'tw': './assets/cn/island/PROJECT_FRIEDRICH_DER_GROBE_CHECK.png'})
PROJECT_HELENA_CHECK = Button(area={'cn': (1164, 175, 1217, 209), 'en': (1164, 175, 1217, 209), 'jp': (1164, 175, 1217, 209), 'tw': (1164, 175, 1217, 209)}, color={'cn': (184, 178, 195), 'en': (184, 178, 195), 'jp': (184, 178, 195), 'tw': (184, 178, 195)}, button={'cn': (1164, 175, 1217, 209), 'en': (1164, 175, 1217, 209), 'jp': (1164, 175, 1217, 209), 'tw': (1164, 175, 1217, 209)}, file={'cn': './assets/cn/island/PROJECT_HELENA_CHECK.png', 'en': './assets/cn/island/PROJECT_HELENA_CHECK.png', 'jp': './assets/cn/island/PROJECT_HELENA_CHECK.png', 'tw': './assets/cn/island/PROJECT_HELENA_CHECK.png'})
PROJECT_HOOD_CHECK = Button(area={'cn': (1152, 167, 1232, 218), 'en': (1152, 167, 1232, 218), 'jp': (1152, 167, 1232, 218), 'tw': (1152, 167, 1232, 218)}, color={'cn': (203, 185, 173), 'en': (203, 185, 173), 'jp': (203, 185, 173), 'tw': (203, 185, 173)}, button={'cn': (1152, 167, 1232, 218), 'en': (1152, 167, 1232, 218), 'jp': (1152, 167, 1232, 218), 'tw': (1152, 167, 1232, 218)}, file={'cn': './assets/cn/island/PROJECT_HOOD_CHECK.png', 'en': './assets/cn/island/PROJECT_HOOD_CHECK.png', 'jp': './assets/cn/island/PROJECT_HOOD_CHECK.png', 'tw': './assets/cn/island/PROJECT_HOOD_CHECK.png'})
PROJECT_JAVELIN_CHECK = Button(area={'cn': (1151, 168, 1223, 220), 'en': (1151, 168, 1223, 220), 'jp': (1151, 168, 1223, 220), 'tw': (1151, 168, 1223, 220)}, color={'cn': (191, 174, 205), 'en': (191, 174, 205), 'jp': (191, 174, 205), 'tw': (191, 174, 205)}, button={'cn': (1151, 168, 1223, 220), 'en': (1151, 168, 1223, 220), 'jp': (1151, 168, 1223, 220), 'tw': (1151, 168, 1223, 220)}, file={'cn': './assets/cn/island/PROJECT_JAVELIN_CHECK.png', 'en': './assets/cn/island/PROJECT_JAVELIN_CHECK.png', 'jp': './assets/cn/island/PROJECT_JAVELIN_CHECK.png', 'tw': './assets/cn/island/PROJECT_JAVELIN_CHECK.png'})
PROJECT_LAFFEY_CHECK = Button(area={'cn': (1149, 164, 1224, 214), 'en': (1149, 164, 1224, 214), 'jp': (1149, 164, 1224, 214), 'tw': (1149, 164, 1224, 214)}, color={'cn': (226, 213, 220), 'en': (226, 213, 220), 'jp': (226, 213, 220), 'tw': (226, 213, 220)}, button={'cn': (1149, 164, 1224, 214), 'en': (1149, 164, 1224, 214), 'jp': (1149, 164, 1224, 214), 'tw': (1149, 164, 1224, 214)}, file={'cn': './assets/cn/island/PROJECT_LAFFEY_CHECK.png', 'en': './assets/cn/island/PROJECT_LAFFEY_CHECK.png', 'jp': './assets/cn/island/PROJECT_LAFFEY_CHECK.png', 'tw': './assets/cn/island/PROJECT_LAFFEY_CHECK.png'})
PROJECT_LEMALIN_CHECK = Button(area={'cn': (1165, 173, 1232, 218), 'en': (1165, 173, 1232, 218), 'jp': (1165, 173, 1232, 218), 'tw': (1165, 173, 1232, 218)}, color={'cn': (225, 217, 221), 'en': (225, 217, 221), 'jp': (225, 217, 221), 'tw': (225, 217, 221)}, button={'cn': (1165, 173, 1232, 218), 'en': (1165, 173, 1232, 218), 'jp': (1165, 173, 1232, 218), 'tw': (1165, 173, 1232, 218)}, file={'cn': './assets/cn/island/PROJECT_LEMALIN_CHECK.png', 'en': './assets/cn/island/PROJECT_LEMALIN_CHECK.png', 'jp': './assets/cn/island/PROJECT_LEMALIN_CHECK.png', 'tw': './assets/cn/island/PROJECT_LEMALIN_CHECK.png'})
PROJECT_MANJUU_CHECK = Button(area={'cn': (1162, 182, 1214, 205), 'en': (1162, 182, 1214, 205), 'jp': (1162, 182, 1214, 205), 'tw': (1162, 182, 1214, 205)}, color={'cn': (221, 192, 128), 'en': (221, 192, 128), 'jp': (221, 192, 128), 'tw': (221, 192, 128)}, button={'cn': (1162, 182, 1214, 205), 'en': (1162, 182, 1214, 205), 'jp': (1162, 182, 1214, 205), 'tw': (1162, 182, 1214, 205)}, file={'cn': './assets/cn/island/PROJECT_MANJUU_CHECK.png', 'en': './assets/cn/island/PROJECT_MANJUU_CHECK.png', 'jp': './assets/cn/island/PROJECT_MANJUU_CHECK.png', 'tw': './assets/cn/island/PROJECT_MANJUU_CHECK.png'})
PROJECT_NEW_JERSEY_CHECK = Button(area={'cn': (1158, 170, 1223, 214), 'en': (1158, 170, 1223, 214), 'jp': (1158, 170, 1223, 214), 'tw': (1158, 170, 1223, 214)}, color={'cn': (138, 136, 159), 'en': (138, 136, 159), 'jp': (138, 136, 159), 'tw': (138, 136, 159)}, button={'cn': (1158, 170, 1223, 214), 'en': (1158, 170, 1223, 214), 'jp': (1158, 170, 1223, 214), 'tw': (1158, 170, 1223, 214)}, file={'cn': './assets/cn/island/PROJECT_NEW_JERSEY_CHECK.png', 'en': './assets/cn/island/PROJECT_NEW_JERSEY_CHECK.png', 'jp': './assets/cn/island/PROJECT_NEW_JERSEY_CHECK.png', 'tw': './assets/cn/island/PROJECT_NEW_JERSEY_CHECK.png'})
PROJECT_OCEANA_CHECK = Button(area={'cn': (1148, 167, 1221, 221), 'en': (1148, 167, 1221, 221), 'jp': (1148, 167, 1221, 221), 'tw': (1148, 167, 1221, 221)}, color={'cn': (215, 208, 216), 'en': (215, 208, 216), 'jp': (215, 208, 216), 'tw': (215, 208, 216)}, button={'cn': (1148, 167, 1221, 221), 'en': (1148, 167, 1221, 221), 'jp': (1148, 167, 1221, 221), 'tw': (1148, 167, 1221, 221)}, file={'cn': './assets/cn/island/PROJECT_OCEANA_CHECK.png', 'en': './assets/cn/island/PROJECT_OCEANA_CHECK.png', 'jp': './assets/cn/island/PROJECT_OCEANA_CHECK.png', 'tw': './assets/cn/island/PROJECT_OCEANA_CHECK.png'})
PROJECT_PRINZ_EUGEN_CHECK = Button(area={'cn': (1150, 169, 1235, 219), 'en': (1150, 169, 1235, 219), 'jp': (1150, 169, 1235, 219), 'tw': (1150, 169, 1235, 219)}, color={'cn': (200, 180, 177), 'en': (200, 180, 177), 'jp': (200, 180, 177), 'tw': (200, 180, 177)}, button={'cn': (1150, 169, 1235, 219), 'en': (1150, 169, 1235, 219), 'jp': (1150, 169, 1235, 219), 'tw': (1150, 169, 1235, 219)}, file={'cn': './assets/cn/island/PROJECT_PRINZ_EUGEN_CHECK.png', 'en': './assets/cn/island/PROJECT_PRINZ_EUGEN_CHECK.png', 'jp': './assets/cn/island/PROJECT_PRINZ_EUGEN_CHECK.png', 'tw': './assets/cn/island/PROJECT_PRINZ_EUGEN_CHECK.png'})
PROJECT_SARATOGA_CHECK = Button(area={'cn': (1162, 166, 1223, 219), 'en': (1162, 166, 1223, 219), 'jp': (1162, 166, 1223, 219), 'tw': (1162, 166, 1223, 219)}, color={'cn': (212, 177, 178), 'en': (212, 177, 178), 'jp': (212, 177, 178), 'tw': (212, 177, 178)}, button={'cn': (1162, 166, 1223, 219), 'en': (1162, 166, 1223, 219), 'jp': (1162, 166, 1223, 219), 'tw': (1162, 166, 1223, 219)}, file={'cn': './assets/cn/island/PROJECT_SARATOGA_CHECK.png', 'en': './assets/cn/island/PROJECT_SARATOGA_CHECK.png', 'jp': './assets/cn/island/PROJECT_SARATOGA_CHECK.png', 'tw': './assets/cn/island/PROJECT_SARATOGA_CHECK.png'})
PROJECT_SHIMAKAZE_CHECK = Button(area={'cn': (1163, 168, 1212, 218), 'en': (1163, 168, 1212, 218), 'jp': (1163, 168, 1212, 218), 'tw': (1163, 168, 1212, 218)}, color={'cn': (218, 199, 196), 'en': (218, 199, 196), 'jp': (218, 199, 196), 'tw': (218, 199, 196)}, button={'cn': (1163, 168, 1212, 218), 'en': (1163, 168, 1212, 218), 'jp': (1163, 168, 1212, 218), 'tw': (1163, 168, 1212, 218)}, file={'cn': './assets/cn/island/PROJECT_SHIMAKAZE_CHECK.png', 'en': './assets/cn/island/PROJECT_SHIMAKAZE_CHECK.png', 'jp': './assets/cn/island/PROJECT_SHIMAKAZE_CHECK.png', 'tw': './assets/cn/island/PROJECT_SHIMAKAZE_CHECK.png'})
PROJECT_START = Button(area={'cn': (686, 610, 706, 630), 'en': (609, 610, 629, 630), 'jp': (686, 610, 706, 630), 'tw': (686, 610, 706, 630)}, color={'cn': (129, 213, 255), 'en': (128, 212, 254), 'jp': (129, 213, 255), 'tw': (129, 213, 255)}, button={'cn': (494, 599, 1087, 642), 'en': (609, 610, 629, 630), 'jp': (494, 599, 1087, 642), 'tw': (494, 599, 1087, 642)}, file={'cn': './assets/cn/island/PROJECT_START.png', 'en': './assets/en/island/PROJECT_START.png', 'jp': './assets/cn/island/PROJECT_START.png', 'tw': './assets/cn/island/PROJECT_START.png'})
PROJECT_TAKAO_CHECK = Button(area={'cn': (1143, 164, 1224, 224), 'en': (1143, 164, 1224, 224), 'jp': (1143, 164, 1224, 224), 'tw': (1143, 164, 1224, 224)}, color={'cn': (160, 151, 150), 'en': (160, 151, 150), 'jp': (160, 151, 150), 'tw': (160, 151, 150)}, button={'cn': (1143, 164, 1224, 224), 'en': (1143, 164, 1224, 224), 'jp': (1143, 164, 1224, 224), 'tw': (1143, 164, 1224, 224)}, file={'cn': './assets/cn/island/PROJECT_TAKAO_CHECK.png', 'en': './assets/cn/island/PROJECT_TAKAO_CHECK.png', 'jp': './assets/cn/island/PROJECT_TAKAO_CHECK.png', 'tw': './assets/cn/island/PROJECT_TAKAO_CHECK.png'})
PROJECT_TASHKENT_CHECK = Button(area={'cn': (1164, 176, 1219, 213), 'en': (1164, 176, 1219, 213), 'jp': (1164, 176, 1219, 213), 'tw': (1164, 176, 1219, 213)}, color={'cn': (176, 146, 173), 'en': (176, 146, 173), 'jp': (176, 146, 173), 'tw': (176, 146, 173)}, button={'cn': (1164, 176, 1219, 213), 'en': (1164, 176, 1219, 213), 'jp': (1164, 176, 1219, 213), 'tw': (1164, 176, 1219, 213)}, file={'cn': './assets/cn/island/PROJECT_TASHKENT_CHECK.png', 'en': './assets/cn/island/PROJECT_TASHKENT_CHECK.png', 'jp': './assets/cn/island/PROJECT_TASHKENT_CHECK.png', 'tw': './assets/cn/island/PROJECT_TASHKENT_CHECK.png'})
PROJECT_TB_CHECK = Button(area={'cn': (1148, 161, 1230, 218), 'en': (1148, 161, 1230, 218), 'jp': (1148, 161, 1230, 218), 'tw': (1148, 161, 1230, 218)}, color={'cn': (200, 207, 216), 'en': (200, 207, 216), 'jp': (200, 207, 216), 'tw': (200, 207, 216)}, button={'cn': (1148, 161, 1230, 218), 'en': (1148, 161, 1230, 218), 'jp': (1148, 161, 1230, 218), 'tw': (1148, 161, 1230, 218)}, file={'cn': './assets/cn/island/PROJECT_TB_CHECK.png', 'en': './assets/cn/island/PROJECT_TB_CHECK.png', 'jp': './assets/cn/island/PROJECT_TB_CHECK.png', 'tw': './assets/cn/island/PROJECT_TB_CHECK.png'})
PROJECT_UNICORN_CHECK = Button(area={'cn': (1156, 167, 1224, 209), 'en': (1156, 167, 1224, 209), 'jp': (1156, 167, 1224, 209), 'tw': (1156, 167, 1224, 209)}, color={'cn': (199, 184, 218), 'en': (199, 184, 218), 'jp': (199, 184, 218), 'tw': (199, 184, 218)}, button={'cn': (1156, 167, 1224, 209), 'en': (1156, 167, 1224, 209), 'jp': (1156, 167, 1224, 209), 'tw': (1156, 167, 1224, 209)}, file={'cn': './assets/cn/island/PROJECT_UNICORN_CHECK.png', 'en': './assets/cn/island/PROJECT_UNICORN_CHECK.png', 'jp': './assets/cn/island/PROJECT_UNICORN_CHECK.png', 'tw': './assets/cn/island/PROJECT_UNICORN_CHECK.png'})
PROJECT_WILLIAM_D_PORTER_CHECK = Button(area={'cn': (1152, 176, 1218, 220), 'en': (1152, 176, 1218, 220), 'jp': (1152, 176, 1218, 220), 'tw': (1152, 176, 1218, 220)}, color={'cn': (210, 179, 166), 'en': (210, 179, 166), 'jp': (210, 179, 166), 'tw': (210, 179, 166)}, button={'cn': (1152, 176, 1218, 220), 'en': (1152, 176, 1218, 220), 'jp': (1152, 176, 1218, 220), 'tw': (1152, 176, 1218, 220)}, file={'cn': './assets/cn/island/PROJECT_WILLIAM_D_PORTER_CHECK.png', 'en': './assets/cn/island/PROJECT_WILLIAM_D_PORTER_CHECK.png', 'jp': './assets/cn/island/PROJECT_WILLIAM_D_PORTER_CHECK.png', 'tw': './assets/cn/island/PROJECT_WILLIAM_D_PORTER_CHECK.png'})
PROJECT_YAT_SEN_CHECK = Button(area={'cn': (1149, 164, 1224, 214), 'en': (1149, 164, 1224, 214), 'jp': (1149, 164, 1224, 214), 'tw': (1149, 164, 1224, 214)}, color={'cn': (146, 133, 135), 'en': (146, 133, 135), 'jp': (146, 133, 135), 'tw': (146, 133, 135)}, button={'cn': (1149, 164, 1224, 214), 'en': (1149, 164, 1224, 214), 'jp': (1149, 164, 1224, 214), 'tw': (1149, 164, 1224, 214)}, file={'cn': './assets/cn/island/PROJECT_YAT_SEN_CHECK.png', 'en': './assets/cn/island/PROJECT_YAT_SEN_CHECK.png', 'jp': './assets/cn/island/PROJECT_YAT_SEN_CHECK.png', 'tw': './assets/cn/island/PROJECT_YAT_SEN_CHECK.png'})
PROJECT_YING_SWEI_CHECK = Button(area={'cn': (1161, 177, 1217, 210), 'en': (1161, 177, 1217, 210), 'jp': (1161, 177, 1217, 210), 'tw': (1161, 177, 1217, 210)}, color={'cn': (171, 157, 165), 'en': (171, 157, 165), 'jp': (171, 157, 165), 'tw': (171, 157, 165)}, button={'cn': (1161, 177, 1217, 210), 'en': (1161, 177, 1217, 210), 'jp': (1161, 177, 1217, 210), 'tw': (1161, 177, 1217, 210)}, file={'cn': './assets/cn/island/PROJECT_YING_SWEI_CHECK.png', 'en': './assets/cn/island/PROJECT_YING_SWEI_CHECK.png', 'jp': './assets/cn/island/PROJECT_YING_SWEI_CHECK.png', 'tw': './assets/cn/island/PROJECT_YING_SWEI_CHECK.png'})
ROLE_SELECT_CONFIRM = Button(area={'cn': (1068, 597, 1118, 621), 'en': (1068, 597, 1118, 621), 'jp': (1068, 597, 1118, 621), 'tw': (1068, 597, 1118, 621)}, color={'cn': (109, 206, 255), 'en': (125, 211, 255), 'jp': (109, 206, 255), 'tw': (109, 206, 255)}, button={'cn': (948, 585, 1239, 632), 'en': (1068, 597, 1118, 621), 'jp': (948, 585, 1239, 632), 'tw': (948, 585, 1239, 632)}, file={'cn': './assets/cn/island/ROLE_SELECT_CONFIRM.png', 'en': './assets/en/island/ROLE_SELECT_CONFIRM.png', 'jp': './assets/cn/island/ROLE_SELECT_CONFIRM.png', 'tw': './assets/cn/island/ROLE_SELECT_CONFIRM.png'})
ROLE_SELECT_ENTER = Button(area={'cn': (579, 314, 700, 350), 'en': (578, 313, 701, 351), 'jp': (579, 314, 700, 350), 'tw': (579, 314, 700, 350)}, color={'cn': (239, 238, 237), 'en': (237, 237, 236), 'jp': (239, 238, 237), 'tw': (239, 238, 237)}, button={'cn': (534, 206, 747, 483), 'en': (578, 313, 701, 351), 'jp': (534, 206, 747, 483), 'tw': (534, 206, 747, 483)}, file={'cn': './assets/cn/island/ROLE_SELECT_ENTER.png', 'en': './assets/en/island/ROLE_SELECT_ENTER.png', 'jp': './assets/cn/island/ROLE_SELECT_ENTER.png', 'tw': './assets/cn/island/ROLE_SELECT_ENTER.png'})
ROLE_SELECT_TITLE_AREA = Button(area={'cn': (518, 147, 763, 200), 'en': (518, 147, 763, 200), 'jp': (518, 147, 763, 200), 'tw': (518, 147, 763, 200)}, color={'cn': (80, 197, 255), 'en': (80, 197, 255), 'jp': (80, 197, 255), 'tw': (80, 197, 255)}, button={'cn': (518, 147, 763, 200), 'en': (518, 147, 763, 200), 'jp': (518, 147, 763, 200), 'tw': (518, 147, 763, 200)}, file={'cn': './assets/cn/island/ROLE_SELECT_TITLE_AREA.png', 'en': './assets/cn/island/ROLE_SELECT_TITLE_AREA.png', 'jp': './assets/cn/island/ROLE_SELECT_TITLE_AREA.png', 'tw': './assets/cn/island/ROLE_SELECT_TITLE_AREA.png'})
ROLE_SORTING_CLICK = Button(area={'cn': (109, 606, 272, 644), 'en': (109, 606, 272, 644), 'jp': (109, 606, 272, 644), 'tw': (109, 606, 272, 644)}, color={'cn': (101, 102, 101), 'en': (101, 102, 101), 'jp': (101, 102, 101), 'tw': (101, 102, 101)}, button={'cn': (109, 606, 272, 644), 'en': (109, 606, 272, 644), 'jp': (109, 606, 272, 644), 'tw': (109, 606, 272, 644)}, file={'cn': './assets/cn/island/ROLE_SORTING_CLICK.png', 'en': './assets/cn/island/ROLE_SORTING_CLICK.png', 'jp': './assets/cn/island/ROLE_SORTING_CLICK.png', 'tw': './assets/cn/island/ROLE_SORTING_CLICK.png'})
ROLE_SORT_ASC = Button(area={'cn': (143, 619, 150, 623), 'en': (143, 619, 150, 623), 'jp': (143, 619, 150, 623), 'tw': (143, 619, 150, 623)}, color={'cn': (244, 244, 244), 'en': (244, 244, 244), 'jp': (244, 244, 244), 'tw': (244, 244, 244)}, button={'cn': (143, 619, 150, 623), 'en': (143, 619, 150, 623), 'jp': (143, 619, 150, 623), 'tw': (143, 619, 150, 623)}, file={'cn': './assets/cn/island/ROLE_SORT_ASC.png', 'en': './assets/cn/island/ROLE_SORT_ASC.png', 'jp': './assets/cn/island/ROLE_SORT_ASC.png', 'tw': './assets/cn/island/ROLE_SORT_ASC.png'})
ROLE_SORT_DESC = Button(area={'cn': (143, 627, 150, 631), 'en': (143, 627, 150, 631), 'jp': (143, 627, 150, 631), 'tw': (143, 627, 150, 631)}, color={'cn': (236, 236, 236), 'en': (236, 236, 236), 'jp': (236, 236, 236), 'tw': (236, 236, 236)}, button={'cn': (143, 627, 150, 631), 'en': (143, 627, 150, 631), 'jp': (143, 627, 150, 631), 'tw': (143, 627, 150, 631)}, file={'cn': './assets/cn/island/ROLE_SORT_DESC.png', 'en': './assets/cn/island/ROLE_SORT_DESC.png', 'jp': './assets/cn/island/ROLE_SORT_DESC.png', 'tw': './assets/cn/island/ROLE_SORT_DESC.png'})
TEMPLATE_AKASHI = Template(file={'cn': './assets/cn/island/TEMPLATE_AKASHI.png', 'en': './assets/cn/island/TEMPLATE_AKASHI.png', 'jp': './assets/cn/island/TEMPLATE_AKASHI.png', 'tw': './assets/cn/island/TEMPLATE_AKASHI.png'})
TEMPLATE_AMAGI_CHAN = Template(file={'cn': './assets/cn/island/TEMPLATE_AMAGI_CHAN.png', 'en': './assets/cn/island/TEMPLATE_AMAGI_CHAN.png', 'jp': './assets/cn/island/TEMPLATE_AMAGI_CHAN.png', 'tw': './assets/cn/island/TEMPLATE_AMAGI_CHAN.png'})
TEMPLATE_ATAGO = Template(file={'cn': './assets/cn/island/TEMPLATE_ATAGO.png', 'en': './assets/cn/island/TEMPLATE_ATAGO.png', 'jp': './assets/cn/island/TEMPLATE_ATAGO.png', 'tw': './assets/cn/island/TEMPLATE_ATAGO.png'})
TEMPLATE_AUGUST_VON_PARSEVAL = Template(file={'cn': './assets/cn/island/TEMPLATE_AUGUST_VON_PARSEVAL.png', 'en': './assets/cn/island/TEMPLATE_AUGUST_VON_PARSEVAL.png', 'jp': './assets/cn/island/TEMPLATE_AUGUST_VON_PARSEVAL.png', 'tw': './assets/cn/island/TEMPLATE_AUGUST_VON_PARSEVAL.png'})
TEMPLATE_CARROT = Template(file={'cn': './assets/cn/island/TEMPLATE_CARROT.png', 'en': './assets/cn/island/TEMPLATE_CARROT.png', 'jp': './assets/cn/island/TEMPLATE_CARROT.png', 'tw': './assets/cn/island/TEMPLATE_CARROT.png'})
TEMPLATE_CHAO_HO = Template(file={'cn': './assets/cn/island/TEMPLATE_CHAO_HO.png', 'en': './assets/cn/island/TEMPLATE_CHAO_HO.png', 'jp': './assets/cn/island/TEMPLATE_CHAO_HO.png', 'tw': './assets/cn/island/TEMPLATE_CHAO_HO.png'})
TEMPLATE_CHEN_HAI = Template(file={'cn': './assets/cn/island/TEMPLATE_CHEN_HAI.png', 'en': './assets/cn/island/TEMPLATE_CHEN_HAI.png', 'jp': './assets/cn/island/TEMPLATE_CHEN_HAI.png', 'tw': './assets/cn/island/TEMPLATE_CHEN_HAI.png'})
TEMPLATE_CHESHIRE = Template(file={'cn': './assets/cn/island/TEMPLATE_CHESHIRE.png', 'en': './assets/cn/island/TEMPLATE_CHESHIRE.png', 'jp': './assets/cn/island/TEMPLATE_CHESHIRE.png', 'tw': './assets/cn/island/TEMPLATE_CHESHIRE.png'})
TEMPLATE_COTTON = Template(file={'cn': './assets/cn/island/TEMPLATE_COTTON.png', 'en': './assets/cn/island/TEMPLATE_COTTON.png', 'jp': './assets/cn/island/TEMPLATE_COTTON.png', 'tw': './assets/cn/island/TEMPLATE_COTTON.png'})
TEMPLATE_EXPLORER = Template(file={'cn': './assets/cn/island/TEMPLATE_EXPLORER.png', 'en': './assets/cn/island/TEMPLATE_EXPLORER.png', 'jp': './assets/cn/island/TEMPLATE_EXPLORER.png', 'tw': './assets/cn/island/TEMPLATE_EXPLORER.png'})
TEMPLATE_FEI_YUEN = Template(file={'cn': './assets/cn/island/TEMPLATE_FEI_YUEN.png', 'en': './assets/cn/island/TEMPLATE_FEI_YUEN.png', 'jp': './assets/cn/island/TEMPLATE_FEI_YUEN.png', 'tw': './assets/cn/island/TEMPLATE_FEI_YUEN.png'})
TEMPLATE_FLEX = Template(file={'cn': './assets/cn/island/TEMPLATE_FLEX.png', 'en': './assets/cn/island/TEMPLATE_FLEX.png', 'jp': './assets/cn/island/TEMPLATE_FLEX.png', 'tw': './assets/cn/island/TEMPLATE_FLEX.png'})
TEMPLATE_FRESH_MEAT = Template(file={'cn': './assets/cn/island/TEMPLATE_FRESH_MEAT.png', 'en': './assets/cn/island/TEMPLATE_FRESH_MEAT.png', 'jp': './assets/cn/island/TEMPLATE_FRESH_MEAT.png', 'tw': './assets/cn/island/TEMPLATE_FRESH_MEAT.png'})
TEMPLATE_FRIEDRICH_DER_GROBE = Template(file={'cn': './assets/cn/island/TEMPLATE_FRIEDRICH_DER_GROBE.png', 'en': './assets/cn/island/TEMPLATE_FRIEDRICH_DER_GROBE.png', 'jp': './assets/cn/island/TEMPLATE_FRIEDRICH_DER_GROBE.png', 'tw': './assets/cn/island/TEMPLATE_FRIEDRICH_DER_GROBE.png'})
TEMPLATE_FRIEND_VISIT = Template(file={'cn': './assets/cn/island/TEMPLATE_FRIEND_VISIT.png', 'en': './assets/cn/island/TEMPLATE_FRIEND_VISIT.png', 'jp': './assets/cn/island/TEMPLATE_FRIEND_VISIT.png', 'tw': './assets/cn/island/TEMPLATE_FRIEND_VISIT.png'})
TEMPLATE_HELENA = Template(file={'cn': './assets/cn/island/TEMPLATE_HELENA.png', 'en': './assets/cn/island/TEMPLATE_HELENA.png', 'jp': './assets/cn/island/TEMPLATE_HELENA.png', 'tw': './assets/cn/island/TEMPLATE_HELENA.png'})
TEMPLATE_HOOD = Template(file={'cn': './assets/cn/island/TEMPLATE_HOOD.png', 'en': './assets/cn/island/TEMPLATE_HOOD.png', 'jp': './assets/cn/island/TEMPLATE_HOOD.png', 'tw': './assets/cn/island/TEMPLATE_HOOD.png'})
TEMPLATE_ITEM_SATISFIED = Template(file={'cn': './assets/cn/island/TEMPLATE_ITEM_SATISFIED.png', 'en': './assets/cn/island/TEMPLATE_ITEM_SATISFIED.png', 'jp': './assets/cn/island/TEMPLATE_ITEM_SATISFIED.png', 'tw': './assets/cn/island/TEMPLATE_ITEM_SATISFIED.png'})
TEMPLATE_JAVELIN = Template(file={'cn': './assets/cn/island/TEMPLATE_JAVELIN.png', 'en': './assets/cn/island/TEMPLATE_JAVELIN.png', 'jp': './assets/cn/island/TEMPLATE_JAVELIN.png', 'tw': './assets/cn/island/TEMPLATE_JAVELIN.png'})
TEMPLATE_LAFFEY = Template(file={'cn': './assets/cn/island/TEMPLATE_LAFFEY.png', 'en': './assets/cn/island/TEMPLATE_LAFFEY.png', 'jp': './assets/cn/island/TEMPLATE_LAFFEY.png', 'tw': './assets/cn/island/TEMPLATE_LAFFEY.png'})
TEMPLATE_LEMALIN = Template(file={'cn': './assets/cn/island/TEMPLATE_LEMALIN.png', 'en': './assets/cn/island/TEMPLATE_LEMALIN.png', 'jp': './assets/cn/island/TEMPLATE_LEMALIN.png', 'tw': './assets/cn/island/TEMPLATE_LEMALIN.png'})
TEMPLATE_MANJUU = Template(file={'cn': './assets/cn/island/TEMPLATE_MANJUU.png', 'en': './assets/cn/island/TEMPLATE_MANJUU.png', 'jp': './assets/cn/island/TEMPLATE_MANJUU.png', 'tw': './assets/cn/island/TEMPLATE_MANJUU.png'})
TEMPLATE_MILK = Template(file={'cn': './assets/cn/island/TEMPLATE_MILK.png', 'en': './assets/cn/island/TEMPLATE_MILK.png', 'jp': './assets/cn/island/TEMPLATE_MILK.png', 'tw': './assets/cn/island/TEMPLATE_MILK.png'})
TEMPLATE_NAPA_CABBAGE = Template(file={'cn': './assets/cn/island/TEMPLATE_NAPA_CABBAGE.png', 'en': './assets/cn/island/TEMPLATE_NAPA_CABBAGE.png', 'jp': './assets/cn/island/TEMPLATE_NAPA_CABBAGE.png', 'tw': './assets/cn/island/TEMPLATE_NAPA_CABBAGE.png'})
TEMPLATE_NEW_JERSEY = Template(file={'cn': './assets/cn/island/TEMPLATE_NEW_JERSEY.png', 'en': './assets/cn/island/TEMPLATE_NEW_JERSEY.png', 'jp': './assets/cn/island/TEMPLATE_NEW_JERSEY.png', 'tw': './assets/cn/island/TEMPLATE_NEW_JERSEY.png'})
TEMPLATE_OCEANA = Template(file={'cn': './assets/cn/island/TEMPLATE_OCEANA.png', 'en': './assets/cn/island/TEMPLATE_OCEANA.png', 'jp': './assets/cn/island/TEMPLATE_OCEANA.png', 'tw': './assets/cn/island/TEMPLATE_OCEANA.png'})
TEMPLATE_ONION = Template(file={'cn': './assets/cn/island/TEMPLATE_ONION.png', 'en': './assets/cn/island/TEMPLATE_ONION.png', 'jp': './assets/cn/island/TEMPLATE_ONION.png', 'tw': './assets/cn/island/TEMPLATE_ONION.png'})
TEMPLATE_POULTRY = Template(file={'cn': './assets/cn/island/TEMPLATE_POULTRY.png', 'en': './assets/cn/island/TEMPLATE_POULTRY.png', 'jp': './assets/cn/island/TEMPLATE_POULTRY.png', 'tw': './assets/cn/island/TEMPLATE_POULTRY.png'})
TEMPLATE_PRINZ_EUGEN = Template(file={'cn': './assets/cn/island/TEMPLATE_PRINZ_EUGEN.png', 'en': './assets/cn/island/TEMPLATE_PRINZ_EUGEN.png', 'jp': './assets/cn/island/TEMPLATE_PRINZ_EUGEN.png', 'tw': './assets/cn/island/TEMPLATE_PRINZ_EUGEN.png'})
TEMPLATE_PROJECT = Template(file={'cn': './assets/cn/island/TEMPLATE_PROJECT.png', 'en': './assets/cn/island/TEMPLATE_PROJECT.png', 'jp': './assets/cn/island/TEMPLATE_PROJECT.png', 'tw': './assets/cn/island/TEMPLATE_PROJECT.png'})
PROJECT_COMPLETE = Button(area={'cn': (576, 394, 704, 414), 'en': (576, 394, 704, 414), 'jp': (576, 394, 704, 414), 'tw': (576, 394, 704, 414)}, color={'cn': (210, 210, 209), 'en': (210, 210, 209), 'jp': (210, 210, 209), 'tw': (210, 210, 209)}, button={'cn': (580, 533, 762, 584), 'en': (580, 533, 762, 584), 'jp': (580, 533, 762, 584), 'tw': (580, 533, 762, 584)}, file={'cn': './assets/cn/island/PROJECT_COMPLETE.png', 'en': './assets/cn/island/PROJECT_COMPLETE.png', 'jp': './assets/cn/island/PROJECT_COMPLETE.png', 'tw': './assets/cn/island/PROJECT_COMPLETE.png'})
PROJECT_START = Button(area={'cn': (686, 610, 706, 630), 'en': (686, 610, 706, 630), 'jp': (686, 610, 706, 630), 'tw': (686, 610, 706, 630)}, color={'cn': (129, 213, 255), 'en': (129, 213, 255), 'jp': (129, 213, 255), 'tw': (129, 213, 255)}, button={'cn': (494, 599, 1087, 642), 'en': (494, 599, 1087, 642), 'jp': (494, 599, 1087, 642), 'tw': (494, 599, 1087, 642)}, file={'cn': './assets/cn/island/PROJECT_START.png', 'en': './assets/cn/island/PROJECT_START.png', 'jp': './assets/cn/island/PROJECT_START.png', 'tw': './assets/cn/island/PROJECT_START.png'})
PROJECT_STAR_NOT_SATISFIED = Button(area={'cn': (686, 610, 706, 630), 'en': (686, 610, 706, 630), 'jp': (686, 610, 706, 630), 'tw': (686, 610, 706, 630)}, color={'cn': (188, 191, 190), 'en': (188, 191, 190), 'jp': (188, 191, 190), 'tw': (188, 191, 190)}, button={'cn': (686, 610, 706, 630), 'en': (686, 610, 706, 630), 'jp': (686, 610, 706, 630), 'tw': (686, 610, 706, 630)}, file={'cn': './assets/cn/island/PROJECT_STAR_NOT_SATISFIED.png', 'en': './assets/cn/island/PROJECT_STAR_NOT_SATISFIED.png', 'jp': './assets/cn/island/PROJECT_STAR_NOT_SATISFIED.png', 'tw': './assets/cn/island/PROJECT_STAR_NOT_SATISFIED.png'})
ROLE_SELECT_CHECK = Button(area={'cn': (1162, 182, 1214, 205), 'en': (1162, 182, 1214, 205), 'jp': (1162, 182, 1214, 205), 'tw': (1162, 182, 1214, 205)}, color={'cn': (221, 192, 128), 'en': (221, 192, 128), 'jp': (221, 192, 128), 'tw': (221, 192, 128)}, button={'cn': (1162, 182, 1214, 205), 'en': (1162, 182, 1214, 205), 'jp': (1162, 182, 1214, 205), 'tw': (1162, 182, 1214, 205)}, file={'cn': './assets/cn/island/ROLE_SELECT_CHECK.png', 'en': './assets/cn/island/ROLE_SELECT_CHECK.png', 'jp': './assets/cn/island/ROLE_SELECT_CHECK.png', 'tw': './assets/cn/island/ROLE_SELECT_CHECK.png'})
ROLE_SELECT_CONFIRM = Button(area={'cn': (1068, 597, 1118, 621), 'en': (1068, 597, 1118, 621), 'jp': (1068, 597, 1118, 621), 'tw': (1068, 597, 1118, 621)}, color={'cn': (109, 206, 255), 'en': (109, 206, 255), 'jp': (109, 206, 255), 'tw': (109, 206, 255)}, button={'cn': (948, 585, 1239, 632), 'en': (948, 585, 1239, 632), 'jp': (948, 585, 1239, 632), 'tw': (948, 585, 1239, 632)}, file={'cn': './assets/cn/island/ROLE_SELECT_CONFIRM.png', 'en': './assets/cn/island/ROLE_SELECT_CONFIRM.png', 'jp': './assets/cn/island/ROLE_SELECT_CONFIRM.png', 'tw': './assets/cn/island/ROLE_SELECT_CONFIRM.png'})
ROLE_SELECT_ENTER = Button(area={'cn': (579, 314, 700, 350), 'en': (579, 314, 700, 350), 'jp': (579, 314, 700, 350), 'tw': (579, 314, 700, 350)}, color={'cn': (239, 238, 237), 'en': (239, 238, 237), 'jp': (239, 238, 237), 'tw': (239, 238, 237)}, button={'cn': (534, 206, 747, 483), 'en': (534, 206, 747, 483), 'jp': (534, 206, 747, 483), 'tw': (534, 206, 747, 483)}, file={'cn': './assets/cn/island/ROLE_SELECT_ENTER.png', 'en': './assets/cn/island/ROLE_SELECT_ENTER.png', 'jp': './assets/cn/island/ROLE_SELECT_ENTER.png', 'tw': './assets/cn/island/ROLE_SELECT_ENTER.png'})
TEMPLATE_ISLAND_MANJUU = Template(file={'cn': './assets/cn/island/TEMPLATE_ISLAND_MANJUU.png', 'en': './assets/cn/island/TEMPLATE_ISLAND_MANJUU.png', 'jp': './assets/cn/island/TEMPLATE_ISLAND_MANJUU.png', 'tw': './assets/cn/island/TEMPLATE_ISLAND_MANJUU.png'})
TEMPLATE_ISLAND_SWITCH = Template(file={'cn': './assets/cn/island/TEMPLATE_ISLAND_SWITCH.png', 'en': './assets/cn/island/TEMPLATE_ISLAND_SWITCH.png', 'jp': './assets/cn/island/TEMPLATE_ISLAND_SWITCH.png', 'tw': './assets/cn/island/TEMPLATE_ISLAND_SWITCH.png'})
TEMPLATE_PROJECT_LOCKED = Template(file={'cn': './assets/cn/island/TEMPLATE_PROJECT_LOCKED.png', 'en': './assets/cn/island/TEMPLATE_PROJECT_LOCKED.png', 'jp': './assets/cn/island/TEMPLATE_PROJECT_LOCKED.png', 'tw': './assets/cn/island/TEMPLATE_PROJECT_LOCKED.png'})
TEMPLATE_SARATOGA = Template(file={'cn': './assets/cn/island/TEMPLATE_SARATOGA.png', 'en': './assets/cn/island/TEMPLATE_SARATOGA.png', 'jp': './assets/cn/island/TEMPLATE_SARATOGA.png', 'tw': './assets/cn/island/TEMPLATE_SARATOGA.png'})
TEMPLATE_SHIMAKAZE = Template(file={'cn': './assets/cn/island/TEMPLATE_SHIMAKAZE.png', 'en': './assets/cn/island/TEMPLATE_SHIMAKAZE.png', 'jp': './assets/cn/island/TEMPLATE_SHIMAKAZE.png', 'tw': './assets/cn/island/TEMPLATE_SHIMAKAZE.png'})
TEMPLATE_SLOT_LOCKED = Template(file={'cn': './assets/cn/island/TEMPLATE_SLOT_LOCKED.png', 'en': './assets/cn/island/TEMPLATE_SLOT_LOCKED.png', 'jp': './assets/cn/island/TEMPLATE_SLOT_LOCKED.png', 'tw': './assets/cn/island/TEMPLATE_SLOT_LOCKED.png'})
TEMPLATE_STRAWBERRIES = Template(file={'cn': './assets/cn/island/TEMPLATE_STRAWBERRIES.png', 'en': './assets/cn/island/TEMPLATE_STRAWBERRIES.png', 'jp': './assets/cn/island/TEMPLATE_STRAWBERRIES.png', 'tw': './assets/cn/island/TEMPLATE_STRAWBERRIES.png'})
TEMPLATE_TAKAO = Template(file={'cn': './assets/cn/island/TEMPLATE_TAKAO.png', 'en': './assets/cn/island/TEMPLATE_TAKAO.png', 'jp': './assets/cn/island/TEMPLATE_TAKAO.png', 'tw': './assets/cn/island/TEMPLATE_TAKAO.png'})
TEMPLATE_TASHKENT = Template(file={'cn': './assets/cn/island/TEMPLATE_TASHKENT.png', 'en': './assets/cn/island/TEMPLATE_TASHKENT.png', 'jp': './assets/cn/island/TEMPLATE_TASHKENT.png', 'tw': './assets/cn/island/TEMPLATE_TASHKENT.png'})
TEMPLATE_TB = Template(file={'cn': './assets/cn/island/TEMPLATE_TB.png', 'en': './assets/cn/island/TEMPLATE_TB.png', 'jp': './assets/cn/island/TEMPLATE_TB.png', 'tw': './assets/cn/island/TEMPLATE_TB.png'})
TEMPLATE_UNICORN = Template(file={'cn': './assets/cn/island/TEMPLATE_UNICORN.png', 'en': './assets/cn/island/TEMPLATE_UNICORN.png', 'jp': './assets/cn/island/TEMPLATE_UNICORN.png', 'tw': './assets/cn/island/TEMPLATE_UNICORN.png'})
TEMPLATE_WILLIAM_D_PORTER = Template(file={'cn': './assets/cn/island/TEMPLATE_WILLIAM_D_PORTER.png', 'en': './assets/cn/island/TEMPLATE_WILLIAM_D_PORTER.png', 'jp': './assets/cn/island/TEMPLATE_WILLIAM_D_PORTER.png', 'tw': './assets/cn/island/TEMPLATE_WILLIAM_D_PORTER.png'})
TEMPLATE_YAT_SEN = Template(file={'cn': './assets/cn/island/TEMPLATE_YAT_SEN.png', 'en': './assets/cn/island/TEMPLATE_YAT_SEN.png', 'jp': './assets/cn/island/TEMPLATE_YAT_SEN.png', 'tw': './assets/cn/island/TEMPLATE_YAT_SEN.png'})
TEMPLATE_YING_SWEI = Template(file={'cn': './assets/cn/island/TEMPLATE_YING_SWEI.png', 'en': './assets/cn/island/TEMPLATE_YING_SWEI.png', 'jp': './assets/cn/island/TEMPLATE_YING_SWEI.png', 'tw': './assets/cn/island/TEMPLATE_YING_SWEI.png'})
TRANSPORT_LOCKED = Button(area={'cn': (659, 380, 683, 412), 'en': (659, 380, 683, 412), 'jp': (659, 380, 683, 412), 'tw': (659, 380, 683, 412)}, color={'cn': (192, 192, 190), 'en': (192, 192, 190), 'jp': (192, 192, 190), 'tw': (192, 192, 190)}, button={'cn': (659, 380, 683, 412), 'en': (659, 380, 683, 412), 'jp': (659, 380, 683, 412), 'tw': (659, 380, 683, 412)}, file={'cn': './assets/cn/island/TRANSPORT_LOCKED.png', 'en': './assets/cn/island/TRANSPORT_LOCKED.png', 'jp': './assets/cn/island/TRANSPORT_LOCKED.png', 'tw': './assets/cn/island/TRANSPORT_LOCKED.png'})
TRANSPORT_RECEIVE = Button(area={'cn': (938, 206, 1065, 235), 'en': (938, 206, 1065, 235), 'jp': (938, 206, 1065, 235), 'tw': (938, 206, 1065, 235)}, color={'cn': (76, 195, 255), 'en': (76, 195, 255), 'jp': (76, 195, 255), 'tw': (76, 195, 255)}, button={'cn': (938, 206, 1065, 235), 'en': (938, 206, 1065, 235), 'jp': (938, 206, 1065, 235), 'tw': (938, 206, 1065, 235)}, file={'cn': './assets/cn/island/TRANSPORT_RECEIVE.png', 'en': './assets/cn/island/TRANSPORT_RECEIVE.png', 'jp': './assets/cn/island/TRANSPORT_RECEIVE.png', 'tw': './assets/cn/island/TRANSPORT_RECEIVE.png'})
TRANSPORT_REFRESH = Button(area={'cn': (1062, 207, 1090, 235), 'en': (1062, 207, 1090, 235), 'jp': (1062, 207, 1090, 235), 'tw': (1062, 207, 1090, 235)}, color={'cn': (187, 232, 255), 'en': (187, 232, 255), 'jp': (187, 232, 255), 'tw': (187, 232, 255)}, button={'cn': (1062, 207, 1090, 235), 'en': (1062, 207, 1090, 235), 'jp': (1062, 207, 1090, 235), 'tw': (1062, 207, 1090, 235)}, file={'cn': './assets/cn/island/TRANSPORT_REFRESH.png', 'en': './assets/cn/island/TRANSPORT_REFRESH.png', 'jp': './assets/cn/island/TRANSPORT_REFRESH.png', 'tw': './assets/cn/island/TRANSPORT_REFRESH.png'})
TRANSPORT_REFRESH_CHECK = Button(area={'cn': (813, 207, 841, 235), 'en': (813, 207, 841, 235), 'jp': (813, 207, 841, 235), 'tw': (813, 207, 841, 235)}, color={'cn': (119, 119, 120), 'en': (119, 119, 120), 'jp': (119, 119, 120), 'tw': (119, 119, 120)}, button={'cn': (813, 207, 841, 235), 'en': (813, 207, 841, 235), 'jp': (813, 207, 841, 235), 'tw': (813, 207, 841, 235)}, file={'cn': './assets/cn/island/TRANSPORT_REFRESH_CHECK.png', 'en': './assets/cn/island/TRANSPORT_REFRESH_CHECK.png', 'jp': './assets/cn/island/TRANSPORT_REFRESH_CHECK.png', 'tw': './assets/cn/island/TRANSPORT_REFRESH_CHECK.png'})
TRANSPORT_START = Button(area={'cn': (1142, 170, 1174, 281), 'en': (1142, 170, 1174, 281), 'jp': (1142, 170, 1174, 281), 'tw': (1142, 170, 1174, 281)}, color={'cn': (98, 202, 255), 'en': (98, 202, 255), 'jp': (98, 202, 255), 'tw': (98, 202, 255)}, button={'cn': (1142, 170, 1174, 281), 'en': (1142, 170, 1174, 281), 'jp': (1142, 170, 1174, 281), 'tw': (1142, 170, 1174, 281)}, file={'cn': './assets/cn/island/TRANSPORT_START.png', 'en': './assets/cn/island/TRANSPORT_START.png', 'jp': './assets/cn/island/TRANSPORT_START.png', 'tw': './assets/cn/island/TRANSPORT_START.png'})
TRANSPORT_STATUS_PENDING = Button(area={'cn': (459, 138, 522, 156), 'en': (459, 138, 522, 156), 'jp': (459, 138, 522, 156), 'tw': (459, 138, 522, 156)}, color={'cn': (120, 121, 121), 'en': (120, 121, 121), 'jp': (120, 121, 121), 'tw': (120, 121, 121)}, button={'cn': (459, 138, 522, 156), 'en': (459, 138, 522, 156), 'jp': (459, 138, 522, 156), 'tw': (459, 138, 522, 156)}, file={'cn': './assets/cn/island/TRANSPORT_STATUS_PENDING.png', 'en': './assets/cn/island/TRANSPORT_STATUS_PENDING.png', 'jp': './assets/cn/island/TRANSPORT_STATUS_PENDING.png', 'tw': './assets/cn/island/TRANSPORT_STATUS_PENDING.png'})
TRANSPORT_STATUS_RUNNING = Button(area={'cn': (459, 138, 522, 156), 'en': (459, 138, 522, 156), 'jp': (459, 138, 522, 156), 'tw': (459, 138, 522, 156)}, color={'cn': (137, 136, 133), 'en': (137, 136, 133), 'jp': (137, 136, 133), 'tw': (137, 136, 133)}, button={'cn': (459, 138, 522, 156), 'en': (459, 138, 522, 156), 'jp': (459, 138, 522, 156), 'tw': (459, 138, 522, 156)}, file={'cn': './assets/cn/island/TRANSPORT_STATUS_RUNNING.png', 'en': './assets/cn/island/TRANSPORT_STATUS_RUNNING.png', 'jp': './assets/cn/island/TRANSPORT_STATUS_RUNNING.png', 'tw': './assets/cn/island/TRANSPORT_STATUS_RUNNING.png'})

View File

@@ -1,70 +1,236 @@
import module.config.server as server
from module.base.timer import Timer
from module.base.utils import rgb2gray
from module.island.assets import *
from module.island.project_data import *
from module.island.project import IslandProjectRun
from module.island.transport import IslandTransportRun
from module.island.project import IslandProduct, IslandProject
from module.island.ui import IslandUI
from module.logger import logger
from module.ui.page import page_island_phone, page_main
from module.map.map_grids import SelectedGrids
from module.ui.page import page_dormmenu, page_island, page_island_phone, page_main
class Island(IslandProjectRun, IslandTransportRun):
@staticmethod
def island_config_to_names(config):
class Island(IslandUI):
project = SelectedGrids([])
total = SelectedGrids([])
def project_detect(self, image):
"""
Get all projects from an image.
Args:
config (list[bool]): list of config for island receive
image (np.ndarray):
Returns:
list[str]: a list of name for island receive
SelectedGrids:
"""
if any(config):
return [name for add, name in zip(config, list(name_to_slot.keys())) if add]
else:
return []
image_gray = rgb2gray(image)
projects = SelectedGrids([IslandProject(image, image_gray, button)
for button in TEMPLATE_ISLAND_SWITCH.match_multi(image_gray)])
return projects.select(valid=True)
def island_run(self, transport=True, project=True, names=None):
def project_receive(self, button, skip_first_screenshot=True):
"""
Execute island routine.
Receive and start a project.
Args:
transport (bool):
project (bool):
names (list[str]): a list of name for island receive
button (Button):
Returns:
bool: if received.
"""
future_finish = []
if transport:
if self.island_transport_enter():
future_finish.extend(self.island_transport_run())
self.island_ui_back()
if project:
if self.island_management_enter():
future_finish.extend(self.island_project_run(names=names))
self.island_ui_back()
self.interval_clear([ISLAND_MANAGEMENT_CHECK, PROJECT_COMPLETE,
GET_ITEMS_ISLAND, ROLE_SELECT_ENTER])
received = False
timeout = Timer(3, count=6).start()
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
logger.warning('Island management locked, please reach island level 18 '
'and unlock island management to use this task.')
self.config.Scheduler_Enable = False
return False
self.device.screenshot()
# task delay
if self.island_in_management(interval=5):
self.device.click(button)
timeout.reset()
continue
if self.handle_info_bar():
timeout.reset()
continue
if self.appear_then_click(PROJECT_COMPLETE, offset=(20, 20), interval=2):
received = True
self.interval_clear(GET_ITEMS_ISLAND)
self.interval_reset(ROLE_SELECT_ENTER)
timeout.reset()
continue
if self.appear_then_click(GET_ITEMS_ISLAND, offset=(20, 20), interval=2):
self.interval_clear(ROLE_SELECT_ENTER)
timeout.reset()
continue
if self.appear_then_click(ROLE_SELECT_ENTER, offset=(5, 5), interval=2):
received = True
self.interval_clear(GET_ITEMS_ISLAND)
timeout.reset()
continue
if self.appear(ROLE_SELECT_CONFIRM, offset=(20, 20)):
break
if timeout.reached():
break
if not received:
product = IslandProduct(self.device.image)
if product.valid:
self.total = self.total.add_by_eq(SelectedGrids([product]))
self.device.click(ISLAND_CLICK_SAFE_AREA)
break
else:
self.interval_clear(ROLE_SELECT_ENTER)
return received
def island_select_manjuu(self, button):
self.interval_clear([ROLE_SELECT_CONFIRM, ISLAND_AMOUNT_MAX])
for _ in self.loop():
if self.appear(ROLE_SELECT_CHECK, offset=(20, 20)):
break
if self.appear(ROLE_SELECT_CONFIRM, offset=(20, 20), interval=5):
self.device.click(button)
continue
self.ui_click(
click_button=ROLE_SELECT_CONFIRM,
check_button=ISLAND_AMOUNT_MAX,
offset=(20, 20),
retry_wait=3,
skip_first_screenshot=True
)
def island_select_role(self, skip_first_screenshot=True):
timeout = Timer(1.5, count=3).start()
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
if timeout.reached():
break
image = self.image_crop((0, 0, 910, 1280), copy=False)
sim, button = TEMPLATE_ISLAND_MANJUU.match_result(image)
if sim > 0.9:
self.island_select_manjuu(button)
break
else:
logger.info('No manjuu found')
continue
def island_select_product(self, skip_first_screenshot=True):
last = None
success = False
timeout = Timer(1.5, count=3).start()
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
if timeout.reached():
break
if not success:
if self.appear_then_click(ISLAND_AMOUNT_MAX, offset=(5, 5), interval=5):
timeout.reset()
continue
product = IslandProduct(self.device.image, new=True)
if product == last:
success = True
self.total = self.total.add_by_eq(SelectedGrids([product]))
timeout.reset()
continue
last = product
else:
if self.appear_then_click(PROJECT_START, offset=(20,20), interval=2):
timeout.reset()
self.interval_reset(ISLAND_MANAGEMENT_CHECK)
continue
if self.appear(PROJECT_STAR_NOT_SATISFIED, offset=(20,20)):
self.island_product_quit()
break
if self.info_bar_count():
self.island_product_quit()
break
if self.island_in_management():
break
def island_run(self, names, skip_first_screenshot=True):
"""
Execute island run to receive and start project.
Args:
names (bool):
skip_first_screenshot (bool):
"""
logger.hr('Island Run', level=1)
names = self.island_config_to_names(names)
success = False
timeout = Timer(3, count=3).start()
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
if timeout.reached():
break
projects = self.project_detect(self.device.image)
projects = projects.filter(lambda proj: proj.name in names and proj.name not in self.project.get('name'))
self.project = self.project.add_by_eq(projects)
for proj in projects:
for button in proj.slot_buttons.buttons:
if self.project_receive(button):
self.island_select_role()
self.island_select_product()
success = True
timeout.reset()
if success:
break
future_finish = sorted([f for f in self.total.get('finish_time') if f is not None])
logger.info(f'Project finish: {[str(f) for f in future_finish]}')
if len(future_finish):
self.config.task_delay(target=future_finish)
else:
logger.info('No island routine running')
logger.info('No island project running')
self.config.task_delay(success=False)
@staticmethod
def island_config_to_names(config):
if config:
return ['沉石矿山', '翠土林场']
else:
return []
def run(self):
if server.server in ['cn', 'en']:
transport = False
project_config = [self.config.__getattribute__(f'Island{i}_Receive')
for i in range(1, len(name_to_slot) + 1)]
project = any(project_config)
names = self.island_config_to_names(project_config)
if transport or project:
if server.server in ['cn']:
if self.config.Island_ReceiveMiningForaging:
self.ui_ensure(page_dormmenu)
self.ui_goto(page_island, get_ship=False)
self.device.sleep(0.5)
self.ui_ensure(page_island_phone)
self.island_run(transport=transport, project=project, names=names)
self.island_management_enter()
self.island_run(names=self.config.Island_ReceiveMiningForaging)
self.island_management_quit()
self.ui_goto(page_main, get_ship=False)
else:
logger.info('Nothing to receive, skip island running')

View File

@@ -1,61 +1,20 @@
from datetime import datetime, timedelta
import cv2
import re
import numpy as np
from scipy import signal
import module.config.server as server
from module.base.button import Button, ButtonGrid
from module.base.timer import Timer
from module.base.utils import color_similarity_2d, crop, random_rectangle_vector, rgb2gray
from module.config.deep import deep_get, deep_values
from module.base.utils import crop
from module.island.assets import *
from module.island.project_data import *
from module.island.ui import IslandUI
from module.logger import logger
from module.map.map_grids import SelectedGrids
from module.ocr.ocr import Duration, Ocr
from module.ui.switch import Switch
ROLE_SORTING = Switch('Role_sorting')
ROLE_SORTING.add_state('Ascending', check_button=ROLE_SORT_ASC, click_button=ROLE_SORTING_CLICK)
ROLE_SORTING.add_state('Descending', check_button=ROLE_SORT_DESC, click_button=ROLE_SORTING_CLICK)
class ProjectNameOcr(Ocr):
def after_process(self, result):
result = super().after_process(result)
if server.server == 'cn':
result = result.replace('', '')
result = re.sub(r'[^\u4e00-\u9fff]', '', result)
elif server.server == 'en':
result = re.sub(r"[\s'-]+", "", result).lower()
return result
from module.island.ui import OCR_PRODUCTION_TIME, OCR_PRODUCTION_TIME_REMAIN
from module.ocr.ocr import Ocr
class IslandProject:
# If success to parse project
valid: bool
# OCR result
name: str
# Project workplace id
id: int
# max slot that the workplace has
max_slot: int
# available slots that the workplace has
slot: int
# buttons of all available slots
slot_buttons: ButtonGrid
def __init__(self, image, image_gray, button):
"""
Args:
image:
image_gray:
button:
"""
self.image = image
self.image_gray = image_gray
self.button = button
@@ -77,32 +36,19 @@ class IslandProject:
return
# name
dx = {'cn': 326, 'en': 137}[server.server]
dy = {'cn': 0, 'en': 2}[server.server]
area = (self.x1 - 446, self.y1, self.x1 - dx, self.y2 + dy)
button = Button(area=area, color=(), button=area, name='PROJECT_NAME')
ocr = ProjectNameOcr(button, lang='cnocr')
area = (self.x1 - 446, self.y1, self.x1 - 326, self.y2)
button = Button(area=area, color=(), button=area, name='NAME')
ocr = Ocr(button, lang='cnocr')
self.name = ocr.ocr(self.image)
if not self.name:
self.valid = False
return
# id
keys = list(name_to_slot.keys())
if self.name in keys:
self.id = keys.index(self.name) + 1
else:
self.valid = False
return
# max slot
self.max_slot = name_to_slot.get(self.name, 2)
# available slot
area = (self.x1 - 383, self.y1 + 60, self.x1 - 39, self.y1 + 118)
image = crop(self.image_gray, area, copy=False)
locked = TEMPLATE_SLOT_LOCKED.match_multi(image)
self.slot = self.max_slot - len(locked)
self.slot = name_to_slot_cn.get(self.name, 4) - len(locked)
if not self.slot:
self.valid = False
return
@@ -111,45 +57,15 @@ class IslandProject:
self.slot_buttons = ButtonGrid(origin=(self.x1 - 383, self.y1 + 60), delta=(95, 0),
button_shape=(58, 58), grid_shape=(self.slot, 1), name='PROJECT_SLOT')
def __eq__(self, other):
"""
Args:
other (IslandProject):
Returns:
bool:
"""
if not isinstance(other, IslandProject):
return False
if not self.valid or not other.valid:
return False
if self.name != other.name:
return False
if self.id != other.id:
return False
return True
def __str__(self):
return self.name
class IslandProduct:
# Duration to run this product
duration: timedelta
# If success to parse product duration
valid: bool
def __init__(self, image, offset=None, new=False):
def __init__(self, image, new=False):
if new:
button = OCR_PRODUCTION_TIME
if offset:
button = OCR_PRODUCTION_TIME.move(offset)
ocr = Duration(button, lang='cnocr', name='OCR_PRODUCTION_TIME')
self.duration = ocr.ocr(image)
self.duration = OCR_PRODUCTION_TIME.ocr(image)
else:
ocr = Duration(OCR_PRODUCTION_TIME_REMAIN, name='OCR_PRODUCTION_TIME_REMAIN')
self.duration = ocr.ocr(image)
self.duration = OCR_PRODUCTION_TIME_REMAIN.ocr(image)
self.valid = True
if not self.duration.total_seconds():
@@ -167,7 +83,7 @@ class IslandProduct:
def __eq__(self, other):
"""
Args:
other (IslandProduct):
other (IslandProject):
Returns:
bool:
@@ -180,691 +96,4 @@ class IslandProduct:
if (other.duration < self.duration - threshold) or (other.duration > self.duration + threshold):
return False
return True
class ItemNameOcr(Ocr):
def after_process(self, result):
result = super().after_process(result)
if server.server == 'cn':
result = result.replace('', '').replace('', '').replace('', '').replace('', '')
result = re.sub(r'[^\u4e00-\u9fff]', '', result)
if '冰咖' in result:
result = '冰咖啡'
if '莓果香橙' in result:
result = '莓果香橙甜点组'
elif server.server == 'en':
result = re.sub(r"[\s'-]+", "", result)
result = result.lower()
return result
class ProductItem:
# OCR result
name: str
# If success to parse item name
valid: bool
# Button to click for the current item
button: Button
# All buttons on this page to click
item_buttons: ButtonGrid
def __init__(self, image, y, parent_project_id, get_button=True):
"""
Args:
image:
y (int):
get_button (bool): if parse other items in the current page
"""
self.image = image
self.y = y
self.valid = True
self.name = None
self.button = None
self.items = []
self.parent_project_id = parent_project_id
self.parse_item(get_button=get_button)
def parse_item(self, get_button):
if len(self.y) < 2:
self.valid = False
return
y1, y2 = self.y
# name
if get_button:
self.ocr_name(y1, y2)
# button
x1, x2 = ISLAND_PRODUCT_ITEMS.area[0] + 20, ISLAND_PRODUCT_ITEMS.area[2] - 20
area = (x1, y1, x2, y2)
self.button = Button(area=area, color=(), button=area, name='ISLAND_ITEM')
if get_button:
delta = 149
up, down = self.grid_num(delta, y1, y2)
shape_y = up + down + 1
origin_y = y1 - up * delta
self.item_buttons = ButtonGrid(origin=(x1, origin_y), delta=(0, delta),
button_shape=(x2 - x1, y2 - y1),
grid_shape=(1, shape_y), name='ITEMS')
self.items = [ProductItem(self.image, (item.area[1], item.area[3]), self.parent_project_id, get_button=False)
for item in self.item_buttons.buttons]
else:
self.ocr_name(y1, y2)
@staticmethod
def grid_num(delta, y1, y2):
"""
Args:
delta (int): grid delta
y1 (int):
y2 (int):
Returns:
tuple(int, int): grids above and below current grid
"""
up = 0
down = 0
while y1 - delta > ISLAND_PRODUCT_ITEMS.area[1]:
up += 1
y1 -= delta
while y2 + delta < ISLAND_PRODUCT_ITEMS.area[3]:
down += 1
y2 += delta
return up, down
def ocr_name(self, y1, y2):
"""
Args:
y1 (int):
y2 (int):
"""
area = (300, y1 + 14, 440, y2 - 84)
button = Button(area=area, color=(), button=area, name='ITEM_NAME')
ocr = ItemNameOcr(button, lang='cnocr', letter=(70, 70, 70))
self.name = ocr.ocr(self.image)
if server.server == 'cn' and (not self.name or self.name not in deep_values(items_data, depth=2)):
self.valid = False
elif server.server == 'en':
self.valid = False
if not self.name:
return
for value in list(items_data[self.parent_project_id].values()):
can_scroll = len(value) > 13
vmatcher = re.sub(r"[\s'-]+", "", value).lower()
if self.name == vmatcher:
logger.info(f'Product with valid name: {self.name} (exact matched {value})')
self.name = value
self.valid = True
break
elif self.name[1:-1] in vmatcher and (len(self.name) > 12 and can_scroll):
logger.info(f'Product with valid name: {self.name} (scroll matched {value})')
self.name = value
self.valid = True
break
if not self.valid:
logger.info(f'Product with invalid name: {self.name}')
def __eq__(self, other):
"""
Args:
other (ProductItem):
Returns:
bool:
"""
if not isinstance(other, ProductItem):
return False
if not self.valid or not other.valid:
return False
if self.name != other.name:
return False
return True
class IslandProjectRun(IslandUI):
project = SelectedGrids([])
total = SelectedGrids([])
character: str
def project_detect(self, image):
"""
Get all projects from an image.
Args:
image (np.ndarray):
Returns:
SelectedGrids:
"""
image_gray = rgb2gray(image)
projects = SelectedGrids([IslandProject(image, image_gray, button)
for button in TEMPLATE_PROJECT.match_multi(image_gray)])
return projects.select(valid=True)
def ensure_project(self, name, trial=7, skip_first_screenshot=True):
"""
Ensure the specific project is in the current page.
Args:
name (str|IslandProject): the project name to ensure
trial (int): retry times
skip_first_screenshot (bool):
"""
logger.hr('Project ensure')
if isinstance(name, IslandProject):
name = name.name
for _ in range(trial):
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
projects = self.project_detect(self.device.image)
if not projects:
continue
if name in projects.get('name'):
logger.info(f'Ensured project: {name}')
break
keys = list(name_to_slot.keys())
if name in keys:
project_id = keys.index(name) + 1
projects_id = projects.get('id')
if project_id > projects_id[0]:
self.drag_page((0, -500), ISLAND_PROJECT_SWIPE.area, 0.6)
else:
self.drag_page((0, 500), ISLAND_PROJECT_SWIPE.area, 0.6)
continue
else:
logger.warning(f'Wrong project name {name}, skip ensuring')
break
def drag_page(self, vector, box, sleep=0.5):
"""
Drag the management page.
Args:
vector (tuple):
box (tuple):
sleep (float):
"""
p1, p2 = random_rectangle_vector(vector, box=box, random_range=(0, -5, 0, 5))
self.device.drag(p1, p2, segments=2, shake=(0, 25), point_random=(0, 0, 0, 0), shake_random=(0, -5, 0, 5))
self.device.sleep(sleep)
def is_in_enter_page(self):
return self.image_color_count(ROLE_SELECT_TITLE_AREA, color=(57, 189, 255), threshold=221, count=8000)
def project_receive(self, button):
"""
Receive a project and enter role select page.
Args:
button (Button): project button to click
Returns:
bool: if success
"""
self.device.click_record_clear()
self.interval_clear([ISLAND_MANAGEMENT_CHECK, PROJECT_COMPLETE,
GET_ITEMS_ISLAND, ROLE_SELECT_ENTER])
success = False
click_timer = Timer(5, count=10).start()
for _ in self.loop():
# UI additional
if self.island_in_management(interval=5):
self.device.click(button)
self.device.sleep(0.1)
click_timer.reset()
continue
if self.appear_then_click(ISLAND_MANAGEMENT, offset=(20, 20), interval=2):
click_timer.reset()
continue
if self.handle_info_bar():
click_timer.reset()
continue
# Enter page
if self.is_in_enter_page() and \
self.appear_then_click(ROLE_SELECT_ENTER, threshold=10, interval=2):
success = True
self.interval_clear(GET_ITEMS_ISLAND)
click_timer.reset()
continue
if self.appear_then_click(PROJECT_COMPLETE, offset=(20, 20), interval=1):
success = True
self.interval_clear(GET_ITEMS_ISLAND)
self.interval_reset(ROLE_SELECT_ENTER)
click_timer.reset()
continue
if self.handle_get_items():
self.interval_clear(ROLE_SELECT_ENTER)
click_timer.reset()
continue
# handle island level up
if click_timer.reached():
self.device.click(GET_ITEMS_ISLAND)
self.device.sleep(0.3)
click_timer.reset()
continue
# End
if self.appear(ROLE_SELECT_CONFIRM, offset=(20, 20)):
break
if not success:
product = IslandProduct(self.device.image)
if product.valid:
self.total = self.total.add_by_eq(SelectedGrids([product]))
self.device.click(ISLAND_CLICK_SAFE_AREA)
break
else:
self.interval_clear(ROLE_SELECT_ENTER)
return success
def _project_character_select(self, click_button, check_button):
"""
Select a specific character for an island project.
Args:
click_button (Button): character button to click
check_button (Button):
"""
for _ in self.loop():
if self.appear(check_button, offset=(20, 20)):
break
if self.appear(ROLE_SELECT_CONFIRM, offset=(20, 20), interval=2):
self.device.click(click_button)
continue
self.interval_clear(ROLE_SELECT_CONFIRM)
for _ in self.loop():
# End
if self.appear(ISLAND_AMOUNT_MAX, offset=(20, 20)):
return True
# game bug that page returns to ISLAND_MANAGEMENT_CHECK after clicking ROLE_SELECT_CONFIRM
if self.island_in_management():
return False
if self.appear_then_click(ROLE_SELECT_CONFIRM, offset=(20, 20), interval=2):
self.interval_clear(ISLAND_MANAGEMENT_CHECK)
continue
def match_and_select_character(self, character, image):
"""
Match character template and select if found.
Args:
character (str): character name to select
image: cropped image
Returns:
bool: True if matched and selected, False otherwise
"""
sim, click_button = self.get_character_template(character).match_result(image)
if sim > 0.9:
check_button = self.get_character_check_button(character)
return self._project_character_select(click_button, check_button)
return False
def project_character_select(self, character='manjuu', reset_swipe=False):
"""
Select a role to produce.
Args:
character (str): character name to select
reset_swipe (bool): if drag page to top before selecting
Returns:
bool: if selected
"""
logger.info(f'Island select role: {character}')
if reset_swipe:
logger.info('Resetting role page to top')
for _ in range(2):
self.drag_page((0, 350), ISLAND_PROJECT_CHARACTER.area, 0.6)
self.device.screenshot()
image = self.image_crop((0, 0, 1280, 720), copy=False)
if self.match_and_select_character(character, image):
return True
timeout = Timer(5, count=3).start()
max_swipe = 2
swipe_count = 0
for _ in self.loop():
if timeout.reached():
return False
image = self.image_crop((0, 0, 1280, 720), copy=False)
if self.match_and_select_character(character, image):
return True
if swipe_count < max_swipe:
logger.info(f'Character {character} not found, dragging down to find')
self.drag_page((0, -300), ISLAND_PROJECT_CHARACTER.area, 0.6)
swipe_count += 1
timeout.reset()
else:
logger.warning(f'Character {character} not found after {max_swipe} swipes')
return False
def retry_character_select(self, button, secondary_character=None):
"""
Retry selecting a character when primary is not available.
Directly try secondary or manjuu in the current role select page.
Args:
button (Button): project button to click to re-enter (reserved for re-entering from main page)
secondary_character (str): secondary character name to select
Returns:
tuple(bool, str): (if selected, character selected)
"""
# Try secondary character if provided, reset swipe to top before searching
if secondary_character and secondary_character != 'manjuu':
logger.info(f'Trying secondary character: {secondary_character}')
if self.project_character_select(secondary_character, reset_swipe=True):
return True, secondary_character
# Fallback to manjuu, reset swipe to top before searching
logger.info('Falling back to manjuu')
if self.project_character_select('manjuu', reset_swipe=True):
return True, 'manjuu'
return False, None
@staticmethod
def get_character_template(character):
return globals().get(f'TEMPLATE_{character.upper()}', TEMPLATE_MANJUU)
@staticmethod
def get_character_check_button(character):
return globals().get(f'PROJECT_{character.upper()}_CHECK', PRODUCT_MANJUU_CHECK)
def get_current_product(self, project_id):
"""
Get currently selected product on self.device.image.
Returns:
ProductItem: currently selected item
"""
image = self.image_crop(ISLAND_PRODUCT_ITEMS, copy=False)
y_top = ISLAND_PRODUCT_ITEMS.area[1]
line = cv2.reduce(image, 1, cv2.REDUCE_AVG)
# blue line
line = color_similarity_2d(line, color=(57, 189, 255))[:, 0]
parameters = {
'height': 200,
'distance': 50,
}
peaks, _ = signal.find_peaks(line, **parameters)
peaks = np.array(peaks) + y_top
return ProductItem(self.device.image, peaks, project_id)
def product_select(self, option, project_id, trial=2):
"""
Select a product in items list.
Args:
option (str): option to select
trail (int): retry times
Returns:
bool: if selected
"""
logger.hr('Island Select Product')
last_item = None
bottom_item = None
retry = trial
click_interval = Timer(1)
for _ in self.loop():
current = self.get_current_product(project_id)
if trial > 0 and not len(current.items):
trial -= 1
continue
if trial <= 0:
self.ui_ensure_management_page()
return False
if option == current.name:
logger.info(f'Selected item {option}')
return True
drag = True
for item in current.items:
if option == item.name:
if click_interval.reached():
self.device.click(item.button)
self.device.sleep(0.2)
click_interval.reset()
drag = False
if bottom_item == current.items[-1]:
if retry > 0:
retry -= 1
continue
logger.info(f'Reach the bottom of items, did not match item {option}')
self.ui_ensure_management_page()
return False
# clear record if current product is different during 2 drags
if last_item is not None and last_item != current:
self.device.click_record.pop()
self.device.click_record.pop()
if drag:
last_item = current
bottom_item = current.items[-1]
self.device.click(bottom_item.button)
self.drag_page((0, -300), ISLAND_PRODUCT_ITEMS.area, 0.5)
def product_select_confirm(self):
"""
Start the product after product selected.
Returns:
bool: if success
"""
logger.info('Island product confirm')
last = None
success = False
timeout = Timer(1.5, count=3).start()
for _ in self.loop():
if timeout.reached():
break
if not success:
if self.image_color_count(PROJECT_START, color=(151, 155, 155), threshold=221, count=200):
if self.appear(PRODUCT_MANJUU_CHECK, offset=(20, 20)):
self.ui_ensure_management_page()
return True
else:
logger.warning('Product requirement is not satisfied, quitting and retrying')
self.ui_ensure_management_page()
return False
if self.appear_then_click(ISLAND_AMOUNT_MAX, offset=(5, 5), interval=2):
timeout.reset()
continue
button = PROJECT_START
# the offset of OCR_PRODUCTION_TIME is determined by PROJECT_START
self.appear(button, offset=(100, 0))
offset = tuple(np.subtract(button.button, button._button)[:2])
product = IslandProduct(self.device.image, new=True, offset=offset)
if product == last:
success = True
self.total = self.total.add_by_eq(SelectedGrids([product]))
timeout.reset()
continue
last = product
else:
if self.appear_then_click(PROJECT_START, offset=(100, 0), interval=2):
timeout.reset()
self.interval_clear(ISLAND_MANAGEMENT_CHECK)
continue
if self.info_bar_count():
self.ui_ensure_management_page()
return True
if self.island_in_management():
return True
def project_receive_and_start(self, proj, button, character, secondary_character, option, project_id, ensure=True):
"""
Receive and start a project is in the current page.
Args:
proj (IslandProject): the project to ensure
button (Button): project button to click
character (str): character to select
secondary_character (str): secondary character to select
option (str): option to select
ensure (bool): whether to call ensure_project() after project start
"""
if not self.project_receive(button):
return True
selected_character = character
if not self.project_character_select(character):
# Primary character failed, directly try secondary or manjuu in current page
success, selected_character = self.retry_character_select(button, secondary_character)
if not success:
logger.warning('Island select role failed completely, retrying project')
return False
self.character = selected_character
if not self.product_select(option, project_id):
return True
if not self.product_select_confirm():
# Confirm failed (gray button), game has returned to main page
# Retry with secondary or manjuu by re-entering role select page
logger.warning('Product confirm failed, retrying character selection')
if not self.project_receive(button):
return True
success, selected_character = self.retry_character_select(button, secondary_character)
if not success:
self.character = 'manjuu'
self.ensure_project(proj)
return False
self.character = selected_character
# Re-select product and confirm
if not self.product_select(option, project_id):
return True
if not self.product_select_confirm():
self.character = 'manjuu'
self.ensure_project(proj)
return False
self.ui_ensure_management_page()
if ensure:
self.ensure_project(proj)
return True
def island_project_character(self, project: IslandProject, secondary=False):
"""
Args:
project (IslandProject):
secondary (bool): If True, get secondary character config
Returns:
list[str]: a list of options of characters
"""
proj_id = project.id
prefix = 'Secondary' if secondary else ''
return [self.config.__getattribute__(f'Island{proj_id}_{prefix}Character{proj_slot}')
for proj_slot in range(1, project.slot + 1)]
def island_project_option(self, project: IslandProject):
"""
Args:
project (IslandProject):
Returns:
list[str]: a list of options of production items
"""
slot_option = []
proj_id = project.id
for proj_slot in range(1, project.slot + 1):
option = self.config.__getattribute__(f'Island{proj_id}_Option{proj_slot}')
if option == 0:
slot_option.append(None)
continue
slot_option.append(deep_get(items_data, [proj_id, option]))
return slot_option
def island_project_run(self, names, trial=2):
"""
Execute island run to receive and start project.
Args:
names (list[str]): a list of name for island receive
trial (int): retry times
Returns:
list[timedelta]: future finish timedelta
"""
logger.hr('Island Project Run', level=1)
self.ensure_project(names[0])
end = False
timeout = Timer(3, count=3).start()
for _ in self.loop():
if timeout.reached():
break
projects = self.project_detect(self.device.image)
if trial > 0 and not projects:
trial -= 1
continue
projects: SelectedGrids = projects.filter(
lambda proj: proj.name in names and proj.name not in self.project.get('name'))
self.project = self.project.add_by_eq(projects)
for proj in projects:
logger.hr('Island Project')
logger.attr('Project_name', proj)
if proj.name == names[-1]:
end = True
character_config = self.island_project_character(proj)
secondary_character_config = self.island_project_character(proj, secondary=True)
option_config = self.island_project_option(proj)
option_num = len(option_config)
for button, character, secondary_character, option, index in zip(
proj.slot_buttons.buttons, character_config, secondary_character_config, option_config, range(option_num)):
if option is None:
continue
self.character = character
# retry 3 times because of a game bug
for _ in range(3):
ensure = not end or index != option_num - 1
if self.project_receive_and_start(proj, button, self.character, secondary_character, option, proj.id, ensure):
break
timeout.reset()
if end:
break
self.drag_page((0, -500), ISLAND_PROJECT_SWIPE.area, 0.6)
# task delay
future_finish = sorted([f for f in self.total.get('finish_time') if f is not None])
logger.info(f'Project finish: {[str(f) for f in future_finish]}')
if not len(future_finish):
logger.info('No island project running')
return future_finish
return True

View File

@@ -1,202 +1,5 @@
import module.config.server as server
__name_to_slot_cn = {
'丰壤农田': 4, '悠然牧场': 4, '啾渔场': 3, '沉石矿山': 4, '翠土林场': 4, '坠香果园': 4,
'青芽苗圃': 2, '有鱼餐馆': 2, '白熊饮品': 2, '啾啾简餐': 2, '乌鱼烤肉': 2, '木料加工设备': 2,
'工业生产设备': 2, '电子加工设备': 2, '手工制作设备': 2, '啾咖啡': 2,
name_to_slot_cn = {
'丰壤农田': 4, '悠然牧场': 4, '沉石矿山': 4, '翠土林场': 4, '坠香果园': 4, '青芽苗圃': 2,
'有鱼餐馆': 2, '白熊饮品': 2, '啾啾简餐': 2, '乌鱼烤肉': 2, '木料加工设备': 2, '工业生产设备': 2,
'电子加工设备': 2, '手工制作设备': 2, '咖啡': 2
}
__items_data_cn = {
1: {
1: '小麦', 2: '玉米', 3: '牧草', 4: '咖啡豆', 5: '大米', 6: '白菜',
7: '土豆', 8: '大豆',
},
2: {
1: '鸡蛋', 2: '鲜肉', 3: '牛奶', 4: '羊毛',
},
3: {
1: '贝类', 2: '鲶鱼', 3: '鲤鱼', 4: '鲫鱼', 5: '小河虾', 6: '小龙虾',
7: '鲈鱼', 8: '螃蟹', 9: '鱿鱼', 10: '马鲛鱼', 11: '金枪鱼', 12: '三文鱼',
13: '红鲷鱼', 14: '黑鲷鱼', 15: '黄鳍金枪鱼', 16: '海参',
},
4: {
1: '煤炭', 2: '铜矿', 3: '铝矿', 4: '铁矿', 5: '硫矿', 6: '银矿',
},
5: {
1: '自然之木', 2: '实用之木', 3: '精选之木', 4: '典雅之木',
},
# autumn
# 6: {
# 1: '秋月梨', 2: '柿子', 3: '苹果', 4: '柑橘', 5: '香蕉', 6: '芒果',
# 7: '柠檬', 8: '牛油果', 9: '橡胶',
# },
# spring & summer
6: {
1: '苹果', 2: '柑橘', 3: '香蕉', 4: '芒果', 5: '柠檬', 6: '牛油果',
7: '橡胶',
},
# autumn
# 7: {
# 1: '亚麻', 2: '草莓', 3: '棉花', 4: '茶叶', 5: '薰衣草', 6: '胡萝卜',
# 7: '洋葱',
# },
# spring
# 7: {
# 1: '芦笋', 2: '凤梨', 3: '亚麻', 4: '草莓', 5: '棉花', 6: '茶叶',
# 7: '薰衣草', 8: '胡萝卜', 9: '洋葱',
# },
# summer
7: {
1: '番茄', 2: '黄瓜', 3: '亚麻', 4: '草莓', 5: '棉花', 6: '茶叶',
7: '薰衣草', 8: '胡萝卜', 9: '洋葱',
},
# autumn
# 8: {
# 1: '柿子饼', 2: '松茸鸡汤', 3: '豆腐', 4: '肉末烧豆腐', 5: '蛋包饭',
# 6: '白菜豆腐汤', 7: '蔬菜沙拉', 8: '炸鱼薯条', 9: '洋葱蒸鱼', 10: '佛跳墙',
# 11: '经典豆腐套餐', 12: '绵玉定食',
# },
# spring
# 8: {
# 1: '凉拌双笋', 2: '芦笋炒虾仁', 3: '豆腐', 4: '肉末烧豆腐', 5: '蛋包饭',
# 6: '白菜豆腐汤', 7: '蔬菜沙拉', 8: '炸鱼薯条', 9: '洋葱蒸鱼', 10: '佛跳墙',
# 11: '经典豆腐套餐', 12: '绵玉定食',
# },
# summer
8: {
1: '苋菜饭团', 2: '番茄炒蛋', 3: '豆腐', 4: '肉末烧豆腐', 5: '蛋包饭',
6: '白菜豆腐汤', 7: '蔬菜沙拉', 8: '炸鱼薯条', 9: '洋葱蒸鱼', 10: '佛跳墙',
11: '经典豆腐套餐', 12: '绵玉定食',
},
# autumn
# 9: {
# 1: '胡萝卜秋梨汁', 2: '菊花茶', 3: '苹果汁', 4: '香蕉芒果汁',
# 5: '蜂蜜柠檬水', 6: '草莓蜜沁', 7: '薰衣草茶', 8: '草莓蜂蜜冰沙',
# 9: '花香果韵', 10: '缤纷果乐园', 11: '阳光蜜水',
# },
# spring
# 9: {
# 1: '鲜榨菠萝汁', 2: '迎春花茶', 3: '苹果汁', 4: '香蕉芒果汁',
# 5: '蜂蜜柠檬水', 6: '草莓蜜沁', 7: '薰衣草茶', 8: '草莓蜂蜜冰沙',
# 9: '花香果韵', 10: '缤纷果乐园', 11: '阳光蜜水',
# },
# summer
9: {
1: '黄瓜汁', 2: '西瓜汁', 3: '苹果汁', 4: '香蕉芒果汁',
5: '蜂蜜柠檬水', 6: '草莓蜜沁', 7: '薰衣草茶', 8: '草莓蜂蜜冰沙',
9: '花香果韵', 10: '缤纷果乐园', 11: '阳光蜜水',
},
10: {
1: '玉米杯', 2: '苹果派', 3: '香橙派', 4: '芒果糯米饭', 5: '香蕉可丽饼',
6: '草莓夏洛特', 7: '海鲜饭', 8: '香甜组合', 9: '果园二重奏',
10: '莓果香橙甜点组',
},
11: {
1: '炭烤肉串', 2: '禽肉土豆拼盘', 3: '爆炒禽肉', 4: '胡萝卜厚蛋烧',
5: '汉堡肉饭', 6: '柠檬虾', 7: '爆炒小龙虾', 8: '烤肉狂欢', 9: '能量双拼套餐',
},
12: {
1: '纸张', 2: '记事本', 3: '桌椅', 4: '精选木桶', 5: '文件柜', 6: '装饰画',
},
13: {
1: '炭笔', 2: '电缆', 3: '铁钉', 4: '硫酸', 5: '火药', 6: '刀叉餐具',
},
14: {
1: '墨盒', 2: '钟表', 3: '蓄电池', 4: '净水滤芯',
},
# autumn
# 15: {
# 1: '秋季花束', 2: '花生油', 3: '布料', 4: '皮革', 5: '绳索', 6: '手套',
# 7: '香囊', 8: '鞋靴', 9: '绷带',
# },
# spring
# 15: {
# 1: '袋装荠菜干', 2: '春季花束', 3: '布料', 4: '皮革', 5: '绳索', 6: '手套',
# 7: '香囊', 8: '鞋靴', 9: '绷带',
# },
# summer
15: {
1: '茉莉精油', 2: '夏季花束', 3: '布料', 4: '皮革', 5: '绳索', 6: '手套',
7: '香囊', 8: '鞋靴', 9: '绷带',
},
16: {
1: '欧姆蛋', 2: '冰咖啡', 3: '芝士', 4: '拿铁', 5: '柑橘咖啡',
6: '草莓奶绿', 7: '晨光活力组合', 8: '醒神套餐', 9: '果香双杯乐',
},
}
__name_to_slot_en = {
'faircropfields': 4, 'laidbackranch': 4, 'rockheapmine': 4, 'verdantwoods': 4, 'sweetscentorchard': 4, 'newsproutnursery': 2,
'goldenkoirestaurant': 2, 'polarbearteahouse': 2, 'manjuueatery': 2, "finnfeathergrill": 2, 'lumberprocessing': 2, 'machineryproduction': 2,
'electronicproduction': 2, 'arts&craftsproduction': 2, 'cafemanjuu': 2
}
__items_data_en = {
1: {
1: 'Wheat', 2: 'Corn', 3: 'Grass', 4: 'CoffeeBeans', 5: 'Rice', 6: 'Napa Cabbage',
7: 'Potato', 8: 'Soy Beans',
},
2: {
1: 'Eggs', 2: 'Fresh Meat', 3: 'Milk', 4: 'Wool',
},
3: {
1: 'Coal', 2: 'Copper Ore', 3: 'Bauxite Ore', 4: 'Iron Ore', 5: 'Sulfur', 6: 'Silver Ore',
},
4: {
1: 'Raw Timber', 2: 'Workable Wood', 3: 'remium Wood', 4: 'Elegant Wood', # remium Wood because it overruns on the left
},
5: {
1: 'Yoizuki Pear', 2: 'Kaki Persimmon', 3: 'Apple', 4: 'Citrus Fruit', 5: 'Banana', 6: 'Mango',
7: 'Lemon', 8: 'Avocado', 9: 'Rubber',
},
6: {
1: 'Flax', 2: 'Strawberries', 3: 'Cotton', 4: 'Tea Leaves', 5: 'Lavender', 6: 'Carrot',
7: 'Onion',
},
7: {
1: 'Dried Persimmon', 2: 'Matsutake and Chicken Soup', 3: 'Tofu', 4: 'Tofu with Minced Meat', 5: 'Omurice',
6: 'Cabbage and Tofu Soup', 7: 'Vegetable Salad', 8: 'Classic Tofu Combo', 9: 'Hearty Meal',
},
8: {
1: 'Carrot and Pear Juice', 2: 'Chrysanthemum Tea', 3: 'Apple Juice', 4: 'Banana and Mango Juice',
5: 'Honey and Lemon Water', 6: 'Strawberry Lemon Drink', 7: 'Lavender Tea', 8: 'Strawberry Honey Frappe',
9: 'Floral and Fruity', 10: 'Colorful Fruit Paradise', 11: 'Sunny Honey',
},
9: {
1: 'Corn Cup', 2: 'Apple Pie', 3: 'Orange Pie', 4: 'Sticky Rice with Mango', 5: 'Banana Crepe',
6: 'Strawberry Charlotte', 7: 'Succulently Sweet', 8: 'Orchard Duo', 9: 'Berry and Orange Dessert',
},
10: {
1: 'Coal-Roasted Skewer', 2: "Chicken and Potato Hors d'Oeuvre", 3: 'Stir-Fried Chicken', 4: 'Rolled Carrot Omelette',
5: 'Steak Bowl', 6: 'The Carne-val', 7: 'Double Energy Combo',
},
11: {
1: 'Paper', 2: 'Notebook', 3: 'Chair and Desk', 4: 'Choice Wooden Barrel', 5: 'Filing Cabinet',
},
12: {
1: 'Charcoal Brush', 2: 'Cable', 3: 'Nails', 4: 'Chemicals', 5: 'Gunpowder', 6: 'Utensils',
},
13: {
1: 'Ink Cartridge', 2: 'Clock', 3: 'Battery', 4: 'Water Filter',
},
14: {
1: 'Autumn Bouquet', 2: 'Peanut Oil', 3: 'Cloth', 4: 'Leather', 5: 'Rope', 6: 'Gloves',
7: 'Aroma Sachet', 8: 'Shoes', 9: 'Wound Dressings',
},
15: {
1: 'Omelette', 2: 'Iced Coffee', 3: 'Cheese', 4: 'Latte', 5: 'Citrus Coffee',
6: 'Strawberry Milkshake', 7: 'Morning Light Energy Combo', 8: 'The Wake-Up Call', 9: 'Fruity & Fruitier',
},
}
if server.server == 'cn':
name_to_slot = __name_to_slot_cn
items_data = __items_data_cn
elif server.server == 'en':
name_to_slot = __name_to_slot_en
items_data = __items_data_en
else:
name_to_slot = __name_to_slot_cn
items_data = __items_data_cn

View File

@@ -1,12 +1,24 @@
from module.base.timer import Timer
from module.handler.assets import MAINTENANCE_ANNOUNCE, USE_DATA_KEY_NOTIFIED
from datetime import timedelta
from module.island.assets import *
from module.logger import logger
from module.ocr.ocr import Duration
from module.ui.assets import SHOP_BACK_ARROW
from module.ui.page import page_island_phone
from module.ui.ui import UI
class IslandProductionTime(Duration):
def after_process(self, result):
result = super().after_process(result)
if result == '0:40:00':
result = '01:40:00'
return result
OCR_PRODUCTION_TIME = IslandProductionTime(OCR_PRODUCTION_TIME, lang='azur_lane_jp', name='OCR_PRODUCTION_TIME')
OCR_PRODUCTION_TIME_REMAIN = Duration(OCR_PRODUCTION_TIME_REMAIN, name='OCR_PRODUCTION_TIME_REMAIN')
class IslandUI(UI):
def island_in_management(self, interval=0):
"""
@@ -18,41 +30,13 @@ class IslandUI(UI):
"""
return self.appear(ISLAND_MANAGEMENT_CHECK, offset=(20, 20), interval=interval)
def island_in_transport(self, interval=0):
"""
Args:
interval (int):
Returns:
bool: if in page ISLAND_TRANSPORT_CHECK
"""
return self.match_template_color(ISLAND_TRANSPORT_CHECK, offset=(20, 20), interval=interval)
def island_in_friend(self, interval=0):
"""
Args:
interval (int):
Returns:
bool: if in page ISLAND_FRIEND_CHECK
"""
return self.appear(ISLAND_FRIEND_CHECK, offset=(20, 20), interval=interval)
def island_management_enter(self):
"""
Enter island management page.
Returns:
bool: if success
Pages:
in: page_island_phone
out: ISLAND_MANAGEMENT_CHECK
"""
logger.info('Island management enter')
self.interval_clear(ISLAND_MANAGEMENT_CHECK)
if self.appear(ISLAND_MANAGEMENT_LOCKED, offset=(20, 20)):
return False
self.ui_click(
click_button=ISLAND_MANAGEMENT,
check_button=self.island_in_management,
@@ -60,143 +44,30 @@ class IslandUI(UI):
retry_wait=2,
skip_first_screenshot=True
)
return True
def island_transport_enter(self):
"""
Enter island management page.
Returns:
bool: if success
Pages:
in: page_island_phone
out: ISLAND_MANAGEMENT_CHECK
"""
logger.info('Island transport enter')
self.ui_click(
click_button=ISLAND_TRANSPORT,
check_button=self.island_in_transport,
offset=(20, 20),
retry_wait=2,
skip_first_screenshot=True
)
return True
def island_friend_enter(self):
"""
Enter island friend page.
Returns:
bool: if success
Pages:
in: page_island_phone
out: ISLAND_FRIEND_CHECK
"""
logger.info('Island friend enter')
self.ui_click(
click_button=ISLAND_FRIEND,
check_button=self.island_in_friend,
offset=(20, 20),
retry_wait=2,
skip_first_screenshot=True
)
return True
def island_ui_back(self):
def island_management_quit(self):
"""
Pages:
in: any page with SHOP_BACK_ARROW
in: ISLAND_MANAGEMENT_CHECK
out: page_island_phone
"""
logger.info('Island UI back')
self.ui_click(
click_button=SHOP_BACK_ARROW,
check_button=[page_island_phone.check_button, ISLAND_FRIEND_LEAVE],
check_button=page_island_phone.check_button,
offset=(20, 20),
retry_wait=2,
skip_first_screenshot=True
)
def ui_ensure_management_page(self):
def island_product_quit(self):
"""
Pages:
in: page_island_phone or product page
out: ISLAND_MANAGEMENT_CHECK
Execute quit product page
"""
logger.info('UI ensure management page')
self.interval_clear(ISLAND_MANAGEMENT_CHECK)
confirm_timer = Timer(1, count=2).start()
for _ in self.loop():
if self.island_in_management():
if confirm_timer.reached():
break
continue
else:
confirm_timer.reset()
if self.appear_then_click(SHOP_BACK_ARROW, offset=(20, 20), interval=2):
continue
if self.appear_then_click(ISLAND_MANAGEMENT, offset=(20, 20), interval=2):
continue
def ui_ensure_friend_page(self):
"""
Pages:
in: Any
out: ISLAND_FRIEND_CHECK
"""
logger.info('UI ensure friend page')
if not self.island_in_friend():
self.ui_ensure(page_island_phone)
self.island_friend_enter()
def handle_get_items(self):
if self.appear_then_click(GET_ITEMS_ISLAND, offset=(20, 20), interval=2):
return True
return False
def ui_additional(self, get_ship=True):
# notify in page_dormmenu
if self.appear(MAINTENANCE_ANNOUNCE, offset=(100, 50)):
for _ in self.loop():
enabled = self.image_color_count(
USE_DATA_KEY_NOTIFIED, color=(140, 207, 66), threshold=180, count=10)
if enabled:
break
if self.appear(MAINTENANCE_ANNOUNCE, offset=(100, 50), interval=5):
self.device.click(USE_DATA_KEY_NOTIFIED)
continue
self.interval_clear(MAINTENANCE_ANNOUNCE)
self.appear_then_click(MAINTENANCE_ANNOUNCE, offset=(100, 50), interval=2)
return True
# info in page_island
if self.appear_then_click(ISLAND_INFO_EXIT, offset=(30, 30), interval=3):
return True
return super().ui_additional(get_ship=False)
def move_up(self, hold_time=0):
p1 = (217, 507)
p2 = (217, 507 - 36)
self.device.swipe(p1, p2, hold_time=hold_time)
def move_down(self, hold_time=0):
p1 = (217, 507)
p2 = (217, 507 + 36)
self.device.swipe(p1, p2, hold_time=hold_time)
def move_left(self, hold_time=0):
p1 = (217, 507)
p2 = (217 - 36, 507)
self.device.swipe(p1, p2, hold_time=hold_time)
def move_right(self, hold_time=0):
p1 = (217, 507)
p2 = (217 + 36, 507)
self.device.swipe(p1, p2, hold_time=hold_time)
self.ui_click(
click_button=SHOP_BACK_ARROW,
check_button=self.island_in_management,
offset=(20, 20),
retry_wait=2,
skip_first_screenshot=True
)