Jp font 20241011 (#4272)

* tmp: [JP] commission assets

* tmp: [JP] asset RESEARCH_COST_CHECKER

* tmp: [JP] assets in mail batch

* tmp: [JP] opsi get_zone_name color

* tmp: [JP] get_coin and get_oil color

* tmp: [JP] ash_collect_status and get_yellow_coins color

* upd: [JP] resize commission assets recognize size
This commit is contained in:
guoh064 2024-10-12 14:29:01 +08:00 committed by GitHub
parent 6b7ea0448c
commit e89063bade
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 34 additions and 13 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -3,6 +3,8 @@ import re
import cv2
import numpy as np
import module.config.server as server
from module.base.timer import Timer
from module.base.utils import color_similar, get_color
from module.campaign.assets import OCR_COIN, OCR_EVENT_PT, OCR_OIL, OCR_OIL_CHECK
@ -10,7 +12,10 @@ from module.logger import logger
from module.ocr.ocr import Digit, Ocr
from module.ui.ui import UI
OCR_COIN = Digit(OCR_COIN, name='OCR_COIN', letter=(239, 239, 239), threshold=128)
if server.server != 'jp':
OCR_COIN = Digit(OCR_COIN, name='OCR_COIN', letter=(239, 239, 239), threshold=128)
else:
OCR_COIN = Digit(OCR_COIN, name='OCR_COIN', letter=(201, 201, 201), threshold=128)
class PtOcr(Ocr):
@ -84,7 +89,10 @@ class CampaignStatus(UI):
color = get_color(self.device.image, OCR_OIL_CHECK.button)
if color_similar(color, OCR_OIL_CHECK.color):
# Original color
ocr = Digit(OCR_OIL, name='OCR_OIL', letter=(247, 247, 247), threshold=128)
if server.server != 'jp':
ocr = Digit(OCR_OIL, name='OCR_OIL', letter=(247, 247, 247), threshold=128)
else:
ocr = Digit(OCR_OIL, name='OCR_OIL', letter=(201, 201, 201), threshold=128)
elif color_similar(color, (59, 59, 64)):
# With black overlay
ocr = Digit(OCR_OIL, name='OCR_OIL', letter=(165, 165, 165), threshold=128)

View File

@ -4,11 +4,11 @@ from module.base.template import Template
# This file was automatically generated by dev_tools/button_extract.py.
# Don't modify it manually.
COMMISSION_ADVICE = Button(area={'cn': (871, 322, 999, 383), 'en': (871, 328, 1000, 379), 'jp': (870, 325, 1000, 389), 'tw': (869, 325, 999, 388)}, color={'cn': (230, 177, 116), 'en': (231, 178, 117), 'jp': (228, 178, 117), 'tw': (231, 180, 120)}, button={'cn': (871, 322, 999, 383), 'en': (871, 328, 1000, 379), 'jp': (870, 325, 1000, 389), 'tw': (869, 325, 999, 388)}, file={'cn': './assets/cn/commission/COMMISSION_ADVICE.png', 'en': './assets/en/commission/COMMISSION_ADVICE.png', 'jp': './assets/jp/commission/COMMISSION_ADVICE.png', 'tw': './assets/tw/commission/COMMISSION_ADVICE.png'})
COMMISSION_ADVICE = Button(area={'cn': (871, 322, 999, 383), 'en': (871, 328, 1000, 379), 'jp': (872, 344, 993, 373), 'tw': (869, 325, 999, 388)}, color={'cn': (230, 177, 116), 'en': (231, 178, 117), 'jp': (224, 179, 119), 'tw': (231, 180, 120)}, button={'cn': (871, 322, 999, 383), 'en': (871, 328, 1000, 379), 'jp': (870, 335, 1000, 399), 'tw': (869, 325, 999, 388)}, file={'cn': './assets/cn/commission/COMMISSION_ADVICE.png', 'en': './assets/en/commission/COMMISSION_ADVICE.png', 'jp': './assets/jp/commission/COMMISSION_ADVICE.png', 'tw': './assets/tw/commission/COMMISSION_ADVICE.png'})
COMMISSION_DAILY = Button(area={'cn': (35, 132, 67, 186), 'en': (30, 126, 75, 188), 'jp': (17, 168, 82, 185), 'tw': (35, 132, 67, 186)}, color={'cn': (208, 172, 118), 'en': (170, 132, 92), 'jp': (148, 115, 76), 'tw': (208, 171, 119)}, button={'cn': (35, 132, 67, 186), 'en': (30, 126, 75, 188), 'jp': (17, 168, 82, 185), 'tw': (35, 132, 67, 186)}, file={'cn': './assets/cn/commission/COMMISSION_DAILY.png', 'en': './assets/en/commission/COMMISSION_DAILY.png', 'jp': './assets/jp/commission/COMMISSION_DAILY.png', 'tw': './assets/tw/commission/COMMISSION_DAILY.png'})
COMMISSION_HAS_PENDING = Button(area={'cn': (320, 288, 380, 338), 'en': (320, 288, 380, 338), 'jp': (320, 288, 380, 338), 'tw': (320, 288, 380, 338)}, color={'cn': (121, 113, 152), 'en': (121, 113, 152), 'jp': (121, 113, 152), 'tw': (121, 113, 152)}, button={'cn': (320, 288, 380, 338), 'en': (320, 288, 380, 338), 'jp': (320, 288, 380, 338), 'tw': (320, 288, 380, 338)}, file={'cn': './assets/cn/commission/COMMISSION_HAS_PENDING.png', 'en': './assets/en/commission/COMMISSION_HAS_PENDING.png', 'jp': './assets/jp/commission/COMMISSION_HAS_PENDING.png', 'tw': './assets/tw/commission/COMMISSION_HAS_PENDING.png'})
COMMISSION_SCROLL_AREA = Button(area={'cn': (1254, 77, 1261, 676), 'en': (1254, 77, 1261, 676), 'jp': (1254, 77, 1261, 676), 'tw': (1254, 77, 1261, 676)}, color={'cn': (213, 183, 66), 'en': (213, 183, 66), 'jp': (213, 183, 66), 'tw': (213, 183, 66)}, button={'cn': (1254, 77, 1261, 676), 'en': (1254, 77, 1261, 676), 'jp': (1254, 77, 1261, 676), 'tw': (1254, 77, 1261, 676)}, file={'cn': './assets/cn/commission/COMMISSION_SCROLL_AREA.png', 'en': './assets/en/commission/COMMISSION_SCROLL_AREA.png', 'jp': './assets/jp/commission/COMMISSION_SCROLL_AREA.png', 'tw': './assets/tw/commission/COMMISSION_SCROLL_AREA.png'})
COMMISSION_START = Button(area={'cn': (1028, 322, 1156, 383), 'en': (1066, 342, 1117, 358), 'jp': (1027, 325, 1157, 389), 'tw': (1027, 326, 1157, 389)}, color={'cn': (229, 175, 113), 'en': (236, 197, 150), 'jp': (228, 179, 118), 'tw': (231, 180, 120)}, button={'cn': (1028, 322, 1156, 383), 'en': (1066, 342, 1117, 358), 'jp': (1027, 325, 1157, 389), 'tw': (1027, 326, 1157, 389)}, file={'cn': './assets/cn/commission/COMMISSION_START.png', 'en': './assets/en/commission/COMMISSION_START.png', 'jp': './assets/jp/commission/COMMISSION_START.png', 'tw': './assets/tw/commission/COMMISSION_START.png'})
COMMISSION_START = Button(area={'cn': (1028, 322, 1156, 383), 'en': (1066, 342, 1117, 358), 'jp': (1062, 342, 1125, 374), 'tw': (1027, 326, 1157, 389)}, color={'cn': (229, 175, 113), 'en': (236, 197, 150), 'jp': (237, 201, 153), 'tw': (231, 180, 120)}, button={'cn': (1028, 322, 1156, 383), 'en': (1066, 342, 1117, 358), 'jp': (1028, 336, 1157, 398), 'tw': (1027, 326, 1157, 389)}, file={'cn': './assets/cn/commission/COMMISSION_START.png', 'en': './assets/en/commission/COMMISSION_START.png', 'jp': './assets/jp/commission/COMMISSION_START.png', 'tw': './assets/tw/commission/COMMISSION_START.png'})
COMMISSION_URGENT = Button(area={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283), 'jp': (34, 266, 68, 279), 'tw': (35, 229, 69, 280)}, color={'cn': (215, 188, 124), 'en': (169, 138, 95), 'jp': (216, 190, 111), 'tw': (213, 186, 123)}, button={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283), 'jp': (34, 266, 68, 279), 'tw': (35, 229, 69, 280)}, file={'cn': './assets/cn/commission/COMMISSION_URGENT.png', 'en': './assets/en/commission/COMMISSION_URGENT.png', 'jp': './assets/jp/commission/COMMISSION_URGENT.png', 'tw': './assets/tw/commission/COMMISSION_URGENT.png'})
EXP_INFO_S_REWARD = Button(area={'cn': (498, 140, 557, 154), 'en': (1138, 40, 1266, 145), 'jp': (498, 140, 557, 154), 'tw': (498, 140, 557, 154)}, color={'cn': (233, 241, 127), 'en': (89, 115, 159), 'jp': (233, 241, 127), 'tw': (233, 241, 127)}, button={'cn': (498, 140, 557, 154), 'en': (1138, 40, 1266, 145), 'jp': (498, 140, 557, 154), 'tw': (498, 140, 557, 154)}, file={'cn': './assets/cn/commission/EXP_INFO_S_REWARD.png', 'en': './assets/en/commission/EXP_INFO_S_REWARD.png', 'jp': './assets/jp/commission/EXP_INFO_S_REWARD.png', 'tw': './assets/tw/commission/EXP_INFO_S_REWARD.png'})
REWARD_1 = Button(area={'cn': (383, 285, 503, 297), 'en': (403, 274, 504, 290), 'jp': (432, 273, 476, 294), 'tw': (383, 285, 503, 297)}, color={'cn': (238, 168, 81), 'en': (241, 198, 145), 'jp': (241, 188, 122), 'tw': (238, 168, 81)}, button={'cn': (383, 285, 503, 297), 'en': (392, 262, 515, 303), 'jp': (393, 262, 514, 303), 'tw': (383, 285, 503, 297)}, file={'cn': './assets/cn/commission/REWARD_1.png', 'en': './assets/en/commission/REWARD_1.png', 'jp': './assets/jp/commission/REWARD_1.png', 'tw': './assets/tw/commission/REWARD_1.png'})

