Merge branch 'bug_fix' into dev

This commit is contained in:
LmeSzinc 2024-05-15 19:15:08 +08:00
commit d92cc3bff2
49 changed files with 1243 additions and 778 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -5,6 +5,22 @@ from dev_tools.keywords.base import UI_LANGUAGES, GenerateKeyword
from module.config.utils import deep_get
def resort(dic: dict):
# Poor assigment sort for 2.2
order = [
1008, 1007, 1006, 1005, 1004, 1003, 1002, 1001,
3001, 2001, 4001,
5008, 5006, 5005, 5003, 5002, 5007, 5004, 5001,
]
out = {}
for index in order:
value = dic.pop(index)
out[index] = value
for k, v, in dic.items():
out[k] = v
return out
@cache
def get_assignment_entry_data():
"""
@ -16,6 +32,9 @@ def get_assignment_entry_data():
deep_get(expedition, 'Name.Hash'): deep_get(expedition, 'ExpeditionID')
for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionData.json').values()
}
rev = {v: k for k, v in expedition_namehash_to_id.items()}
rev = resort(rev)
expedition_namehash_to_id = {v: k for k, v in rev.items()}
expedition_id_to_reward_id = {
deep_get(expedition, '4.2.ExpeditionID'): deep_get(expedition, '4.2.RewardID')
for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionReward.json').values()
@ -119,5 +138,6 @@ class GenerateAssignmentEventEntry(GenerateKeyword):
if __name__ == "__main__":
from dev_tools.keywords.base import TextMap
TextMap.DATA_FOLDER = '../StarRailData'
GenerateAssignment()()

View File

@ -55,8 +55,13 @@ class Button(Resource):
def image(self):
return load_image(self.file, self.area)
@cached_property
def image_binary(self):
return rgb2gray(self.image)
def resource_release(self):
del_cached_property(self, 'image')
del_cached_property(self, 'image_binary')
self.clear_offset()
def __str__(self):
@ -113,6 +118,29 @@ class Button(Resource):
self._button_offset = np.array(point) + self.search[:2] - self.area[:2]
return sim > similarity
def match_template_binary(self, image, similarity=0.85, direct_match=False) -> bool:
"""
Detects assets by template matching.
To Some buttons, its location may not be static, `_button_offset` will be set.
Args:
image: Screenshot.
similarity (float): 0-1.
direct_match: True to ignore `self.search`
Returns:
bool.
"""
if not direct_match:
image = crop(image, self.search, copy=False)
image = rgb2gray(image)
res = cv2.matchTemplate(self.image_binary, image, cv2.TM_CCOEFF_NORMED)
_, sim, _, point = cv2.minMaxLoc(res)
self._button_offset = np.array(point) + self.search[:2] - self.area[:2]
return sim > similarity
def match_multi_template(self, image, similarity=0.85, direct_match=False):
"""
Detects assets by template matching, return multiple reults
@ -225,6 +253,13 @@ class ButtonWrapper(Resource):
return True
return False
def match_template_binary(self, image, similarity=0.85, direct_match=False) -> bool:
for assets in self.buttons:
if assets.match_template_binary(image, similarity=similarity, direct_match=direct_match):
self._matched_button = assets
return True
return False
def match_multi_template(self, image, similarity=0.85, threshold=5, direct_match=False):
"""
Detects assets by template matching, return multiple results

View File

@ -1076,100 +1076,100 @@
"type": "select",
"value": "Nameless_Land_Nameless_People",
"option": [
"Nine_Billion_Names",
"Destruction_of_the_Destroyer",
"Winter_Soldiers",
"Born_to_Obey",
"Root_Out_the_Turpitude",
"Fire_Lord_Inflames_Blades_of_War",
"A_Startling_Night_Terror",
"Tranquility_of_Vimala_bhumi",
"Nameless_Land_Nameless_People",
"A_Startling_Night_Terror",
"Fire_Lord_Inflames_Blades_of_War",
"Root_Out_the_Turpitude",
"Born_to_Obey",
"Winter_Soldiers",
"Destruction_of_the_Destroyer",
"Nine_Billion_Names",
"Akashic_Records",
"Nameless_Land_Nameless_People",
"The_Invisible_Hand",
"Abandoned_and_Insulted",
"Spring_of_Life",
"The_Land_of_Gold",
"The_Blossom_in_the_Storm",
"Legend_of_the_Puppet_Master",
"Scalpel_and_Screwdriver",
"The_Wages_of_Humanity",
"Legend_of_the_Puppet_Master",
"The_Land_of_Gold",
"Spring_of_Life",
"Fragments_of_Illusory_Dreams",
"Scalpel_and_Screwdriver"
"The_Blossom_in_the_Storm",
"Abandoned_and_Insulted"
]
},
"Name_2": {
"type": "select",
"value": "Akashic_Records",
"option": [
"Nine_Billion_Names",
"Destruction_of_the_Destroyer",
"Winter_Soldiers",
"Born_to_Obey",
"Root_Out_the_Turpitude",
"Fire_Lord_Inflames_Blades_of_War",
"A_Startling_Night_Terror",
"Tranquility_of_Vimala_bhumi",
"Nameless_Land_Nameless_People",
"A_Startling_Night_Terror",
"Fire_Lord_Inflames_Blades_of_War",
"Root_Out_the_Turpitude",
"Born_to_Obey",
"Winter_Soldiers",
"Destruction_of_the_Destroyer",
"Nine_Billion_Names",
"Akashic_Records",
"Nameless_Land_Nameless_People",
"The_Invisible_Hand",
"Abandoned_and_Insulted",
"Spring_of_Life",
"The_Land_of_Gold",
"The_Blossom_in_the_Storm",
"Legend_of_the_Puppet_Master",
"Scalpel_and_Screwdriver",
"The_Wages_of_Humanity",
"Legend_of_the_Puppet_Master",
"The_Land_of_Gold",
"Spring_of_Life",
"Fragments_of_Illusory_Dreams",
"Scalpel_and_Screwdriver"
"The_Blossom_in_the_Storm",
"Abandoned_and_Insulted"
]
},
"Name_3": {
"type": "select",
"value": "The_Invisible_Hand",
"option": [
"Nine_Billion_Names",
"Destruction_of_the_Destroyer",
"Winter_Soldiers",
"Born_to_Obey",
"Root_Out_the_Turpitude",
"Fire_Lord_Inflames_Blades_of_War",
"A_Startling_Night_Terror",
"Tranquility_of_Vimala_bhumi",
"Nameless_Land_Nameless_People",
"A_Startling_Night_Terror",
"Fire_Lord_Inflames_Blades_of_War",
"Root_Out_the_Turpitude",
"Born_to_Obey",
"Winter_Soldiers",
"Destruction_of_the_Destroyer",
"Nine_Billion_Names",
"Akashic_Records",
"Nameless_Land_Nameless_People",
"The_Invisible_Hand",
"Abandoned_and_Insulted",
"Spring_of_Life",
"The_Land_of_Gold",
"The_Blossom_in_the_Storm",
"Legend_of_the_Puppet_Master",
"Scalpel_and_Screwdriver",
"The_Wages_of_Humanity",
"Legend_of_the_Puppet_Master",
"The_Land_of_Gold",
"Spring_of_Life",
"Fragments_of_Illusory_Dreams",
"Scalpel_and_Screwdriver"
"The_Blossom_in_the_Storm",
"Abandoned_and_Insulted"
]
},
"Name_4": {
"type": "select",
"value": "Nine_Billion_Names",
"option": [
"Nine_Billion_Names",
"Destruction_of_the_Destroyer",
"Winter_Soldiers",
"Born_to_Obey",
"Root_Out_the_Turpitude",
"Fire_Lord_Inflames_Blades_of_War",
"A_Startling_Night_Terror",
"Tranquility_of_Vimala_bhumi",
"Nameless_Land_Nameless_People",
"A_Startling_Night_Terror",
"Fire_Lord_Inflames_Blades_of_War",
"Root_Out_the_Turpitude",
"Born_to_Obey",
"Winter_Soldiers",
"Destruction_of_the_Destroyer",
"Nine_Billion_Names",
"Akashic_Records",
"Nameless_Land_Nameless_People",
"The_Invisible_Hand",
"Abandoned_and_Insulted",
"Spring_of_Life",
"The_Land_of_Gold",
"The_Blossom_in_the_Storm",
"Legend_of_the_Puppet_Master",
"Scalpel_and_Screwdriver",
"The_Wages_of_Humanity",
"Legend_of_the_Puppet_Master",
"The_Land_of_Gold",
"Spring_of_Life",
"Fragments_of_Illusory_Dreams",
"Scalpel_and_Screwdriver"
"The_Blossom_in_the_Storm",
"Abandoned_and_Insulted"
]
},
"Duration": {

View File

@ -119,10 +119,10 @@ class GeneratedConfig:
BattlePassStorage_BattlePassQuestTrailblazePower = {}
# Group `Assignment`
Assignment_Name_1 = 'Nameless_Land_Nameless_People' # Nine_Billion_Names, Destruction_of_the_Destroyer, Winter_Soldiers, Born_to_Obey, Root_Out_the_Turpitude, Fire_Lord_Inflames_Blades_of_War, A_Startling_Night_Terror, Tranquility_of_Vimala_bhumi, Nameless_Land_Nameless_People, Akashic_Records, The_Invisible_Hand, Abandoned_and_Insulted, Spring_of_Life, The_Land_of_Gold, The_Blossom_in_the_Storm, Legend_of_the_Puppet_Master, The_Wages_of_Humanity, Fragments_of_Illusory_Dreams, Scalpel_and_Screwdriver
Assignment_Name_2 = 'Akashic_Records' # Nine_Billion_Names, Destruction_of_the_Destroyer, Winter_Soldiers, Born_to_Obey, Root_Out_the_Turpitude, Fire_Lord_Inflames_Blades_of_War, A_Startling_Night_Terror, Tranquility_of_Vimala_bhumi, Nameless_Land_Nameless_People, Akashic_Records, The_Invisible_Hand, Abandoned_and_Insulted, Spring_of_Life, The_Land_of_Gold, The_Blossom_in_the_Storm, Legend_of_the_Puppet_Master, The_Wages_of_Humanity, Fragments_of_Illusory_Dreams, Scalpel_and_Screwdriver
Assignment_Name_3 = 'The_Invisible_Hand' # Nine_Billion_Names, Destruction_of_the_Destroyer, Winter_Soldiers, Born_to_Obey, Root_Out_the_Turpitude, Fire_Lord_Inflames_Blades_of_War, A_Startling_Night_Terror, Tranquility_of_Vimala_bhumi, Nameless_Land_Nameless_People, Akashic_Records, The_Invisible_Hand, Abandoned_and_Insulted, Spring_of_Life, The_Land_of_Gold, The_Blossom_in_the_Storm, Legend_of_the_Puppet_Master, The_Wages_of_Humanity, Fragments_of_Illusory_Dreams, Scalpel_and_Screwdriver
Assignment_Name_4 = 'Nine_Billion_Names' # Nine_Billion_Names, Destruction_of_the_Destroyer, Winter_Soldiers, Born_to_Obey, Root_Out_the_Turpitude, Fire_Lord_Inflames_Blades_of_War, A_Startling_Night_Terror, Tranquility_of_Vimala_bhumi, Nameless_Land_Nameless_People, Akashic_Records, The_Invisible_Hand, Abandoned_and_Insulted, Spring_of_Life, The_Land_of_Gold, The_Blossom_in_the_Storm, Legend_of_the_Puppet_Master, The_Wages_of_Humanity, Fragments_of_Illusory_Dreams, Scalpel_and_Screwdriver
Assignment_Name_1 = 'Nameless_Land_Nameless_People' # Tranquility_of_Vimala_bhumi, A_Startling_Night_Terror, Fire_Lord_Inflames_Blades_of_War, Root_Out_the_Turpitude, Born_to_Obey, Winter_Soldiers, Destruction_of_the_Destroyer, Nine_Billion_Names, Akashic_Records, Nameless_Land_Nameless_People, The_Invisible_Hand, Scalpel_and_Screwdriver, The_Wages_of_Humanity, Legend_of_the_Puppet_Master, The_Land_of_Gold, Spring_of_Life, Fragments_of_Illusory_Dreams, The_Blossom_in_the_Storm, Abandoned_and_Insulted
Assignment_Name_2 = 'Akashic_Records' # Tranquility_of_Vimala_bhumi, A_Startling_Night_Terror, Fire_Lord_Inflames_Blades_of_War, Root_Out_the_Turpitude, Born_to_Obey, Winter_Soldiers, Destruction_of_the_Destroyer, Nine_Billion_Names, Akashic_Records, Nameless_Land_Nameless_People, The_Invisible_Hand, Scalpel_and_Screwdriver, The_Wages_of_Humanity, Legend_of_the_Puppet_Master, The_Land_of_Gold, Spring_of_Life, Fragments_of_Illusory_Dreams, The_Blossom_in_the_Storm, Abandoned_and_Insulted
Assignment_Name_3 = 'The_Invisible_Hand' # Tranquility_of_Vimala_bhumi, A_Startling_Night_Terror, Fire_Lord_Inflames_Blades_of_War, Root_Out_the_Turpitude, Born_to_Obey, Winter_Soldiers, Destruction_of_the_Destroyer, Nine_Billion_Names, Akashic_Records, Nameless_Land_Nameless_People, The_Invisible_Hand, Scalpel_and_Screwdriver, The_Wages_of_Humanity, Legend_of_the_Puppet_Master, The_Land_of_Gold, Spring_of_Life, Fragments_of_Illusory_Dreams, The_Blossom_in_the_Storm, Abandoned_and_Insulted
Assignment_Name_4 = 'Nine_Billion_Names' # Tranquility_of_Vimala_bhumi, A_Startling_Night_Terror, Fire_Lord_Inflames_Blades_of_War, Root_Out_the_Turpitude, Born_to_Obey, Winter_Soldiers, Destruction_of_the_Destroyer, Nine_Billion_Names, Akashic_Records, Nameless_Land_Nameless_People, The_Invisible_Hand, Scalpel_and_Screwdriver, The_Wages_of_Humanity, Legend_of_the_Puppet_Master, The_Land_of_Gold, Spring_of_Life, Fragments_of_Illusory_Dreams, The_Blossom_in_the_Storm, Abandoned_and_Insulted
Assignment_Duration = 20 # 4, 8, 12, 20
Assignment_Event = True
Assignment_Assignment = {}

View File

@ -809,94 +809,94 @@
"Name_1": {
"name": "Assignment 1 Preference",
"help": "",
"Nine_Billion_Names": "Extinguished Core (Nine Billion Names)",
"Destruction_of_the_Destroyer": "Thief's Instinct (Destruction of the Destroyer)",
"Winter_Soldiers": "Silvermane Badge (Winter Soldiers)",
"Born_to_Obey": "Ancient Part (Born to Obey)",
"Root_Out_the_Turpitude": "Immortal Scionette (Root Out the Turpitude)",
"Fire_Lord_Inflames_Blades_of_War": "Artifex's Module (Fire Lord Inflames Blades of War)",
"A_Startling_Night_Terror": "Dream Collection Component (A Startling Night Terror)",
"Tranquility_of_Vimala_bhumi": "Tatters of Thought (Tranquility of Vimala-bhumi)",
"Nameless_Land_Nameless_People": "Character EXP Material (Nameless Land, Nameless People)",
"A_Startling_Night_Terror": "Dream Collection Component (A Startling Night Terror)",
"Fire_Lord_Inflames_Blades_of_War": "Artifex's Module (Fire Lord Inflames Blades of War)",
"Root_Out_the_Turpitude": "Immortal Scionette (Root Out the Turpitude)",
"Born_to_Obey": "Ancient Part (Born to Obey)",
"Winter_Soldiers": "Silvermane Badge (Winter Soldiers)",
"Destruction_of_the_Destroyer": "Thief's Instinct (Destruction of the Destroyer)",
"Nine_Billion_Names": "Extinguished Core (Nine Billion Names)",
"Akashic_Records": "Light Cone EXP Material (Akashic Records)",
"Nameless_Land_Nameless_People": "Character EXP Material (Nameless Land, Nameless People)",
"The_Invisible_Hand": "Credit (The Invisible Hand)",
"Abandoned_and_Insulted": "Phlogiston & Metal (Abandoned and Insulted)",
"Spring_of_Life": "Solid Water & Virtual Particle (Spring of Life)",
"The_Land_of_Gold": "Basic Ingredients & Protein Rice (The Land of Gold)",
"The_Blossom_in_the_Storm": "Gaseous Liquid & Seed (The Blossom in the Storm)",
"Legend_of_the_Puppet_Master": "Discarded Ingenium Parts & Jade Abacus Unit (Legend of the Puppet Master)",
"Scalpel_and_Screwdriver": "Rusty Gear & Old Molar (Scalpel and Screwdriver)",
"The_Wages_of_Humanity": "Human-Height Auspicious Crops & Extract of Medicinal Herbs (The Wages of Humanity)",
"Legend_of_the_Puppet_Master": "Discarded Ingenium Parts & Jade Abacus Unit (Legend of the Puppet Master)",
"The_Land_of_Gold": "Basic Ingredients & Protein Rice (The Land of Gold)",
"Spring_of_Life": "Solid Water & Virtual Particle (Spring of Life)",
"Fragments_of_Illusory_Dreams": "Tranquility & Broken Dreams (Fragments of Illusory Dreams)",
"Scalpel_and_Screwdriver": "Rusty Gear & Old Molar (Scalpel and Screwdriver)"
"The_Blossom_in_the_Storm": "Gaseous Liquid & Seed (The Blossom in the Storm)",
"Abandoned_and_Insulted": "Phlogiston & Metal (Abandoned and Insulted)"
},
"Name_2": {
"name": "Assignment 2 Preference",
"help": "",
"Nine_Billion_Names": "Extinguished Core (Nine Billion Names)",
"Destruction_of_the_Destroyer": "Thief's Instinct (Destruction of the Destroyer)",
"Winter_Soldiers": "Silvermane Badge (Winter Soldiers)",
"Born_to_Obey": "Ancient Part (Born to Obey)",
"Root_Out_the_Turpitude": "Immortal Scionette (Root Out the Turpitude)",
"Fire_Lord_Inflames_Blades_of_War": "Artifex's Module (Fire Lord Inflames Blades of War)",
"A_Startling_Night_Terror": "Dream Collection Component (A Startling Night Terror)",
"Tranquility_of_Vimala_bhumi": "Tatters of Thought (Tranquility of Vimala-bhumi)",
"Nameless_Land_Nameless_People": "Character EXP Material (Nameless Land, Nameless People)",
"A_Startling_Night_Terror": "Dream Collection Component (A Startling Night Terror)",
"Fire_Lord_Inflames_Blades_of_War": "Artifex's Module (Fire Lord Inflames Blades of War)",
"Root_Out_the_Turpitude": "Immortal Scionette (Root Out the Turpitude)",
"Born_to_Obey": "Ancient Part (Born to Obey)",
"Winter_Soldiers": "Silvermane Badge (Winter Soldiers)",
"Destruction_of_the_Destroyer": "Thief's Instinct (Destruction of the Destroyer)",
"Nine_Billion_Names": "Extinguished Core (Nine Billion Names)",
"Akashic_Records": "Light Cone EXP Material (Akashic Records)",
"Nameless_Land_Nameless_People": "Character EXP Material (Nameless Land, Nameless People)",
"The_Invisible_Hand": "Credit (The Invisible Hand)",
"Abandoned_and_Insulted": "Phlogiston & Metal (Abandoned and Insulted)",
"Spring_of_Life": "Solid Water & Virtual Particle (Spring of Life)",
"The_Land_of_Gold": "Basic Ingredients & Protein Rice (The Land of Gold)",
"The_Blossom_in_the_Storm": "Gaseous Liquid & Seed (The Blossom in the Storm)",
"Legend_of_the_Puppet_Master": "Discarded Ingenium Parts & Jade Abacus Unit (Legend of the Puppet Master)",
"Scalpel_and_Screwdriver": "Rusty Gear & Old Molar (Scalpel and Screwdriver)",
"The_Wages_of_Humanity": "Human-Height Auspicious Crops & Extract of Medicinal Herbs (The Wages of Humanity)",
"Legend_of_the_Puppet_Master": "Discarded Ingenium Parts & Jade Abacus Unit (Legend of the Puppet Master)",
"The_Land_of_Gold": "Basic Ingredients & Protein Rice (The Land of Gold)",
"Spring_of_Life": "Solid Water & Virtual Particle (Spring of Life)",
"Fragments_of_Illusory_Dreams": "Tranquility & Broken Dreams (Fragments of Illusory Dreams)",
"Scalpel_and_Screwdriver": "Rusty Gear & Old Molar (Scalpel and Screwdriver)"
"The_Blossom_in_the_Storm": "Gaseous Liquid & Seed (The Blossom in the Storm)",
"Abandoned_and_Insulted": "Phlogiston & Metal (Abandoned and Insulted)"
},
"Name_3": {
"name": "Assignment 3 Preference",
"help": "",
"Nine_Billion_Names": "Extinguished Core (Nine Billion Names)",
"Destruction_of_the_Destroyer": "Thief's Instinct (Destruction of the Destroyer)",
"Winter_Soldiers": "Silvermane Badge (Winter Soldiers)",
"Born_to_Obey": "Ancient Part (Born to Obey)",
"Root_Out_the_Turpitude": "Immortal Scionette (Root Out the Turpitude)",
"Fire_Lord_Inflames_Blades_of_War": "Artifex's Module (Fire Lord Inflames Blades of War)",
"A_Startling_Night_Terror": "Dream Collection Component (A Startling Night Terror)",
"Tranquility_of_Vimala_bhumi": "Tatters of Thought (Tranquility of Vimala-bhumi)",
"Nameless_Land_Nameless_People": "Character EXP Material (Nameless Land, Nameless People)",
"A_Startling_Night_Terror": "Dream Collection Component (A Startling Night Terror)",
"Fire_Lord_Inflames_Blades_of_War": "Artifex's Module (Fire Lord Inflames Blades of War)",
"Root_Out_the_Turpitude": "Immortal Scionette (Root Out the Turpitude)",
"Born_to_Obey": "Ancient Part (Born to Obey)",
"Winter_Soldiers": "Silvermane Badge (Winter Soldiers)",
"Destruction_of_the_Destroyer": "Thief's Instinct (Destruction of the Destroyer)",
"Nine_Billion_Names": "Extinguished Core (Nine Billion Names)",
"Akashic_Records": "Light Cone EXP Material (Akashic Records)",
"Nameless_Land_Nameless_People": "Character EXP Material (Nameless Land, Nameless People)",
"The_Invisible_Hand": "Credit (The Invisible Hand)",
"Abandoned_and_Insulted": "Phlogiston & Metal (Abandoned and Insulted)",
"Spring_of_Life": "Solid Water & Virtual Particle (Spring of Life)",
"The_Land_of_Gold": "Basic Ingredients & Protein Rice (The Land of Gold)",
"The_Blossom_in_the_Storm": "Gaseous Liquid & Seed (The Blossom in the Storm)",
"Legend_of_the_Puppet_Master": "Discarded Ingenium Parts & Jade Abacus Unit (Legend of the Puppet Master)",
"Scalpel_and_Screwdriver": "Rusty Gear & Old Molar (Scalpel and Screwdriver)",
"The_Wages_of_Humanity": "Human-Height Auspicious Crops & Extract of Medicinal Herbs (The Wages of Humanity)",
"Legend_of_the_Puppet_Master": "Discarded Ingenium Parts & Jade Abacus Unit (Legend of the Puppet Master)",
"The_Land_of_Gold": "Basic Ingredients & Protein Rice (The Land of Gold)",
"Spring_of_Life": "Solid Water & Virtual Particle (Spring of Life)",
"Fragments_of_Illusory_Dreams": "Tranquility & Broken Dreams (Fragments of Illusory Dreams)",
"Scalpel_and_Screwdriver": "Rusty Gear & Old Molar (Scalpel and Screwdriver)"
"The_Blossom_in_the_Storm": "Gaseous Liquid & Seed (The Blossom in the Storm)",
"Abandoned_and_Insulted": "Phlogiston & Metal (Abandoned and Insulted)"
},
"Name_4": {
"name": "Assignment 4 Preference",
"help": "",
"Nine_Billion_Names": "Extinguished Core (Nine Billion Names)",
"Destruction_of_the_Destroyer": "Thief's Instinct (Destruction of the Destroyer)",
"Winter_Soldiers": "Silvermane Badge (Winter Soldiers)",
"Born_to_Obey": "Ancient Part (Born to Obey)",
"Root_Out_the_Turpitude": "Immortal Scionette (Root Out the Turpitude)",
"Fire_Lord_Inflames_Blades_of_War": "Artifex's Module (Fire Lord Inflames Blades of War)",
"A_Startling_Night_Terror": "Dream Collection Component (A Startling Night Terror)",
"Tranquility_of_Vimala_bhumi": "Tatters of Thought (Tranquility of Vimala-bhumi)",
"Nameless_Land_Nameless_People": "Character EXP Material (Nameless Land, Nameless People)",
"A_Startling_Night_Terror": "Dream Collection Component (A Startling Night Terror)",
"Fire_Lord_Inflames_Blades_of_War": "Artifex's Module (Fire Lord Inflames Blades of War)",
"Root_Out_the_Turpitude": "Immortal Scionette (Root Out the Turpitude)",
"Born_to_Obey": "Ancient Part (Born to Obey)",
"Winter_Soldiers": "Silvermane Badge (Winter Soldiers)",
"Destruction_of_the_Destroyer": "Thief's Instinct (Destruction of the Destroyer)",
"Nine_Billion_Names": "Extinguished Core (Nine Billion Names)",
"Akashic_Records": "Light Cone EXP Material (Akashic Records)",
"Nameless_Land_Nameless_People": "Character EXP Material (Nameless Land, Nameless People)",
"The_Invisible_Hand": "Credit (The Invisible Hand)",
"Abandoned_and_Insulted": "Phlogiston & Metal (Abandoned and Insulted)",
"Spring_of_Life": "Solid Water & Virtual Particle (Spring of Life)",
"The_Land_of_Gold": "Basic Ingredients & Protein Rice (The Land of Gold)",
"The_Blossom_in_the_Storm": "Gaseous Liquid & Seed (The Blossom in the Storm)",
"Legend_of_the_Puppet_Master": "Discarded Ingenium Parts & Jade Abacus Unit (Legend of the Puppet Master)",
"Scalpel_and_Screwdriver": "Rusty Gear & Old Molar (Scalpel and Screwdriver)",
"The_Wages_of_Humanity": "Human-Height Auspicious Crops & Extract of Medicinal Herbs (The Wages of Humanity)",
"Legend_of_the_Puppet_Master": "Discarded Ingenium Parts & Jade Abacus Unit (Legend of the Puppet Master)",
"The_Land_of_Gold": "Basic Ingredients & Protein Rice (The Land of Gold)",
"Spring_of_Life": "Solid Water & Virtual Particle (Spring of Life)",
"Fragments_of_Illusory_Dreams": "Tranquility & Broken Dreams (Fragments of Illusory Dreams)",
"Scalpel_and_Screwdriver": "Rusty Gear & Old Molar (Scalpel and Screwdriver)"
"The_Blossom_in_the_Storm": "Gaseous Liquid & Seed (The Blossom in the Storm)",
"Abandoned_and_Insulted": "Phlogiston & Metal (Abandoned and Insulted)"
},
"Duration": {
"name": "Dispatch Duration",

View File

@ -809,94 +809,94 @@
"Name_1": {
"name": "Preferencia de Encargo 1",
"help": "",
"Nine_Billion_Names": "Núcleo apagado (Nueve mil millones de nombres)",
"Destruction_of_the_Destroyer": "Instinto del ladrón (La destrucción del destructor)",
"Winter_Soldiers": "Pin del guardia (Los guerreros del invierno)",
"Born_to_Obey": "Componente antiguo (Creados para obedecer)",
"Root_Out_the_Turpitude": "Brote verde inmortal (La raíz del mal)",
"Fire_Lord_Inflames_Blades_of_War": "Componente artificial mecánico (Prendan los fuelles, fundan las armas)",
"A_Startling_Night_Terror": "Componente del acumulador de sueños (Pesadilla aterradora)",
"Tranquility_of_Vimala_bhumi": "Jirones de pensamientos (Limpieza y purificación)",
"Nameless_Land_Nameless_People": "Material de EXP de personaje (Lugar anónimo, personas anónimas)",
"A_Startling_Night_Terror": "Componente del acumulador de sueños (Pesadilla aterradora)",
"Fire_Lord_Inflames_Blades_of_War": "Componente artificial mecánico (Prendan los fuelles, fundan las armas)",
"Root_Out_the_Turpitude": "Brote verde inmortal (La raíz del mal)",
"Born_to_Obey": "Componente antiguo (Creados para obedecer)",
"Winter_Soldiers": "Pin del guardia (Los guerreros del invierno)",
"Destruction_of_the_Destroyer": "Instinto del ladrón (La destrucción del destructor)",
"Nine_Billion_Names": "Núcleo apagado (Nueve mil millones de nombres)",
"Akashic_Records": "Material de EXP de conos de luz (Los Registros de Akasha)",
"Nameless_Land_Nameless_People": "Material de EXP de personaje (Lugar anónimo, personas anónimas)",
"The_Invisible_Hand": "Crédito (La mano invisible)",
"Abandoned_and_Insulted": "Flogisto & Metal (Abandonado e insultado)",
"Spring_of_Life": "Agua sólida & Partícula virtual (La fuente de la vida)",
"The_Land_of_Gold": "Ingredientes básicos & Arroz proteico (Tierra de oportunidades)",
"The_Blossom_in_the_Storm": "Líquido gaseoso & Semilla (Flores en la tormenta)",
"Legend_of_the_Puppet_Master": "Componentes mecánicos abandonados & Unidad de ábaco de jade (La leyenda del titiritero)",
"Scalpel_and_Screwdriver": "Engranaje oxidado & Muela vieja (Bisturí y destornillador)",
"The_Wages_of_Humanity": "Cosecha tan alta como una persona & Extracto de hierbas medicinales (La paga de la humanidad)",
"Legend_of_the_Puppet_Master": "Componentes mecánicos abandonados & Unidad de ábaco de jade (La leyenda del titiritero)",
"The_Land_of_Gold": "Ingredientes básicos & Arroz proteico (Tierra de oportunidades)",
"Spring_of_Life": "Agua sólida & Partícula virtual (La fuente de la vida)",
"Fragments_of_Illusory_Dreams": "Tranquilidad & Sueños rotos (Fragmentos de sueños ilusorios)",
"Scalpel_and_Screwdriver": "Engranaje oxidado & Muela vieja (Bisturí y destornillador)"
"The_Blossom_in_the_Storm": "Líquido gaseoso & Semilla (Flores en la tormenta)",
"Abandoned_and_Insulted": "Flogisto & Metal (Abandonado e insultado)"
},
"Name_2": {
"name": "Preferencia de Encargo 2",
"help": "",
"Nine_Billion_Names": "Núcleo apagado (Nueve mil millones de nombres)",
"Destruction_of_the_Destroyer": "Instinto del ladrón (La destrucción del destructor)",
"Winter_Soldiers": "Pin del guardia (Los guerreros del invierno)",
"Born_to_Obey": "Componente antiguo (Creados para obedecer)",
"Root_Out_the_Turpitude": "Brote verde inmortal (La raíz del mal)",
"Fire_Lord_Inflames_Blades_of_War": "Componente artificial mecánico (Prendan los fuelles, fundan las armas)",
"A_Startling_Night_Terror": "Componente del acumulador de sueños (Pesadilla aterradora)",
"Tranquility_of_Vimala_bhumi": "Jirones de pensamientos (Limpieza y purificación)",
"Nameless_Land_Nameless_People": "Material de EXP de personaje (Lugar anónimo, personas anónimas)",
"A_Startling_Night_Terror": "Componente del acumulador de sueños (Pesadilla aterradora)",
"Fire_Lord_Inflames_Blades_of_War": "Componente artificial mecánico (Prendan los fuelles, fundan las armas)",
"Root_Out_the_Turpitude": "Brote verde inmortal (La raíz del mal)",
"Born_to_Obey": "Componente antiguo (Creados para obedecer)",
"Winter_Soldiers": "Pin del guardia (Los guerreros del invierno)",
"Destruction_of_the_Destroyer": "Instinto del ladrón (La destrucción del destructor)",
"Nine_Billion_Names": "Núcleo apagado (Nueve mil millones de nombres)",
"Akashic_Records": "Material de EXP de conos de luz (Los Registros de Akasha)",
"Nameless_Land_Nameless_People": "Material de EXP de personaje (Lugar anónimo, personas anónimas)",
"The_Invisible_Hand": "Crédito (La mano invisible)",
"Abandoned_and_Insulted": "Flogisto & Metal (Abandonado e insultado)",
"Spring_of_Life": "Agua sólida & Partícula virtual (La fuente de la vida)",
"The_Land_of_Gold": "Ingredientes básicos & Arroz proteico (Tierra de oportunidades)",
"The_Blossom_in_the_Storm": "Líquido gaseoso & Semilla (Flores en la tormenta)",
"Legend_of_the_Puppet_Master": "Componentes mecánicos abandonados & Unidad de ábaco de jade (La leyenda del titiritero)",
"Scalpel_and_Screwdriver": "Engranaje oxidado & Muela vieja (Bisturí y destornillador)",
"The_Wages_of_Humanity": "Cosecha tan alta como una persona & Extracto de hierbas medicinales (La paga de la humanidad)",
"Legend_of_the_Puppet_Master": "Componentes mecánicos abandonados & Unidad de ábaco de jade (La leyenda del titiritero)",
"The_Land_of_Gold": "Ingredientes básicos & Arroz proteico (Tierra de oportunidades)",
"Spring_of_Life": "Agua sólida & Partícula virtual (La fuente de la vida)",
"Fragments_of_Illusory_Dreams": "Tranquilidad & Sueños rotos (Fragmentos de sueños ilusorios)",
"Scalpel_and_Screwdriver": "Engranaje oxidado & Muela vieja (Bisturí y destornillador)"
"The_Blossom_in_the_Storm": "Líquido gaseoso & Semilla (Flores en la tormenta)",
"Abandoned_and_Insulted": "Flogisto & Metal (Abandonado e insultado)"
},
"Name_3": {
"name": "Preferencia de Encargo 3",
"help": "",
"Nine_Billion_Names": "Núcleo apagado (Nueve mil millones de nombres)",
"Destruction_of_the_Destroyer": "Instinto del ladrón (La destrucción del destructor)",
"Winter_Soldiers": "Pin del guardia (Los guerreros del invierno)",
"Born_to_Obey": "Componente antiguo (Creados para obedecer)",
"Root_Out_the_Turpitude": "Brote verde inmortal (La raíz del mal)",
"Fire_Lord_Inflames_Blades_of_War": "Componente artificial mecánico (Prendan los fuelles, fundan las armas)",
"A_Startling_Night_Terror": "Componente del acumulador de sueños (Pesadilla aterradora)",
"Tranquility_of_Vimala_bhumi": "Jirones de pensamientos (Limpieza y purificación)",
"Nameless_Land_Nameless_People": "Material de EXP de personaje (Lugar anónimo, personas anónimas)",
"A_Startling_Night_Terror": "Componente del acumulador de sueños (Pesadilla aterradora)",
"Fire_Lord_Inflames_Blades_of_War": "Componente artificial mecánico (Prendan los fuelles, fundan las armas)",
"Root_Out_the_Turpitude": "Brote verde inmortal (La raíz del mal)",
"Born_to_Obey": "Componente antiguo (Creados para obedecer)",
"Winter_Soldiers": "Pin del guardia (Los guerreros del invierno)",
"Destruction_of_the_Destroyer": "Instinto del ladrón (La destrucción del destructor)",
"Nine_Billion_Names": "Núcleo apagado (Nueve mil millones de nombres)",
"Akashic_Records": "Material de EXP de conos de luz (Los Registros de Akasha)",
"Nameless_Land_Nameless_People": "Material de EXP de personaje (Lugar anónimo, personas anónimas)",
"The_Invisible_Hand": "Crédito (La mano invisible)",
"Abandoned_and_Insulted": "Flogisto & Metal (Abandonado e insultado)",
"Spring_of_Life": "Agua sólida & Partícula virtual (La fuente de la vida)",
"The_Land_of_Gold": "Ingredientes básicos & Arroz proteico (Tierra de oportunidades)",
"The_Blossom_in_the_Storm": "Líquido gaseoso & Semilla (Flores en la tormenta)",
"Legend_of_the_Puppet_Master": "Componentes mecánicos abandonados & Unidad de ábaco de jade (La leyenda del titiritero)",
"Scalpel_and_Screwdriver": "Engranaje oxidado & Muela vieja (Bisturí y destornillador)",
"The_Wages_of_Humanity": "Cosecha tan alta como una persona & Extracto de hierbas medicinales (La paga de la humanidad)",
"Legend_of_the_Puppet_Master": "Componentes mecánicos abandonados & Unidad de ábaco de jade (La leyenda del titiritero)",
"The_Land_of_Gold": "Ingredientes básicos & Arroz proteico (Tierra de oportunidades)",
"Spring_of_Life": "Agua sólida & Partícula virtual (La fuente de la vida)",
"Fragments_of_Illusory_Dreams": "Tranquilidad & Sueños rotos (Fragmentos de sueños ilusorios)",
"Scalpel_and_Screwdriver": "Engranaje oxidado & Muela vieja (Bisturí y destornillador)"
"The_Blossom_in_the_Storm": "Líquido gaseoso & Semilla (Flores en la tormenta)",
"Abandoned_and_Insulted": "Flogisto & Metal (Abandonado e insultado)"
},
"Name_4": {
"name": "Preferencia de Encargo 4",
"help": "",
"Nine_Billion_Names": "Núcleo apagado (Nueve mil millones de nombres)",
"Destruction_of_the_Destroyer": "Instinto del ladrón (La destrucción del destructor)",
"Winter_Soldiers": "Pin del guardia (Los guerreros del invierno)",
"Born_to_Obey": "Componente antiguo (Creados para obedecer)",
"Root_Out_the_Turpitude": "Brote verde inmortal (La raíz del mal)",
"Fire_Lord_Inflames_Blades_of_War": "Componente artificial mecánico (Prendan los fuelles, fundan las armas)",
"A_Startling_Night_Terror": "Componente del acumulador de sueños (Pesadilla aterradora)",
"Tranquility_of_Vimala_bhumi": "Jirones de pensamientos (Limpieza y purificación)",
"Nameless_Land_Nameless_People": "Material de EXP de personaje (Lugar anónimo, personas anónimas)",
"A_Startling_Night_Terror": "Componente del acumulador de sueños (Pesadilla aterradora)",
"Fire_Lord_Inflames_Blades_of_War": "Componente artificial mecánico (Prendan los fuelles, fundan las armas)",
"Root_Out_the_Turpitude": "Brote verde inmortal (La raíz del mal)",
"Born_to_Obey": "Componente antiguo (Creados para obedecer)",
"Winter_Soldiers": "Pin del guardia (Los guerreros del invierno)",
"Destruction_of_the_Destroyer": "Instinto del ladrón (La destrucción del destructor)",
"Nine_Billion_Names": "Núcleo apagado (Nueve mil millones de nombres)",
"Akashic_Records": "Material de EXP de conos de luz (Los Registros de Akasha)",
"Nameless_Land_Nameless_People": "Material de EXP de personaje (Lugar anónimo, personas anónimas)",
"The_Invisible_Hand": "Crédito (La mano invisible)",
"Abandoned_and_Insulted": "Flogisto & Metal (Abandonado e insultado)",
"Spring_of_Life": "Agua sólida & Partícula virtual (La fuente de la vida)",
"The_Land_of_Gold": "Ingredientes básicos & Arroz proteico (Tierra de oportunidades)",
"The_Blossom_in_the_Storm": "Líquido gaseoso & Semilla (Flores en la tormenta)",
"Legend_of_the_Puppet_Master": "Componentes mecánicos abandonados & Unidad de ábaco de jade (La leyenda del titiritero)",
"Scalpel_and_Screwdriver": "Engranaje oxidado & Muela vieja (Bisturí y destornillador)",
"The_Wages_of_Humanity": "Cosecha tan alta como una persona & Extracto de hierbas medicinales (La paga de la humanidad)",
"Legend_of_the_Puppet_Master": "Componentes mecánicos abandonados & Unidad de ábaco de jade (La leyenda del titiritero)",
"The_Land_of_Gold": "Ingredientes básicos & Arroz proteico (Tierra de oportunidades)",
"Spring_of_Life": "Agua sólida & Partícula virtual (La fuente de la vida)",
"Fragments_of_Illusory_Dreams": "Tranquilidad & Sueños rotos (Fragmentos de sueños ilusorios)",
"Scalpel_and_Screwdriver": "Engranaje oxidado & Muela vieja (Bisturí y destornillador)"
"The_Blossom_in_the_Storm": "Líquido gaseoso & Semilla (Flores en la tormenta)",
"Abandoned_and_Insulted": "Flogisto & Metal (Abandonado e insultado)"
},
"Duration": {
"name": "Duración del encargo",

View File

@ -809,94 +809,94 @@
"Name_1": {
"name": "依頼 1",
"help": "",
"Nine_Billion_Names": "消滅した原核(九十億の御名)",
"Destruction_of_the_Destroyer": "略奪の本能(壊滅者の覆没)",
"Winter_Soldiers": "シルバーメインの釦(寒冬の戦士たち)",
"Born_to_Obey": "古代パーツ(生まれながらに服従する)",
"Root_Out_the_Turpitude": "永寿の萌芽(悪孽を根絶やしに)",
"Fire_Lord_Inflames_Blades_of_War": "工造機関(剣戟を焼却する火帝炉)",
"A_Startling_Night_Terror": "ドリームコレクションパーツ(魂震える悪夢)",
"Tranquility_of_Vimala_bhumi": "思考の粉末(離垢清浄)",
"Nameless_Land_Nameless_People": "キャラクター経験値素材(無名の地、無名の人)",
"A_Startling_Night_Terror": "ドリームコレクションパーツ(魂震える悪夢)",
"Fire_Lord_Inflames_Blades_of_War": "工造機関(剣戟を焼却する火帝炉)",
"Root_Out_the_Turpitude": "永寿の萌芽(悪孽を根絶やしに)",
"Born_to_Obey": "古代パーツ(生まれながらに服従する)",
"Winter_Soldiers": "シルバーメインの釦(寒冬の戦士たち)",
"Destruction_of_the_Destroyer": "略奪の本能(壊滅者の覆没)",
"Nine_Billion_Names": "消滅した原核(九十億の御名)",
"Akashic_Records": "光円錐経験値素材(アーカーシャの記録)",
"Nameless_Land_Nameless_People": "キャラクター経験値素材(無名の地、無名の人)",
"The_Invisible_Hand": "信用ポイント(見えざる手)",
"Abandoned_and_Insulted": "燃素 & 金属(捨てられしものと傷つけられしもの)",
"Spring_of_Life": "固形純水 & 仮想粒子(生命の泉)",
"The_Land_of_Gold": "基本食材 & タンパク米(黄金の大地)",
"The_Blossom_in_the_Storm": "気態流体 & 種子(嵐の中で咲き誇る花)",
"Legend_of_the_Puppet_Master": "廃棄された機巧部品 & 玉兆単元(傀儡師伝説)",
"Scalpel_and_Screwdriver": "錆びた歯車 & 古びた大臼歯(メスとスクリュードライバー)",
"The_Wages_of_Humanity": "一人稲 & 薬草抽出物(人類扶養)",
"Legend_of_the_Puppet_Master": "廃棄された機巧部品 & 玉兆単元(傀儡師伝説)",
"The_Land_of_Gold": "基本食材 & タンパク米(黄金の大地)",
"Spring_of_Life": "固形純水 & 仮想粒子(生命の泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 砕けた夢(幻夢の残片)",
"Scalpel_and_Screwdriver": "錆びた歯車 & 古びた大臼歯(メスとスクリュードライバー)"
"The_Blossom_in_the_Storm": "気態流体 & 種子(嵐の中で咲き誇る花)",
"Abandoned_and_Insulted": "燃素 & 金属(捨てられしものと傷つけられしもの)"
},
"Name_2": {
"name": "依頼 2",
"help": "",
"Nine_Billion_Names": "消滅した原核(九十億の御名)",
"Destruction_of_the_Destroyer": "略奪の本能(壊滅者の覆没)",
"Winter_Soldiers": "シルバーメインの釦(寒冬の戦士たち)",
"Born_to_Obey": "古代パーツ(生まれながらに服従する)",
"Root_Out_the_Turpitude": "永寿の萌芽(悪孽を根絶やしに)",
"Fire_Lord_Inflames_Blades_of_War": "工造機関(剣戟を焼却する火帝炉)",
"A_Startling_Night_Terror": "ドリームコレクションパーツ(魂震える悪夢)",
"Tranquility_of_Vimala_bhumi": "思考の粉末(離垢清浄)",
"Nameless_Land_Nameless_People": "キャラクター経験値素材(無名の地、無名の人)",
"A_Startling_Night_Terror": "ドリームコレクションパーツ(魂震える悪夢)",
"Fire_Lord_Inflames_Blades_of_War": "工造機関(剣戟を焼却する火帝炉)",
"Root_Out_the_Turpitude": "永寿の萌芽(悪孽を根絶やしに)",
"Born_to_Obey": "古代パーツ(生まれながらに服従する)",
"Winter_Soldiers": "シルバーメインの釦(寒冬の戦士たち)",
"Destruction_of_the_Destroyer": "略奪の本能(壊滅者の覆没)",
"Nine_Billion_Names": "消滅した原核(九十億の御名)",
"Akashic_Records": "光円錐経験値素材(アーカーシャの記録)",
"Nameless_Land_Nameless_People": "キャラクター経験値素材(無名の地、無名の人)",
"The_Invisible_Hand": "信用ポイント(見えざる手)",
"Abandoned_and_Insulted": "燃素 & 金属(捨てられしものと傷つけられしもの)",
"Spring_of_Life": "固形純水 & 仮想粒子(生命の泉)",
"The_Land_of_Gold": "基本食材 & タンパク米(黄金の大地)",
"The_Blossom_in_the_Storm": "気態流体 & 種子(嵐の中で咲き誇る花)",
"Legend_of_the_Puppet_Master": "廃棄された機巧部品 & 玉兆単元(傀儡師伝説)",
"Scalpel_and_Screwdriver": "錆びた歯車 & 古びた大臼歯(メスとスクリュードライバー)",
"The_Wages_of_Humanity": "一人稲 & 薬草抽出物(人類扶養)",
"Legend_of_the_Puppet_Master": "廃棄された機巧部品 & 玉兆単元(傀儡師伝説)",
"The_Land_of_Gold": "基本食材 & タンパク米(黄金の大地)",
"Spring_of_Life": "固形純水 & 仮想粒子(生命の泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 砕けた夢(幻夢の残片)",
"Scalpel_and_Screwdriver": "錆びた歯車 & 古びた大臼歯(メスとスクリュードライバー)"
"The_Blossom_in_the_Storm": "気態流体 & 種子(嵐の中で咲き誇る花)",
"Abandoned_and_Insulted": "燃素 & 金属(捨てられしものと傷つけられしもの)"
},
"Name_3": {
"name": "依頼 3",
"help": "",
"Nine_Billion_Names": "消滅した原核(九十億の御名)",
"Destruction_of_the_Destroyer": "略奪の本能(壊滅者の覆没)",
"Winter_Soldiers": "シルバーメインの釦(寒冬の戦士たち)",
"Born_to_Obey": "古代パーツ(生まれながらに服従する)",
"Root_Out_the_Turpitude": "永寿の萌芽(悪孽を根絶やしに)",
"Fire_Lord_Inflames_Blades_of_War": "工造機関(剣戟を焼却する火帝炉)",
"A_Startling_Night_Terror": "ドリームコレクションパーツ(魂震える悪夢)",
"Tranquility_of_Vimala_bhumi": "思考の粉末(離垢清浄)",
"Nameless_Land_Nameless_People": "キャラクター経験値素材(無名の地、無名の人)",
"A_Startling_Night_Terror": "ドリームコレクションパーツ(魂震える悪夢)",
"Fire_Lord_Inflames_Blades_of_War": "工造機関(剣戟を焼却する火帝炉)",
"Root_Out_the_Turpitude": "永寿の萌芽(悪孽を根絶やしに)",
"Born_to_Obey": "古代パーツ(生まれながらに服従する)",
"Winter_Soldiers": "シルバーメインの釦(寒冬の戦士たち)",
"Destruction_of_the_Destroyer": "略奪の本能(壊滅者の覆没)",
"Nine_Billion_Names": "消滅した原核(九十億の御名)",
"Akashic_Records": "光円錐経験値素材(アーカーシャの記録)",
"Nameless_Land_Nameless_People": "キャラクター経験値素材(無名の地、無名の人)",
"The_Invisible_Hand": "信用ポイント(見えざる手)",
"Abandoned_and_Insulted": "燃素 & 金属(捨てられしものと傷つけられしもの)",
"Spring_of_Life": "固形純水 & 仮想粒子(生命の泉)",
"The_Land_of_Gold": "基本食材 & タンパク米(黄金の大地)",
"The_Blossom_in_the_Storm": "気態流体 & 種子(嵐の中で咲き誇る花)",
"Legend_of_the_Puppet_Master": "廃棄された機巧部品 & 玉兆単元(傀儡師伝説)",
"Scalpel_and_Screwdriver": "錆びた歯車 & 古びた大臼歯(メスとスクリュードライバー)",
"The_Wages_of_Humanity": "一人稲 & 薬草抽出物(人類扶養)",
"Legend_of_the_Puppet_Master": "廃棄された機巧部品 & 玉兆単元(傀儡師伝説)",
"The_Land_of_Gold": "基本食材 & タンパク米(黄金の大地)",
"Spring_of_Life": "固形純水 & 仮想粒子(生命の泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 砕けた夢(幻夢の残片)",
"Scalpel_and_Screwdriver": "錆びた歯車 & 古びた大臼歯(メスとスクリュードライバー)"
"The_Blossom_in_the_Storm": "気態流体 & 種子(嵐の中で咲き誇る花)",
"Abandoned_and_Insulted": "燃素 & 金属(捨てられしものと傷つけられしもの)"
},
"Name_4": {
"name": "依頼 4",
"help": "",
"Nine_Billion_Names": "消滅した原核(九十億の御名)",
"Destruction_of_the_Destroyer": "略奪の本能(壊滅者の覆没)",
"Winter_Soldiers": "シルバーメインの釦(寒冬の戦士たち)",
"Born_to_Obey": "古代パーツ(生まれながらに服従する)",
"Root_Out_the_Turpitude": "永寿の萌芽(悪孽を根絶やしに)",
"Fire_Lord_Inflames_Blades_of_War": "工造機関(剣戟を焼却する火帝炉)",
"A_Startling_Night_Terror": "ドリームコレクションパーツ(魂震える悪夢)",
"Tranquility_of_Vimala_bhumi": "思考の粉末(離垢清浄)",
"Nameless_Land_Nameless_People": "キャラクター経験値素材(無名の地、無名の人)",
"A_Startling_Night_Terror": "ドリームコレクションパーツ(魂震える悪夢)",
"Fire_Lord_Inflames_Blades_of_War": "工造機関(剣戟を焼却する火帝炉)",
"Root_Out_the_Turpitude": "永寿の萌芽(悪孽を根絶やしに)",
"Born_to_Obey": "古代パーツ(生まれながらに服従する)",
"Winter_Soldiers": "シルバーメインの釦(寒冬の戦士たち)",
"Destruction_of_the_Destroyer": "略奪の本能(壊滅者の覆没)",
"Nine_Billion_Names": "消滅した原核(九十億の御名)",
"Akashic_Records": "光円錐経験値素材(アーカーシャの記録)",
"Nameless_Land_Nameless_People": "キャラクター経験値素材(無名の地、無名の人)",
"The_Invisible_Hand": "信用ポイント(見えざる手)",
"Abandoned_and_Insulted": "燃素 & 金属(捨てられしものと傷つけられしもの)",
"Spring_of_Life": "固形純水 & 仮想粒子(生命の泉)",
"The_Land_of_Gold": "基本食材 & タンパク米(黄金の大地)",
"The_Blossom_in_the_Storm": "気態流体 & 種子(嵐の中で咲き誇る花)",
"Legend_of_the_Puppet_Master": "廃棄された機巧部品 & 玉兆単元(傀儡師伝説)",
"Scalpel_and_Screwdriver": "錆びた歯車 & 古びた大臼歯(メスとスクリュードライバー)",
"The_Wages_of_Humanity": "一人稲 & 薬草抽出物(人類扶養)",
"Legend_of_the_Puppet_Master": "廃棄された機巧部品 & 玉兆単元(傀儡師伝説)",
"The_Land_of_Gold": "基本食材 & タンパク米(黄金の大地)",
"Spring_of_Life": "固形純水 & 仮想粒子(生命の泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 砕けた夢(幻夢の残片)",
"Scalpel_and_Screwdriver": "錆びた歯車 & 古びた大臼歯(メスとスクリュードライバー)"
"The_Blossom_in_the_Storm": "気態流体 & 種子(嵐の中で咲き誇る花)",
"Abandoned_and_Insulted": "燃素 & 金属(捨てられしものと傷つけられしもの)"
},
"Duration": {
"name": "派遣時間",

View File

@ -809,94 +809,94 @@
"Name_1": {
"name": "第1个委托选择",
"help": "",
"Nine_Billion_Names": "熄灭原核(九十亿个名字)",
"Destruction_of_the_Destroyer": "掠夺的本能(毁灭者的覆灭)",
"Winter_Soldiers": "铁卫扣饰(寒冬的战士们)",
"Born_to_Obey": "古代零件(生而服从)",
"Root_Out_the_Turpitude": "永寿幼芽(根除恶孽)",
"Fire_Lord_Inflames_Blades_of_War": "工造机杼(火帝动炉销剑戟)",
"A_Startling_Night_Terror": "蓄梦元件(劫梦惊魂)",
"Tranquility_of_Vimala_bhumi": "思绪末屑(离垢清净)",
"Nameless_Land_Nameless_People": "角色经验材料(无名之地,无名之人)",
"A_Startling_Night_Terror": "蓄梦元件(劫梦惊魂)",
"Fire_Lord_Inflames_Blades_of_War": "工造机杼(火帝动炉销剑戟)",
"Root_Out_the_Turpitude": "永寿幼芽(根除恶孽)",
"Born_to_Obey": "古代零件(生而服从)",
"Winter_Soldiers": "铁卫扣饰(寒冬的战士们)",
"Destruction_of_the_Destroyer": "掠夺的本能(毁灭者的覆灭)",
"Nine_Billion_Names": "熄灭原核(九十亿个名字)",
"Akashic_Records": "光锥经验材料(阿卡夏记录)",
"Nameless_Land_Nameless_People": "角色经验材料(无名之地,无名之人)",
"The_Invisible_Hand": "信用点(看不见的手)",
"Abandoned_and_Insulted": "燃素 & 金属(被废弃与损害的)",
"Spring_of_Life": "固态净水 & 虚粒子(生命之泉)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黄金大地)",
"The_Blossom_in_the_Storm": "气态流体 & 种子(风暴中怒放的花)",
"Legend_of_the_Puppet_Master": "废弃机巧零件 & 玉兆单元(偃师传说)",
"Scalpel_and_Screwdriver": "锈迹齿轮 & 老旧臼齿(手术刀与螺丝刀)",
"The_Wages_of_Humanity": "一人嘉禾 & 药草提取物(赡养人类)",
"Legend_of_the_Puppet_Master": "废弃机巧零件 & 玉兆单元(偃师传说)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黄金大地)",
"Spring_of_Life": "固态净水 & 虚粒子(生命之泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 碎梦(幻梦的残片)",
"Scalpel_and_Screwdriver": "锈迹齿轮 & 老旧臼齿(手术刀与螺丝刀)"
"The_Blossom_in_the_Storm": "气态流体 & 种子(风暴中怒放的花)",
"Abandoned_and_Insulted": "燃素 & 金属(被废弃与损害的)"
},
"Name_2": {
"name": "第2个委托选择",
"help": "",
"Nine_Billion_Names": "熄灭原核(九十亿个名字)",
"Destruction_of_the_Destroyer": "掠夺的本能(毁灭者的覆灭)",
"Winter_Soldiers": "铁卫扣饰(寒冬的战士们)",
"Born_to_Obey": "古代零件(生而服从)",
"Root_Out_the_Turpitude": "永寿幼芽(根除恶孽)",
"Fire_Lord_Inflames_Blades_of_War": "工造机杼(火帝动炉销剑戟)",
"A_Startling_Night_Terror": "蓄梦元件(劫梦惊魂)",
"Tranquility_of_Vimala_bhumi": "思绪末屑(离垢清净)",
"Nameless_Land_Nameless_People": "角色经验材料(无名之地,无名之人)",
"A_Startling_Night_Terror": "蓄梦元件(劫梦惊魂)",
"Fire_Lord_Inflames_Blades_of_War": "工造机杼(火帝动炉销剑戟)",
"Root_Out_the_Turpitude": "永寿幼芽(根除恶孽)",
"Born_to_Obey": "古代零件(生而服从)",
"Winter_Soldiers": "铁卫扣饰(寒冬的战士们)",
"Destruction_of_the_Destroyer": "掠夺的本能(毁灭者的覆灭)",
"Nine_Billion_Names": "熄灭原核(九十亿个名字)",
"Akashic_Records": "光锥经验材料(阿卡夏记录)",
"Nameless_Land_Nameless_People": "角色经验材料(无名之地,无名之人)",
"The_Invisible_Hand": "信用点(看不见的手)",
"Abandoned_and_Insulted": "燃素 & 金属(被废弃与损害的)",
"Spring_of_Life": "固态净水 & 虚粒子(生命之泉)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黄金大地)",
"The_Blossom_in_the_Storm": "气态流体 & 种子(风暴中怒放的花)",
"Legend_of_the_Puppet_Master": "废弃机巧零件 & 玉兆单元(偃师传说)",
"Scalpel_and_Screwdriver": "锈迹齿轮 & 老旧臼齿(手术刀与螺丝刀)",
"The_Wages_of_Humanity": "一人嘉禾 & 药草提取物(赡养人类)",
"Legend_of_the_Puppet_Master": "废弃机巧零件 & 玉兆单元(偃师传说)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黄金大地)",
"Spring_of_Life": "固态净水 & 虚粒子(生命之泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 碎梦(幻梦的残片)",
"Scalpel_and_Screwdriver": "锈迹齿轮 & 老旧臼齿(手术刀与螺丝刀)"
"The_Blossom_in_the_Storm": "气态流体 & 种子(风暴中怒放的花)",
"Abandoned_and_Insulted": "燃素 & 金属(被废弃与损害的)"
},
"Name_3": {
"name": "第3个委托选择",
"help": "",
"Nine_Billion_Names": "熄灭原核(九十亿个名字)",
"Destruction_of_the_Destroyer": "掠夺的本能(毁灭者的覆灭)",
"Winter_Soldiers": "铁卫扣饰(寒冬的战士们)",
"Born_to_Obey": "古代零件(生而服从)",
"Root_Out_the_Turpitude": "永寿幼芽(根除恶孽)",
"Fire_Lord_Inflames_Blades_of_War": "工造机杼(火帝动炉销剑戟)",
"A_Startling_Night_Terror": "蓄梦元件(劫梦惊魂)",
"Tranquility_of_Vimala_bhumi": "思绪末屑(离垢清净)",
"Nameless_Land_Nameless_People": "角色经验材料(无名之地,无名之人)",
"A_Startling_Night_Terror": "蓄梦元件(劫梦惊魂)",
"Fire_Lord_Inflames_Blades_of_War": "工造机杼(火帝动炉销剑戟)",
"Root_Out_the_Turpitude": "永寿幼芽(根除恶孽)",
"Born_to_Obey": "古代零件(生而服从)",
"Winter_Soldiers": "铁卫扣饰(寒冬的战士们)",
"Destruction_of_the_Destroyer": "掠夺的本能(毁灭者的覆灭)",
"Nine_Billion_Names": "熄灭原核(九十亿个名字)",
"Akashic_Records": "光锥经验材料(阿卡夏记录)",
"Nameless_Land_Nameless_People": "角色经验材料(无名之地,无名之人)",
"The_Invisible_Hand": "信用点(看不见的手)",
"Abandoned_and_Insulted": "燃素 & 金属(被废弃与损害的)",
"Spring_of_Life": "固态净水 & 虚粒子(生命之泉)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黄金大地)",
"The_Blossom_in_the_Storm": "气态流体 & 种子(风暴中怒放的花)",
"Legend_of_the_Puppet_Master": "废弃机巧零件 & 玉兆单元(偃师传说)",
"Scalpel_and_Screwdriver": "锈迹齿轮 & 老旧臼齿(手术刀与螺丝刀)",
"The_Wages_of_Humanity": "一人嘉禾 & 药草提取物(赡养人类)",
"Legend_of_the_Puppet_Master": "废弃机巧零件 & 玉兆单元(偃师传说)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黄金大地)",
"Spring_of_Life": "固态净水 & 虚粒子(生命之泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 碎梦(幻梦的残片)",
"Scalpel_and_Screwdriver": "锈迹齿轮 & 老旧臼齿(手术刀与螺丝刀)"
"The_Blossom_in_the_Storm": "气态流体 & 种子(风暴中怒放的花)",
"Abandoned_and_Insulted": "燃素 & 金属(被废弃与损害的)"
},
"Name_4": {
"name": "第4个委托选择",
"help": "",
"Nine_Billion_Names": "熄灭原核(九十亿个名字)",
"Destruction_of_the_Destroyer": "掠夺的本能(毁灭者的覆灭)",
"Winter_Soldiers": "铁卫扣饰(寒冬的战士们)",
"Born_to_Obey": "古代零件(生而服从)",
"Root_Out_the_Turpitude": "永寿幼芽(根除恶孽)",
"Fire_Lord_Inflames_Blades_of_War": "工造机杼(火帝动炉销剑戟)",
"A_Startling_Night_Terror": "蓄梦元件(劫梦惊魂)",
"Tranquility_of_Vimala_bhumi": "思绪末屑(离垢清净)",
"Nameless_Land_Nameless_People": "角色经验材料(无名之地,无名之人)",
"A_Startling_Night_Terror": "蓄梦元件(劫梦惊魂)",
"Fire_Lord_Inflames_Blades_of_War": "工造机杼(火帝动炉销剑戟)",
"Root_Out_the_Turpitude": "永寿幼芽(根除恶孽)",
"Born_to_Obey": "古代零件(生而服从)",
"Winter_Soldiers": "铁卫扣饰(寒冬的战士们)",
"Destruction_of_the_Destroyer": "掠夺的本能(毁灭者的覆灭)",
"Nine_Billion_Names": "熄灭原核(九十亿个名字)",
"Akashic_Records": "光锥经验材料(阿卡夏记录)",
"Nameless_Land_Nameless_People": "角色经验材料(无名之地,无名之人)",
"The_Invisible_Hand": "信用点(看不见的手)",
"Abandoned_and_Insulted": "燃素 & 金属(被废弃与损害的)",
"Spring_of_Life": "固态净水 & 虚粒子(生命之泉)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黄金大地)",
"The_Blossom_in_the_Storm": "气态流体 & 种子(风暴中怒放的花)",
"Legend_of_the_Puppet_Master": "废弃机巧零件 & 玉兆单元(偃师传说)",
"Scalpel_and_Screwdriver": "锈迹齿轮 & 老旧臼齿(手术刀与螺丝刀)",
"The_Wages_of_Humanity": "一人嘉禾 & 药草提取物(赡养人类)",
"Legend_of_the_Puppet_Master": "废弃机巧零件 & 玉兆单元(偃师传说)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黄金大地)",
"Spring_of_Life": "固态净水 & 虚粒子(生命之泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 碎梦(幻梦的残片)",
"Scalpel_and_Screwdriver": "锈迹齿轮 & 老旧臼齿(手术刀与螺丝刀)"
"The_Blossom_in_the_Storm": "气态流体 & 种子(风暴中怒放的花)",
"Abandoned_and_Insulted": "燃素 & 金属(被废弃与损害的)"
},
"Duration": {
"name": "派遣时长",

View File

@ -809,94 +809,94 @@
"Name_1": {
"name": "第1個委託選擇",
"help": "",
"Nine_Billion_Names": "熄滅原核(九十億個名字)",
"Destruction_of_the_Destroyer": "掠奪的本能(毀滅者的覆滅)",
"Winter_Soldiers": "鐵衛扣飾(寒冬的戰士們)",
"Born_to_Obey": "古代零件(生而服從)",
"Root_Out_the_Turpitude": "永壽幼芽(根除惡孽)",
"Fire_Lord_Inflames_Blades_of_War": "工造機杼(火帝動爐銷劍戟)",
"A_Startling_Night_Terror": "蓄夢元件(劫夢驚魂)",
"Tranquility_of_Vimala_bhumi": "思緒末屑(離垢清淨)",
"Nameless_Land_Nameless_People": "角色經驗素材(無名之地,無名之人)",
"A_Startling_Night_Terror": "蓄夢元件(劫夢驚魂)",
"Fire_Lord_Inflames_Blades_of_War": "工造機杼(火帝動爐銷劍戟)",
"Root_Out_the_Turpitude": "永壽幼芽(根除惡孽)",
"Born_to_Obey": "古代零件(生而服從)",
"Winter_Soldiers": "鐵衛扣飾(寒冬的戰士們)",
"Destruction_of_the_Destroyer": "掠奪的本能(毀滅者的覆滅)",
"Nine_Billion_Names": "熄滅原核(九十億個名字)",
"Akashic_Records": "光錐經驗素材(阿卡夏紀錄)",
"Nameless_Land_Nameless_People": "角色經驗素材(無名之地,無名之人)",
"The_Invisible_Hand": "信用點(看不見的手)",
"Abandoned_and_Insulted": "燃素 & 金屬(被廢棄與損害的)",
"Spring_of_Life": "固態淨水 & 虛粒子(生命之泉)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黃金大地)",
"The_Blossom_in_the_Storm": "氣態流體 & 種子(風暴中怒放的花)",
"Legend_of_the_Puppet_Master": "廢棄機巧零件 & 玉兆單元(偃師傳說)",
"Scalpel_and_Screwdriver": "鏽跡齒輪 & 老舊臼齒(手術刀與螺絲起子)",
"The_Wages_of_Humanity": "一人嘉禾 & 藥草萃取物(贍養人類)",
"Legend_of_the_Puppet_Master": "廢棄機巧零件 & 玉兆單元(偃師傳說)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黃金大地)",
"Spring_of_Life": "固態淨水 & 虛粒子(生命之泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 碎夢(幻夢的殘片)",
"Scalpel_and_Screwdriver": "鏽跡齒輪 & 老舊臼齒(手術刀與螺絲起子)"
"The_Blossom_in_the_Storm": "氣態流體 & 種子(風暴中怒放的花)",
"Abandoned_and_Insulted": "燃素 & 金屬(被廢棄與損害的)"
},
"Name_2": {
"name": "第2個委託選擇",
"help": "",
"Nine_Billion_Names": "熄滅原核(九十億個名字)",
"Destruction_of_the_Destroyer": "掠奪的本能(毀滅者的覆滅)",
"Winter_Soldiers": "鐵衛扣飾(寒冬的戰士們)",
"Born_to_Obey": "古代零件(生而服從)",
"Root_Out_the_Turpitude": "永壽幼芽(根除惡孽)",
"Fire_Lord_Inflames_Blades_of_War": "工造機杼(火帝動爐銷劍戟)",
"A_Startling_Night_Terror": "蓄夢元件(劫夢驚魂)",
"Tranquility_of_Vimala_bhumi": "思緒末屑(離垢清淨)",
"Nameless_Land_Nameless_People": "角色經驗素材(無名之地,無名之人)",
"A_Startling_Night_Terror": "蓄夢元件(劫夢驚魂)",
"Fire_Lord_Inflames_Blades_of_War": "工造機杼(火帝動爐銷劍戟)",
"Root_Out_the_Turpitude": "永壽幼芽(根除惡孽)",
"Born_to_Obey": "古代零件(生而服從)",
"Winter_Soldiers": "鐵衛扣飾(寒冬的戰士們)",
"Destruction_of_the_Destroyer": "掠奪的本能(毀滅者的覆滅)",
"Nine_Billion_Names": "熄滅原核(九十億個名字)",
"Akashic_Records": "光錐經驗素材(阿卡夏紀錄)",
"Nameless_Land_Nameless_People": "角色經驗素材(無名之地,無名之人)",
"The_Invisible_Hand": "信用點(看不見的手)",
"Abandoned_and_Insulted": "燃素 & 金屬(被廢棄與損害的)",
"Spring_of_Life": "固態淨水 & 虛粒子(生命之泉)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黃金大地)",
"The_Blossom_in_the_Storm": "氣態流體 & 種子(風暴中怒放的花)",
"Legend_of_the_Puppet_Master": "廢棄機巧零件 & 玉兆單元(偃師傳說)",
"Scalpel_and_Screwdriver": "鏽跡齒輪 & 老舊臼齒(手術刀與螺絲起子)",
"The_Wages_of_Humanity": "一人嘉禾 & 藥草萃取物(贍養人類)",
"Legend_of_the_Puppet_Master": "廢棄機巧零件 & 玉兆單元(偃師傳說)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黃金大地)",
"Spring_of_Life": "固態淨水 & 虛粒子(生命之泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 碎夢(幻夢的殘片)",
"Scalpel_and_Screwdriver": "鏽跡齒輪 & 老舊臼齒(手術刀與螺絲起子)"
"The_Blossom_in_the_Storm": "氣態流體 & 種子(風暴中怒放的花)",
"Abandoned_and_Insulted": "燃素 & 金屬(被廢棄與損害的)"
},
"Name_3": {
"name": "第3個委託選擇",
"help": "",
"Nine_Billion_Names": "熄滅原核(九十億個名字)",
"Destruction_of_the_Destroyer": "掠奪的本能(毀滅者的覆滅)",
"Winter_Soldiers": "鐵衛扣飾(寒冬的戰士們)",
"Born_to_Obey": "古代零件(生而服從)",
"Root_Out_the_Turpitude": "永壽幼芽(根除惡孽)",
"Fire_Lord_Inflames_Blades_of_War": "工造機杼(火帝動爐銷劍戟)",
"A_Startling_Night_Terror": "蓄夢元件(劫夢驚魂)",
"Tranquility_of_Vimala_bhumi": "思緒末屑(離垢清淨)",
"Nameless_Land_Nameless_People": "角色經驗素材(無名之地,無名之人)",
"A_Startling_Night_Terror": "蓄夢元件(劫夢驚魂)",
"Fire_Lord_Inflames_Blades_of_War": "工造機杼(火帝動爐銷劍戟)",
"Root_Out_the_Turpitude": "永壽幼芽(根除惡孽)",
"Born_to_Obey": "古代零件(生而服從)",
"Winter_Soldiers": "鐵衛扣飾(寒冬的戰士們)",
"Destruction_of_the_Destroyer": "掠奪的本能(毀滅者的覆滅)",
"Nine_Billion_Names": "熄滅原核(九十億個名字)",
"Akashic_Records": "光錐經驗素材(阿卡夏紀錄)",
"Nameless_Land_Nameless_People": "角色經驗素材(無名之地,無名之人)",
"The_Invisible_Hand": "信用點(看不見的手)",
"Abandoned_and_Insulted": "燃素 & 金屬(被廢棄與損害的)",
"Spring_of_Life": "固態淨水 & 虛粒子(生命之泉)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黃金大地)",
"The_Blossom_in_the_Storm": "氣態流體 & 種子(風暴中怒放的花)",
"Legend_of_the_Puppet_Master": "廢棄機巧零件 & 玉兆單元(偃師傳說)",
"Scalpel_and_Screwdriver": "鏽跡齒輪 & 老舊臼齒(手術刀與螺絲起子)",
"The_Wages_of_Humanity": "一人嘉禾 & 藥草萃取物(贍養人類)",
"Legend_of_the_Puppet_Master": "廢棄機巧零件 & 玉兆單元(偃師傳說)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黃金大地)",
"Spring_of_Life": "固態淨水 & 虛粒子(生命之泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 碎夢(幻夢的殘片)",
"Scalpel_and_Screwdriver": "鏽跡齒輪 & 老舊臼齒(手術刀與螺絲起子)"
"The_Blossom_in_the_Storm": "氣態流體 & 種子(風暴中怒放的花)",
"Abandoned_and_Insulted": "燃素 & 金屬(被廢棄與損害的)"
},
"Name_4": {
"name": "第4個委託選擇",
"help": "",
"Nine_Billion_Names": "熄滅原核(九十億個名字)",
"Destruction_of_the_Destroyer": "掠奪的本能(毀滅者的覆滅)",
"Winter_Soldiers": "鐵衛扣飾(寒冬的戰士們)",
"Born_to_Obey": "古代零件(生而服從)",
"Root_Out_the_Turpitude": "永壽幼芽(根除惡孽)",
"Fire_Lord_Inflames_Blades_of_War": "工造機杼(火帝動爐銷劍戟)",
"A_Startling_Night_Terror": "蓄夢元件(劫夢驚魂)",
"Tranquility_of_Vimala_bhumi": "思緒末屑(離垢清淨)",
"Nameless_Land_Nameless_People": "角色經驗素材(無名之地,無名之人)",
"A_Startling_Night_Terror": "蓄夢元件(劫夢驚魂)",
"Fire_Lord_Inflames_Blades_of_War": "工造機杼(火帝動爐銷劍戟)",
"Root_Out_the_Turpitude": "永壽幼芽(根除惡孽)",
"Born_to_Obey": "古代零件(生而服從)",
"Winter_Soldiers": "鐵衛扣飾(寒冬的戰士們)",
"Destruction_of_the_Destroyer": "掠奪的本能(毀滅者的覆滅)",
"Nine_Billion_Names": "熄滅原核(九十億個名字)",
"Akashic_Records": "光錐經驗素材(阿卡夏紀錄)",
"Nameless_Land_Nameless_People": "角色經驗素材(無名之地,無名之人)",
"The_Invisible_Hand": "信用點(看不見的手)",
"Abandoned_and_Insulted": "燃素 & 金屬(被廢棄與損害的)",
"Spring_of_Life": "固態淨水 & 虛粒子(生命之泉)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黃金大地)",
"The_Blossom_in_the_Storm": "氣態流體 & 種子(風暴中怒放的花)",
"Legend_of_the_Puppet_Master": "廢棄機巧零件 & 玉兆單元(偃師傳說)",
"Scalpel_and_Screwdriver": "鏽跡齒輪 & 老舊臼齒(手術刀與螺絲起子)",
"The_Wages_of_Humanity": "一人嘉禾 & 藥草萃取物(贍養人類)",
"Legend_of_the_Puppet_Master": "廢棄機巧零件 & 玉兆單元(偃師傳說)",
"The_Land_of_Gold": "基本食材 & 蛋白米(黃金大地)",
"Spring_of_Life": "固態淨水 & 虛粒子(生命之泉)",
"Fragments_of_Illusory_Dreams": "安逸 & 碎夢(幻夢的殘片)",
"Scalpel_and_Screwdriver": "鏽跡齒輪 & 老舊臼齒(手術刀與螺絲起子)"
"The_Blossom_in_the_Storm": "氣態流體 & 種子(風暴中怒放的花)",
"Abandoned_and_Insulted": "燃素 & 金屬(被廢棄與損害的)"
},
"Duration": {
"name": "派遣時間",

View File

@ -7,7 +7,7 @@ import module.config.server as server
from module.exception import ScriptError
# ord('') = 65294
REGEX_PUNCTUATION = re.compile(r'[ ,.\'"“”,。…:;!??·・•●〇°*※\-—–-/\\\n\t()\[\]()「」『』【】《》[]]')
REGEX_PUNCTUATION = re.compile(r'[ ,.\'"“”,。…:;!??·・•●〇°*※\-—–-/\\|丨\n\t()\[\]()「」『』【】《》[]]')
def parse_name(n):

View File

@ -422,9 +422,12 @@ class Duration(Ocr):
class OcrWhiteLetterOnComplexBackground(Ocr):
white_preprocess = True
def pre_process(self, image):
image = extract_white_letters(image, threshold=255)
image = cv2.merge([image, image, image])
if self.white_preprocess:
image = extract_white_letters(image, threshold=255)
image = cv2.merge([image, image, image])
return image
def detect_and_ocr(self, *args, **kwargs):

View File

@ -15,6 +15,7 @@ class Route(RouteBase):
| enemy1 | Waypoint((46.2, 328.2)), | 12.6 | 8 |
| item2 | Waypoint((42.4, 299.0)), | 352.8 | 348 |
| door2 | Waypoint((46.4, 284.5)), | 4.2 | 1 |
| door2end | Waypoint((47.2, 274.8)), | 11.1 | 4 |
| enemy2left | Waypoint((31.2, 248.8)), | 183.8 | 84 |
| enemy2right | Waypoint((55.2, 247.2)), | 96.7 | 91 |
| item3 | Waypoint((68.5, 226.5)), | 30.2 | 29 |
@ -32,6 +33,7 @@ class Route(RouteBase):
enemy1 = Waypoint((46.2, 328.2))
item2 = Waypoint((42.4, 299.0))
door2 = Waypoint((46.4, 284.5))
door2end = Waypoint((47.2, 274.8))
enemy2left = Waypoint((31.2, 248.8))
enemy2right = Waypoint((55.2, 247.2))
item3 = Waypoint((68.5, 226.5))
@ -47,6 +49,7 @@ class Route(RouteBase):
# self.clear_item(item2)
self.clear_enemy(
door2.set_threshold(3),
door2end.set_threshold(3),
# Go through door
enemy2left,
enemy2right.straight_run(),
@ -58,6 +61,7 @@ class Route(RouteBase):
self.clear_enemy(
enemy3.straight_run(),
)
# ('Combat_Herta_SupplyZone_F2_X45Y369', 0.243, (57.2, 351.6))
def Herta_SupplyZone_F2_X397Y233(self):
"""

