Merge pull request #675 from Zebartin/fix/assignment

Upd: Assignments (Shadow of the Ranger)
This commit is contained in:
LmeSzinc 2024-11-16 18:05:26 +08:00 committed by GitHub
commit 1928bcf2db
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 236 additions and 222 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -556,7 +556,7 @@ class KeywordExtract:
self.load_keywords(['本周任务', '本期任务'])
self.write_keywords(keyword_class='BattlePassMissionTab',
output_file='./tasks/battle_pass/keywords/mission_tab.py')
# self.generate_assignments()
self.generate_assignments()
self.generate_forgotten_hall_stages()
self.generate_daily_quests()
self.generate_battle_pass_quests()

View File

@ -59,7 +59,7 @@ def get_assignment_entry_data():
for expedition_namehash, expedition_id in expedition_namehash_to_id.items():
reward_id = expedition_id_to_reward_id[expedition_id]
item_ids = reward_id_to_item_ids[reward_id]
item_names = [item_id_to_namehash[x] for x in item_ids]
item_names = [item_id_to_namehash[x] for x in item_ids if x]
if len(item_names) == 1:
item = GenerateKeyword.find_keyword(item_names[0], lang='cn')[1]
if item in item_name_remap:
@ -128,6 +128,7 @@ class GenerateAssignmentEventGroup(GenerateKeyword):
def iter_keywords(self) -> Iterable[dict]:
yield dict(text_id=self.find_keyword('空间站特派', lang='cn')[0])
yield dict(text_id=self.find_keyword('关于波提欧的一切…', lang='cn')[0])
yield dict(text_id=self.find_keyword('游侠谜影', lang='cn')[0])
class GenerateAssignmentEventEntry(GenerateKeyword):
@ -141,5 +142,5 @@ class GenerateAssignmentEventEntry(GenerateKeyword):
if __name__ == "__main__":
from dev_tools.keywords.base import TextMap
TextMap.DATA_FOLDER = '../StarRailData'
TextMap.DATA_FOLDER = '../DanhengServer-Resources'
GenerateAssignment()()

View File

@ -68,6 +68,7 @@ def text_to_variable(text):
text = re.sub(r'[(),#"?!&%*]|</?\w+>', '', text)
# text = re.sub(r'[#_]?\d+(_times?)?', '', text)
text = re.sub(r'<color=#?\w+>', '', text)
text = re.sub(r'^\d+', '', text)
text = text.replace('é', 'e')
return text.strip('_')

View File

@ -153,9 +153,7 @@ class Switch:
if counter >= 1:
logger.warning(f'{self.name} switch {state} asset has evaluated to unknown too many times, '
f'asset should be re-verified')
return False
counter += 1
continue
# Click
if click_timer.reached():

View File

