Add: [Tmp] Island Project
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 5.1 KiB |
BIN
assets/cn/island/PROJECT_STAR_NOT_SATISFIED.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
assets/cn/island/ROLE_SELECT_CHECK.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 7.8 KiB |
BIN
assets/cn/island/TEMPLATE_ISLAND_MANJUU.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
assets/cn/island/TEMPLATE_ISLAND_SWITCH.png
Normal file
|
After Width: | Height: | Size: 304 B |
|
Before Width: | Height: | Size: 360 B After Width: | Height: | Size: 357 B |
|
Before Width: | Height: | Size: 274 B After Width: | Height: | Size: 283 B |
@@ -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": {}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ====================
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -28,6 +28,7 @@ class ManualConfig:
|
||||
> RaidDaily > CoalitionSp > WarArchives > MaritimeEscort
|
||||
> Event > Event2 > Raid > Hospital > HospitalEvent > Coalition > Main > Main2 > Main3
|
||||
> OpsiMeowfficerFarming
|
||||
> Island
|
||||
> GemsFarming
|
||||
> OpsiHazard1Leveling
|
||||
"""
|
||||
|
||||
@@ -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'})
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||