View File

@ -63,7 +63,7 @@ class Route(RouteBase):
)
# 2
self.clear_enemy(
node2,
node2.set_threshold(3),
enemy2.straight_run(),
)
# 3
@ -116,6 +116,43 @@ class Route(RouteBase):
self.clear_enemy(enemy2left.straight_run())
self.clear_enemy(enemy3.straight_run())
def Jarilo_BackwaterPass_F1_X503Y736(self):
"""
| Waypoint | Position | Direction | Rotation |
| ---------- | ------------------------- | --------- | -------- |
| spawn | Waypoint((507.2, 733.7)), | 6.7 | 4 |
| enemy1 | Waypoint((507.0, 644.0)), | 12.6 | 6 |
| enemy2left | Waypoint((536.0, 630.5)), | 48.1 | 43 |
| enemy3 | Waypoint((557.0, 585.2)), | 114.1 | 6 |
| exit_ | Waypoint((557.0, 585.2)), | 114.1 | 6 |
| exit1 | Waypoint((549.5, 575.4)), | 356.2 | 354 |
| exit2 | Waypoint((565.4, 575.6)), | 4.1 | 359 |
"""
self.map_init(plane=Jarilo_BackwaterPass, floor="F1", position=(503.2, 736.9))
self.register_domain_exit(
Waypoint((557.0, 585.2)), end_rotation=6,
left_door=Waypoint((549.5, 575.4)), right_door=Waypoint((565.4, 575.6)))
enemy1 = Waypoint((507.0, 644.0))
enemy2left = Waypoint((536.0, 630.5))
enemy3 = Waypoint((557.0, 585.2))
# ===== End of generated waypoints =====
self.clear_enemy(enemy1)
self.clear_enemy(enemy2left.straight_run())
self.clear_enemy(enemy3.straight_run())
"""
Notes
Herta_SupplyZone_F2_X397Y239 is the same as Herta_SupplyZone_F2_X397Y233
but for wrong spawn point detected
"""
# Best 3 predictions: [
# ('Combat_Jarilo_BackwaterPass_F1_X507Y733', 0.26, (503.2, 736.9)),
# ('Combat_Luofu_ArtisanshipCommission_F1_X41Y640', 0.18, (50.7, 644.4)),
# ('Combat_Luofu_DivinationCommission_F1_X737Y372', 0.174, (717.2, 355.4)),
# ('Combat_Herta_SupplyZone_F2_X45Y369', 0.168, (46.5, 370.0))
# ]
def Jarilo_BackwaterPass_F1_X555Y643(self):
"""
| Waypoint | Position | Direction | Rotation |

View File

@ -31,6 +31,7 @@ class Route(RouteBase):
| ----------- | -------------------------- | --------- | -------- |
| spawn | Waypoint((201.2, 1071.4)), | 6.7 | 4 |
| enemy1right | Waypoint((200.3, 1032.4)), | 342.0 | 343 |
| node1 | Waypoint((194.6, 1023.4)), | 109.3 | 294 |
| enemy1left | Waypoint((168.6, 1022.3)), | 279.8 | 89 |
| node2 | Waypoint((118.4, 1019.0)), | 282.9 | 285 |
| enemy2left | Waypoint((105.2, 1012.0)), | 317.9 | 315 |
@ -46,6 +47,7 @@ class Route(RouteBase):
Waypoint((103.4, 919.2)), end_rotation=4,
left_door=Waypoint((98.8, 908.9)), right_door=Waypoint((111.4, 909.8)))
enemy1right = Waypoint((200.3, 1032.4))
node1 = Waypoint((194.6, 1023.4))
enemy1left = Waypoint((168.6, 1022.3))
node2 = Waypoint((118.4, 1019.0))
enemy2left = Waypoint((105.2, 1012.0))
@ -57,20 +59,22 @@ class Route(RouteBase):
# 1
self.rotation_set(315)
self.clear_enemy(
enemy1right.set_threshold(5),
enemy1left.set_threshold(5),
enemy1right.set_threshold(3),
node1.set_threshold(3),
enemy1left.set_threshold(3),
)
# 2
self.clear_enemy(
enemy1left.set_threshold(5),
enemy1left.set_threshold(3),
node2.set_threshold(5),
enemy2left,
enemy2right,
)
# 3
self.rotation_set(0)
self.clear_enemy(
node3.set_threshold(5),
enemy3.straight_run(),
node3.set_threshold(3),
enemy3,
)
def Jarilo_CorridorofFadingEchoes_F1_X266Y457(self):

View File

@ -256,3 +256,58 @@ class Route(RouteBase):
)
self.clear_item(item4)
self.clear_enemy(enemy4)
def Luofu_Cloudford_F1_X432Y685(self):
"""
| Waypoint | Position | Direction | Rotation |
| -------- | ------------------------- | --------- | -------- |
| spawn | Waypoint((435.4, 669.2)), | 6.7 | 4 |
| item1 | Waypoint((432.2, 628.3)), | 2.7 | 357 |
| enemy1 | Waypoint((428.6, 598.8)), | 8.0 | 177 |
| node2 | Waypoint((421.2, 590.8)), | 44.2 | 285 |
| node3 | Waypoint((366.6, 588.2)), | 274.2 | 274 |
| enemy3 | Waypoint((344.9, 590.4)), | 191.8 | 357 |
| item4 | Waypoint((309.6, 580.2)), | 290.1 | 281 |
| enemy4 | Waypoint((271.3, 585.5)), | 285.0 | 274 |
| exit_ | Waypoint((271.3, 585.5)), | 285.0 | 274 |
| exit1 | Waypoint((267.9, 592.3)), | 275.9 | 274 |
| exit2 | Waypoint((267.8, 580.0)), | 275.8 | 274 |
"""
self.map_init(plane=Luofu_Cloudford, floor="F1", position=(432.8, 685.1))
self.register_domain_exit(
Waypoint((271.3, 585.5)), end_rotation=274,
left_door=Waypoint((267.9, 592.3)), right_door=Waypoint((267.8, 580.0)))
item1 = Waypoint((432.2, 628.3))
enemy1 = Waypoint((428.6, 598.8))
node2 = Waypoint((421.2, 590.8))
node3 = Waypoint((366.6, 588.2))
enemy3 = Waypoint((344.9, 590.4))
item4 = Waypoint((309.6, 580.2))
enemy4 = Waypoint((271.3, 585.5))
# ===== End of generated waypoints =====
self.clear_item(item1)
self.clear_enemy(enemy1)
# Go through bridges
self.rotation_set(270)
self.minimap.lock_rotation(270)
self.clear_enemy(
node2.set_threshold(3),
node3.set_threshold(3),
enemy3,
)
self.clear_item(item4)
self.clear_enemy(enemy4)
"""
Notes
Luofu_Cloudford_F1_X435Y685 is the same as Luofu_Cloudford_F1_X435Y669
but for wrong spawn point detected
"""
# Best 3 predictions: [
# ('Combat_Luofu_Cloudford_F1_X433Y617', 0.195, (432.8, 668.4)),
# ('Combat_Herta_SupplyZone_F2_X45Y369', 0.18, (24.2, 372.2)),
# ('Combat_Luofu_Cloudford_F1_X435Y669', 0.18, (432.8, 685.1))
# ]
# (432.9, 684.9)
# ('Combat_Luofu_Cloudford_F1_X435Y669', 0.172, (432.8, 685.0))

View File

@ -30,6 +30,36 @@ class Route(RouteBase):
but for wrong spawn point detected
"""
def Jarilo_CorridorofFadingEchoes_F1_X415Y953(self):
"""
| Waypoint | Position | Direction | Rotation |
| -------- | ------------------------- | --------- | -------- |
| spawn | Waypoint((415.5, 947.9)), | 96.7 | 91 |
| enemy | Waypoint((464.0, 953.0)), | 96.8 | 94 |
| reward | Waypoint((472.7, 958.5)), | 214.6 | 114 |
| exit_ | Waypoint((480.0, 944.0)), | 92.7 | 84 |
"""
self.map_init(plane=Jarilo_CorridorofFadingEchoes, floor="F1", position=(415.4, 953.3))
enemy = Waypoint((464.0, 953.0))
reward = Waypoint((472.7, 958.5))
exit_ = Waypoint((480.0, 944.0))
self.clear_elite(enemy)
self.domain_reward(reward)
self.domain_single_exit(exit_)
# ===== End of generated waypoints =====
"""
Notes
Jarilo_CorridorofFadingEchoes_F1_X415Y953 is the same as Jarilo_CorridorofFadingEchoes_F1_X415Y947
but for wrong spawn point detected
"""
# Best 3 predictions: [
# ('Elite_Jarilo_CorridorofFadingEchoes_F1_X415Y933', 0.169, (415.4, 953.3)),
# ('Elite_Jarilo_CorridorofFadingEchoes_F1_X415Y947', 0.169, (415.4, 953.3)),
# ('Elite_Herta_SupplyZone_F2_X680Y247', 0.162, (738.4, 252.2))
# ]
def Jarilo_CorridorofFadingEchoes_F1_X415Y947(self):
"""
| Waypoint | Position | Direction | Rotation |

View File

@ -24,6 +24,36 @@ class Route(RouteBase):
self.domain_single_exit(exit_)
# ===== End of generated waypoints =====
def Luofu_ArtisanshipCommission_F1_X391Y493(self):
"""
| Waypoint | Position | Direction | Rotation |
| -------- | ------------------------- | --------- | -------- |
| spawn | Waypoint((385.2, 494.6)), | 94.2 | 91 |
| enemy | Waypoint((444.2, 490.5)), | 94.2 | 91 |
| reward | Waypoint((448.6, 497.2)), | 149.7 | 91 |
| exit_ | Waypoint((458.0, 483.7)), | 94.2 | 91 |
"""
self.map_init(plane=Luofu_ArtisanshipCommission, floor="F1", position=(391.1, 493.2))
enemy = Waypoint((444.2, 490.5))
reward = Waypoint((448.6, 497.2))
exit_ = Waypoint((458.0, 483.7))
self.clear_elite(enemy)
self.domain_reward(reward)
self.domain_single_exit(exit_)
# ===== End of generated waypoints =====
"""
Notes
Luofu_ArtisanshipCommission_F1_X391Y493 is the same as Luofu_ArtisanshipCommission_F1_X385Y494
but for wrong spawn point detected
"""
# Best 3 predictions: [
# ('Elite_Luofu_ArtisanshipCommission_F1_X385Y494', 0.182, (391.1, 493.2)),
# ('Elite_Jarilo_CorridorofFadingEchoes_F1_X415Y933', 0.157, (364.0, 951.0)),
# ('Elite_Jarilo_CorridorofFadingEchoes_F1_X415Y947', 0.157, (364.0, 951.0))
# ]
def Luofu_ArtisanshipCommission_F1_X504Y493(self):
"""
| Waypoint | Position | Direction | Rotation |