@ -242,6 +242,40 @@ OCR_ASSIGNMENT_TIME = ButtonWrapper(
button=(605, 564, 886, 589),
),
)
SHADOW_OF_THE_RANGER_CHECK = ButtonWrapper(
name='SHADOW_OF_THE_RANGER_CHECK',
cn=Button(
file='./assets/cn/assignment/ui/SHADOW_OF_THE_RANGER_CHECK.png',
area=(161, 100, 232, 117),
search=(141, 80, 252, 137),
color=(171, 166, 151),
button=(161, 100, 232, 117),
),
en=Button(
file='./assets/en/assignment/ui/SHADOW_OF_THE_RANGER_CHECK.png',
area=(165, 95, 197, 126),
search=(145, 75, 217, 146),
color=(187, 182, 166),
button=(165, 95, 197, 126),
),
)
SHADOW_OF_THE_RANGER_CLICK = ButtonWrapper(
name='SHADOW_OF_THE_RANGER_CLICK',
cn=Button(
file='./assets/cn/assignment/ui/SHADOW_OF_THE_RANGER_CLICK.png',
area=(161, 100, 232, 117),
search=(141, 80, 252, 137),
color=(88, 87, 86),
button=(161, 100, 232, 117),
),
en=Button(
file='./assets/en/assignment/ui/SHADOW_OF_THE_RANGER_CLICK.png',
area=(165, 95, 197, 126),
search=(145, 75, 217, 146),
color=(80, 79, 77),
button=(165, 95, 197, 126),
),
)
SPACE_STATION_TASK_FORCE_CHECK = ButtonWrapper(
name='SPACE_STATION_TASK_FORCE_CHECK',
cn=Button(

View File

@ -5,6 +5,7 @@ import tasks.assignment.keywords.event_entry as KEYWORDS_ASSIGNMENT_EVENT_ENTRY
import tasks.assignment.keywords.event_group as KEYWORDS_ASSIGNMENT_EVENT_GROUP
from tasks.assignment.keywords.classes import *
CURRENT_EVENT_GROUP = KEYWORDS_ASSIGNMENT_EVENT_GROUP.Shadow_of_the_Ranger
KEYWORDS_ASSIGNMENT_GROUP.Character_Materials.entries = (
KEYWORDS_ASSIGNMENT_ENTRY.Nine_Billion_Names,
KEYWORDS_ASSIGNMENT_ENTRY.Destruction_of_the_Destroyer,
@ -30,37 +31,12 @@ KEYWORDS_ASSIGNMENT_GROUP.Synthesis_Materials.entries = (
KEYWORDS_ASSIGNMENT_ENTRY.Fragments_of_Illusory_Dreams,
KEYWORDS_ASSIGNMENT_ENTRY.Scalpel_and_Screwdriver,
)
KEYWORDS_ASSIGNMENT_EVENT_GROUP.All_About_Boothill.entries = (
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Activate_Genetic_Samples,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Reproduce_Experimental_Data,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Burned_Warehouse,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Car_Thief,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Synesthesia_Beacon_Function_Iteration,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Hunters_Wanted_No_Newbies_Please,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Peaceful_Life_for_Good_People,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Closed_Beta_Test_Recruitment,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Protect_Digital_Exhibits,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Final_Survivor,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Water_Pollution_Control,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Hook_Line_and_Sinker,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Investigation_Order_Boothill,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Volunteers_Wanted,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Burn_Treatment,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.I_Want_to_Speak_to_Your_Manager,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Licensed_Product_Damage_Assessment,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Annoying_Flies,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Urgent_Protection_Services,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.A_Dream_Is_Born,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Wanted_Boothill,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Casual_Cowboy,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Dangerous_Journey,
KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Crossing_the_Fire_Line,
)
CURRENT_EVENT_GROUP.entries = tuple(AssignmentEventEntry.instances.values())
for group in (
KEYWORDS_ASSIGNMENT_GROUP.Character_Materials,
KEYWORDS_ASSIGNMENT_GROUP.EXP_Materials_Credits,
KEYWORDS_ASSIGNMENT_GROUP.Synthesis_Materials,
KEYWORDS_ASSIGNMENT_EVENT_GROUP.All_About_Boothill,
CURRENT_EVENT_GROUP,
):
for entry in group.entries:
assert entry.group is None

View File

@ -3,188 +3,116 @@ from .classes import AssignmentEventEntry
# This file was auto-generated, do not modify it manually. To generate:
# ``` python -m dev_tools.keyword_extract ```
Activate_Genetic_Samples = AssignmentEventEntry(
Analyzing_Genetic_Samples = AssignmentEventEntry(
id=1,
name='Activate_Genetic_Samples',
cn='激活基因样本',
cht='激發基因樣本',
en='Activate Genetic Samples',
jp='遺伝子サンプルの活性化',
es='Activación de muestras genéticas',
name='Analyzing_Genetic_Samples',
cn='解析基因样本',
cht='解析基因樣本',
en='Analyzing Genetic Samples',
jp='遺伝子サンプル解析',
es='Análisis de muestras genéticas',
)
Reproduce_Experimental_Data = AssignmentEventEntry(
Ranger_Online_Looking_for_Group = AssignmentEventEntry(
id=2,
name='Reproduce_Experimental_Data',
cn='复现实验数据',
cht='重現實驗數據',
en='Reproduce Experimental Data',
jp='実験データの復元',
es='Recreación de datos experimentales',
name='Ranger_Online_Looking_for_Group',
cn='在线等一游侠进组',
cht='線上等一遊俠進組',
en='Ranger Online: Looking for Group',
jp='レンジャー募集中',
es='Se busca informante para unirse al grupo',
)
Burned_Warehouse = AssignmentEventEntry(
Double_Symphony = AssignmentEventEntry(
id=3,
name='Burned_Warehouse',
cn='仓库被烧',
cht='倉庫被燒',
en='Burned Warehouse',
jp='燃えた倉庫',
es='Almacén incinerado',
name='Double_Symphony',
cn='双重奏',
cht='雙重奏',
en='Double Symphony',
jp='二重奏',
es='Doble sinfonía',
)
Car_Thief = AssignmentEventEntry(
Analyze_Memory_Zone_Meme = AssignmentEventEntry(
id=4,
name='Car_Thief',
cn='███的偷车贼!',
cht='███的偷車賊!',
en='███████ Car Thief!',
jp='███の車泥棒!',
es='¡████ ladrón de autos!',
name='Analyze_Memory_Zone_Meme',
cn='解析忆域迷因',
cht='解析憶域迷因',
en='Analyze Memory Zone Meme',
jp='記憶域ミームの解析',
es='Análisis de Meme de la Zona de los Recuerdos',
)
Synesthesia_Beacon_Function_Iteration = AssignmentEventEntry(
Memory_Restoration_Report = AssignmentEventEntry(
id=5,
name='Synesthesia_Beacon_Function_Iteration',
cn='联觉信标功能迭代',
cht='聯覺信標功能更新',
en='Synesthesia Beacon Function Iteration',
jp='共感覚ビーコン機能アップデート',
es='Iteración de funciones de la baliza sinestésica',
name='Memory_Restoration_Report',
cn='记忆修复报告',
cht='記憶修正報告',
en='Memory Restoration Report',
jp='記憶修復報告',
es='Informe de recuperación de recuerdos',
)
Hunters_Wanted_No_Newbies_Please = AssignmentEventEntry(
Beacon_Data_Decryption = AssignmentEventEntry(
id=6,
name='Hunters_Wanted_No_Newbies_Please',
cn='来猎人,菜鸟勿扰',
cht='來獵人,菜鳥勿擾',
en='Hunters Wanted, No Newbies Please',
jp='プロハンター歓迎、初心者お断り',
es='Se necesitan cazadores. Novatos abstenerse',
name='Beacon_Data_Decryption',
cn='信标内容破译',
cht='信標內容破譯',
en='Beacon Data Decryption',
jp='ビーコンの内容解読',
es='Desencriptación de datos de baliza',
)
Peaceful_Life_for_Good_People = AssignmentEventEntry(
Robin_Fan_Party = AssignmentEventEntry(
id=7,
name='Peaceful_Life_for_Good_People',
cn='好人一生平安',
cht='好人一生平安',
en='Peaceful Life for Good People',
jp='善人は一生安泰',
es='Vida pacífica para la gente de bien',
name='Robin_Fan_Party',
cn='知更鸟粉丝派对',
cht='知更鳥粉絲派對',
en="Robin's Fan Party",
jp='ロビンファンパーティー',
es='Fiesta de fans de Robin',
)
Closed_Beta_Test_Recruitment = AssignmentEventEntry(
Futile_Eradication = AssignmentEventEntry(
id=8,
name='Closed_Beta_Test_Recruitment',
cn='征集内测玩家',
cht='徵求封測玩家',
en='Closed Beta Test Recruitment',
jp='テスター募集',
es='Reclutamiento para beta cerrada',
name='Futile_Eradication',
cn='野火烧不尽',
cht='野火燒不盡',
en='Futile Eradication',
jp='消せない野火',
es='El incendio no se extingue',
)
Protect_Digital_Exhibits = AssignmentEventEntry(
Bounty_for_Witnesses = AssignmentEventEntry(
id=9,
name='Protect_Digital_Exhibits',
cn='保护数字展品',
cht='保護數位展品',
en='Protect Digital Exhibits',
jp='デジタル展示品を守れ',
es='Protección de objetos de exposición digitales',
name='Bounty_for_Witnesses',
cn='重金寻求目击者',
cht='重金尋求目擊者',
en='Bounty for Witnesses',
jp='目撃情報に高額報酬',
es='Recompensa para testigos',
)
Final_Survivor = AssignmentEventEntry(
New_Student_Protection_Plan = AssignmentEventEntry(
id=10,
name='Final_Survivor',
cn='最后的生还者',
cht='最後的生還者',
en='Final Survivor',
jp='最後の生還者',
es='Última superviviente',
name='New_Student_Protection_Plan',
cn='守护新生计划',
cht='守護新生計畫',
en='New Student Protection Plan',
jp='新生ピノコニー・ガーディアン計画',
es='Plan de protección de nuevos estudiantes',
)
Water_Pollution_Control = AssignmentEventEntry(
Big_Data_Analysis = AssignmentEventEntry(
id=11,
name='Water_Pollution_Control',
cn='水域排污',
cht='水域排汙',
en='Water Pollution Control',
jp='水質汚染',
es='Control de contaminación acuática',
name='Big_Data_Analysis',
cn='大数据分析',
cht='大資料分析',
en='Big Data Analysis',
jp='ビッグデータ分析',
es='Análisis de datos masivos',
)
Hook_Line_and_Sinker = AssignmentEventEntry(
Banana_Conspiracy = AssignmentEventEntry(
id=12,
name='Hook_Line_and_Sinker',
cn='愿者上钩',
cht='願者上鉤',
en='Hook, Line, and Sinker',
jp='いずれ捕まる',
es='Quien muerde el anzuelo es porque quiere',
)
Investigation_Order_Boothill = AssignmentEventEntry(
id=13,
name='Investigation_Order_Boothill',
cn='追查令:波提欧',
cht='追查令:波提歐',
en='Investigation Order: Boothill',
jp='調査命令:ブートヒル',
es='Orden de investigación: Boothill',
)
Volunteers_Wanted = AssignmentEventEntry(
id=14,
name='Volunteers_Wanted',
cn='寻找志愿者',
cht='尋找志向者',
en='Volunteers Wanted',
jp='ボランティアを探せ',
es='Se necesitan voluntarios',
)
Burn_Treatment = AssignmentEventEntry(
id=15,
name='Burn_Treatment',
cn='烧伤治疗',
cht='燒傷治療',
en='Burn Treatment',
jp='火傷の治療',
es='Tratamiento cauterizador',
)
I_Want_to_Speak_to_Your_Manager = AssignmentEventEntry(
id=16,
name='I_Want_to_Speak_to_Your_Manager',
cn='去把你们经理喊过来',
cht='叫你們經理出來',
en='I Want to Speak to Your Manager',
jp='責任者を呼べ',
es='Quiero hablar con su gerente',
)
Licensed_Product_Damage_Assessment = AssignmentEventEntry(
id=17,
name='Licensed_Product_Damage_Assessment',
cn='授权产品定损',
cht='授權產品損失鑑定',
en='Licensed Product Damage Assessment',
jp='ライセンス製品の損失額評価',
es='Evaluación de pérdidas de productos autorizados',
)
Annoying_Flies = AssignmentEventEntry(
id=18,
name='Annoying_Flies',
cn='烦人的苍蝇',
cht='煩人的蒼蠅',
en='Annoying Flies',
jp='鬱陶しいハエ',
es='Moscas molestas',
)
Urgent_Protection_Services = AssignmentEventEntry(
id=19,
name='Urgent_Protection_Services',
cn='紧急护卫',
cht='緊急護衛',
en='Urgent Protection Services',
jp='緊急護衛',
es='Se necesita protección urgente',
)
A_Dream_Is_Born = AssignmentEventEntry(
id=20,
name='A_Dream_Is_Born',
cn='星梦起航',
cht='星夢啟航',
en='A Dream Is Born',
jp='星の夢の門出',
es='Ha nacido una estrella',
name='Banana_Conspiracy',
cn='香蕉疑云',
cht='香蕉疑雲',
en='Banana Conspiracy',
jp='バナナの謎',
es='Conspiración bananera',
)
Wanted_Boothill = AssignmentEventEntry(
id=21,
id=13,
name='Wanted_Boothill',
cn='通缉令:波提欧',
cht='通緝令:波提歐',
@ -192,30 +120,102 @@ Wanted_Boothill = AssignmentEventEntry(
jp='指名手配:ブートヒル',
es='Se busca: Boothill',
)
Casual_Cowboy = AssignmentEventEntry(
Grand_Cleaning_Physically = AssignmentEventEntry(
id=14,
name='Grand_Cleaning_Physically',
cn='大清洗(物理意义)',
cht='大清洗(物理意義)',
en='Grand Cleaning (Physically)',
jp='大掃除(文字通りの意味で)',
es='Gran limpieza (en el sentido físico)',
)
Need_Info_on_Silvergun_Shura = AssignmentEventEntry(
id=15,
name='Need_Info_on_Silvergun_Shura',
cn='求科普银枪•修罗',
cht='說明一下銀槍•修羅',
en='Need Info on Silvergun Shura',
jp='シルバーガン・修羅サンについて知りたい',
es='Se busca información sobre Shura Pistola de Plata',
)
k_Words_Frame_by_Frame_Analysis = AssignmentEventEntry(
id=16,
name='k_Words_Frame_by_Frame_Analysis',
cn='逐帧分析万字解读',
cht='逐幀分析萬字解讀',
en='10k Words Frame-by-Frame Analysis',
jp='フレームごとの詳細な分析および解読',
es='Análisis fotograma a fotograma en 10000 palabras',
)
Let_Fire_Cleanse_All = AssignmentEventEntry(
id=17,
name='Let_Fire_Cleanse_All',
cn='让火焰净化一切',
cht='讓火焰淨化一切',
en='Let Fire Cleanse All',
jp='炎で全てを浄化',
es='Que las llamas lo purifiquen todo',
)
Night_at_Dreamflux_Reef = AssignmentEventEntry(
id=18,
name='Night_at_Dreamflux_Reef',
cn='流梦礁之夜',
cht='流夢礁之夜',
en='Night at Dreamflux Reef',
jp='ドリームリーフ・ナイト',
es='Noche en el Arrecife Flujosueño',
)
Seven_Glasses_of_Financial_Forgetfulness = AssignmentEventEntry(
id=19,
name='Seven_Glasses_of_Financial_Forgetfulness',
cn='七杯忘钱水',
cht='七杯忘錢水',
en='Seven Glasses of Financial Forgetfulness',
jp='7杯の代金未払いのドリンク',
es='Siete copas de olvido monetario',
)
Big_Bad_Boothill = AssignmentEventEntry(
id=20,
name='Big_Bad_Boothill',
cn='罪大恶极波提欧',
cht='罪大惡極波提歐',
en='Big Bad Boothill',
jp='極悪人のブートヒル',
es='Boothill, ese felón',
)
To_Save_the_School_We = AssignmentEventEntry(
id=21,
name='To_Save_the_School_We',
cn='为了拯救学校我们…',
cht='我們為了拯救學校……',
en='To Save the School, We...',
jp='大学の危機を救うため…',
es='Para salvar la escuela, nosotros...',
)
Investigate_Memoria_Changes = AssignmentEventEntry(
id=22,
name='Casual_Cowboy',
cn='牛仔不忙',
cht='牛仔不忙',
en='Casual Cowboy',
jp='暇を持て余したカウボーイ',
es='Vaquero ocioso',
name='Investigate_Memoria_Changes',
cn='调查忆质变化',
cht='調查憶質變化',
en='Investigate Memoria Changes',
jp='憶質変化の調査',
es='Investigación de cambios en la memoria',
)
Dangerous_Journey = AssignmentEventEntry(
Missing_Beacon = AssignmentEventEntry(
id=23,
name='Dangerous_Journey',
cn='危险之旅',
cht='危險之旅',
en='Dangerous Journey',
jp='危険な旅',
es='Viaje peligroso',
name='Missing_Beacon',
cn='消失的信标',
cht='消失的信標',
en='Missing Beacon',
jp='消えたビーコン',
es='Baliza desaparecida',
)
Crossing_the_Fire_Line = AssignmentEventEntry(
Harmonic_Resonance = AssignmentEventEntry(
id=24,
name='Crossing_the_Fire_Line',
cn='穿越火线',
cht='穿越火線',
en='Crossing the Fire Line',
jp='クロスファイア',
es='Cruzando la línea de fuego',
name='Harmonic_Resonance',
cn='谐乐共振',
cht='諧樂共振',
en='Harmonic Resonance',
jp='共鳴するハーモニー',
es='Resonancia armónica',
)

View File

@ -21,3 +21,12 @@ All_About_Boothill = AssignmentEventGroup(
jp='ブートヒルに関するすべて…',
es='Todo sobre Boothill...',
)
Shadow_of_the_Ranger = AssignmentEventGroup(
id=3,
name='Shadow_of_the_Ranger',
cn='游侠谜影',
cht='遊俠謎影',
en='Shadow of the Ranger',
jp='レンジャーの影',
es='Sombra del Vigilante',
)

View File

@ -39,14 +39,14 @@ class AssignmentOcr(Ocr):
(KEYWORDS_ASSIGNMENT_ENTRY.Akashic_Records, '阿[未][夏复]记录'),
(KEYWORDS_ASSIGNMENT_ENTRY.Legend_of_the_Puppet_Master, '^师传说'),
(KEYWORDS_ASSIGNMENT_ENTRY.The_Wages_of_Humanity, '[赠]养人类'),
(KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Car_Thief, '.*的偷车贼.*'),
(KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Synesthesia_Beacon_Function_Iteration,
'联觉信标功能[送]代'),
# (KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Car_Thief, '.*的偷车贼.*'),
# (KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Synesthesia_Beacon_Function_Iteration,
# '联觉信标功能[送]代'),
],
'en': [
# (KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Food_Improvement_Plan.name,
# 'Food\s*[I]{0}mprovement Plan'),
(KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Car_Thief, '.*Car Thief.*'),
# (KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Car_Thief, '.*Car Thief.*'),
]
}
@ -110,15 +110,10 @@ ASSIGNMENT_GROUP_SWITCH = AssignmentGroupSwitch(
'AssignmentGroupSwitch',
is_selector=True
)
# ASSIGNMENT_GROUP_SWITCH.add_state(
# KEYWORDS_ASSIGNMENT_EVENT_GROUP.Space_Station_Task_Force,
# check_button=SPACE_STATION_TASK_FORCE_CHECK,
# click_button=SPACE_STATION_TASK_FORCE_CLICK
# )
ASSIGNMENT_GROUP_SWITCH.add_state(
KEYWORDS_ASSIGNMENT_EVENT_GROUP.All_About_Boothill,
check_button=ALL_ABOUT_BOOTHILL_CHECK,
click_button=ALL_ABOUT_BOOTHILL_CLICK
CURRENT_EVENT_GROUP,
check_button=SHADOW_OF_THE_RANGER_CHECK,
click_button=SHADOW_OF_THE_RANGER_CLICK
)
ASSIGNMENT_GROUP_SWITCH.add_state(
KEYWORDS_ASSIGNMENT_GROUP.Character_Materials,