View File

@ -9,8 +9,8 @@ BUY_CONFIRM = Button(area={'cn': (698, 579, 871, 636), 'en': (710, 583, 860, 633
DATA_KEY_COLLECT = Button(area={'cn': (251, 38, 339, 73), 'en': (256, 42, 337, 68), 'jp': (254, 40, 340, 72), 'tw': (251, 38, 339, 73)}, color={'cn': (144, 116, 77), 'en': (145, 109, 72), 'jp': (144, 111, 69), 'tw': (144, 116, 77)}, button={'cn': (251, 38, 339, 73), 'en': (256, 42, 337, 68), 'jp': (254, 40, 340, 72), 'tw': (251, 38, 339, 73)}, file={'cn': './assets/cn/freebies/DATA_KEY_COLLECT.png', 'en': './assets/en/freebies/DATA_KEY_COLLECT.png', 'jp': './assets/jp/freebies/DATA_KEY_COLLECT.png', 'tw': './assets/tw/freebies/DATA_KEY_COLLECT.png'})
DATA_KEY_COLLECTED = Button(area={'cn': (251, 38, 339, 73), 'en': (255, 42, 338, 68), 'jp': (254, 41, 340, 71), 'tw': (251, 38, 339, 73)}, color={'cn': (102, 103, 103), 'en': (113, 113, 115), 'jp': (102, 103, 103), 'tw': (102, 103, 103)}, button={'cn': (251, 38, 339, 73), 'en': (255, 42, 338, 68), 'jp': (254, 41, 340, 71), 'tw': (251, 38, 339, 73)}, file={'cn': './assets/cn/freebies/DATA_KEY_COLLECTED.png', 'en': './assets/en/freebies/DATA_KEY_COLLECTED.png', 'jp': './assets/jp/freebies/DATA_KEY_COLLECTED.png', 'tw': './assets/tw/freebies/DATA_KEY_COLLECTED.png'})
FREE_SUPPLY_PACK = Button(area={'cn': (525, 533, 579, 560), 'en': (523, 533, 582, 553), 'jp': (523, 530, 583, 559), 'tw': (524, 532, 582, 562)}, color={'cn': (144, 154, 164), 'en': (150, 160, 169), 'jp': (123, 137, 148), 'tw': (130, 143, 154)}, button={'cn': (378, 155, 577, 352), 'en': (426, 181, 557, 319), 'jp': (373, 177, 583, 356), 'tw': (388, 194, 554, 352)}, file={'cn': './assets/cn/freebies/FREE_SUPPLY_PACK.png', 'en': './assets/en/freebies/FREE_SUPPLY_PACK.png', 'jp': './assets/jp/freebies/FREE_SUPPLY_PACK.png', 'tw': './assets/tw/freebies/FREE_SUPPLY_PACK.png'})
MAIL_BATCH_CLAIM = Button(area={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (594, 525, 686, 547), 'tw': (593, 524, 687, 546)}, color={'cn': (114, 209, 255), 'en': (147, 220, 255), 'jp': (128, 213, 255), 'tw': (114, 209, 255)}, button={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (594, 525, 686, 547), 'tw': (593, 524, 687, 546)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_CLAIM.png', 'en': './assets/en/freebies/MAIL_BATCH_CLAIM.png', 'jp': './assets/jp/freebies/MAIL_BATCH_CLAIM.png', 'tw': './assets/cn/freebies/MAIL_BATCH_CLAIM.png'})
MAIL_BATCH_DELETE = Button(area={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 524, 865, 548), 'tw': (770, 523, 865, 547)}, color={'cn': (112, 209, 255), 'en': (150, 221, 255), 'jp': (126, 213, 255), 'tw': (112, 209, 255)}, button={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 524, 865, 548), 'tw': (770, 523, 865, 547)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_DELETE.png', 'en': './assets/en/freebies/MAIL_BATCH_DELETE.png', 'jp': './assets/jp/freebies/MAIL_BATCH_DELETE.png', 'tw': './assets/cn/freebies/MAIL_BATCH_DELETE.png'})
MAIL_BATCH_CLAIM = Button(area={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (592, 523, 688, 547), 'tw': (593, 524, 687, 546)}, color={'cn': (114, 209, 255), 'en': (147, 220, 255), 'jp': (109, 207, 255), 'tw': (114, 209, 255)}, button={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (592, 523, 688, 547), 'tw': (593, 524, 687, 546)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_CLAIM.png', 'en': './assets/en/freebies/MAIL_BATCH_CLAIM.png', 'jp': './assets/jp/freebies/MAIL_BATCH_CLAIM.png', 'tw': './assets/cn/freebies/MAIL_BATCH_CLAIM.png'})
MAIL_BATCH_DELETE = Button(area={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 523, 866, 547), 'tw': (770, 523, 865, 547)}, color={'cn': (112, 209, 255), 'en': (150, 221, 255), 'jp': (114, 209, 255), 'tw': (112, 209, 255)}, button={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 523, 866, 547), 'tw': (770, 523, 865, 547)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_DELETE.png', 'en': './assets/en/freebies/MAIL_BATCH_DELETE.png', 'jp': './assets/jp/freebies/MAIL_BATCH_DELETE.png', 'tw': './assets/cn/freebies/MAIL_BATCH_DELETE.png'})
MAIL_COLLECT = Button(area={'cn': (841, 577, 970, 608), 'en': (865, 583, 947, 601), 'jp': (842, 575, 964, 609), 'tw': (838, 575, 973, 611)}, color={'cn': (155, 184, 219), 'en': (151, 180, 216), 'jp': (116, 154, 203), 'tw': (145, 174, 212)}, button={'cn': (841, 577, 970, 608), 'en': (865, 583, 947, 601), 'jp': (842, 575, 964, 609), 'tw': (838, 575, 973, 611)}, file={'cn': './assets/cn/freebies/MAIL_COLLECT.png', 'en': './assets/en/freebies/MAIL_COLLECT.png', 'jp': './assets/jp/freebies/MAIL_COLLECT.png', 'tw': './assets/tw/freebies/MAIL_COLLECT.png'})
MAIL_COLLECTED = Button(area={'cn': (893, 578, 986, 607), 'en': (835, 578, 975, 606), 'jp': (861, 575, 951, 608), 'tw': (891, 576, 987, 609)}, color={'cn': (55, 61, 70), 'en': (54, 63, 71), 'jp': (48, 57, 65), 'tw': (55, 62, 72)}, button={'cn': (893, 578, 986, 607), 'en': (835, 578, 975, 606), 'jp': (861, 575, 951, 608), 'tw': (891, 576, 987, 609)}, file={'cn': './assets/cn/freebies/MAIL_COLLECTED.png', 'en': './assets/en/freebies/MAIL_COLLECTED.png', 'jp': './assets/jp/freebies/MAIL_COLLECTED.png', 'tw': './assets/tw/freebies/MAIL_COLLECTED.png'})
MAIL_DELETE = Button(area={'cn': (176, 560, 306, 590), 'en': (428, 567, 500, 584), 'jp': (177, 556, 307, 591), 'tw': (175, 559, 308, 592)}, color={'cn': (221, 171, 166), 'en': (216, 173, 169), 'jp': (210, 151, 146), 'tw': (217, 166, 162)}, button={'cn': (176, 560, 306, 590), 'en': (428, 567, 500, 584), 'jp': (177, 556, 307, 591), 'tw': (175, 559, 308, 592)}, file={'cn': './assets/cn/freebies/MAIL_DELETE.png', 'en': './assets/en/freebies/MAIL_DELETE.png', 'jp': './assets/jp/freebies/MAIL_DELETE.png', 'tw': './assets/tw/freebies/MAIL_DELETE.png'})

View File

@ -77,7 +77,7 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle
@Config.when(SERVER='jp')
def get_zone_name(self):
# For JP only
ocr = Ocr(MAP_NAME, lang='jp', letter=(214, 231, 255), threshold=127, name='OCR_OS_MAP_NAME')
ocr = Ocr(MAP_NAME, lang='jp', letter=(185, 192, 201), threshold=127, name='OCR_OS_MAP_NAME')
name = ocr.ocr(self.device.image)
self.is_zone_name_hidden = '安全' in name
# Remove punctuations

View File

@ -1,5 +1,7 @@
from datetime import datetime, timedelta
import module.config.server as server
from module.base.utils import image_left_strip
from module.combat.combat import BATTLE_PREPARATION, Combat
from module.config.utils import DEFAULT_TIME
@ -88,10 +90,16 @@ class OSAsh(UI, MapEventHandler):
return 0
if self.image_color_count(ASH_COLLECT_STATUS, color=(235, 235, 235), threshold=221, count=20):
logger.info('Ash beacon status: light')
ocr_collect = DigitCounter(
ASH_COLLECT_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_COLLECT_STATUS')
ocr_daily = DailyDigitCounter(
ASH_DAILY_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_DAILY_STATUS')
if server.server != 'jp':
ocr_collect = DigitCounter(
ASH_COLLECT_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_COLLECT_STATUS')
ocr_daily = DailyDigitCounter(
ASH_DAILY_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_DAILY_STATUS')
else:
ocr_collect = DigitCounter(
ASH_COLLECT_STATUS, letter=(193, 193, 193), threshold=160, name='OCR_ASH_COLLECT_STATUS')
ocr_daily = DailyDigitCounter(
ASH_DAILY_STATUS, letter=(193, 193, 193), threshold=160, name='OCR_ASH_DAILY_STATUS')
elif self.image_color_count(ASH_COLLECT_STATUS, color=(140, 142, 140), threshold=221, count=20):
logger.info('Ash beacon status: gray')
ocr_collect = DigitCounter(

View File

@ -1,6 +1,8 @@
import typing as t
from datetime import datetime, timedelta
import module.config.server as server
from module.base.timer import Timer
from module.config.config import Function
from module.config.utils import get_server_next_update
@ -11,7 +13,10 @@ from module.os_handler.assets import *
from module.os_shop.assets import OS_SHOP_CHECK, OS_SHOP_PURPLE_COINS, SHOP_PURPLE_COINS, SHOP_YELLOW_COINS
from module.ui.ui import UI
OCR_SHOP_YELLOW_COINS = Digit(SHOP_YELLOW_COINS, letter=(239, 239, 239), threshold=160, name='OCR_SHOP_YELLOW_COINS')
if server.server != 'jp':
OCR_SHOP_YELLOW_COINS = Digit(SHOP_YELLOW_COINS, letter=(239, 239, 239), threshold=160, name='OCR_SHOP_YELLOW_COINS')
else:
OCR_SHOP_YELLOW_COINS = Digit(SHOP_YELLOW_COINS, letter=(193, 193, 193), threshold=160, name='OCR_SHOP_YELLOW_COINS')
OCR_SHOP_PURPLE_COINS = Digit(SHOP_PURPLE_COINS, letter=(255, 255, 255), name='OCR_SHOP_PURPLE_COINS')
OCR_OS_SHOP_PURPLE_COINS = Digit(OS_SHOP_PURPLE_COINS, letter=(255, 255, 255), name='OCR_OS_SHOP_PURPLE_COINS')

View File

@ -33,7 +33,7 @@ OCR_RESEARCH_5 = Button(area={'cn': (998, 276, 1169, 329), 'en': (998, 276, 1169
QUEUE_CHECK = Button(area={'cn': (118, 16, 227, 39), 'en': (117, 16, 215, 38), 'jp': (116, 14, 232, 42), 'tw': (118, 14, 227, 39)}, color={'cn': (149, 166, 205), 'en': (125, 139, 179), 'jp': (147, 163, 199), 'tw': (155, 171, 210)}, button={'cn': (118, 16, 227, 39), 'en': (117, 16, 215, 38), 'jp': (116, 14, 232, 42), 'tw': (118, 14, 227, 39)}, file={'cn': './assets/cn/research/QUEUE_CHECK.png', 'en': './assets/en/research/QUEUE_CHECK.png', 'jp': './assets/jp/research/QUEUE_CHECK.png', 'tw': './assets/tw/research/QUEUE_CHECK.png'})
QUEUE_CLAIM_REWARD = Button(area={'cn': (1230, 275, 1272, 420), 'en': (1225, 258, 1270, 448), 'jp': (1219, 254, 1279, 460), 'tw': (1219, 253, 1280, 460)}, color={'cn': (249, 182, 121), 'en': (249, 171, 97), 'jp': (249, 170, 97), 'tw': (249, 174, 102)}, button={'cn': (1230, 275, 1272, 420), 'en': (1225, 258, 1270, 448), 'jp': (1219, 254, 1279, 460), 'tw': (1219, 253, 1280, 460)}, file={'cn': './assets/cn/research/QUEUE_CLAIM_REWARD.png', 'en': './assets/en/research/QUEUE_CLAIM_REWARD.png', 'jp': './assets/jp/research/QUEUE_CLAIM_REWARD.png', 'tw': './assets/tw/research/QUEUE_CLAIM_REWARD.png'})
QUEUE_REMAIN = Button(area={'cn': (156, 605, 272, 637), 'en': (151, 580, 278, 617), 'jp': (157, 605, 277, 636), 'tw': (165, 582, 275, 613)}, color={'cn': (193, 212, 240), 'en': (191, 210, 238), 'jp': (188, 208, 239), 'tw': (192, 211, 241)}, button={'cn': (156, 605, 272, 637), 'en': (151, 580, 278, 617), 'jp': (157, 605, 277, 636), 'tw': (165, 582, 275, 613)}, file={'cn': './assets/cn/research/QUEUE_REMAIN.png', 'en': './assets/en/research/QUEUE_REMAIN.png', 'jp': './assets/jp/research/QUEUE_REMAIN.png', 'tw': './assets/tw/research/QUEUE_REMAIN.png'})
RESEARCH_COST_CHECKER = Button(area={'cn': (809, 365, 972, 386), 'en': (809, 365, 972, 386), 'jp': (809, 365, 972, 386), 'tw': (809, 365, 972, 386)}, color={'cn': (105, 114, 128), 'en': (105, 114, 128), 'jp': (105, 114, 128), 'tw': (105, 114, 128)}, button={'cn': (809, 365, 972, 386), 'en': (809, 365, 972, 386), 'jp': (809, 365, 972, 386), 'tw': (809, 365, 972, 386)}, file={'cn': './assets/cn/research/RESEARCH_COST_CHECKER.png', 'en': './assets/en/research/RESEARCH_COST_CHECKER.png', 'jp': './assets/jp/research/RESEARCH_COST_CHECKER.png', 'tw': './assets/tw/research/RESEARCH_COST_CHECKER.png'})
RESEARCH_COST_CHECKER = Button(area={'cn': (809, 365, 972, 386), 'en': (809, 365, 972, 386), 'jp': (809, 361, 971, 380), 'tw': (809, 365, 972, 386)}, color={'cn': (105, 114, 128), 'en': (105, 114, 128), 'jp': (94, 103, 118), 'tw': (105, 114, 128)}, button={'cn': (809, 365, 972, 386), 'en': (809, 365, 972, 386), 'jp': (809, 361, 971, 380), 'tw': (809, 365, 972, 386)}, file={'cn': './assets/cn/research/RESEARCH_COST_CHECKER.png', 'en': './assets/en/research/RESEARCH_COST_CHECKER.png', 'jp': './assets/jp/research/RESEARCH_COST_CHECKER.png', 'tw': './assets/tw/research/RESEARCH_COST_CHECKER.png'})
RESEARCH_DETAIL_QUIT = Button(area={'cn': (695, 656, 784, 707), 'en': (695, 656, 784, 707), 'jp': (695, 656, 784, 707), 'tw': (695, 656, 784, 707)}, color={'cn': (50, 57, 74), 'en': (50, 57, 74), 'jp': (50, 57, 74), 'tw': (50, 57, 74)}, button={'cn': (695, 656, 784, 707), 'en': (695, 656, 784, 707), 'jp': (695, 656, 784, 707), 'tw': (695, 656, 784, 707)}, file={'cn': './assets/cn/research/RESEARCH_DETAIL_QUIT.png', 'en': './assets/en/research/RESEARCH_DETAIL_QUIT.png', 'jp': './assets/jp/research/RESEARCH_DETAIL_QUIT.png', 'tw': './assets/tw/research/RESEARCH_DETAIL_QUIT.png'})
RESEARCH_FINISHED = Button(area={'cn': (384, 547, 502, 585), 'en': (382, 545, 504, 587), 'jp': (383, 546, 503, 586), 'tw': (384, 547, 502, 585)}, color={'cn': (233, 163, 69), 'en': (235, 174, 92), 'jp': (229, 159, 63), 'tw': (233, 163, 69)}, button={'cn': (384, 547, 502, 585), 'en': (382, 545, 504, 587), 'jp': (383, 546, 503, 586), 'tw': (384, 547, 502, 585)}, file={'cn': './assets/cn/research/RESEARCH_FINISHED.png', 'en': './assets/en/research/RESEARCH_FINISHED.png', 'jp': './assets/jp/research/RESEARCH_FINISHED.png', 'tw': './assets/tw/research/RESEARCH_FINISHED.png'})
RESEARCH_GOTO_QUEUE = Button(area={'cn': (4, 227, 51, 255), 'en': (4, 227, 51, 255), 'jp': (4, 227, 51, 255), 'tw': (4, 227, 51, 255)}, color={'cn': (49, 53, 82), 'en': (49, 53, 82), 'jp': (49, 53, 82), 'tw': (49, 53, 82)}, button={'cn': (4, 227, 51, 255), 'en': (4, 227, 51, 255), 'jp': (4, 227, 51, 255), 'tw': (4, 227, 51, 255)}, file={'cn': './assets/cn/research/RESEARCH_GOTO_QUEUE.png', 'en': './assets/en/research/RESEARCH_GOTO_QUEUE.png', 'jp': './assets/jp/research/RESEARCH_GOTO_QUEUE.png', 'tw': './assets/tw/research/RESEARCH_GOTO_QUEUE.png'})