1 Commits
Author SHA1 Message Date
YoursFunny 7c33bd42c6 feat(cafe): add invitation 2023-11-27 21:04:52 +08:00
109 changed files with 371 additions and 861 deletions
+1 -1
View File
@@ -12,7 +12,7 @@
The script is still under active development. The following features have been implemented:
- [x] **Cafe** Claim rewards / Interact / Invitation / Second floor
- [x] **Cafe** Claim rewards / Interact / Second floor
- [x] **Club** Claim AP
- [x] **Mailbox** Claim rewards
- [x] **Bounty** Auto sweep
+1 -1
View File
@@ -12,7 +12,7 @@
当前脚本还在活跃开发中,已经实现的功能有:
- [x] **咖啡厅** 领取奖励 / 互动 / 邀请 / 第二咖啡厅
- [x] **咖啡厅** 领取奖励 / 互动 / 第二咖啡厅
- [x] **公会** 领取体力
- [x] **邮箱** 领取奖励
- [x] **悬赏通缉** 自动扫荡
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

+7 -16
View File
@@ -48,10 +48,9 @@
},
"Invitation": {
"Enable": true,
"WaitingHour": 0,
"Choice": "list_top",
"Name": null,
"Substitute": false
"Substitute": true
}
},
"Circle": {
@@ -81,24 +80,16 @@
"OnError": "skip"
},
"Highway": {
"Stage": 0,
"Stage": 1,
"Count": 2
},
"DesertRailroad": {
"Stage": 0,
"Stage": 1,
"Count": 2
},
"Schoolhouse": {
"Stage": 0,
"Stage": 1,
"Count": 2
},
"Road": {
"Stage": 0,
"Count": 0
},
"Mansion": {
"Stage": 0,
"Count": 0
}
},
"Scrimmage": {
@@ -112,15 +103,15 @@
"OnError": "skip"
},
"Trinity": {
"Stage": 0,
"Stage": 1,
"Count": 2
},
"Gehenna": {
"Stage": 0,
"Stage": 1,
"Count": 2
},
"Millennium": {
"Stage": 0,
"Stage": 1,
"Count": 2
}
},
+10 -75
View File
@@ -211,16 +211,6 @@
"type": "checkbox",
"value": true
},
"WaitingHour": {
"type": "select",
"value": 0,
"option": [
0,
3,
6,
9
]
},
"Choice": {
"type": "select",
"value": "list_top",
@@ -235,7 +225,7 @@
},
"Substitute": {
"type": "checkbox",
"value": false
"value": true
}
}
},
@@ -332,9 +322,8 @@
"Highway": {
"Stage": {
"type": "select",
"value": 0,
"value": 1,
"option": [
0,
1,
2,
3,
@@ -343,8 +332,7 @@
6,
7,
8,
9,
10
9
]
},
"Count": {
@@ -355,9 +343,8 @@
"DesertRailroad": {
"Stage": {
"type": "select",
"value": 0,
"value": 1,
"option": [
0,
1,
2,
3,
@@ -366,8 +353,7 @@
6,
7,
8,
9,
10
9
]
},
"Count": {
@@ -378,9 +364,8 @@
"Schoolhouse": {
"Stage": {
"type": "select",
"value": 0,
"value": 1,
"option": [
0,
1,
2,
3,
@@ -389,60 +374,13 @@
6,
7,
8,
9,
10
9
]
},
"Count": {
"type": "input",
"value": 2
}
},
"Road": {
"Stage": {
"type": "select",
"value": 0,
"option": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
]
},
"Count": {
"type": "input",
"value": 0
}
},
"Mansion": {
"Stage": {
"type": "select",
"value": 0,
"option": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
]
},
"Count": {
"type": "input",
"value": 0
}
}
},
"Scrimmage": {
@@ -484,9 +422,8 @@
"Trinity": {
"Stage": {
"type": "select",
"value": 0,
"value": 1,
"option": [
0,
1,
2,
3,
@@ -501,9 +438,8 @@
"Gehenna": {
"Stage": {
"type": "select",
"value": 0,
"value": 1,
"option": [
0,
1,
2,
3,
@@ -518,9 +454,8 @@
"Millennium": {
"Stage": {
"type": "select",
"value": 0,
"value": 1,
"option": [
0,
1,
2,
3,
+13 -26
View File
@@ -82,16 +82,13 @@ Cafe:
SecondCafe: true
Invitation:
Enable: true
WaitingHour:
value: 0
option: [ 0, 3, 6, 9 ]
Choice:
value: list_top
option: [ list_top, by_name ]
Name:
value: null
type: textarea
Substitute: false
Substitute: true
Bounty:
OnError:
@@ -100,29 +97,19 @@ Bounty:
Highway:
Stage:
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
value: 1
option: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
Count: 2
DesertRailroad:
Stage:
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
value: 1
option: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
Count: 2
Schoolhouse:
Stage:
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
value: 1
option: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
Count: 2
Road:
Stage:
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
Count: 0
Mansion:
Stage:
value: 0
option: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
Count: 0
Scrimmage:
OnError:
@@ -131,18 +118,18 @@ Scrimmage:
Trinity:
Stage:
value: 0
option: [ 0, 1, 2, 3, 4 ]
value: 1
option: [ 1, 2, 3, 4 ]
Count: 2
Gehenna:
Stage:
value: 0
option: [ 0, 1, 2, 3, 4 ]
value: 1
option: [ 1, 2, 3, 4 ]
Count: 2
Millennium:
Stage:
value: 0
option: [ 0, 1, 2, 3, 4 ]
value: 1
option: [ 1, 2, 3, 4 ]
Count: 2
TacticalChallenge:
-2
View File
@@ -36,8 +36,6 @@ Daily:
- Highway
- DesertRailroad
- Schoolhouse
- Road
- Mansion
Scrimmage:
- Scheduler
- Scrimmage
+7 -16
View File
@@ -47,47 +47,38 @@ class GeneratedConfig:
# Group `Invitation`
Invitation_Enable = True
Invitation_WaitingHour = 0 # 0, 3, 6, 9
Invitation_Choice = 'list_top' # list_top, by_name
Invitation_Name = None
Invitation_Substitute = False
Invitation_Substitute = True
# Group `Bounty`
Bounty_OnError = 'skip' # stop, skip
# Group `Highway`
Highway_Stage = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Highway_Stage = 1 # 1, 2, 3, 4, 5, 6, 7, 8, 9
Highway_Count = 2
# Group `DesertRailroad`
DesertRailroad_Stage = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
DesertRailroad_Stage = 1 # 1, 2, 3, 4, 5, 6, 7, 8, 9
DesertRailroad_Count = 2
# Group `Schoolhouse`
Schoolhouse_Stage = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Schoolhouse_Stage = 1 # 1, 2, 3, 4, 5, 6, 7, 8, 9
Schoolhouse_Count = 2
# Group `Road`
Road_Stage = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Road_Count = 0
# Group `Mansion`
Mansion_Stage = 0 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Mansion_Count = 0
# Group `Scrimmage`
Scrimmage_OnError = 'skip' # stop, skip
# Group `Trinity`
Trinity_Stage = 0 # 0, 1, 2, 3, 4
Trinity_Stage = 1 # 1, 2, 3, 4
Trinity_Count = 2
# Group `Gehenna`
Gehenna_Stage = 0 # 0, 1, 2, 3, 4
Gehenna_Stage = 1 # 1, 2, 3, 4
Gehenna_Count = 2
# Group `Millennium`
Millennium_Stage = 0 # 0, 1, 2, 3, 4
Millennium_Stage = 1 # 1, 2, 3, 4
Millennium_Count = 2
# Group `TacticalChallenge`
+8 -75
View File
@@ -218,7 +218,7 @@
},
"SecondCafe": {
"name": "Second Floor",
"help": "Enable auto switch to second floor and perform interaction"
"help": "JP server only\nEnable auto switch to second floor and perform interaction"
}
},
"Invitation": {
@@ -228,29 +228,21 @@
},
"Enable": {
"name": "Enable",
"help": "Enable cafe invitation"
},
"WaitingHour": {
"name": "Invitation Condition",
"help": "Choose whether to invite students based on the remaining time before next cafe refresh\nThis is for obtaining maximum student interation and maximum affection when AFK. Recommended option:\n24*7 AFK:\t\t Choose \"If 9 more hours remaining\"\nNormal usage:\t Choose \"Invite immediately\"",
"0": "Invite immediately",
"3": "If 3 more hours remaining",
"6": "If 6 more hours remaining",
"9": "If 9 more hours remaining"
"help": ""
},
"Choice": {
"name": "Choose Inviting Student",
"help": "Top first student of list: Invite the student at the top first of the list\nBy name: Invite the student with the name you set below",
"help": "",
"list_top": "Top first student of list",
"by_name": "By name"
},
"Name": {
"name": "Inviting Student Name",
"name": "Invited Student Name",
"help": "Fill in the name of the student to be invited. Use in-game text language. Use > to connect multiple students. Example:\nJP: ホシノ(水着) > 御坂美琴 > ユズ\nOVERSEA: Hoshino(Swimsuit) > Yuuka > Kayoko(New Year)"
},
"Substitute": {
"name": "Replace existing student",
"help": "Whether to replace the existing student with their alt.\nIf not, try to match the next student"
"help": "!TO BE CHANGED!Whether to replace the existing student with another costume.\nIf not, try to match the next student"
}
},
"Bounty": {
@@ -273,7 +265,6 @@
"Stage": {
"name": "Select Stage",
"help": "",
"0": "Auto select",
"1": "01 - Overpass A",
"2": "02 - Overpass B",
"3": "03 - Overpass C",
@@ -282,8 +273,7 @@
"6": "06 - Overpass F",
"7": "07 - Overpass G",
"8": "08 - Overpass H",
"9": "09 - Overpass I",
"10": "10 - Overpass J"
"9": "09 - Overpass I"
},
"Count": {
"name": "Sweep X times",
@@ -298,7 +288,6 @@
"Stage": {
"name": "Select Stage",
"help": "",
"0": "Auto select",
"1": "01 - Abandoned Train A",
"2": "02 - Abandoned Train B",
"3": "03 - Abandoned Train C",
@@ -307,8 +296,7 @@
"6": "06 - Abandoned Train F",
"7": "07 - Abandoned Train G",
"8": "08 - Abandoned Train H",
"9": "09 - Abandoned Train I",
"10": "10 - Abandoned Train J"
"9": "09 - Abandoned Train I"
},
"Count": {
"name": "Sweep X times",
@@ -323,7 +311,6 @@
"Stage": {
"name": "Select Stage",
"help": "",
"0": "Auto select",
"1": "01 - Besieged Classroom A",
"2": "02 - Besieged Classroom B",
"3": "03 - Besieged Classroom C",
@@ -332,58 +319,7 @@
"6": "06 - Besieged Classroom F",
"7": "07 - Besieged Classroom G",
"8": "08 - Besieged Classroom H",
"9": "09 - Besieged Classroom I",
"10": "10 - Besieged Classroom J"
},
"Count": {
"name": "Sweep X times",
"help": "Sweep the selected stage for X times"
}
},
"Road": {
"_info": {
"name": "Road",
"help": ""
},
"Stage": {
"name": "Select Stage",
"help": "",
"0": "Auto select",
"1": "01 - Burning Road A",
"2": "02 - Burning Road B",
"3": "03 - Burning Road C",
"4": "04 - Burning Road D",
"5": "05 - Burning Road E",
"6": "06 - Burning Road F",
"7": "07 - Burning Road G",
"8": "08 - Burning Road H",
"9": "09 - Burning Road I",
"10": "10 - Burning Road J"
},
"Count": {
"name": "Sweep X times",
"help": "Sweep the selected stage for X times"
}
},
"Mansion": {
"_info": {
"name": "Mansion",
"help": ""
},
"Stage": {
"name": "Select Stage",
"help": "",
"0": "Auto select",
"1": "01 - Historic Mansion A",
"2": "02 - Historic Mansion B",
"3": "03 - Historic Mansion C",
"4": "04 - Historic Mansion D",
"5": "05 - Historic Mansion E",
"6": "06 - Historic Mansion F",
"7": "07 - Historic Mansion G",
"8": "08 - Historic Mansion H",
"9": "09 - Historic Mansion I",
"10": "10 - Historic Mansion J"
"9": "09 - Besieged Classroom I"
},
"Count": {
"name": "Sweep X times",
@@ -410,7 +346,6 @@
"Stage": {
"name": "Select Stage",
"help": "",
"0": "Auto select",
"1": "01 - Trinity A",
"2": "02 - Trinity B",
"3": "03 - Trinity C",
@@ -429,7 +364,6 @@
"Stage": {
"name": "Select Stage",
"help": "",
"0": "Auto select",
"1": "01 - Gehenna A",
"2": "02 - Gehenna B",
"3": "03 - Gehenna C",
@@ -448,7 +382,6 @@
"Stage": {
"name": "Select Stage",
"help": "",
"0": "Auto select",
"1": "01 - Millennium A",
"2": "02 - Millennium B",
"3": "03 - Millennium C",
+8 -75
View File
@@ -218,7 +218,7 @@
},
"SecondCafe": {
"name": "第二咖啡厅",
"help": "自动切换第二咖啡厅进行互动点击"
"help": "仅支持日服\n自动切换第二咖啡厅进行互动点击"
}
},
"Invitation": {
@@ -228,25 +228,17 @@
},
"Enable": {
"name": "启用",
"help": "是否启用咖啡厅邀请功能"
},
"WaitingHour": {
"name": "邀请条件",
"help": "根据距离下一次咖啡厅刷新的时长,选择是否邀请学生\n此项设立是为了后台挂机最大化收益,使得邀请券能被最大化利用。推荐选项:\n常驻挂机:\t选择“离下次刷新 9 小时以上”\n非常驻挂机:\t选择“不等待刷新,立即邀请”,或根据自己挂机时长选择",
"0": "不等待刷新,立即邀请",
"3": "离下次刷新 3 小时以上",
"6": "离下次刷新 6 小时以上",
"9": "离下次刷新 9 小时以上"
"help": ""
},
"Choice": {
"name": "选择邀请学生",
"help": "按列表第一个:优先邀请列表中第一个学生,若失败则则尝试下一个\n按名字:优先邀请下方填写学生名的第一个,若失败则尝试下一个",
"name": "选择被邀请学生",
"help": "",
"list_top": "按列表第一个",
"by_name": "按名字"
},
"Name": {
"name": "邀请学生名",
"help": "填写要邀请的学生的名字,使用游戏内语言填写,多个学生使用 > 连接。例:\n日服:\tホシノ(水着) > 御坂美琴 > ユズ\n国际服:\tHoshino(Swimsuit) > Yuuka > Kayoko(New Year)"
"help": "填写要邀请的学生的名字,使用游戏内语言填写,多个学生使用 > 连接。例:\n日服:ホシノ(水着) > 御坂美琴 > ユズ\n国际服:Hoshino(Swimsuit) > Yuuka > Kayoko(New Year)"
},
"Substitute": {
"name": "是否替换已存在学生",
@@ -273,7 +265,6 @@
"Stage": {
"name": "选择关卡",
"help": "",
"0": "自动选择",
"1": "01 - 高架公路 A",
"2": "02 - 高架公路 B",
"3": "03 - 高架公路 C",
@@ -282,8 +273,7 @@
"6": "06 - 高架公路 F",
"7": "07 - 高架公路 G",
"8": "08 - 高架公路 H",
"9": "09 - 高架公路 I",
"10": "10 - 高架公路 J"
"9": "09 - 高架公路 I"
},
"Count": {
"name": "扫荡次数",
@@ -298,7 +288,6 @@
"Stage": {
"name": "选择关卡",
"help": "",
"0": "自动选择",
"1": "01 - 被遗弃的列车 A",
"2": "02 - 被遗弃的列车 B",
"3": "03 - 被遗弃的列车 C",
@@ -307,8 +296,7 @@
"6": "06 - 被遗弃的列车 F",
"7": "07 - 被遗弃的列车 G",
"8": "08 - 被遗弃的列车 H",
"9": "09 - 被遗弃的列车 I",
"10": "10 - 被遗弃的列车 J"
"9": "09 - 被遗弃的列车 I"
},
"Count": {
"name": "扫荡次数",
@@ -323,7 +311,6 @@
"Stage": {
"name": "选择关卡",
"help": "",
"0": "自动选择",
"1": "01 - 被袭击的教室 A",
"2": "02 - 被袭击的教室 B",
"3": "03 - 被袭击的教室 C",
@@ -332,58 +319,7 @@
"6": "06 - 被袭击的教室 F",
"7": "07 - 被袭击的教室 G",
"8": "08 - 被袭击的教室 H",
"9": "09 - 被袭击的教室 I",
"10": "10 - 被袭击的教室 J"
},
"Count": {
"name": "扫荡次数",
"help": "扫荡所选择关卡 X 次"
}
},
"Road": {
"_info": {
"name": "道路",
"help": ""
},
"Stage": {
"name": "选择关卡",
"help": "",
"0": "自动选择",
"1": "01 - 燃烧道路 A",
"2": "02 - 燃烧道路 B",
"3": "03 - 燃烧道路 C",
"4": "04 - 燃烧道路 D",
"5": "05 - 燃烧道路 E",
"6": "06 - 燃烧道路 F",
"7": "07 - 燃烧道路 G",
"8": "08 - 燃烧道路 H",
"9": "09 - 燃烧道路 I",
"10": "10 - 燃烧道路 J"
},
"Count": {
"name": "扫荡次数",
"help": "扫荡所选择关卡 X 次"
}
},
"Mansion": {
"_info": {
"name": "宅邸",
"help": ""
},
"Stage": {
"name": "选择关卡",
"help": "",
"0": "自动选择",
"1": "01 - 古老宅邸 A",
"2": "02 - 古老宅邸 B",
"3": "03 - 古老宅邸 C",
"4": "04 - 古老宅邸 D",
"5": "05 - 古老宅邸 E",
"6": "06 - 古老宅邸 F",
"7": "07 - 古老宅邸 G",
"8": "08 - 古老宅邸 H",
"9": "09 - 古老宅邸 I",
"10": "10 - 古老宅邸 J"
"9": "09 - 被袭击的教室 I"
},
"Count": {
"name": "扫荡次数",
@@ -410,7 +346,6 @@
"Stage": {
"name": "选择关卡",
"help": "",
"0": "自动选择",
"1": "01 - 三一 A",
"2": "02 - 三一 B",
"3": "03 - 三一 C",
@@ -429,7 +364,6 @@
"Stage": {
"name": "选择关卡",
"help": "",
"0": "自动选择",
"1": "01 - 格黑娜 A",
"2": "02 - 格黑娜 B",
"3": "03 - 格黑娜 C",
@@ -448,7 +382,6 @@
"Stage": {
"name": "选择关卡",
"help": "",
"0": "自动选择",
"1": "01 - 千年 A",
"2": "02 - 千年 B",
"3": "03 - 千年 C",
+108 -157
View File
@@ -51,17 +51,17 @@ CAFE_CHECK = ButtonWrapper(
name='CAFE_CHECK',
jp=Button(
file='./assets/jp/base/page/CAFE_CHECK.png',
area=(108, 11, 182, 36),
search=(88, 0, 202, 56),
color=(191, 200, 208),
button=(108, 11, 182, 36),
area=(264, 11, 337, 35),
search=(244, 0, 357, 55),
color=(188, 197, 205),
button=(264, 11, 337, 35),
),
en=Button(
file='./assets/en/base/page/CAFE_CHECK.png',
area=(106, 12, 167, 36),
search=(86, 0, 187, 56),
color=(173, 184, 194),
button=(106, 12, 167, 36),
area=(196, 8, 259, 37),
search=(176, 0, 279, 57),
color=(188, 197, 206),
button=(196, 8, 259, 37),
),
)
CIRCLE_CHECK = ButtonWrapper(
@@ -136,10 +136,10 @@ HOME = ButtonWrapper(
name='HOME',
share=Button(
file='./assets/share/base/page/HOME.png',
area=(1224, 10, 1250, 35),
search=(1204, 0, 1270, 55),
color=(162, 176, 202),
button=(1224, 10, 1250, 35),
area=(1218, 8, 1253, 41),
search=(1198, 0, 1273, 61),
color=(168, 182, 205),
button=(1218, 8, 1253, 41),
),
)
LOADING_CHECK = ButtonWrapper(
@@ -171,168 +171,119 @@ MAIL_CHECK = ButtonWrapper(
)
MAIN_GO_TO_CAFE = ButtonWrapper(
name='MAIN_GO_TO_CAFE',
jp=Button(
file='./assets/jp/base/page/MAIN_GO_TO_CAFE.png',
area=(86, 636, 112, 674),
search=(66, 616, 132, 694),
color=(177, 223, 246),
button=(86, 636, 112, 674),
),
share=Button(
file='./assets/share/base/page/MAIN_GO_TO_CAFE.png',
area=(85, 637, 113, 674),
search=(65, 617, 133, 694),
color=(178, 224, 246),
button=(85, 637, 113, 674),
area=(81, 638, 102, 668),
search=(61, 618, 122, 688),
color=(156, 209, 233),
button=(81, 638, 102, 668),
),
)
MAIN_GO_TO_CIRCLE = ButtonWrapper(
name='MAIN_GO_TO_CIRCLE',
jp=Button(
file='./assets/jp/base/page/MAIN_GO_TO_CIRCLE.png',
area=(533, 633, 558, 661),
search=(513, 613, 578, 681),
color=(171, 228, 255),
button=(533, 633, 558, 661),
),
share=Button(
file='./assets/share/base/page/MAIN_GO_TO_CIRCLE.png',
area=(533, 636, 558, 661),
search=(513, 616, 578, 681),
color=(162, 224, 255),
button=(533, 636, 558, 661),
area=(540, 631, 583, 660),
search=(520, 611, 603, 680),
color=(131, 204, 234),
button=(540, 631, 583, 660),
),
)
MAIN_GO_TO_CRAFTING = ButtonWrapper(
name='MAIN_GO_TO_CRAFTING',
jp=Button(
file='./assets/jp/base/page/MAIN_GO_TO_CRAFTING.png',
area=(643, 632, 669, 664),
search=(623, 612, 689, 684),
color=(210, 237, 252),
button=(643, 632, 669, 664),
),
share=Button(
file='./assets/share/base/page/MAIN_GO_TO_CRAFTING.png',
area=(644, 636, 666, 665),
search=(624, 616, 686, 685),
color=(205, 234, 251),
button=(644, 636, 666, 665),
area=(665, 622, 693, 664),
search=(645, 602, 713, 684),
color=(192, 229, 241),
button=(665, 622, 693, 664),
),
)
MAIN_GO_TO_GACHA = ButtonWrapper(
name='MAIN_GO_TO_GACHA',
jp=Button(
file='./assets/jp/base/page/MAIN_GO_TO_GACHA.png',
area=(874, 650, 895, 669),
search=(854, 630, 915, 689),
color=(158, 228, 254),
button=(874, 650, 895, 669),
),
share=Button(
file='./assets/share/base/page/MAIN_GO_TO_GACHA.png',
area=(871, 655, 896, 674),
search=(851, 635, 916, 694),
color=(139, 221, 249),
button=(871, 655, 896, 674),
area=(900, 623, 924, 670),
search=(880, 603, 944, 690),
color=(157, 219, 241),
button=(900, 623, 924, 670),
),
)
MAIN_GO_TO_MAIL = ButtonWrapper(
name='MAIN_GO_TO_MAIL',
share=Button(
file='./assets/share/base/page/MAIN_GO_TO_MAIL.png',
area=(1144, 27, 1165, 44),
search=(1124, 7, 1185, 64),
color=(102, 125, 168),
button=(1144, 27, 1165, 44),
area=(1130, 29, 1156, 49),
search=(1110, 9, 1176, 69),
color=(94, 121, 166),
button=(1130, 29, 1156, 49),
),
)
MAIN_GO_TO_MOMOTALK = ButtonWrapper(
name='MAIN_GO_TO_MOMOTALK',
share=Button(
file='./assets/share/base/page/MAIN_GO_TO_MOMOTALK.png',
area=(125, 118, 146, 151),
search=(105, 98, 166, 171),
color=(244, 200, 211),
button=(125, 118, 146, 151),
area=(154, 134, 177, 158),
search=(134, 114, 197, 178),
color=(255, 219, 227),
button=(154, 134, 177, 158),
),
)
MAIN_GO_TO_PURCHASE = ButtonWrapper(
name='MAIN_GO_TO_PURCHASE',
share=Button(
file='./assets/share/base/page/MAIN_GO_TO_PURCHASE.png',
area=(122, 209, 148, 243),
search=(102, 189, 168, 263),
color=(190, 222, 246),
button=(122, 209, 148, 243),
area=(148, 204, 183, 253),
search=(128, 184, 203, 273),
color=(172, 214, 239),
button=(148, 204, 183, 253),
),
)
MAIN_GO_TO_SCHEDULE = ButtonWrapper(
name='MAIN_GO_TO_SCHEDULE',
jp=Button(
file='./assets/jp/base/page/MAIN_GO_TO_SCHEDULE.png',
area=(197, 637, 216, 668),
search=(177, 617, 236, 688),
color=(181, 224, 241),
button=(197, 637, 216, 668),
),
share=Button(
file='./assets/share/base/page/MAIN_GO_TO_SCHEDULE.png',
area=(196, 650, 225, 670),
search=(176, 630, 245, 690),
color=(196, 228, 242),
button=(196, 650, 225, 670),
area=(194, 638, 216, 672),
search=(174, 618, 236, 692),
color=(149, 194, 222),
button=(194, 638, 216, 672),
),
)
MAIN_GO_TO_SHOP = ButtonWrapper(
name='MAIN_GO_TO_SHOP',
jp=Button(
file='./assets/jp/base/page/MAIN_GO_TO_SHOP.png',
area=(753, 632, 787, 668),
search=(733, 612, 807, 688),
color=(167, 220, 247),
button=(753, 632, 787, 668),
),
share=Button(
file='./assets/share/base/page/MAIN_GO_TO_SHOP.png',
area=(750, 633, 788, 666),
search=(730, 613, 808, 686),
color=(168, 220, 246),
button=(750, 633, 788, 666),
area=(773, 630, 816, 667),
search=(753, 610, 836, 687),
color=(146, 208, 235),
button=(773, 630, 816, 667),
),
)
MAIN_GO_TO_TASK = ButtonWrapper(
name='MAIN_GO_TO_TASK',
jp=Button(
file='./assets/jp/base/page/MAIN_GO_TO_TASK.png',
area=(30, 214, 55, 248),
search=(10, 194, 75, 268),
color=(186, 218, 245),
button=(30, 214, 55, 248),
),
share=Button(
file='./assets/share/base/page/MAIN_GO_TO_TASK.png',
area=(37, 216, 60, 247),
search=(17, 196, 80, 267),
color=(195, 225, 248),
button=(37, 216, 60, 247),
area=(52, 220, 78, 248),
search=(32, 200, 98, 268),
color=(226, 207, 203),
button=(52, 220, 78, 248),
),
)
MAIN_GO_TO_WORK = ButtonWrapper(
name='MAIN_GO_TO_WORK',
jp=Button(
file='./assets/jp/base/page/MAIN_GO_TO_WORK.png',
area=(1167, 668, 1222, 688),
search=(1147, 648, 1242, 708),
color=(141, 156, 174),
button=(1167, 668, 1222, 688),
area=(1167, 605, 1241, 632),
search=(1147, 585, 1261, 652),
color=(135, 149, 169),
button=(1167, 605, 1241, 632),
),
en=Button(
file='./assets/en/base/page/MAIN_GO_TO_WORK.png',
area=(1155, 669, 1250, 690),
search=(1135, 649, 1270, 710),
color=(116, 136, 159),
button=(1155, 669, 1250, 690),
area=(1127, 605, 1250, 637),
search=(1107, 585, 1270, 657),
color=(90, 112, 141),
button=(1127, 605, 1250, 637),
),
)
MISSION_CHECK = ButtonWrapper(
@@ -495,101 +446,101 @@ WORK_GO_TO_BOUNTY = ButtonWrapper(
name='WORK_GO_TO_BOUNTY',
jp=Button(
file='./assets/jp/base/page/WORK_GO_TO_BOUNTY.png',
area=(679, 401, 741, 417),
search=(659, 381, 761, 437),
color=(155, 164, 186),
button=(679, 401, 741, 417),
area=(669, 412, 765, 436),
search=(649, 392, 785, 456),
color=(165, 181, 208),
button=(669, 412, 765, 436),
),
en=Button(
file='./assets/en/base/page/WORK_GO_TO_BOUNTY.png',
area=(679, 402, 736, 421),
search=(659, 382, 756, 441),
color=(188, 196, 211),
button=(679, 402, 736, 421),
area=(671, 409, 760, 440),
search=(651, 389, 780, 460),
color=(183, 202, 227),
button=(671, 409, 760, 440),
),
)
WORK_GO_TO_COMMISSIONS = ButtonWrapper(
name='WORK_GO_TO_COMMISSIONS',
jp=Button(
file='./assets/jp/base/page/WORK_GO_TO_COMMISSIONS.png',
area=(661, 504, 724, 521),
search=(641, 484, 744, 541),
color=(155, 163, 184),
button=(661, 504, 724, 521),
area=(655, 494, 751, 518),
search=(635, 474, 771, 538),
color=(165, 179, 204),
button=(655, 494, 751, 518),
),
en=Button(
file='./assets/en/base/page/WORK_GO_TO_COMMISSIONS.png',
area=(661, 504, 762, 520),
search=(641, 484, 782, 540),
color=(169, 178, 195),
button=(661, 504, 762, 520),
area=(656, 494, 803, 517),
search=(636, 474, 823, 537),
color=(192, 204, 221),
button=(656, 494, 803, 517),
),
)
WORK_GO_TO_MISSION = ButtonWrapper(
name='WORK_GO_TO_MISSION',
jp=Button(
file='./assets/jp/base/page/WORK_GO_TO_MISSION.png',
area=(703, 231, 742, 252),
search=(683, 211, 762, 272),
color=(144, 158, 184),
button=(703, 231, 742, 252),
area=(720, 160, 803, 199),
search=(700, 140, 823, 219),
color=(165, 178, 204),
button=(720, 160, 803, 199),
),
en=Button(
file='./assets/en/base/page/WORK_GO_TO_MISSION.png',
area=(712, 221, 819, 247),
search=(692, 201, 839, 267),
color=(140, 162, 190),
button=(712, 221, 819, 247),
area=(720, 160, 871, 206),
search=(700, 140, 891, 226),
color=(192, 204, 221),
button=(720, 160, 871, 206),
),
)
WORK_GO_TO_SCHOOL_EXCHANGE = ButtonWrapper(
name='WORK_GO_TO_SCHOOL_EXCHANGE',
jp=Button(
file='./assets/jp/base/page/WORK_GO_TO_SCHOOL_EXCHANGE.png',
area=(642, 606, 721, 624),
search=(622, 586, 741, 644),
color=(167, 174, 192),
button=(642, 606, 721, 624),
area=(641, 575, 758, 599),
search=(621, 555, 778, 619),
color=(165, 179, 204),
button=(641, 575, 758, 599),
),
en=Button(
file='./assets/en/base/page/WORK_GO_TO_SCHOOL_EXCHANGE.png',
area=(642, 607, 729, 627),
search=(622, 587, 749, 647),
color=(196, 200, 211),
button=(642, 607, 729, 627),
area=(643, 572, 778, 602),
search=(623, 552, 798, 622),
color=(190, 203, 221),
button=(643, 572, 778, 602),
),
)
WORK_GO_TO_STORY = ButtonWrapper(
name='WORK_GO_TO_STORY',
jp=Button(
file='./assets/jp/base/page/WORK_GO_TO_STORY.png',
area=(1074, 232, 1169, 251),
search=(1054, 212, 1189, 271),
color=(202, 207, 220),
button=(1074, 232, 1169, 251),
area=(995, 163, 1032, 197),
search=(975, 143, 1052, 217),
color=(191, 201, 219),
button=(995, 163, 1032, 197),
),
en=Button(
file='./assets/en/base/page/WORK_GO_TO_STORY.png',
area=(992, 221, 1075, 255),
search=(972, 201, 1095, 275),
color=(192, 198, 213),
button=(992, 221, 1075, 255),
area=(994, 159, 1109, 211),
search=(974, 139, 1129, 231),
color=(208, 215, 228),
button=(994, 159, 1109, 211),
),
)
WORK_GO_TO_TACTICAL_CHALLENGE = ButtonWrapper(
name='WORK_GO_TO_TACTICAL_CHALLENGE',
jp=Button(
file='./assets/jp/base/page/WORK_GO_TO_TACTICAL_CHALLENGE.png',
area=(821, 600, 911, 620),
search=(801, 580, 931, 640),
color=(156, 164, 185),
button=(821, 600, 911, 620),
area=(1012, 535, 1151, 562),
search=(992, 515, 1171, 582),
color=(159, 174, 200),
button=(1012, 535, 1151, 562),
),
en=Button(
file='./assets/en/base/page/WORK_GO_TO_TACTICAL_CHALLENGE.png',
area=(818, 608, 923, 623),
search=(798, 588, 943, 643),
color=(198, 202, 215),
button=(818, 608, 923, 623),
area=(1034, 435, 1162, 466),
search=(1014, 415, 1182, 486),
color=(179, 199, 221),
button=(1034, 435, 1162, 466),
),
)
+1 -1
View File
@@ -69,7 +69,7 @@ class Page:
# Main Page
page_main = Page(MAIN_GO_TO_TASK)
page_main = Page(MAIN_GO_TO_PURCHASE)
# Cafe
page_cafe = Page(CAFE_CHECK)
+8 -52
View File
@@ -54,28 +54,6 @@ CHECK_HIGHWAY = ButtonWrapper(
button=(104, 143, 391, 188),
),
)
CHECK_MANSION = ButtonWrapper(
name='CHECK_MANSION',
jp=Button(
file='./assets/jp/bounty/CHECK_MANSION.png',
area=(108, 148, 313, 178),
search=(88, 128, 333, 198),
color=(167, 173, 178),
button=(108, 148, 313, 178),
),
en=None,
)
CHECK_ROAD = ButtonWrapper(
name='CHECK_ROAD',
jp=Button(
file='./assets/jp/bounty/CHECK_ROAD.png',
area=(108, 148, 313, 178),
search=(88, 128, 333, 198),
color=(168, 175, 179),
button=(108, 148, 313, 178),
),
en=None,
)
CHECK_SCHOOLHOUSE = ButtonWrapper(
name='CHECK_SCHOOLHOUSE',
jp=Button(
@@ -114,10 +92,10 @@ SELECT_DESERT_RAILROAD = ButtonWrapper(
name='SELECT_DESERT_RAILROAD',
jp=Button(
file='./assets/jp/bounty/SELECT_DESERT_RAILROAD.png',
area=(1071, 290, 1219, 321),
search=(1051, 270, 1239, 341),
color=(155, 166, 181),
button=(1071, 290, 1219, 321),
area=(1066, 271, 1224, 311),
search=(1046, 251, 1244, 331),
color=(178, 188, 199),
button=(1066, 271, 1224, 311),
),
en=Button(
file='./assets/en/bounty/SELECT_DESERT_RAILROAD.png',
@@ -144,36 +122,14 @@ SELECT_HIGHWAY = ButtonWrapper(
button=(1073, 167, 1223, 202),
),
)
SELECT_MANSION = ButtonWrapper(
name='SELECT_MANSION',
jp=Button(
file='./assets/jp/bounty/SELECT_MANSION.png',
area=(1156, 657, 1221, 688),
search=(1136, 637, 1241, 708),
color=(145, 158, 175),
button=(1156, 657, 1221, 688),
),
en=None,
)
SELECT_ROAD = ButtonWrapper(
name='SELECT_ROAD',
jp=Button(
file='./assets/jp/bounty/SELECT_ROAD.png',
area=(1156, 535, 1219, 565),
search=(1136, 515, 1239, 585),
color=(146, 159, 175),
button=(1156, 535, 1219, 565),
),
en=None,
)
SELECT_SCHOOLHOUSE = ButtonWrapper(
name='SELECT_SCHOOLHOUSE',
jp=Button(
file='./assets/jp/bounty/SELECT_SCHOOLHOUSE.png',
area=(1157, 412, 1220, 443),
search=(1137, 392, 1240, 463),
color=(157, 170, 185),
button=(1157, 412, 1220, 443),
area=(1154, 381, 1223, 417),
search=(1134, 361, 1243, 437),
color=(173, 185, 198),
button=(1154, 381, 1223, 417),
),
en=Button(
file='./assets/en/bounty/SELECT_SCHOOLHOUSE.png',
+4 -6
View File
@@ -21,12 +21,10 @@ class BountyStatus(Flag):
class Bounty(BountyUI):
@property
def bounty_info(self):
bounty = (SELECT_HIGHWAY, SELECT_DESERT_RAILROAD, SELECT_SCHOOLHOUSE, SELECT_ROAD, SELECT_MANSION)
check = (CHECK_HIGHWAY, CHECK_DESERT_RAILROAD, CHECK_SCHOOLHOUSE, CHECK_ROAD, CHECK_MANSION)
stage = (self.config.Highway_Stage, self.config.DesertRailroad_Stage, self.config.Schoolhouse_Stage,
self.config.Road_Stage, self.config.Mansion_Stage)
count = (self.config.Highway_Count, self.config.DesertRailroad_Count, self.config.Schoolhouse_Count,
self.config.Road_Count, self.config.Mansion_Count)
bounty = (SELECT_HIGHWAY, SELECT_DESERT_RAILROAD, SELECT_SCHOOLHOUSE)
check = (CHECK_HIGHWAY, CHECK_DESERT_RAILROAD, CHECK_SCHOOLHOUSE)
stage = (self.config.Highway_Stage, self.config.DesertRailroad_Stage, self.config.Schoolhouse_Stage)
count = (self.config.Highway_Count, self.config.DesertRailroad_Count, self.config.Schoolhouse_Count)
info = zip(bounty, check, stage, count)
return filter(lambda x: x[3] > 0, info)
-2
View File
@@ -22,8 +22,6 @@ class BountyUI(UI):
return False
def enter_stage(self, index: int) -> bool:
if not index:
index = BOUNTY_LIST.insight_max_sweepable_index(self)
if BOUNTY_LIST.select_index_enter(self, index):
return True
return False
+97 -129
View File
@@ -27,68 +27,90 @@ CAFE_FIRST = ButtonWrapper(
name='CAFE_FIRST',
jp=Button(
file='./assets/jp/cafe/CAFE_FIRST.png',
area=(96, 92, 111, 110),
search=(76, 72, 131, 130),
color=(185, 192, 200),
button=(96, 92, 111, 110),
area=(82, 152, 136, 175),
search=(62, 132, 156, 195),
color=(111, 127, 147),
button=(82, 152, 136, 175),
),
en=Button(
file='./assets/en/cafe/CAFE_FIRST.png',
area=(205, 96, 215, 107),
search=(185, 76, 235, 127),
color=(176, 184, 194),
button=(205, 96, 215, 107),
area=(82, 152, 136, 175),
search=(62, 132, 156, 195),
color=(111, 127, 147),
button=(82, 152, 136, 175),
),
)
CAFE_INVITE = ButtonWrapper(
name='CAFE_INVITE',
jp=Button(
file='./assets/jp/cafe/CAFE_INVITE.png',
area=(870, 637, 903, 663),
search=(850, 617, 923, 683),
color=(253, 217, 235),
button=(870, 637, 903, 663),
),
en=Button(
file='./assets/en/cafe/CAFE_INVITE.png',
area=(870, 637, 903, 663),
search=(850, 617, 923, 683),
color=(253, 217, 235),
button=(870, 637, 903, 663),
area=(816, 635, 845, 655),
search=(796, 615, 865, 675),
color=(173, 182, 192),
button=(816, 635, 845, 655),
),
en=None,
)
CAFE_INVITED = ButtonWrapper(
name='CAFE_INVITED',
jp=Button(
file='./assets/jp/cafe/CAFE_INVITED.png',
area=(870, 637, 903, 663),
search=(850, 617, 923, 683),
color=(111, 109, 109),
button=(870, 637, 903, 663),
),
en=Button(
file='./assets/en/cafe/CAFE_INVITED.png',
area=(870, 637, 903, 663),
search=(850, 617, 923, 683),
color=(111, 109, 109),
button=(870, 637, 903, 663),
area=(815, 633, 847, 657),
search=(795, 613, 867, 677),
color=(144, 144, 146),
button=(815, 633, 847, 657),
),
en=None,
)
CAFE_SECOND = ButtonWrapper(
name='CAFE_SECOND',
jp=Button(
file='./assets/jp/cafe/CAFE_SECOND.png',
area=(99, 92, 108, 110),
search=(79, 72, 128, 130),
color=(193, 200, 209),
button=(99, 92, 108, 110),
area=(219, 152, 279, 175),
search=(199, 132, 299, 195),
color=(110, 126, 146),
button=(219, 152, 279, 175),
),
en=Button(
file='./assets/en/cafe/CAFE_SECOND.png',
area=(207, 96, 214, 107),
search=(187, 76, 234, 127),
color=(174, 182, 192),
button=(207, 96, 214, 107),
area=(219, 152, 279, 175),
search=(199, 132, 299, 195),
color=(110, 126, 146),
button=(219, 152, 279, 175),
),
)
CHANGE_CAFE_NOT_SELECTED = ButtonWrapper(
name='CHANGE_CAFE_NOT_SELECTED',
jp=Button(
file='./assets/jp/cafe/CHANGE_CAFE_NOT_SELECTED.png',
area=(84, 89, 178, 109),
search=(64, 69, 198, 129),
color=(185, 193, 203),
button=(84, 89, 178, 109),
),
en=Button(
file='./assets/en/cafe/CHANGE_CAFE_NOT_SELECTED.png',
area=(84, 89, 178, 109),
search=(64, 69, 198, 129),
color=(185, 193, 203),
button=(84, 89, 178, 109),
),
)
CHANGE_CAFE_SELECTED = ButtonWrapper(
name='CHANGE_CAFE_SELECTED',
jp=Button(
file='./assets/jp/cafe/CHANGE_CAFE_SELECTED.png',
area=(40, 87, 191, 112),
search=(20, 67, 211, 132),
color=(82, 105, 130),
button=(40, 87, 191, 112),
),
en=Button(
file='./assets/en/cafe/CHANGE_CAFE_SELECTED.png',
area=(40, 87, 191, 112),
search=(20, 67, 211, 132),
color=(82, 105, 130),
button=(40, 87, 191, 112),
),
)
CHECK_MOMOTALK = ButtonWrapper(
@@ -100,29 +122,23 @@ CHECK_MOMOTALK = ButtonWrapper(
color=(253, 203, 212),
button=(421, 83, 447, 108),
),
en=Button(
file='./assets/en/cafe/CHECK_MOMOTALK.png',
area=(421, 83, 447, 108),
search=(401, 63, 467, 128),
color=(253, 203, 212),
button=(421, 83, 447, 108),
),
en=None,
)
CHECK_REWARD = ButtonWrapper(
name='CHECK_REWARD',
jp=Button(
file='./assets/jp/cafe/CHECK_REWARD.png',
area=(1120, 635, 1166, 651),
search=(1100, 615, 1186, 671),
color=(79, 102, 127),
button=(1109, 627, 1239, 691),
area=(1095, 621, 1146, 637),
search=(1075, 601, 1166, 657),
color=(82, 105, 129),
button=(1086, 607, 1225, 685),
),
en=Button(
file='./assets/en/cafe/CHECK_REWARD.png',
area=(1116, 636, 1218, 654),
search=(1096, 616, 1238, 674),
color=(77, 100, 125),
button=(1113, 625, 1239, 692),
area=(1090, 613, 1229, 644),
search=(1070, 593, 1249, 664),
color=(64, 88, 115),
button=(1086, 611, 1229, 685),
),
)
CLICKABLE_TEMPLATE = ButtonWrapper(
@@ -146,10 +162,10 @@ GET_REWARD = ButtonWrapper(
),
en=Button(
file='./assets/en/cafe/GET_REWARD.png',
area=(593, 506, 687, 548),
search=(573, 486, 707, 568),
color=(211, 193, 64),
button=(543, 492, 736, 564),
area=(581, 503, 692, 536),
search=(561, 483, 712, 556),
color=(208, 190, 63),
button=(539, 491, 741, 555),
),
)
GET_REWARD_CLOSE = ButtonWrapper(
@@ -163,10 +179,10 @@ GET_REWARD_CLOSE = ButtonWrapper(
),
en=Button(
file='./assets/en/cafe/GET_REWARD_CLOSE.png',
area=(968, 132, 997, 162),
search=(948, 112, 1017, 182),
color=(187, 193, 201),
button=(968, 132, 997, 162),
area=(883, 134, 926, 178),
search=(863, 114, 946, 198),
color=(215, 220, 224),
button=(883, 134, 926, 178),
),
)
GOT_REWARD = ButtonWrapper(
@@ -180,10 +196,10 @@ GOT_REWARD = ButtonWrapper(
),
en=Button(
file='./assets/en/cafe/GOT_REWARD.png',
area=(544, 493, 735, 563),
search=(524, 473, 755, 583),
color=(213, 213, 212),
button=(544, 493, 735, 563),
area=(543, 489, 741, 558),
search=(523, 469, 761, 578),
color=(211, 212, 212),
button=(543, 489, 741, 558),
),
)
INVENTORY = ButtonWrapper(
@@ -212,13 +228,7 @@ INVITE_CONFIRM = ButtonWrapper(
color=(152, 164, 177),
button=(665, 471, 870, 533),
),
en=Button(
file='./assets/en/cafe/INVITE_CONFIRM.png',
area=(592, 149, 689, 176),
search=(572, 129, 709, 196),
color=(169, 179, 191),
button=(664, 470, 872, 534),
),
en=None,
)
INVITE_IN_SECOND = ButtonWrapper(
name='INVITE_IN_SECOND',
@@ -229,13 +239,7 @@ INVITE_IN_SECOND = ButtonWrapper(
color=(166, 177, 188),
button=(482, 147, 799, 177),
),
en=Button(
file='./assets/en/cafe/INVITE_IN_SECOND.png',
area=(482, 147, 799, 177),
search=(462, 127, 819, 197),
color=(166, 177, 188),
button=(482, 147, 799, 177),
),
en=None,
)
INVITE_IN_SECOND_CLOSE = ButtonWrapper(
name='INVITE_IN_SECOND_CLOSE',
@@ -246,13 +250,7 @@ INVITE_IN_SECOND_CLOSE = ButtonWrapper(
color=(180, 189, 198),
button=(874, 150, 900, 176),
),
en=Button(
file='./assets/en/cafe/INVITE_IN_SECOND_CLOSE.png',
area=(874, 150, 900, 176),
search=(854, 130, 920, 196),
color=(180, 189, 198),
button=(874, 150, 900, 176),
),
en=None,
)
INVITE_SUBSTITUTE = ButtonWrapper(
name='INVITE_SUBSTITUTE',
@@ -263,13 +261,7 @@ INVITE_SUBSTITUTE = ButtonWrapper(
color=(154, 166, 179),
button=(673, 478, 858, 541),
),
en=Button(
file='./assets/en/cafe/INVITE_SUBSTITUTE.png',
area=(506, 157, 775, 186),
search=(486, 137, 795, 206),
color=(176, 186, 196),
button=(673, 477, 857, 542),
),
en=None,
)
INVITE_SUBSTITUTE_CLOSE = ButtonWrapper(
name='INVITE_SUBSTITUTE_CLOSE',
@@ -280,13 +272,7 @@ INVITE_SUBSTITUTE_CLOSE = ButtonWrapper(
color=(180, 189, 199),
button=(867, 158, 893, 184),
),
en=Button(
file='./assets/en/cafe/INVITE_SUBSTITUTE_CLOSE.png',
area=(867, 158, 893, 184),
search=(847, 138, 913, 204),
color=(180, 189, 199),
button=(867, 158, 893, 184),
),
en=None,
)
MOMOTALK_CLOSE = ButtonWrapper(
name='MOMOTALK_CLOSE',
@@ -314,13 +300,7 @@ MOMOTALK_INVITE = ButtonWrapper(
color=(90, 163, 195),
button=(764, 211, 809, 234),
),
en=Button(
file='./assets/en/cafe/MOMOTALK_INVITE.png',
area=(755, 210, 817, 233),
search=(735, 190, 837, 253),
color=(98, 179, 211),
button=(755, 210, 817, 233),
),
en=None,
)
MOMOTALK_ITEM = ButtonWrapper(
name='MOMOTALK_ITEM',
@@ -331,29 +311,23 @@ MOMOTALK_ITEM = ButtonWrapper(
color=(203, 230, 240),
button=(489, 193, 864, 259),
),
en=Button(
file='./assets/en/cafe/MOMOTALK_ITEM.png',
area=(489, 193, 864, 259),
search=(469, 173, 884, 279),
color=(203, 230, 240),
button=(489, 193, 864, 259),
),
en=None,
)
OCR_CAFE = ButtonWrapper(
name='OCR_CAFE',
jp=Button(
file='./assets/jp/cafe/OCR_CAFE.png',
area=(1127, 657, 1219, 682),
search=(1107, 637, 1239, 702),
color=(93, 112, 134),
button=(1127, 657, 1219, 682),
area=(1103, 642, 1202, 672),
search=(1083, 622, 1222, 692),
color=(87, 107, 129),
button=(1103, 642, 1202, 672),
),
en=Button(
file='./assets/en/cafe/OCR_CAFE.png',
area=(1127, 657, 1219, 682),
search=(1107, 637, 1239, 702),
color=(93, 112, 134),
button=(1127, 657, 1219, 682),
area=(1105, 639, 1195, 674),
search=(1085, 619, 1215, 694),
color=(84, 104, 127),
button=(1105, 639, 1195, 674),
),
)
OCR_NAME = ButtonWrapper(
@@ -365,13 +339,7 @@ OCR_NAME = ButtonWrapper(
color=(237, 239, 241),
button=(488, 194, 704, 588),
),
en=Button(
file='./assets/en/cafe/OCR_NAME.png',
area=(488, 194, 704, 588),
search=(468, 174, 724, 608),
color=(237, 239, 241),
button=(488, 194, 704, 588),
),
en=None,
)
STUDENT_LIST = ButtonWrapper(
name='STUDENT_LIST',
+32 -8
View File
@@ -1,5 +1,6 @@
from enum import Enum
from module.base.decorator import Config
from module.base.timer import Timer
from module.logger import logger
from module.ui.switch import Switch
@@ -8,6 +9,10 @@ from tasks.cafe.assets.assets_cafe import *
from tasks.cafe.invitation import handle_invitation
from tasks.cafe.ui import CafeUI
SWITCH_CAFE = Switch('Cafe_switch')
SWITCH_CAFE.add_state('off', CHANGE_CAFE_NOT_SELECTED)
SWITCH_CAFE.add_state('on', CHANGE_CAFE_SELECTED)
SWITCH_CAFE_SELECT = Switch('Cafe_switch_select')
SWITCH_CAFE_SELECT.add_state('1', CAFE_FIRST)
SWITCH_CAFE_SELECT.add_state('2', CAFE_SECOND)
@@ -25,10 +30,16 @@ class CafeStatus(Enum):
class Cafe(CafeUI):
@property
def is_second_cafe_on(self):
@Config.when(Emulator_GameLanguage='jp')
def _is_second_cafe_on(self):
return self.config.Cafe_SecondCafe
@Config.when(Emulator_GameLanguage=None)
def _is_second_cafe_on(self):
return False
is_second_cafe_on = property(_is_second_cafe_on)
def _handle_cafe(self, status):
match status:
case CafeStatus.STUDENT_LIST:
@@ -59,7 +70,7 @@ class Cafe(CafeUI):
if handle_invitation(self):
return CafeStatus.CLICK
case CafeStatus.CLICK:
buttons = self.get_clickable_buttons()
buttons = self.get_clickable_buttons(offset=(45, 10))
self.click = len(buttons)
logger.attr('Clickable', self.click)
if not buttons:
@@ -105,6 +116,7 @@ class Cafe(CafeUI):
status = CafeStatus.STUDENT_LIST
loading_timer = Timer(2).start()
action_timer = Timer(1, count=1)
is_list = False
is_reset = False
is_second = False
is_enable = is_reward_on or is_touch_on
@@ -121,6 +133,11 @@ class Cafe(CafeUI):
if not loading_timer.reached():
continue
if not is_list and status == CafeStatus.STUDENT_LIST and self.appear(STUDENT_LIST):
is_list = True
loading_timer = Timer(3).start()
continue
if not is_reward_on and status == CafeStatus.OCR:
logger.info('Skip reward')
status = CafeStatus.CLICK
@@ -137,19 +154,26 @@ class Cafe(CafeUI):
continue
if self.is_second_cafe_on and not is_second and status == CafeStatus.FINISHED:
if not SWITCH_CAFE_SELECT.appear(main=self):
logger.info('Cafe switch not found')
if not SWITCH_CAFE.appear(main=self):
logger.warning('Cafe switch not found')
continue
match SWITCH_CAFE_SELECT.get(main=self):
if SWITCH_CAFE.get(main=self) == 'off':
SWITCH_CAFE.set('on', main=self)
logger.info('Switching to second cafe')
if not SWITCH_CAFE_SELECT.appear(main=self):
logger.info('Cafe switch select not found')
continue
match (SWITCH_CAFE_SELECT.get(main=self)):
case '1':
if self.click_with_interval(CAFE_FIRST):
if self.click_with_interval(CAFE_SECOND):
continue
case '2':
logger.info('Cafe second arrived')
SWITCH_CAFE.set('off', main=self)
status = CafeStatus.STUDENT_LIST
is_list = False
is_second = True
self.check = 0
loading_timer.reset().start()
if action_timer.reached_and_reset():
logger.attr('Status', status)
+7 -23
View File
@@ -1,13 +1,11 @@
import re
from datetime import datetime, timedelta
from enum import Enum
import numpy as np
from module.base.base import ModuleBase
from module.base.timer import Timer
from module.base.utils import area_offset, area_size
from module.config.utils import get_server_next_update
from module.base.utils import area_size, area_offset
from module.logger import logger
from module.ocr.ocr import Ocr
from tasks.cafe.assets.assets_cafe import *
@@ -34,7 +32,6 @@ class InvitationStatus(Enum):
class Invitation:
swipe_vector_range = (0.65, 0.85)
cafe_update = ["04:00", "16:00"]
def __init__(self, name: str):
self.name = name
@@ -44,7 +41,6 @@ class Invitation:
self.invite = MOMOTALK_INVITE
self.target_names = []
self.waiting_hour = None
self.substitute = None
self.choice = None
@@ -99,10 +95,6 @@ class Invitation:
continue
self.current_names.append((name, name_.box))
@property
def is_invitation(self) -> bool:
return get_server_next_update(self.cafe_update) - datetime.now() > timedelta(hours=self.waiting_hour)
@property
def names(self):
return list(map(lambda x: x[0], self.current_names))
@@ -214,19 +206,16 @@ class Invitation:
return False
invitation = Invitation('CafeInvitation')
invitation = Invitation('test')
def handle_invitation_status(status: InvitationStatus, main: ModuleBase) -> InvitationStatus:
match status:
case InvitationStatus.MOMOTALK:
if not invitation.is_invitation:
logger.info('Invitation waiting until next refresh')
return InvitationStatus.FINISHED
if main.match_color(CAFE_INVITED):
if main.appear(CAFE_INVITED):
logger.info('Invitation in cooldown')
return InvitationStatus.FINISHED
if invitation.choice != 'list_top' and invitation.target_name is None:
if invitation.target_name is None:
logger.warning('No student to be invited or all invitations failed')
return InvitationStatus.FINISHED
if main.appear(CHECK_MOMOTALK):
@@ -243,7 +232,7 @@ def handle_invitation_status(status: InvitationStatus, main: ModuleBase) -> Invi
case InvitationStatus.SELECT:
if main.appear(INVITE_CONFIRM):
return InvitationStatus.CONFIRM
if main.appear(INVITE_IN_SECOND):
if main.config.Emulator_GameLanguage == 'jp' and main.appear(INVITE_IN_SECOND):
return InvitationStatus.IN_SECOND
if main.appear(INVITE_SUBSTITUTE):
return InvitationStatus.SUBSTITUTE
@@ -282,16 +271,11 @@ def handle_invitation_status(status: InvitationStatus, main: ModuleBase) -> Invi
def handle_invitation(main: ModuleBase):
if not main.config.Invitation_Enable:
logger.info('Invitation disabled')
return True
invitation.waiting_hour = main.config.Invitation_WaitingHour
return
invitation.choice = main.config.Invitation_Choice
invitation.substitute = main.config.Invitation_Substitute
if invitation.choice is None:
invitation.choice = main.config.Invitation_Choice
if invitation.choice == 'by_name' and not invitation.target_names:
name = main.config.Invitation_Name
if name is None:
logger.warning('Choose By Name but Inviting Student Name is blank')
return True
name = re.sub(r'[ \t\r\n]', '', name)
name = re.sub(r'[>﹥›˃ᐳ❯]', '>', name)
name = re.sub(r'(', '(', name)
+1 -1
View File
@@ -31,7 +31,7 @@ class CafeUI(UI):
# generate result
return cv2.bitwise_and(image, image, mask=mask)
def get_clickable_buttons(self, similarity=0.8, offset=(40, 10)):
def get_clickable_buttons(self, similarity=0.8, offset=(45, 10)):
image = self.extract_clickable_from_image(self.device.image)
self.template.matched_button._button_offset = offset
self.template.load_offset(self.template)

Some files were not shown because too many files have changed in this diff Show More