Compare commits
5 Commits
930c741de6
...
f7b165f589
| Author | SHA1 | Date | |
|---|---|---|---|
| f7b165f589 | |||
| 08959e5f1c | |||
| e929a1efb1 | |||
| 8e29d7d2c0 | |||
| d3a1a77d6a |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
BIN
assets/jp/scrimmage/CHECK_SCRIMMAGE.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
BIN
assets/jp/scrimmage/OCR_TICKET.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
@ -86,6 +86,29 @@
|
||||
"Count": 2
|
||||
}
|
||||
},
|
||||
"Scrimmage": {
|
||||
"Scheduler": {
|
||||
"Enable": true,
|
||||
"NextRun": "2020-01-01 00:00:00",
|
||||
"Command": "Scrimmage",
|
||||
"ServerUpdate": "04:00"
|
||||
},
|
||||
"Scrimmage": {
|
||||
"OnError": "skip"
|
||||
},
|
||||
"Trinity": {
|
||||
"Stage": 1,
|
||||
"Count": 2
|
||||
},
|
||||
"Gehenna": {
|
||||
"Stage": 1,
|
||||
"Count": 2
|
||||
},
|
||||
"Millennium": {
|
||||
"Stage": 1,
|
||||
"Count": 2
|
||||
}
|
||||
},
|
||||
"TacticalChallenge": {
|
||||
"Scheduler": {
|
||||
"Enable": true,
|
||||
|
||||
@ -357,6 +357,91 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Scrimmage": {
|
||||
"Scheduler": {
|
||||
"Enable": {
|
||||
"type": "checkbox",
|
||||
"value": true,
|
||||
"option": [
|
||||
true,
|
||||
false
|
||||
]
|
||||
},
|
||||
"NextRun": {
|
||||
"type": "datetime",
|
||||
"value": "2020-01-01 00:00:00",
|
||||
"validate": "datetime"
|
||||
},
|
||||
"Command": {
|
||||
"type": "input",
|
||||
"value": "Scrimmage",
|
||||
"display": "hide"
|
||||
},
|
||||
"ServerUpdate": {
|
||||
"type": "input",
|
||||
"value": "04:00",
|
||||
"display": "hide"
|
||||
}
|
||||
},
|
||||
"Scrimmage": {
|
||||
"OnError": {
|
||||
"type": "select",
|
||||
"value": "skip",
|
||||
"option": [
|
||||
"stop",
|
||||
"skip"
|
||||
]
|
||||
}
|
||||
},
|
||||
"Trinity": {
|
||||
"Stage": {
|
||||
"type": "select",
|
||||
"value": 1,
|
||||
"option": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
]
|
||||
},
|
||||
"Count": {
|
||||
"type": "input",
|
||||
"value": 2
|
||||
}
|
||||
},
|
||||
"Gehenna": {
|
||||
"Stage": {
|
||||
"type": "select",
|
||||
"value": 1,
|
||||
"option": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
]
|
||||
},
|
||||
"Count": {
|
||||
"type": "input",
|
||||
"value": 2
|
||||
}
|
||||
},
|
||||
"Millennium": {
|
||||
"Stage": {
|
||||
"type": "select",
|
||||
"value": 1,
|
||||
"option": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
]
|
||||
},
|
||||
"Count": {
|
||||
"type": "input",
|
||||
"value": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"TacticalChallenge": {
|
||||
"Scheduler": {
|
||||
"Enable": {
|
||||
|
||||
@ -102,6 +102,27 @@ Schoolhouse:
|
||||
option: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
|
||||
Count: 2
|
||||
|
||||
Scrimmage:
|
||||
OnError:
|
||||
value: skip
|
||||
option: [ stop, skip ]
|
||||
|
||||
Trinity:
|
||||
Stage:
|
||||
value: 1
|
||||
option: [ 1, 2, 3, 4 ]
|
||||
Count: 2
|
||||
Gehenna:
|
||||
Stage:
|
||||
value: 1
|
||||
option: [ 1, 2, 3, 4 ]
|
||||
Count: 2
|
||||
Millennium:
|
||||
Stage:
|
||||
value: 1
|
||||
option: [ 1, 2, 3, 4 ]
|
||||
Count: 2
|
||||
|
||||
TacticalChallenge:
|
||||
PlayerSelect:
|
||||
value: 0
|
||||
|
||||
@ -16,6 +16,9 @@ Circle:
|
||||
Bounty:
|
||||
Scheduler:
|
||||
Enable: true
|
||||
Scrimmage:
|
||||
Scheduler:
|
||||
Enable: true
|
||||
TacticalChallenge:
|
||||
Scheduler:
|
||||
Enable: true
|
||||
@ -15,6 +15,7 @@
|
||||
"Mail",
|
||||
"Circle",
|
||||
"Bounty",
|
||||
"Scrimmage",
|
||||
"TacticalChallenge",
|
||||
"DataUpdate"
|
||||
]
|
||||
|
||||
@ -35,6 +35,12 @@ Daily:
|
||||
- Highway
|
||||
- DesertRailroad
|
||||
- Schoolhouse
|
||||
Scrimmage:
|
||||
- Scheduler
|
||||
- Scrimmage
|
||||
- Trinity
|
||||
- Gehenna
|
||||
- Millennium
|
||||
TacticalChallenge:
|
||||
- Scheduler
|
||||
- TacticalChallenge
|
||||
|
||||
@ -60,6 +60,21 @@ class GeneratedConfig:
|
||||
Schoolhouse_Stage = 1 # 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||
Schoolhouse_Count = 2
|
||||
|
||||
# Group `Scrimmage`
|
||||
Scrimmage_OnError = 'skip' # stop, skip
|
||||
|
||||
# Group `Trinity`
|
||||
Trinity_Stage = 1 # 1, 2, 3, 4
|
||||
Trinity_Count = 2
|
||||
|
||||
# Group `Gehenna`
|
||||
Gehenna_Stage = 1 # 1, 2, 3, 4
|
||||
Gehenna_Count = 2
|
||||
|
||||
# Group `Millennium`
|
||||
Millennium_Stage = 1 # 1, 2, 3, 4
|
||||
Millennium_Count = 2
|
||||
|
||||
# Group `TacticalChallenge`
|
||||
TacticalChallenge_PlayerSelect = 0 # 0, 1, 2, 3
|
||||
|
||||
|
||||
@ -34,6 +34,10 @@
|
||||
"name": "Bounty",
|
||||
"help": ""
|
||||
},
|
||||
"Scrimmage": {
|
||||
"name": "Scrimmage",
|
||||
"help": ""
|
||||
},
|
||||
"TacticalChallenge": {
|
||||
"name": "Tactical Challenge",
|
||||
"help": ""
|
||||
@ -294,6 +298,72 @@
|
||||
"help": "Sweep the selected stage for X times"
|
||||
}
|
||||
},
|
||||
"Scrimmage": {
|
||||
"_info": {
|
||||
"name": "Scrimmage Settings",
|
||||
"help": ""
|
||||
},
|
||||
"OnError": {
|
||||
"name": "Error Handling",
|
||||
"help": "Perform the selected action when an error occurs (ticket not enough or any invalid setting)",
|
||||
"stop": "Stop script",
|
||||
"skip": "Skip current task"
|
||||
}
|
||||
},
|
||||
"Trinity": {
|
||||
"_info": {
|
||||
"name": "Trinity",
|
||||
"help": ""
|
||||
},
|
||||
"Stage": {
|
||||
"name": "Select Stage",
|
||||
"help": "",
|
||||
"1": "01 - Trinity A",
|
||||
"2": "02 - Trinity B",
|
||||
"3": "03 - Trinity C",
|
||||
"4": "04 - Trinity D"
|
||||
},
|
||||
"Count": {
|
||||
"name": "Sweep X times",
|
||||
"help": "Sweep the selected stage for X times"
|
||||
}
|
||||
},
|
||||
"Gehenna": {
|
||||
"_info": {
|
||||
"name": "Gehenna",
|
||||
"help": ""
|
||||
},
|
||||
"Stage": {
|
||||
"name": "Select Stage",
|
||||
"help": "",
|
||||
"1": "01 - Gehenna A",
|
||||
"2": "02 - Gehenna B",
|
||||
"3": "03 - Gehenna C",
|
||||
"4": "04 - Gehenna D"
|
||||
},
|
||||
"Count": {
|
||||
"name": "Sweep X times",
|
||||
"help": "Sweep the selected stage for X times"
|
||||
}
|
||||
},
|
||||
"Millennium": {
|
||||
"_info": {
|
||||
"name": "Millennium",
|
||||
"help": ""
|
||||
},
|
||||
"Stage": {
|
||||
"name": "Select Stage",
|
||||
"help": "",
|
||||
"1": "01 - Millennium A",
|
||||
"2": "02 - Millennium B",
|
||||
"3": "03 - Millennium C",
|
||||
"4": "04 - Millennium D"
|
||||
},
|
||||
"Count": {
|
||||
"name": "Sweep X times",
|
||||
"help": "Sweep the selected stage for X times"
|
||||
}
|
||||
},
|
||||
"TacticalChallenge": {
|
||||
"_info": {
|
||||
"name": "Tactical Challenge Settings",
|
||||
|
||||
@ -34,6 +34,10 @@
|
||||
"name": "通缉悬赏",
|
||||
"help": ""
|
||||
},
|
||||
"Scrimmage": {
|
||||
"name": "学院交流会",
|
||||
"help": ""
|
||||
},
|
||||
"TacticalChallenge": {
|
||||
"name": "战术对抗赛",
|
||||
"help": "战术大赛 / 竞技场"
|
||||
@ -294,6 +298,72 @@
|
||||
"help": "扫荡所选择关卡 X 次"
|
||||
}
|
||||
},
|
||||
"Scrimmage": {
|
||||
"_info": {
|
||||
"name": "学院交流会设置",
|
||||
"help": ""
|
||||
},
|
||||
"OnError": {
|
||||
"name": "错误处理",
|
||||
"help": "当出现票券不足或设置有误等错误时,执行该操作",
|
||||
"stop": "停止脚本运行",
|
||||
"skip": "跳过当前任务"
|
||||
}
|
||||
},
|
||||
"Trinity": {
|
||||
"_info": {
|
||||
"name": "三一",
|
||||
"help": ""
|
||||
},
|
||||
"Stage": {
|
||||
"name": "选择关卡",
|
||||
"help": "",
|
||||
"1": "01 - 三一 A",
|
||||
"2": "02 - 三一 B",
|
||||
"3": "03 - 三一 C",
|
||||
"4": "04 - 三一 D"
|
||||
},
|
||||
"Count": {
|
||||
"name": "扫荡次数",
|
||||
"help": "扫荡所选择关卡 X 次"
|
||||
}
|
||||
},
|
||||
"Gehenna": {
|
||||
"_info": {
|
||||
"name": "格黑娜",
|
||||
"help": ""
|
||||
},
|
||||
"Stage": {
|
||||
"name": "选择关卡",
|
||||
"help": "",
|
||||
"1": "01 - 格黑娜 A",
|
||||
"2": "02 - 格黑娜 B",
|
||||
"3": "03 - 格黑娜 C",
|
||||
"4": "04 - 格黑娜 D"
|
||||
},
|
||||
"Count": {
|
||||
"name": "扫荡次数",
|
||||
"help": "扫荡所选择关卡 X 次"
|
||||
}
|
||||
},
|
||||
"Millennium": {
|
||||
"_info": {
|
||||
"name": "千年",
|
||||
"help": ""
|
||||
},
|
||||
"Stage": {
|
||||
"name": "选择关卡",
|
||||
"help": "",
|
||||
"1": "01 - 千年 A",
|
||||
"2": "02 - 千年 B",
|
||||
"3": "03 - 千年 C",
|
||||
"4": "04 - 千年 D"
|
||||
},
|
||||
"Count": {
|
||||
"name": "扫荡次数",
|
||||
"help": "扫荡所选择关卡 X 次"
|
||||
}
|
||||
},
|
||||
"TacticalChallenge": {
|
||||
"_info": {
|
||||
"name": "战术对抗赛设置",
|
||||
|
||||
@ -6,7 +6,7 @@ from module.base.button import Button, ButtonWrapper
|
||||
CHECK_GEHENNA = ButtonWrapper(
|
||||
name='CHECK_GEHENNA',
|
||||
jp=Button(
|
||||
file='./assets/jp/school_exchange/CHECK_GEHENNA.png',
|
||||
file='./assets/jp/scrimmage/CHECK_GEHENNA.png',
|
||||
area=(109, 149, 195, 177),
|
||||
search=(89, 129, 215, 197),
|
||||
color=(201, 205, 206),
|
||||
@ -17,7 +17,7 @@ CHECK_GEHENNA = ButtonWrapper(
|
||||
CHECK_MILLENNIUM = ButtonWrapper(
|
||||
name='CHECK_MILLENNIUM',
|
||||
jp=Button(
|
||||
file='./assets/jp/school_exchange/CHECK_MILLENNIUM.png',
|
||||
file='./assets/jp/scrimmage/CHECK_MILLENNIUM.png',
|
||||
area=(108, 148, 254, 178),
|
||||
search=(88, 128, 274, 198),
|
||||
color=(202, 206, 208),
|
||||
@ -25,10 +25,21 @@ CHECK_MILLENNIUM = ButtonWrapper(
|
||||
),
|
||||
en=None,
|
||||
)
|
||||
CHECK_SCRIMMAGE = ButtonWrapper(
|
||||
name='CHECK_SCRIMMAGE',
|
||||
jp=Button(
|
||||
file='./assets/jp/scrimmage/CHECK_SCRIMMAGE.png',
|
||||
area=(651, 90, 889, 130),
|
||||
search=(631, 70, 909, 150),
|
||||
color=(96, 119, 144),
|
||||
button=(651, 90, 889, 130),
|
||||
),
|
||||
en=None,
|
||||
)
|
||||
CHECK_TRINITY = ButtonWrapper(
|
||||
name='CHECK_TRINITY',
|
||||
jp=Button(
|
||||
file='./assets/jp/school_exchange/CHECK_TRINITY.png',
|
||||
file='./assets/jp/scrimmage/CHECK_TRINITY.png',
|
||||
area=(115, 148, 250, 178),
|
||||
search=(95, 128, 270, 198),
|
||||
color=(204, 208, 210),
|
||||
@ -36,10 +47,21 @@ CHECK_TRINITY = ButtonWrapper(
|
||||
),
|
||||
en=None,
|
||||
)
|
||||
OCR_TICKET = ButtonWrapper(
|
||||
name='OCR_TICKET',
|
||||
jp=Button(
|
||||
file='./assets/jp/scrimmage/OCR_TICKET.png',
|
||||
area=(195, 85, 235, 113),
|
||||
search=(175, 65, 255, 133),
|
||||
color=(206, 211, 215),
|
||||
button=(195, 85, 235, 113),
|
||||
),
|
||||
en=None,
|
||||
)
|
||||
SELECT_GEHENNA = ButtonWrapper(
|
||||
name='SELECT_GEHENNA',
|
||||
jp=Button(
|
||||
file='./assets/jp/school_exchange/SELECT_GEHENNA.png',
|
||||
file='./assets/jp/scrimmage/SELECT_GEHENNA.png',
|
||||
area=(1125, 275, 1224, 310),
|
||||
search=(1105, 255, 1244, 330),
|
||||
color=(207, 217, 225),
|
||||
@ -50,7 +72,7 @@ SELECT_GEHENNA = ButtonWrapper(
|
||||
SELECT_MILLENNIUM = ButtonWrapper(
|
||||
name='SELECT_MILLENNIUM',
|
||||
jp=Button(
|
||||
file='./assets/jp/school_exchange/SELECT_MILLENNIUM.png',
|
||||
file='./assets/jp/scrimmage/SELECT_MILLENNIUM.png',
|
||||
area=(1069, 381, 1217, 417),
|
||||
search=(1049, 361, 1237, 437),
|
||||
color=(206, 214, 222),
|
||||
@ -61,7 +83,7 @@ SELECT_MILLENNIUM = ButtonWrapper(
|
||||
SELECT_TRINITY = ButtonWrapper(
|
||||
name='SELECT_TRINITY',
|
||||
jp=Button(
|
||||
file='./assets/jp/school_exchange/SELECT_TRINITY.png',
|
||||
file='./assets/jp/scrimmage/SELECT_TRINITY.png',
|
||||
area=(1074, 165, 1221, 204),
|
||||
search=(1054, 145, 1241, 224),
|
||||
color=(213, 221, 228),
|
||||
@ -3,15 +3,9 @@ from enum import Enum
|
||||
|
||||
from module.base.timer import Timer
|
||||
from module.logger import logger
|
||||
from module.ocr.ocr import DigitCounter
|
||||
from module.ui.switch import Switch
|
||||
from tasks.base.page import page_tactical_challenge
|
||||
from tasks.base.ui import UI
|
||||
from tasks.tactical_challenge.assets.assets_tactical_challenge import *
|
||||
|
||||
SWITCH_SKIP = Switch('Skip_switch')
|
||||
SWITCH_SKIP.add_state('on', SKIP_ON)
|
||||
SWITCH_SKIP.add_state('off', SKIP_OFF)
|
||||
from tasks.tactical_challenge.ui import TacticalChallengeUI
|
||||
|
||||
|
||||
class TCStatus(Enum):
|
||||
@ -31,50 +25,12 @@ class TCStatus(Enum):
|
||||
FINISHED = -1
|
||||
|
||||
|
||||
class TacticalChallenge(UI):
|
||||
class TacticalChallenge(TacticalChallengeUI):
|
||||
select_players = (PLAYER_SELECT_FIRST, PLAYER_SELECT_SECOND, PLAYER_SELECT_THIRD)
|
||||
|
||||
def _get_ticket(self):
|
||||
"""
|
||||
Page:
|
||||
in: page_tactical_challenge
|
||||
"""
|
||||
ocr = DigitCounter(OCR_TICKET).ocr_single_line(self.device.image)
|
||||
# number of tickets remaining
|
||||
ticket, _, total = ocr
|
||||
if total == 0:
|
||||
logger.warning('Invalid ticket')
|
||||
return False, 5
|
||||
logger.attr('Ticket', ticket)
|
||||
|
||||
return True, ticket
|
||||
|
||||
def _get_reward(self):
|
||||
if self.match_color(GET_REWARD_DAILY):
|
||||
self.device.click(GET_REWARD_DAILY)
|
||||
logger.info('Get tc daily reward')
|
||||
return True
|
||||
if self.match_color(GET_REWARD_CREDIT):
|
||||
self.device.click(GET_REWARD_CREDIT)
|
||||
logger.info('Get tc credit reward')
|
||||
return True
|
||||
if self.match_color(GOT_REWARD_DAILY) and self.match_color(GOT_REWARD_CREDIT):
|
||||
logger.info('Both tc reward got')
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def _set_skip(self):
|
||||
"""
|
||||
Set skip switch to on
|
||||
:returns: True if switch is set, False if switch not found
|
||||
"""
|
||||
if not SWITCH_SKIP.appear(main=self):
|
||||
logger.info('Skip switch not found')
|
||||
return False
|
||||
SWITCH_SKIP.set('on', main=self)
|
||||
|
||||
return True
|
||||
@property
|
||||
def current_ticket(self):
|
||||
return self.config.stored.TacticalChallengeTicket.value
|
||||
|
||||
def _player_select(self, select):
|
||||
if select:
|
||||
@ -85,15 +41,13 @@ class TacticalChallenge(UI):
|
||||
def _handle_challenge(self, status):
|
||||
match status:
|
||||
case TCStatus.REWARD:
|
||||
if self._get_reward():
|
||||
if self.get_reward():
|
||||
return TCStatus.OCR
|
||||
case TCStatus.OCR:
|
||||
is_valid, ticket = self._get_ticket()
|
||||
if not is_valid:
|
||||
return status
|
||||
if ticket == 0:
|
||||
return TCStatus.FINISHED
|
||||
return TCStatus.SELECT
|
||||
if self.get_ticket():
|
||||
if self.current_ticket == 0:
|
||||
return TCStatus.FINISHED
|
||||
return TCStatus.SELECT
|
||||
case TCStatus.SELECT:
|
||||
self.appear_then_click(self.select)
|
||||
if self.appear(PREPARE_CHALLENGE):
|
||||
@ -103,7 +57,7 @@ class TacticalChallenge(UI):
|
||||
if not self.appear(PREPARE_CHALLENGE):
|
||||
return TCStatus.SKIP
|
||||
case TCStatus.SKIP:
|
||||
if not self._set_skip():
|
||||
if not self.set_skip():
|
||||
return TCStatus.SKIP
|
||||
return TCStatus.START
|
||||
case TCStatus.START:
|
||||
@ -118,12 +72,10 @@ class TacticalChallenge(UI):
|
||||
case TCStatus.WIN | TCStatus.LOSE:
|
||||
if self.appear_then_click(CHALLENGE_WIN) or self.appear_then_click(CHALLENGE_LOSE):
|
||||
return status
|
||||
is_valid, ticket = self._get_ticket()
|
||||
if not is_valid:
|
||||
return status
|
||||
if ticket == 0:
|
||||
return TCStatus.FINISHED
|
||||
return TCStatus.FINAL
|
||||
if self.get_ticket():
|
||||
if self.current_ticket == 0:
|
||||
return TCStatus.FINISHED
|
||||
return TCStatus.FINAL
|
||||
case TCStatus.FINAL | TCStatus.FINISHED:
|
||||
return status
|
||||
case _:
|
||||
|
||||
53
tasks/tactical_challenge/ui.py
Normal file
@ -0,0 +1,53 @@
|
||||
from module.base.timer import Timer
|
||||
from module.logger import logger
|
||||
from module.ocr.ocr import DigitCounter
|
||||
from module.ui.switch import Switch
|
||||
from tasks.base.ui import UI
|
||||
from tasks.tactical_challenge.assets.assets_tactical_challenge import *
|
||||
|
||||
SWITCH_SKIP = Switch('Skip_switch')
|
||||
SWITCH_SKIP.add_state('on', SKIP_ON)
|
||||
SWITCH_SKIP.add_state('off', SKIP_OFF)
|
||||
|
||||
|
||||
class TacticalChallengeUI(UI):
|
||||
def get_ticket(self):
|
||||
"""
|
||||
Page:
|
||||
in: page_tactical_challenge
|
||||
"""
|
||||
ticket, _, total = DigitCounter(OCR_TICKET).ocr_single_line(self.device.image)
|
||||
if total == 0:
|
||||
logger.warning('Invalid ticket')
|
||||
return False
|
||||
logger.attr('TacticalChallengeTicket', ticket)
|
||||
self.config.stored.TacticalChallengeTicket.set(ticket)
|
||||
return True
|
||||
|
||||
def get_reward(self):
|
||||
timer = Timer(10, 10).start()
|
||||
while 1:
|
||||
self.device.screenshot()
|
||||
if self.match_color(GOT_REWARD_DAILY) and self.match_color(GOT_REWARD_CREDIT):
|
||||
return True
|
||||
if self.match_color(GET_REWARD_DAILY):
|
||||
self.device.click(GET_REWARD_DAILY)
|
||||
logger.info('Get daily reward')
|
||||
if self.match_color(GET_REWARD_CREDIT):
|
||||
self.device.click(GET_REWARD_CREDIT)
|
||||
logger.info('Get credit reward')
|
||||
if timer.reached():
|
||||
return False
|
||||
|
||||
def set_skip(self):
|
||||
"""
|
||||
Set skip switch to on
|
||||
Returns:
|
||||
True if switch is set, False if switch not found
|
||||
"""
|
||||
if not SWITCH_SKIP.appear(main=self):
|
||||
logger.info('Skip switch not found')
|
||||
return False
|
||||
SWITCH_SKIP.set('on', main=self)
|
||||
|
||||
return True
|
||||