View File

@ -25,3 +25,34 @@ class Route(RouteBase):
self.domain_reward(reward)
self.domain_single_exit(exit_)
# ===== End of generated waypoints =====
@locked_rotation(0)
def Luofu_Cloudford_F1_X342Y1003(self):
"""
| Waypoint | Position | Direction | Rotation |
| -------- | -------------------------- | --------- | -------- |
| spawn | Waypoint((337.3, 1003.4)), | 6.7 | 4 |
| enemy | Waypoint((336.2, 962.2)), | 6.7 | 4 |
| reward | Waypoint((342.9, 950.8)), | 44.2 | 31 |
| exit_ | Waypoint((328.8, 942.8)), | 316.1 | 331 |
"""
self.map_init(plane=Luofu_Cloudford, floor="F1", position=(342.3, 1003.4))
enemy = Waypoint((336.2, 962.2))
reward = Waypoint((342.9, 950.8))
exit_ = Waypoint((328.8, 942.8))
self.clear_elite(enemy)
self.domain_reward(reward)
self.domain_single_exit(exit_)
# ===== End of generated waypoints =====
"""
Notes
Luofu_Cloudford_F1_X342Y1003 is the same as Luofu_Cloudford_F1_X337Y1003
but for wrong spawn point detected
"""
# Best 3 predictions: [
# ('Elite_Luofu_Cloudford_F1_X337Y1003', 0.169, (342.3, 1002.7)),
# ('Elite_Luofu_ArtisanshipCommission_F1_X504Y493', 0.106, (519.3, 452.7)),
# ('Elite_Jarilo_CorridorofFadingEchoes_F1_X415Y933', 0.104, (433.8, 982.0))
# ]

View File

@ -25,3 +25,34 @@ class Route(RouteBase):
self.domain_reward(reward)
self.domain_single_exit(exit_)
# ===== End of generated waypoints =====
@locked_rotation(90)
def Luofu_StargazerNavalia_F1_X617Y511(self):
"""
| Waypoint | Position | Direction | Rotation |
| -------- | ------------------------- | --------- | -------- |
| spawn | Waypoint((617.5, 511.5)), | 96.7 | 91 |
| enemy | Waypoint((664.6, 512.6)), | 96.8 | 94 |
| reward | Waypoint((677.1, 521.2)), | 212.8 | 108 |
| exit_ | Waypoint((684.6, 505.0)), | 91.3 | 82 |
"""
self.map_init(plane=Luofu_StargazerNavalia, floor="F1", position=(617.5, 511.5))
enemy = Waypoint((664.6, 512.6))
reward = Waypoint((677.1, 521.2))
exit_ = Waypoint((684.6, 505.0))
self.clear_elite(enemy)
self.domain_reward(reward)
self.domain_single_exit(exit_)
# ===== End of generated waypoints =====
"""
Notes
Herta_SupplyZone_F2_X397Y239 is the same as Herta_SupplyZone_F2_X397Y233
but for wrong spawn point detected
"""
# Best 3 predictions: [
# ('Elite_Luofu_StargazerNavalia_F1_X617Y511', 0.338, (621.0, 507.0)),
# ('Elite_Luofu_ArtisanshipCommission_F1_X385Y494', 0.203, (329.2, 492.8)),
# ('Elite_Jarilo_SilvermaneGuardRestrictedZone_F1_X225Y425', 0.181, (224.8, 423.2))
# ]

View File

@ -241,6 +241,17 @@
],
"domain": "Combat"
},
{
"name": "Combat_Jarilo_BackwaterPass_F1_X503Y736",
"route": "route.rogue.Combat.Jarilo_BackwaterPass_F1:Jarilo_BackwaterPass_F1_X503Y736",
"plane": "Jarilo_BackwaterPass",
"floor": "F1",
"position": [
503.2,
736.9
],
"domain": "Combat"
},
{
"name": "Combat_Jarilo_BackwaterPass_F1_X555Y643",
"route": "route.rogue.Combat.Jarilo_BackwaterPass_F1:Jarilo_BackwaterPass_F1_X555Y643",
@ -901,6 +912,17 @@
],
"domain": "Combat"
},
{
"name": "Combat_Luofu_Cloudford_F1_X432Y685",
"route": "route.rogue.Combat.Luofu_Cloudford_F1:Luofu_Cloudford_F1_X432Y685",
"plane": "Luofu_Cloudford",
"floor": "F1",
"position": [
432.8,
685.1
],
"domain": "Combat"
},
{
"name": "Combat_Luofu_Cloudford_F1Rogue_X59Y405",
"route": "route.rogue.Combat.Luofu_Cloudford_F1Rogue:Luofu_Cloudford_F1Rogue_X59Y405",
@ -1286,6 +1308,17 @@
],
"domain": "Elite"
},
{
"name": "Elite_Jarilo_CorridorofFadingEchoes_F1_X415Y953",
"route": "route.rogue.Elite.Jarilo_CorridorofFadingEchoes_F1:Jarilo_CorridorofFadingEchoes_F1_X415Y953",
"plane": "Jarilo_CorridorofFadingEchoes",
"floor": "F1",
"position": [
415.4,
953.3
],
"domain": "Elite"
},
{
"name": "Elite_Jarilo_CorridorofFadingEchoes_F1_X415Y947",
"route": "route.rogue.Elite.Jarilo_CorridorofFadingEchoes_F1:Jarilo_CorridorofFadingEchoes_F1_X415Y947",
@ -1385,6 +1418,17 @@
],
"domain": "Elite"
},
{
"name": "Elite_Luofu_ArtisanshipCommission_F1_X391Y493",
"route": "route.rogue.Elite.Luofu_ArtisanshipCommission_F1:Luofu_ArtisanshipCommission_F1_X391Y493",
"plane": "Luofu_ArtisanshipCommission",
"floor": "F1",
"position": [
391.1,
493.2
],
"domain": "Elite"
},
{
"name": "Elite_Luofu_ArtisanshipCommission_F1_X504Y493",
"route": "route.rogue.Elite.Luofu_ArtisanshipCommission_F1:Luofu_ArtisanshipCommission_F1_X504Y493",
@ -1407,6 +1451,17 @@
],
"domain": "Elite"
},
{
"name": "Elite_Luofu_Cloudford_F1_X342Y1003",
"route": "route.rogue.Elite.Luofu_Cloudford_F1:Luofu_Cloudford_F1_X342Y1003",
"plane": "Luofu_Cloudford",
"floor": "F1",
"position": [
342.3,
1003.4
],
"domain": "Elite"
},
{
"name": "Elite_Luofu_DivinationCommission_F2_X338Y345",
"route": "route.rogue.Elite.Luofu_DivinationCommission_F2:Luofu_DivinationCommission_F2_X338Y345",
@ -1440,6 +1495,17 @@
],
"domain": "Elite"
},
{
"name": "Elite_Luofu_StargazerNavalia_F1_X617Y511",
"route": "route.rogue.Elite.Luofu_StargazerNavalia_F1:Luofu_StargazerNavalia_F1_X617Y511",
"plane": "Luofu_StargazerNavalia",
"floor": "F1",
"position": [
617.5,
511.5
],
"domain": "Elite"
},
{
"name": "Occurrence_Herta_StorageZone_F1_X273Y93",
"route": "route.rogue.Occurrence.Herta_StorageZone_F1:Herta_StorageZone_F1_X273Y93",

View File

@ -34,40 +34,40 @@ CHARACTER_1 = ButtonWrapper(
name='CHARACTER_1',
share=Button(
file='./assets/share/assignment/dispatch/CHARACTER_1.png',
area=(110, 202, 202, 309),
search=(90, 182, 222, 329),
area=(96, 200, 188, 307),
search=(76, 180, 208, 327),
color=(153, 141, 159),
button=(110, 202, 202, 309),
button=(96, 200, 188, 307),
),
)
CHARACTER_1_SELECTED = ButtonWrapper(
name='CHARACTER_1_SELECTED',
share=Button(
file='./assets/share/assignment/dispatch/CHARACTER_1_SELECTED.png',
area=(107, 199, 126, 217),
search=(87, 179, 146, 237),
area=(93, 197, 112, 215),
search=(73, 177, 132, 235),
color=(217, 218, 216),
button=(107, 199, 126, 217),
button=(93, 197, 112, 215),
),
)
CHARACTER_2 = ButtonWrapper(
name='CHARACTER_2',
share=Button(
file='./assets/share/assignment/dispatch/CHARACTER_2.png',
area=(222, 202, 314, 309),
search=(202, 182, 334, 329),
area=(208, 200, 300, 307),
search=(188, 180, 320, 327),
color=(120, 120, 138),
button=(222, 202, 314, 309),
button=(208, 200, 300, 307),
),
)
CHARACTER_2_SELECTED = ButtonWrapper(
name='CHARACTER_2_SELECTED',
share=Button(
file='./assets/share/assignment/dispatch/CHARACTER_2_SELECTED.png',
area=(219, 199, 238, 217),
search=(199, 179, 258, 237),
area=(205, 197, 224, 215),
search=(185, 177, 244, 235),
color=(206, 207, 204),
button=(219, 199, 238, 217),
button=(205, 197, 224, 215),
),
)
CHARACTER_LIST = ButtonWrapper(

View File

@ -3,71 +3,8 @@ from .classes import AssignmentEntry
# This file was auto-generated, do not modify it manually. To generate:
# ``` python -m dev_tools.keyword_extract ```
Nine_Billion_Names = AssignmentEntry(
id=1,
name='Nine_Billion_Names',
cn='九十亿个名字',
cht='九十億個名字',
en='Nine Billion Names',
jp='九十億の御名',
es='Nueve mil millones de nombres',
)
Destruction_of_the_Destroyer = AssignmentEntry(
id=2,
name='Destruction_of_the_Destroyer',
cn='毁灭者的覆灭',
cht='毀滅者的覆滅',
en='Destruction of the Destroyer',
jp='壊滅者の覆没',
es='La destrucción del destructor',
)
Winter_Soldiers = AssignmentEntry(
id=3,
name='Winter_Soldiers',
cn='寒冬的战士们',
cht='寒冬的戰士們',
en='Winter Soldiers',
jp='寒冬の戦士たち',
es='Los guerreros del invierno',
)
Born_to_Obey = AssignmentEntry(
id=4,
name='Born_to_Obey',
cn='生而服从',
cht='生而服從',
en='Born to Obey',
jp='生まれながらに服従する',
es='Creados para obedecer',
)
Root_Out_the_Turpitude = AssignmentEntry(
id=5,
name='Root_Out_the_Turpitude',
cn='根除恶孽',
cht='根除惡孽',
en='Root Out the Turpitude',
jp='悪孽を根絶やしに',
es='La raíz del mal',
)
Fire_Lord_Inflames_Blades_of_War = AssignmentEntry(
id=6,
name='Fire_Lord_Inflames_Blades_of_War',
cn='火帝动炉销剑戟',
cht='火帝動爐銷劍戟',
en='Fire Lord Inflames Blades of War',
jp='剣戟を焼却する火帝炉',
es='Prendan los fuelles, fundan las armas',
)
A_Startling_Night_Terror = AssignmentEntry(
id=7,
name='A_Startling_Night_Terror',
cn='劫梦惊魂',
cht='劫夢驚魂',
en='A Startling Night Terror',
jp='魂震える悪夢',
es='Pesadilla aterradora',
)
Tranquility_of_Vimala_bhumi = AssignmentEntry(
id=8,
id=1,
name='Tranquility_of_Vimala_bhumi',
cn='离垢清净',
cht='離垢清淨',
@ -75,17 +12,71 @@ Tranquility_of_Vimala_bhumi = AssignmentEntry(
jp='離垢清浄',
es='Limpieza y purificación',
)
Nameless_Land_Nameless_People = AssignmentEntry(
id=9,
name='Nameless_Land_Nameless_People',
cn='无名之地,无名之人',
cht='無名之地,無名之人',
en='Nameless Land, Nameless People',
jp='無名の地、無名の人',
es='Lugar anónimo, personas anónimas',
A_Startling_Night_Terror = AssignmentEntry(
id=2,
name='A_Startling_Night_Terror',
cn='劫梦惊魂',
cht='劫夢驚魂',
en='A Startling Night Terror',
jp='魂震える悪夢',
es='Pesadilla aterradora',
)
Fire_Lord_Inflames_Blades_of_War = AssignmentEntry(
id=3,
name='Fire_Lord_Inflames_Blades_of_War',
cn='火帝动炉销剑戟',
cht='火帝動爐銷劍戟',
en='Fire Lord Inflames Blades of War',
jp='剣戟を焼却する火帝炉',
es='Prendan los fuelles, fundan las armas',
)
Root_Out_the_Turpitude = AssignmentEntry(
id=4,
name='Root_Out_the_Turpitude',
cn='根除恶孽',
cht='根除惡孽',
en='Root Out the Turpitude',
jp='悪孽を根絶やしに',
es='La raíz del mal',
)
Born_to_Obey = AssignmentEntry(
id=5,
name='Born_to_Obey',
cn='生而服从',
cht='生而服從',
en='Born to Obey',
jp='生まれながらに服従する',
es='Creados para obedecer',
)
Winter_Soldiers = AssignmentEntry(
id=6,
name='Winter_Soldiers',
cn='寒冬的战士们',
cht='寒冬的戰士們',
en='Winter Soldiers',
jp='寒冬の戦士たち',
es='Los guerreros del invierno',
)
Destruction_of_the_Destroyer = AssignmentEntry(
id=7,
name='Destruction_of_the_Destroyer',
cn='毁灭者的覆灭',
cht='毀滅者的覆滅',
en='Destruction of the Destroyer',
jp='壊滅者の覆没',
es='La destrucción del destructor',
)
Nine_Billion_Names = AssignmentEntry(
id=8,
name='Nine_Billion_Names',
cn='九十亿个名字',
cht='九十億個名字',
en='Nine Billion Names',
jp='九十億の御名',
es='Nueve mil millones de nombres',
)
Akashic_Records = AssignmentEntry(
id=10,
id=9,
name='Akashic_Records',
cn='阿卡夏记录',
cht='阿卡夏紀錄',
@ -93,6 +84,15 @@ Akashic_Records = AssignmentEntry(
jp='アーカーシャの記録',
es='Los Registros de Akasha',
)
Nameless_Land_Nameless_People = AssignmentEntry(
id=10,
name='Nameless_Land_Nameless_People',
cn='无名之地,无名之人',
cht='無名之地,無名之人',
en='Nameless Land, Nameless People',
jp='無名の地、無名の人',
es='Lugar anónimo, personas anónimas',
)
The_Invisible_Hand = AssignmentEntry(
id=11,
name='The_Invisible_Hand',
@ -102,71 +102,8 @@ The_Invisible_Hand = AssignmentEntry(
jp='見えざる手',
es='La mano invisible',
)
Abandoned_and_Insulted = AssignmentEntry(
id=12,
name='Abandoned_and_Insulted',
cn='被废弃与损害的',
cht='被廢棄與損害的',
en='Abandoned and Insulted',
jp='捨てられしものと傷つけられしもの',
es='Abandonado e insultado',
)
Spring_of_Life = AssignmentEntry(
id=13,
name='Spring_of_Life',
cn='生命之泉',
cht='生命之泉',
en='Spring of Life',
jp='生命の泉',
es='La fuente de la vida',
)
The_Land_of_Gold = AssignmentEntry(
id=14,
name='The_Land_of_Gold',
cn='黄金大地',
cht='黃金大地',
en='The Land of Gold',
jp='黄金の大地',
es='Tierra de oportunidades',
)
The_Blossom_in_the_Storm = AssignmentEntry(
id=15,
name='The_Blossom_in_the_Storm',
cn='风暴中怒放的花',
cht='風暴中怒放的花',
en='The Blossom in the Storm',
jp='嵐の中で咲き誇る花',
es='Flores en la tormenta',
)
Legend_of_the_Puppet_Master = AssignmentEntry(
id=16,
name='Legend_of_the_Puppet_Master',
cn='偃师传说',
cht='偃師傳說',
en='Legend of the Puppet Master',
jp='傀儡師伝説',
es='La leyenda del titiritero',
)
The_Wages_of_Humanity = AssignmentEntry(
id=17,
name='The_Wages_of_Humanity',
cn='赡养人类',
cht='贍養人類',
en='The Wages of Humanity',
jp='人類扶養',
es='La paga de la humanidad',
)
Fragments_of_Illusory_Dreams = AssignmentEntry(
id=18,
name='Fragments_of_Illusory_Dreams',
cn='幻梦的残片',
cht='幻夢的殘片',
en='Fragments of Illusory Dreams',
jp='幻夢の残片',
es='Fragmentos de sueños ilusorios',
)
Scalpel_and_Screwdriver = AssignmentEntry(
id=19,
id=12,
name='Scalpel_and_Screwdriver',
cn='手术刀与螺丝刀',
cht='手術刀與螺絲起子',
@ -174,3 +111,66 @@ Scalpel_and_Screwdriver = AssignmentEntry(
jp='メスとスクリュードライバー',
es='Bisturí y destornillador',
)
The_Wages_of_Humanity = AssignmentEntry(
id=13,
name='The_Wages_of_Humanity',
cn='赡养人类',
cht='贍養人類',
en='The Wages of Humanity',
jp='人類扶養',
es='La paga de la humanidad',
)
Legend_of_the_Puppet_Master = AssignmentEntry(
id=14,
name='Legend_of_the_Puppet_Master',
cn='偃师传说',
cht='偃師傳說',
en='Legend of the Puppet Master',
jp='傀儡師伝説',
es='La leyenda del titiritero',
)
The_Land_of_Gold = AssignmentEntry(
id=15,
name='The_Land_of_Gold',
cn='黄金大地',
cht='黃金大地',
en='The Land of Gold',
jp='黄金の大地',
es='Tierra de oportunidades',
)
Spring_of_Life = AssignmentEntry(
id=16,
name='Spring_of_Life',
cn='生命之泉',
cht='生命之泉',
en='Spring of Life',
jp='生命の泉',
es='La fuente de la vida',
)
Fragments_of_Illusory_Dreams = AssignmentEntry(
id=17,
name='Fragments_of_Illusory_Dreams',
cn='幻梦的残片',
cht='幻夢的殘片',
en='Fragments of Illusory Dreams',
jp='幻夢の残片',
es='Fragmentos de sueños ilusorios',
)
The_Blossom_in_the_Storm = AssignmentEntry(
id=18,
name='The_Blossom_in_the_Storm',
cn='风暴中怒放的花',
cht='風暴中怒放的花',
en='The Blossom in the Storm',
jp='嵐の中で咲き誇る花',
es='Flores en la tormenta',
)
Abandoned_and_Insulted = AssignmentEntry(
id=19,
name='Abandoned_and_Insulted',
cn='被废弃与损害的',
cht='被廢棄與損害的',
en='Abandoned and Insulted',
jp='捨てられしものと傷つけられしもの',
es='Abandonado e insultado',
)

View File

@ -3,71 +3,8 @@ from .classes import AssignmentEntryDetailed
# This file was auto-generated, do not modify it manually. To generate:
# ``` python -m dev_tools.keyword_extract ```
Nine_Billion_Names = AssignmentEntryDetailed(
id=1,
name='Nine_Billion_Names',
cn='熄灭原核(九十亿个名字)',
cht='熄滅原核(九十億個名字)',
en='Extinguished Core (Nine Billion Names)',
jp='消滅した原核(九十億の御名)',
es='Núcleo apagado (Nueve mil millones de nombres)',
)
Destruction_of_the_Destroyer = AssignmentEntryDetailed(
id=2,
name='Destruction_of_the_Destroyer',
cn='掠夺的本能(毁灭者的覆灭)',
cht='掠奪的本能(毀滅者的覆滅)',
en="Thief's Instinct (Destruction of the Destroyer)",
jp='略奪の本能(壊滅者の覆没)',
es='Instinto del ladrón (La destrucción del destructor)',
)
Winter_Soldiers = AssignmentEntryDetailed(
id=3,
name='Winter_Soldiers',
cn='铁卫扣饰(寒冬的战士们)',
cht='鐵衛扣飾(寒冬的戰士們)',
en='Silvermane Badge (Winter Soldiers)',
jp='シルバーメインの釦(寒冬の戦士たち)',
es='Pin del guardia (Los guerreros del invierno)',
)
Born_to_Obey = AssignmentEntryDetailed(
id=4,
name='Born_to_Obey',
cn='古代零件(生而服从)',
cht='古代零件(生而服從)',
en='Ancient Part (Born to Obey)',
jp='古代パーツ(生まれながらに服従する)',
es='Componente antiguo (Creados para obedecer)',
)
Root_Out_the_Turpitude = AssignmentEntryDetailed(
id=5,
name='Root_Out_the_Turpitude',
cn='永寿幼芽(根除恶孽)',
cht='永壽幼芽(根除惡孽)',
en='Immortal Scionette (Root Out the Turpitude)',
jp='永寿の萌芽(悪孽を根絶やしに)',
es='Brote verde inmortal (La raíz del mal)',
)
Fire_Lord_Inflames_Blades_of_War = AssignmentEntryDetailed(
id=6,
name='Fire_Lord_Inflames_Blades_of_War',
cn='工造机杼(火帝动炉销剑戟)',
cht='工造機杼(火帝動爐銷劍戟)',
en="Artifex's Module (Fire Lord Inflames Blades of War)",
jp='工造機関(剣戟を焼却する火帝炉)',
es='Componente artificial mecánico (Prendan los fuelles, fundan las armas)',
)
A_Startling_Night_Terror = AssignmentEntryDetailed(
id=7,
name='A_Startling_Night_Terror',
cn='蓄梦元件(劫梦惊魂)',
cht='蓄夢元件(劫夢驚魂)',
en='Dream Collection Component (A Startling Night Terror)',
jp='ドリームコレクションパーツ(魂震える悪夢)',
es='Componente del acumulador de sueños (Pesadilla aterradora)',
)
Tranquility_of_Vimala_bhumi = AssignmentEntryDetailed(
id=8,
id=1,
name='Tranquility_of_Vimala_bhumi',
cn='思绪末屑(离垢清净)',
cht='思緒末屑(離垢清淨)',
@ -75,17 +12,71 @@ Tranquility_of_Vimala_bhumi = AssignmentEntryDetailed(
jp='思考の粉末(離垢清浄)',
es='Jirones de pensamientos (Limpieza y purificación)',
)
Nameless_Land_Nameless_People = AssignmentEntryDetailed(
id=9,
name='Nameless_Land_Nameless_People',
cn='角色经验材料(无名之地,无名之人)',
cht='角色經驗素材(無名之地,無名之人)',
en='Character EXP Material (Nameless Land, Nameless People)',
jp='キャラクター経験値素材(無名の地、無名の人)',
es='Material de EXP de personaje (Lugar anónimo, personas anónimas)',
A_Startling_Night_Terror = AssignmentEntryDetailed(
id=2,
name='A_Startling_Night_Terror',
cn='蓄梦元件(劫梦惊魂)',
cht='蓄夢元件(劫夢驚魂)',
en='Dream Collection Component (A Startling Night Terror)',
jp='ドリームコレクションパーツ(魂震える悪夢)',
es='Componente del acumulador de sueños (Pesadilla aterradora)',
)
Fire_Lord_Inflames_Blades_of_War = AssignmentEntryDetailed(
id=3,
name='Fire_Lord_Inflames_Blades_of_War',
cn='工造机杼(火帝动炉销剑戟)',
cht='工造機杼(火帝動爐銷劍戟)',
en="Artifex's Module (Fire Lord Inflames Blades of War)",
jp='工造機関(剣戟を焼却する火帝炉)',
es='Componente artificial mecánico (Prendan los fuelles, fundan las armas)',
)
Root_Out_the_Turpitude = AssignmentEntryDetailed(
id=4,
name='Root_Out_the_Turpitude',
cn='永寿幼芽(根除恶孽)',
cht='永壽幼芽(根除惡孽)',
en='Immortal Scionette (Root Out the Turpitude)',
jp='永寿の萌芽(悪孽を根絶やしに)',
es='Brote verde inmortal (La raíz del mal)',
)
Born_to_Obey = AssignmentEntryDetailed(
id=5,
name='Born_to_Obey',
cn='古代零件(生而服从)',
cht='古代零件(生而服從)',
en='Ancient Part (Born to Obey)',
jp='古代パーツ(生まれながらに服従する)',
es='Componente antiguo (Creados para obedecer)',
)
Winter_Soldiers = AssignmentEntryDetailed(
id=6,
name='Winter_Soldiers',
cn='铁卫扣饰(寒冬的战士们)',
cht='鐵衛扣飾(寒冬的戰士們)',
en='Silvermane Badge (Winter Soldiers)',
jp='シルバーメインの釦(寒冬の戦士たち)',
es='Pin del guardia (Los guerreros del invierno)',
)
Destruction_of_the_Destroyer = AssignmentEntryDetailed(
id=7,
name='Destruction_of_the_Destroyer',
cn='掠夺的本能(毁灭者的覆灭)',
cht='掠奪的本能(毀滅者的覆滅)',
en="Thief's Instinct (Destruction of the Destroyer)",
jp='略奪の本能(壊滅者の覆没)',
es='Instinto del ladrón (La destrucción del destructor)',
)
Nine_Billion_Names = AssignmentEntryDetailed(
id=8,
name='Nine_Billion_Names',
cn='熄灭原核(九十亿个名字)',
cht='熄滅原核(九十億個名字)',
en='Extinguished Core (Nine Billion Names)',
jp='消滅した原核(九十億の御名)',
es='Núcleo apagado (Nueve mil millones de nombres)',
)
Akashic_Records = AssignmentEntryDetailed(
id=10,
id=9,
name='Akashic_Records',
cn='光锥经验材料(阿卡夏记录)',
cht='光錐經驗素材(阿卡夏紀錄)',
@ -93,6 +84,15 @@ Akashic_Records = AssignmentEntryDetailed(
jp='光円錐経験値素材(アーカーシャの記録)',
es='Material de EXP de conos de luz (Los Registros de Akasha)',
)
Nameless_Land_Nameless_People = AssignmentEntryDetailed(
id=10,
name='Nameless_Land_Nameless_People',
cn='角色经验材料(无名之地,无名之人)',
cht='角色經驗素材(無名之地,無名之人)',
en='Character EXP Material (Nameless Land, Nameless People)',
jp='キャラクター経験値素材(無名の地、無名の人)',
es='Material de EXP de personaje (Lugar anónimo, personas anónimas)',
)
The_Invisible_Hand = AssignmentEntryDetailed(
id=11,
name='The_Invisible_Hand',
@ -102,71 +102,8 @@ The_Invisible_Hand = AssignmentEntryDetailed(
jp='信用ポイント(見えざる手)',
es='Crédito (La mano invisible)',
)
Abandoned_and_Insulted = AssignmentEntryDetailed(
id=12,
name='Abandoned_and_Insulted',
cn='燃素 & 金属(被废弃与损害的)',
cht='燃素 & 金屬(被廢棄與損害的)',
en='Phlogiston & Metal (Abandoned and Insulted)',
jp='燃素 & 金属(捨てられしものと傷つけられしもの)',
es='Flogisto & Metal (Abandonado e insultado)',
)
Spring_of_Life = AssignmentEntryDetailed(
id=13,
name='Spring_of_Life',
cn='固态净水 & 虚粒子(生命之泉)',
cht='固態淨水 & 虛粒子(生命之泉)',
en='Solid Water & Virtual Particle (Spring of Life)',
jp='固形純水 & 仮想粒子(生命の泉)',
es='Agua sólida & Partícula virtual (La fuente de la vida)',
)
The_Land_of_Gold = AssignmentEntryDetailed(
id=14,
name='The_Land_of_Gold',
cn='基本食材 & 蛋白米(黄金大地)',
cht='基本食材 & 蛋白米(黃金大地)',
en='Basic Ingredients & Protein Rice (The Land of Gold)',
jp='基本食材 & タンパク米(黄金の大地)',
es='Ingredientes básicos & Arroz proteico (Tierra de oportunidades)',
)
The_Blossom_in_the_Storm = AssignmentEntryDetailed(
id=15,
name='The_Blossom_in_the_Storm',
cn='气态流体 & 种子(风暴中怒放的花)',
cht='氣態流體 & 種子(風暴中怒放的花)',
en='Gaseous Liquid & Seed (The Blossom in the Storm)',
jp='気態流体 & 種子(嵐の中で咲き誇る花)',
es='Líquido gaseoso & Semilla (Flores en la tormenta)',
)
Legend_of_the_Puppet_Master = AssignmentEntryDetailed(
id=16,
name='Legend_of_the_Puppet_Master',
cn='废弃机巧零件 & 玉兆单元(偃师传说)',
cht='廢棄機巧零件 & 玉兆單元(偃師傳說)',
en='Discarded Ingenium Parts & Jade Abacus Unit (Legend of the Puppet Master)',
jp='廃棄された機巧部品 & 玉兆単元(傀儡師伝説)',
es='Componentes mecánicos abandonados & Unidad de ábaco de jade (La leyenda del titiritero)',
)
The_Wages_of_Humanity = AssignmentEntryDetailed(
id=17,
name='The_Wages_of_Humanity',
cn='一人嘉禾 & 药草提取物(赡养人类)',
cht='一人嘉禾 & 藥草萃取物(贍養人類)',
en='Human-Height Auspicious Crops & Extract of Medicinal Herbs (The Wages of Humanity)',
jp='一人稲 & 薬草抽出物(人類扶養)',
es='Cosecha tan alta como una persona & Extracto de hierbas medicinales (La paga de la humanidad)',
)
Fragments_of_Illusory_Dreams = AssignmentEntryDetailed(
id=18,
name='Fragments_of_Illusory_Dreams',
cn='安逸 & 碎梦(幻梦的残片)',
cht='安逸 & 碎夢(幻夢的殘片)',
en='Tranquility & Broken Dreams (Fragments of Illusory Dreams)',
jp='安逸 & 砕けた夢(幻夢の残片)',
es='Tranquilidad & Sueños rotos (Fragmentos de sueños ilusorios)',
)
Scalpel_and_Screwdriver = AssignmentEntryDetailed(
id=19,
id=12,
name='Scalpel_and_Screwdriver',
cn='锈迹齿轮 & 老旧臼齿(手术刀与螺丝刀)',
cht='鏽跡齒輪 & 老舊臼齒(手術刀與螺絲起子)',
@ -174,3 +111,66 @@ Scalpel_and_Screwdriver = AssignmentEntryDetailed(
jp='錆びた歯車 & 古びた大臼歯(メスとスクリュードライバー)',
es='Engranaje oxidado & Muela vieja (Bisturí y destornillador)',
)
The_Wages_of_Humanity = AssignmentEntryDetailed(
id=13,
name='The_Wages_of_Humanity',
cn='一人嘉禾 & 药草提取物(赡养人类)',
cht='一人嘉禾 & 藥草萃取物(贍養人類)',
en='Human-Height Auspicious Crops & Extract of Medicinal Herbs (The Wages of Humanity)',
jp='一人稲 & 薬草抽出物(人類扶養)',
es='Cosecha tan alta como una persona & Extracto de hierbas medicinales (La paga de la humanidad)',
)
Legend_of_the_Puppet_Master = AssignmentEntryDetailed(
id=14,
name='Legend_of_the_Puppet_Master',
cn='废弃机巧零件 & 玉兆单元(偃师传说)',
cht='廢棄機巧零件 & 玉兆單元(偃師傳說)',
en='Discarded Ingenium Parts & Jade Abacus Unit (Legend of the Puppet Master)',
jp='廃棄された機巧部品 & 玉兆単元(傀儡師伝説)',
es='Componentes mecánicos abandonados & Unidad de ábaco de jade (La leyenda del titiritero)',
)
The_Land_of_Gold = AssignmentEntryDetailed(
id=15,
name='The_Land_of_Gold',
cn='基本食材 & 蛋白米(黄金大地)',
cht='基本食材 & 蛋白米(黃金大地)',
en='Basic Ingredients & Protein Rice (The Land of Gold)',
jp='基本食材 & タンパク米(黄金の大地)',
es='Ingredientes básicos & Arroz proteico (Tierra de oportunidades)',
)
Spring_of_Life = AssignmentEntryDetailed(
id=16,
name='Spring_of_Life',
cn='固态净水 & 虚粒子(生命之泉)',
cht='固態淨水 & 虛粒子(生命之泉)',
en='Solid Water & Virtual Particle (Spring of Life)',
jp='固形純水 & 仮想粒子(生命の泉)',
es='Agua sólida & Partícula virtual (La fuente de la vida)',
)
Fragments_of_Illusory_Dreams = AssignmentEntryDetailed(
id=17,
name='Fragments_of_Illusory_Dreams',
cn='安逸 & 碎梦(幻梦的残片)',
cht='安逸 & 碎夢(幻夢的殘片)',
en='Tranquility & Broken Dreams (Fragments of Illusory Dreams)',
jp='安逸 & 砕けた夢(幻夢の残片)',
es='Tranquilidad & Sueños rotos (Fragmentos de sueños ilusorios)',
)
The_Blossom_in_the_Storm = AssignmentEntryDetailed(
id=18,
name='The_Blossom_in_the_Storm',
cn='气态流体 & 种子(风暴中怒放的花)',
cht='氣態流體 & 種子(風暴中怒放的花)',
en='Gaseous Liquid & Seed (The Blossom in the Storm)',
jp='気態流体 & 種子(嵐の中で咲き誇る花)',
es='Líquido gaseoso & Semilla (Flores en la tormenta)',
)
Abandoned_and_Insulted = AssignmentEntryDetailed(
id=19,
name='Abandoned_and_Insulted',
cn='燃素 & 金属(被废弃与损害的)',
cht='燃素 & 金屬(被廢棄與損害的)',
en='Phlogiston & Metal (Abandoned and Insulted)',
jp='燃素 & 金属(捨てられしものと傷つけられしもの)',
es='Flogisto & Metal (Abandonado e insultado)',
)

View File

@ -280,13 +280,22 @@ MAP_CHECK = ButtonWrapper(
)
MAP_EXIT = ButtonWrapper(
name='MAP_EXIT',
share=Button(
file='./assets/share/base/page/MAP_EXIT.png',
area=(27, 46, 44, 74),
search=(7, 26, 64, 94),
color=(142, 144, 148),
button=(27, 46, 44, 74),
),
share=[
Button(
file='./assets/share/base/page/MAP_EXIT.png',
area=(27, 46, 44, 74),
search=(7, 26, 64, 94),
color=(142, 144, 148),
button=(27, 46, 44, 74),
),
Button(
file='./assets/share/base/page/MAP_EXIT.2.png',
area=(27, 46, 44, 74),
search=(7, 26, 64, 94),
color=(160, 187, 206),
button=(27, 46, 44, 74),
),
],
)
MAP_GOTO_WORLD = ButtonWrapper(
name='MAP_GOTO_WORLD',

View File

@ -5,11 +5,9 @@ from module.config.server import VALID_LANG
from module.exception import RequestHumanTakeover, ScriptError
from module.logger import logger
from module.ocr.ocr import OcrWhiteLetterOnComplexBackground
from tasks.base.assets.assets_base_main_page import OCR_MAP_NAME, ROGUE_LEAVE_FOR_NOW
from tasks.base.assets.assets_base_page import CLOSE, MAP_EXIT
from tasks.base.page import Page, page_gacha, page_main
from tasks.base.assets.assets_base_main_page import OCR_MAP_NAME
from tasks.base.page import Page, page_main
from tasks.base.popup import PopupHandler
from tasks.daily.assets.assets_daily_trial import START_TRIAL
from tasks.map.keywords import KEYWORDS_MAP_PLANE, MapPlane
@ -39,9 +37,11 @@ class OcrPlaneName(OcrWhiteLetterOnComplexBackground):
# 区域-战
result = re.sub(r'区域.*战$', '区域战斗', result)
# 区域-事
result = re.sub(r'区域.*事$', '区域事件', result)
result = re.sub(r'区域.*[件]$', '区域事件', result)
# 区域-战
result = re.sub(r'区域.*交$', '区域交易', result)
# 区域-战
result = re.sub(r'区域.*[精英]$', '区域精英', result)
# 区域-事伴, 区域-事祥
result = re.sub(r'事[伴祥]', '事件', result)
# 医域-战斗
@ -158,49 +158,3 @@ class MainPage(PopupHandler):
self.handle_lang_check(page=page_main)
return True
def ui_leave_special(self):
"""
Leave from:
- Rogue domains
- Character trials
Returns:
bool: If left a special plane
Pages:
in: Any
out: page_main
"""
if not self.appear(MAP_EXIT):
return False
logger.info('UI leave special')
skip_first_screenshot = True
clicked = False
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if clicked:
if self.appear(page_main.check_button):
logger.info(f'Leave to {page_main}')
break
if self.appear_then_click(MAP_EXIT, interval=2):
continue
if self.handle_popup_confirm():
continue
if self.match_template_color(START_TRIAL, interval=2):
logger.info(f'{START_TRIAL} -> {CLOSE}')
self.device.click(CLOSE)
clicked = True
continue
if self.handle_ui_close(page_gacha.check_button, interval=2):
continue
if self.appear_then_click(ROGUE_LEAVE_FOR_NOW, interval=2):
clicked = True
continue

View File

@ -4,13 +4,14 @@ from module.base.timer import Timer
from module.exception import GameNotRunningError, GamePageUnknownError
from module.logger import logger
from module.ocr.ocr import Ocr
from tasks.base.assets.assets_base_page import MAP_EXIT
from tasks.base.assets.assets_base_main_page import ROGUE_LEAVE_FOR_NOW
from tasks.base.assets.assets_base_page import CLOSE, MAIN_GOTO_CHARACTER, MAP_EXIT
from tasks.base.main_page import MainPage
from tasks.base.page import Page, page_main
from tasks.base.page import Page, page_gacha, page_main
from tasks.combat.assets.assets_combat_finish import COMBAT_EXIT
from tasks.combat.assets.assets_combat_interact import MAP_LOADING
from tasks.combat.assets.assets_combat_prepare import COMBAT_PREPARE
from tasks.daily.assets.assets_daily_trial import INFO_CLOSE
from tasks.daily.assets.assets_daily_trial import INFO_CLOSE, START_TRIAL
from tasks.login.assets.assets_login import LOGIN_CONFIRM
@ -24,6 +25,8 @@ class UI(MainPage):
page (Page):
interval:
"""
if page == page_main:
return self.is_in_main(interval=interval)
return self.appear(page.check_button, interval=interval)
def ui_get_current_page(self, skip_first_screenshot=True):
@ -139,7 +142,7 @@ class UI(MainPage):
for page in Page.iter_pages():
if page.parent is None or page.check_button is None:
continue
if self.appear(page.check_button, interval=5):
if self.ui_page_appear(page, interval=5):
logger.info(f'Page switch: {page} -> {page.parent}')
self.handle_lang_check(page)
if self.ui_page_confirm(page):
@ -297,14 +300,41 @@ class UI(MainPage):
if additional():
continue
def is_in_main(self):
if self.appear(page_main.check_button):
if self.image_color_count(page_main.check_button, color=(235, 235, 235), threshold=234, count=400):
return True
if self.appear(MAP_EXIT):
def is_in_main(self, interval=0):
self.device.stuck_record_add(MAIN_GOTO_CHARACTER)
if interval and not self.interval_is_reached(MAIN_GOTO_CHARACTER, interval=interval):
return False
appear = False
if MAIN_GOTO_CHARACTER.match_template_binary(self.device.image):
if self.image_color_count(MAIN_GOTO_CHARACTER, color=(235, 235, 235), threshold=234, count=400):
appear = True
if not appear:
if MAP_EXIT.match_template_binary(self.device.image):
if self.image_color_count(MAP_EXIT, color=(235, 235, 235), threshold=221, count=50):
appear = True
if appear and interval:
self.interval_reset(MAIN_GOTO_CHARACTER, interval=interval)
return appear
def is_in_map_exit(self, interval=0):
self.device.stuck_record_add(MAP_EXIT)
if interval and not self.interval_is_reached(MAP_EXIT, interval=interval):
return False
appear = False
if MAP_EXIT.match_template_binary(self.device.image):
if self.image_color_count(MAP_EXIT, color=(235, 235, 235), threshold=221, count=50):
return True
return False
appear = True
if appear and interval:
self.interval_reset(MAP_EXIT, interval=interval)
return appear
def ui_goto_main(self):
return self.ui_ensure(destination=page_main)
@ -380,3 +410,50 @@ class UI(MainPage):
button (Button):
"""
pass
def ui_leave_special(self):
"""
Leave from:
- Rogue domains
- Character trials
Returns:
bool: If left a special plane
Pages:
in: Any
out: page_main
"""
if not self.is_in_map_exit():
return False
logger.info('UI leave special')
skip_first_screenshot = True
clicked = False
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if clicked:
if self.is_in_main():
logger.info(f'Leave to {page_main}')
break
if self.is_in_map_exit(interval=2):
self.device.click(MAP_EXIT)
continue
if self.handle_popup_confirm():
continue
if self.match_template_color(START_TRIAL, interval=2):
logger.info(f'{START_TRIAL} -> {CLOSE}')
self.device.click(CLOSE)
clicked = True
continue
if self.handle_ui_close(page_gacha.check_button, interval=2):
continue
if self.appear_then_click(ROGUE_LEAVE_FOR_NOW, interval=2):
clicked = True
continue

View File

@ -96,6 +96,10 @@ class BattlePassUI(UI):
MAX_LEVEL = 70
def _battle_pass_wait_rewards_loaded(self, skip_first_screenshot=True):
"""
Returns:
bool: If load success
"""
timeout = Timer(2, count=4).start()
while 1:
if skip_first_screenshot:
@ -105,12 +109,16 @@ class BattlePassUI(UI):
if timeout.reached():
logger.warning('Wait rewards tab loaded timeout')
break
return False
if self.appear(REWARDS_LOADED):
logger.info('Rewards tab loaded')
break
return True
def _battle_pass_wait_missions_loaded(self, skip_first_screenshot=True):
"""
Returns:
bool: If load success
"""
timeout = Timer(2, count=4).start()
while 1:
if skip_first_screenshot:
@ -120,14 +128,14 @@ class BattlePassUI(UI):
if timeout.reached():
logger.warning('Wait missions tab loaded timeout')
break
return False
# Has scroll and last mission loaded
if self.appear(MISSION_PAGE_SCROLL):
color = get_color(self.device.image, MISSIONS_LOADED.area)
if np.mean(color) > 128:
logger.info('Missions tab loaded')
break
return True
def battle_pass_goto(self, state: KEYWORDS_BATTLE_PASS_TAB):
"""

View File

@ -16,7 +16,7 @@ from tasks.character.keywords import CharacterList, DICT_SORTED_RANGES, KEYWORDS
class OcrCharacterName(OcrWhiteLetterOnComplexBackground):
merge_thres_x = 20
merge_thres_y = 20
merge_thres_y = 10
def after_process(self, result):
result = result.replace('', '')

View File

@ -43,16 +43,6 @@ COMBAT_SUPPORT_LIST_SCROLL = ButtonWrapper(
button=(472, 162, 476, 598),
),
)
COMBAT_SUPPORT_SELECTED = ButtonWrapper(
name='COMBAT_SUPPORT_SELECTED',
share=Button(
file='./assets/share/combat/support/COMBAT_SUPPORT_SELECTED.png',
area=(69, 114, 91, 116),
search=(49, 94, 111, 136),
color=(254, 254, 254),
button=(69, 114, 91, 116),
),
)
SUPPORT_SELECTED = ButtonWrapper(
name='SUPPORT_SELECTED',
share=[

View File

@ -82,14 +82,11 @@ class Combat(CombatInteract, CombatPrepare, CombatState, CombatTeam, CombatSuppo
logger.hr('Combat prepare')
skip_first_screenshot = True
if support_character:
# To set team before support set
pre_set_team = True
# Block COMBAT_TEAM_PREPARE before support set
support_set = False
else:
pre_set_team = False
support_set = True
logger.info([support_character, pre_set_team, support_set])
logger.info([support_character, support_set])
trial = 0
while 1:
if skip_first_screenshot:
@ -107,18 +104,17 @@ class Combat(CombatInteract, CombatPrepare, CombatState, CombatTeam, CombatSuppo
raise RequestHumanTakeover
# Click
if support_character and self.appear(COMBAT_TEAM_SUPPORT):
if pre_set_team:
self.team_set(team)
pre_set_team = False
continue
if support_character and self.appear(COMBAT_TEAM_SUPPORT, interval=2):
self.team_set(team)
self.support_set(support_character)
self.interval_reset(COMBAT_TEAM_SUPPORT)
support_set = True
continue
if support_set and self.appear(COMBAT_TEAM_PREPARE, interval=2):
self.team_set(team)
self.device.click(COMBAT_TEAM_PREPARE)
self.interval_reset(COMBAT_TEAM_PREPARE)
self.interval_reset(COMBAT_TEAM_SUPPORT)
continue
if self.appear(COMBAT_TEAM_PREPARE):
self.interval_reset(COMBAT_PREPARE)
@ -131,6 +127,7 @@ class Combat(CombatInteract, CombatPrepare, CombatState, CombatTeam, CombatSuppo
trial += 1
continue
if self.handle_combat_interact():
self.map_A_timer.reset()
continue
if self.handle_ascension_dungeon_prepare():
continue
@ -160,7 +157,8 @@ class Combat(CombatInteract, CombatPrepare, CombatState, CombatTeam, CombatSuppo
if callable(expected_end) and expected_end():
logger.info(f'Combat execute ended at {expected_end.__name__}')
break
if self.appear(COMBAT_AGAIN):
if (self.appear(COMBAT_AGAIN) and
self.image_color_count(COMBAT_AGAIN, color=(227, 227, 228), threshold=221, count=50)):
logger.info(f'Combat execute ended at {COMBAT_AGAIN}')
break
if self.is_in_main():
@ -177,6 +175,9 @@ class Combat(CombatInteract, CombatPrepare, CombatState, CombatTeam, CombatSuppo
is_executing = False
if self.handle_combat_state():
continue
# Battle pass popup appears just after combat finished and before blessings
if self.handle_battle_pass_notification():
continue
def _combat_can_again(self) -> bool:
"""
@ -215,6 +216,9 @@ class Combat(CombatInteract, CombatPrepare, CombatState, CombatTeam, CombatSuppo
Returns:
bool: True to re-enter combat and run with another wave settings
"""
if self.config.stored.TrailblazePower.value < self.combat_wave_cost:
logger.info('Current trailblaze power is not enough for next run')
return False
# Wave limit
if self.combat_wave_limit:
if self.combat_wave_done < self.combat_wave_limit:
@ -227,6 +231,7 @@ class Combat(CombatInteract, CombatPrepare, CombatState, CombatTeam, CombatSuppo
if self.config.stored.TrailblazePower.value >= self.combat_wave_cost:
logger.info('Still having some trailblaze power run with less waves to empty it')
return True
return False
def combat_finish(self) -> bool:
"""

View File

@ -9,7 +9,7 @@ from module.ui.scroll import AdaptiveScroll
from tasks.base.assets.assets_base_popup import POPUP_CANCEL
from tasks.base.ui import UI
from tasks.combat.assets.assets_combat_support import COMBAT_SUPPORT_ADD, COMBAT_SUPPORT_LIST, \
COMBAT_SUPPORT_LIST_GRID, COMBAT_SUPPORT_LIST_SCROLL, COMBAT_SUPPORT_SELECTED, SUPPORT_SELECTED
COMBAT_SUPPORT_LIST_GRID, COMBAT_SUPPORT_LIST_SCROLL, SUPPORT_SELECTED
from tasks.combat.assets.assets_combat_team import COMBAT_TEAM_DISMISSSUPPORT, COMBAT_TEAM_SUPPORT
@ -79,8 +79,8 @@ class SupportCharacter:
Returns:
tuple: (x1, y1, x2, y2) of selected icon search area
"""
return (
self.button[0], self.button[1] - 5, self.button[0] + 30, self.button[1]) if self.button else None
# Check the left of character avatar
return 0, self.button[1], self.button[0], self.button[3]
class NextSupportCharacter:
@ -130,6 +130,7 @@ class CombatSupport(UI):
out: COMBAT_PREPARE
"""
logger.hr("Combat support")
self.interval_clear(COMBAT_TEAM_SUPPORT)
skip_first_screenshot = True
selected_support = False
while 1:
@ -143,7 +144,7 @@ class CombatSupport(UI):
return True
# Click
if self.appear(COMBAT_TEAM_SUPPORT, interval=1):
if self.appear(COMBAT_TEAM_SUPPORT, interval=2):
self.device.click(COMBAT_TEAM_SUPPORT)
self.interval_reset(COMBAT_TEAM_SUPPORT)
continue
@ -154,15 +155,30 @@ class CombatSupport(UI):
self._select_next_support()
self.interval_reset(POPUP_CANCEL)
continue
if self.appear(COMBAT_SUPPORT_LIST, interval=1):
if self.appear(COMBAT_SUPPORT_LIST, interval=2):
scroll = AdaptiveScroll(area=COMBAT_SUPPORT_LIST_SCROLL.area,
name=COMBAT_SUPPORT_LIST_SCROLL.name)
if not scroll.appear(main=self):
self.interval_clear(COMBAT_SUPPORT_LIST)
continue
if not selected_support and support_character_name != "FirstCharacter":
self._search_support(
support_character_name) # Search support
self._search_support(support_character_name) # Search support
selected_support = True
self.device.click(COMBAT_SUPPORT_ADD)
self.interval_reset(COMBAT_SUPPORT_LIST)
continue
def _get_character(self, support_character_name: str) -> SupportCharacter:
if support_character_name.startswith("Trailblazer"):
character = SupportCharacter(f"Stelle{support_character_name[11:]}", self.device.image)
if character:
return character
character = SupportCharacter(f"Caelum{support_character_name[11:]}", self.device.image)
# Should return something
return character
else:
return SupportCharacter(support_character_name, self.device.image)
def _search_support(self, support_character_name: str = "JingYuan"):
"""
Args:
@ -176,6 +192,14 @@ class CombatSupport(UI):
out: COMBAT_SUPPORT_LIST
"""
logger.hr("Combat support search")
# Search prioritize characters
character = self._get_character(support_character_name)
if character:
logger.info("Support found in first page")
if self._select_support(character):
return True
# Search in the following pages
scroll = AdaptiveScroll(area=COMBAT_SUPPORT_LIST_SCROLL.area,
name=COMBAT_SUPPORT_LIST_SCROLL.name)
if scroll.appear(main=self):
@ -186,37 +210,30 @@ class CombatSupport(UI):
scroll.drag_threshold = backup
scroll.set_top(main=self)
logger.info("Searching support")
skip_first_screenshot = False
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
logger.info("Searching support")
skip_first_screenshot = True
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
if not support_character_name.startswith("Trailblazer"):
character = SupportCharacter(
support_character_name, self.device.image)
character = self._get_character(support_character_name)
if character:
logger.info("Support found")
if self._select_support(character):
return True
else:
character = SupportCharacter(f"Stelle{support_character_name[11:]}",
self.device.image) or SupportCharacter(
f"Caelum{support_character_name[11:]}", self.device.image)
if character:
logger.info("Support found")
if self._select_support(character):
return True
else:
logger.warning("Support not selected")
return False
if not scroll.at_bottom(main=self):
scroll.next_page(main=self)
continue
else:
logger.info("Support not found")
logger.warning("Support not selected")
return False
if not scroll.at_bottom(main=self):
scroll.next_page(main=self)
continue
else:
logger.info("Support not found")
return False
def _select_support(self, character: SupportCharacter):
"""
Args:
@ -227,7 +244,7 @@ class CombatSupport(UI):
out: COMBAT_SUPPORT_LIST
"""
logger.hr("Combat support select")
COMBAT_SUPPORT_SELECTED.matched_button.search = character.selected_icon_search()
logger.info(f'Select: {character}')
skip_first_screenshot = False
interval = Timer(2)
while 1:
@ -237,7 +254,10 @@ class CombatSupport(UI):
self.device.screenshot()
# End
if self.appear(COMBAT_SUPPORT_SELECTED, similarity=0.75):
area = character.selected_icon_search()
image = self.image_crop(area, copy=False)
if SUPPORT_SELECTED.match_template(image, similarity=0.75, direct_match=True):
logger.info('Character support selected')
return True
if interval.reached():
@ -274,6 +294,7 @@ class CombatSupport(UI):
in: COMBAT_SUPPORT_LIST
out: COMBAT_SUPPORT_LIST
"""
logger.hr("Next support select")
skip_first_screenshot = True
scroll = AdaptiveScroll(area=COMBAT_SUPPORT_LIST_SCROLL.area,
name=COMBAT_SUPPORT_LIST_SCROLL.name)
@ -288,6 +309,7 @@ class CombatSupport(UI):
# End
if next_support is not None and next_support.is_next_support_character_selected(self.device.image):
logger.info('Next support selected')
return
if interval.reached():

View File

@ -60,12 +60,13 @@ class CombatTeam(UI):
logger.warning('Wait current team timeout')
break
current = self._get_team()
if current == index:
logger.attr('Team', current)
logger.info(f'Already selected to the correct team')
return False
else:
break
if current:
if current == index:
logger.attr('Team', current)
logger.info(f'Already selected to the correct team')
return False
else:
break
# Set team
retry = Timer(2, count=10)

View File

@ -90,7 +90,8 @@ class CharacterTrial(UI):
if self.match_template_color(START_TRIAL):
break
if self.appear_then_click(MAP_EXIT):
if self.is_in_map_exit(interval=2):
self.device.click(MAP_EXIT)
continue
if self.handle_popup_confirm():
continue

View File

@ -21,6 +21,10 @@ class WeeklyDungeon(Dungeon):
dungeon=dungeon, team=team, wave_limit=wave_limit,
support_character=support_character, skip_ui_switch=skip_ui_switch)
def handle_ascension_dungeon_prepare(self):
# combat_wave_cost==30 in weekly, but no handle_ascension_dungeon_prepare required
return False
def get_weekly_remain(self) -> int:
"""
Pages:

View File

@ -210,7 +210,8 @@ class ForgottenHallUI(DungeonUI, ForgottenHallTeam):
logger.info("Forgotten hall dungeon exited")
break
if self.appear_then_click(MAP_EXIT):
if self.is_in_map_exit(interval=2):
self.device.click(MAP_EXIT)
continue
if self.handle_popup_confirm():
continue

View File

@ -133,6 +133,7 @@ class MapControl(Combat, AimDetectorMixin):
"""
logger.hr('Goto', level=2)
logger.info(f'Goto {waypoint}')
self.screenshot_tracking_add()
self.waypoint = waypoint
self.device.stuck_record_clear()
self.device.click_record_clear()
@ -353,7 +354,6 @@ class MapControl(Combat, AimDetectorMixin):
list[str]: A list of walk result
"""
logger.hr('Goto', level=1)
self.screenshot_tracking_add()
self.map_A_timer.clear()
self.map_E_timer.clear()
self.map_run_2x_timer.clear()

View File

@ -77,6 +77,17 @@ COSMIC_FRAGMENT = ButtonWrapper(
button=(1146, 19, 1181, 55),
),
)
CURIO_FIXED = ButtonWrapper(
name='CURIO_FIXED',
cn=Button(
file='./assets/cn/rogue/ui/CURIO_FIXED.png',
area=(558, 54, 626, 75),
search=(538, 34, 646, 95),
color=(126, 123, 122),
button=(558, 54, 626, 75),
),
en=None,
)
CURIO_OBTAINED = ButtonWrapper(
name='CURIO_OBTAINED',
cn=[

View File

@ -80,4 +80,9 @@ class RogueUI(UI):
logger.info(f'{CURIO_OBTAINED} -> {BLESSING_CONFIRM}')
self.device.click(BLESSING_CONFIRM)
return True
# Fixed a curio from occurrence
if self.appear(CURIO_FIXED, interval=2):
logger.info(f'{CURIO_FIXED} -> {BLESSING_CONFIRM}')
self.device.click(BLESSING_CONFIRM)
return True
return False

View File

@ -292,7 +292,8 @@ class RogueEntry(RouteBase, RogueRewardHandler, RoguePathHandler, DungeonUI):
if self.handle_ui_back(self._is_page_rogue_path):
continue
# From ui_leave_special()
if self.appear_then_click(MAP_EXIT, interval=2):
if self.is_in_map_exit(interval=2):
self.device.click(MAP_EXIT)
continue
if self.handle_popup_confirm():
continue

View File

@ -188,7 +188,11 @@ class RogueEvent(RogueUI):
# Only one option, click directly
if count == 1:
if self.interval_is_reached(CHOOSE_OPTION, interval=2):
self.device.click(self.valid_options[0].prefix_icon)
button = self.valid_options[0].prefix_icon
# Option at bottom
if button.area[1] > 500 and SCROLL_OPTION.appear(main=self):
SCROLL_OPTION.set_bottom(main=self)
self.device.click(button)
self.interval_reset(CHOOSE_OPTION, interval=2)
return True

View File

@ -235,6 +235,10 @@ class RogueExit(CombatInteract):
ocr = OcrDomainExit(OCR_DOMAIN_EXIT)
results = ocr.matched_ocr(image, keyword_classes=MapPlane)
# Try without preprocess
if not len(results):
ocr.white_preprocess = False
results = ocr.matched_ocr(image, keyword_classes=MapPlane)
centers = [area_center(result.area) for result in results]
logger.info(f'DomainDoor: {centers}')
directions = [self.screen2direction(center) for center in centers]
@ -249,8 +253,17 @@ class RogueExit(CombatInteract):
else:
return None, results[0].matched_keyword
else:
results = [r for d, r in sorted(zip(directions, results))]
return results[0].matched_keyword, results[-1].matched_keyword
left = [r for d, r in sorted(zip(directions, results)) if d < 0]
right = [r for d, r in sorted(zip(directions, results)) if d >= 0]
if len(left):
left = left[0].matched_keyword
else:
left = None
if len(right):
right = right[-1].matched_keyword
else:
right = None
return left, right
def choose_door(self, left_door: MapPlane | None, right_door: MapPlane | None) -> str | None:
"""

View File

@ -177,6 +177,10 @@ class RouteLoader(RogueUI, MinimapWrapper, RouteLoader_, CharacterSwitch):
return True
# Before Combat_Luofu_Cloudford_F1_X281Y873
if route.name in [
# ('Combat_Jarilo_BackwaterPass_F1_X507Y733', 0.26, (503.2, 736.9)),
# ('Combat_Herta_SupplyZone_F2_X45Y369', 0.168, (46.5, 370.0))
'Jarilo_BackwaterPass_F1_X507Y733',
'Jarilo_BackwaterPass_F1_X555Y643',
'Occurrence_Jarilo_BackwaterPass_F1_X553Y643',
'Combat_Jarilo_GreatMine_F1_X545Y513',
'Combat_Herta_SupplyZone_F2_X45Y369',
@ -188,6 +192,15 @@ class RouteLoader(RogueUI, MinimapWrapper, RouteLoader_, CharacterSwitch):
# ('Occurrence_Luofu_DivinationCommission_F2_X149Y659', 0.237, (148.9, 658.8)),
# ('Occurrence_Luofu_DivinationCommission_F2_X425Y791', 0.11, (425.2, 793.8))
'Occurrence_Luofu_DivinationCommission_F2_X149Y659',
# ('Combat_Luofu_DivinationCommission_F1_X97Y457', 0.222, (97.8, 456.9)),
# ('Combat_Luofu_ScalegorgeWaterscape_F1_X415Y261', 0.112, (371.8, 289.4)),
# ('Combat_Herta_SupplyZone_F2_X45Y369', 0.104, (11.7, 367.6))
'Combat_Luofu_DivinationCommission_F1_X97Y457',
# ('Occurrence_Jarilo_BackwaterPass_F1_X613Y755', 0.206, (611.3, 759.0)),
# ('Occurrence_Jarilo_BackwaterPass_F1_X611Y761', 0.206, (611.3, 759.0)),
# ('Occurrence_Luofu_DivinationCommission_F2_X425Y791', 0.105, (429.7, 791.6))
'Occurrence_Jarilo_BackwaterPass_F1_X613Y755',
'Occurrence_Jarilo_BackwaterPass_F1_X611Y761',
] and similarity > 0.15:
return True
if route.name in [