diff --git a/app/common/config.py b/app/common/config.py index 7fbb889..509bb4f 100644 --- a/app/common/config.py +++ b/app/common/config.py @@ -54,7 +54,6 @@ class Config(RunningBusinessConfig): # uuid uuid = ConfigItem("Global", "uuid", "", None) goodsType = ConfigItem("Global", "goodsType", False, BoolValidator()) - isSpeed = ConfigItem("Global", "isSpeed", True, BoolValidator()) adbPath = ConfigItem("Global", "adbPath", "resources\\lib\\adb", None) adbOrder = ConfigItem("Global", "adbOrder", "127.0.0.1:7555", None) diff --git a/app/view/main_window.py b/app/view/main_window.py index b940386..2d6f024 100644 --- a/app/view/main_window.py +++ b/app/view/main_window.py @@ -1,7 +1,7 @@ """ Author: Night-stars-1 nujj1042633805@gmail.com Date: 2024-04-02 19:27:03 -LastEditTime: 2024-04-29 22:46:46 +LastEditTime: 2024-04-30 03:12:36 LastEditors: Night-stars-1 nujj1042633805@gmail.com """ @@ -26,7 +26,7 @@ from app.view.daily_task_interface import DailyTaskInterface from app.view.running_business_interface import RunningBusinessInterface -from updater import Updater +from updater import Updater, UpdateStatus from ..common import resource # 图标数据 from ..common.config import VERSION, cfg @@ -146,11 +146,21 @@ def Update(self): 说明: 检查更新 """ - if not self.is_updae: + if self.update_status == UpdateStatus.UPDATE: subprocess.Popen( ["HeiYue Updater.exe"], creationflags=subprocess.DETACHED_PROCESS ) exit() + elif self.update_status == UpdateStatus.FAILURE: + InfoBar.error( + title="检查更新失败", + content="请稍后重试", + orient=Qt.Horizontal, + isClosable=False, + position=InfoBarPosition.TOP, + duration=1000, + parent=self, + ) else: InfoBar.success( title="当前已是最新版本", @@ -164,12 +174,11 @@ def Update(self): async def checkUpdate(self): updater = Updater() - is_last, _ = await updater.is_last() - if is_last: + self.update_status, _ = await updater.get_update_status() + if self.update_status == UpdateStatus.UPDATE: self.updateBadge = DotInfoBadge.error( parent=self.navigationInterface, target=self.updateButton, position=InfoBadgePosition.NAVIGATION_ITEM, ) self.updateBadge.setFixedSize(10, 10) - self.is_updae = True diff --git a/app/view/running_business_interface.py b/app/view/running_business_interface.py index 1d6ddb0..5cb8d53 100644 --- a/app/view/running_business_interface.py +++ b/app/view/running_business_interface.py @@ -1,7 +1,7 @@ """ Author: Night-stars-1 nujj1042633805@gmail.com Date: 2024-04-10 22:54:08 -LastEditTime: 2024-04-28 21:01:23 +LastEditTime: 2024-04-30 00:39:52 LastEditors: Night-stars-1 nujj1042633805@gmail.com """ @@ -300,26 +300,14 @@ def result(route): self.workers.finished.connect(lambda: self.on_worker_finished(self.workers)) self.workers.result.connect(result) - """ - InfoBar.success( - title="成功", - content=get_goods_info_kmou(cfg.uuid.value) if cfg.goodsType.value else get_goods_info_srap(), - orient=Qt.Horizontal, - isClosable=True, - position=InfoBarPosition.TOP_RIGHT, - duration=2000, - parent=self - ) - """ - def autoscan(self): def result(skill_level: Dict[str, int]): - for role_name, level in skill_level.items(): - role_name = role_name.replace("闻笔", "闻笙") # 纠正一些角色名 - if role_name in self.skillCardData: - # setattr(cfg, skill, level) - self.skillCardData[role_name].spinBox.setValue(level) + for role_name in self.skillCardData: + role_name_other = role_name.replace("闻笙", "闻笔") # 纠正一些角色名 + self.skillCardData[role_name].spinBox.setValue( + skill_level.get(role_name_other, 0) + ) signalBus.switchToCard.emit("LoggerInterface") from auto.scan_res_level import run diff --git a/app/view/setting_interface.py b/app/view/setting_interface.py index 4290769..b4bad5a 100644 --- a/app/view/setting_interface.py +++ b/app/view/setting_interface.py @@ -1,24 +1,22 @@ """ Author: Night-stars-1 nujj1042633805@gmail.com Date: 2024-04-07 23:14:47 -LastEditTime: 2024-04-19 13:31:52 +LastEditTime: 2024-04-30 04:02:40 LastEditors: Night-stars-1 nujj1042633805@gmail.com """ -# coding:utf-8 -from loguru import logger from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QLabel, QWidget from qfluentwidgets import ExpandLayout from qfluentwidgets import FluentIcon as FIF from qfluentwidgets import ScrollArea, SettingCardGroup, SwitchSettingCard +from core.models.config import config + from ..common.config import cfg from ..common.style_sheet import StyleSheet from ..components.settings.line_edit_setting_card import LineEditSettingCard -from core.models.config import config - class SettingInterface(ScrollArea): """Setting interface""" @@ -68,12 +66,21 @@ def __init__(self, parent=None): "是否自动使用加速弹丸", parent=self.musicInThisPCGroup, ) - self.isSpeedCard.setValue(config.global_config.isSpeed) + self.isAutoPickCard = SwitchSettingCard( + FIF.PALETTE, + "是否自动拾取", + "是否自动拾取掉落物", + parent=self.musicInThisPCGroup, + ) + self.isSpeedCard.setValue(config.global_config.is_speed) self.isSpeedCard.switchButton.checkedChanged.connect(self.__onCheckedChanged) + self.isAutoPickCard.setValue(config.global_config.is_auto_pick) + self.isAutoPickCard.switchButton.checkedChanged.connect(self.__onCheckedChanged) self.__initWidget() - def __onCheckedChanged(self, isChecked: bool): - config.global_config.isSpeed = isChecked + def __onCheckedChanged(self): + config.global_config.is_speed = self.isSpeedCard.isChecked() + config.global_config.is_auto_pick = self.isSpeedCard.isChecked() config.save_config() def __initWidget(self): @@ -101,6 +108,7 @@ def __initLayout(self): self.musicInThisPCGroup.addSettingCard(self.adbPathCard) self.musicInThisPCGroup.addSettingCard(self.adbOrderCard) self.musicInThisPCGroup.addSettingCard(self.isSpeedCard) + self.musicInThisPCGroup.addSettingCard(self.isAutoPickCard) # add setting card group to layout self.expandLayout.setSpacing(28) diff --git a/app/view/taj_interface.py b/app/view/taj_interface.py index 4544550..2a56b82 100644 --- a/app/view/taj_interface.py +++ b/app/view/taj_interface.py @@ -6,24 +6,10 @@ """ from PyQt5.QtCore import Qt -from PyQt5.QtWidgets import ( - QFrame, - QHBoxLayout, - QLabel, - QStackedWidget, - QVBoxLayout, - QWidget, -) +from PyQt5.QtWidgets import QLabel, QWidget from qfluentwidgets import ExpandLayout from qfluentwidgets import FluentIcon as FIF -from qfluentwidgets import ( - IconWidget, - ScrollArea, - SettingCardGroup, - SubtitleLabel, - TabBar, - setFont, -) +from qfluentwidgets import ScrollArea, SettingCardGroup from core.models.config import config diff --git a/app/view/this_road_that_interface.py b/app/view/this_road_that_interface.py index ca29fdf..c03dab2 100644 --- a/app/view/this_road_that_interface.py +++ b/app/view/this_road_that_interface.py @@ -1,7 +1,7 @@ """ Author: Night-stars-1 nujj1042633805@gmail.com Date: 2024-04-10 22:54:08 -LastEditTime: 2024-04-28 23:09:45 +LastEditTime: 2024-04-30 00:35:09 LastEditors: Night-stars-1 nujj1042633805@gmail.com """ diff --git a/auto/run_business/buy.py b/auto/run_business/buy.py index f6f4dcb..abff91c 100644 --- a/auto/run_business/buy.py +++ b/auto/run_business/buy.py @@ -1,7 +1,7 @@ """ Author: Night-stars-1 nujj1042633805@gmail.com Date: 2024-04-04 17:54:58 -LastEditTime: 2024-04-29 19:53:02 +LastEditTime: 2024-04-30 03:39:43 LastEditors: Night-stars-1 nujj1042633805@gmail.com """ @@ -15,11 +15,10 @@ from core.adb import input_swipe, input_tap, screenshot from core.exception_handling import get_excption from core.image import get_bgr, get_hsv -from core.module.bgr import BGR +from core.module.bgr import BGR, BGRGroup from core.module.hsv import HSV from core.ocr import predict from core.presets import click, find_text -from core.utils import compare_ranges def buy_business( @@ -214,7 +213,7 @@ def click_bargain_button(num=0): return True bgr = get_bgr(screenshot(), (1176, 461)) logger.debug(f"降价界面颜色检查: {bgr}") - if BGR(5, 130, 245) == bgr: + if BGRGroup([0, 123, 240], [2, 133, 253]) == bgr: input_tap((1177, 461)) time.sleep(1.0) elif bgr == [251, 253, 253]: diff --git a/auto/run_business/main.py b/auto/run_business/main.py index c52627d..6f877ce 100644 --- a/auto/run_business/main.py +++ b/auto/run_business/main.py @@ -17,7 +17,6 @@ from core.models.city_goods import RoutesModel from core.module.bgr import BGR from core.presets import click_station, get_city, go_home, go_outlets, wait_gbr -from core.utils import compare_ranges from .buy import buy_business from .sell import sell_business @@ -40,11 +39,7 @@ def go_business(type: Literal["buy", "sell"] = "buy"): time.sleep(1.0) bgr = get_bgr(screenshot(), (1175, 460)) logger.debug(f"进入交易所颜色检查: {bgr}") - if ( - bgr == [2, 133, 253] - or bgr == [0, 183, 253] - or BGR(225, 225, 225) == bgr - ): + if bgr == [2, 133, 253] or bgr == [0, 183, 253] or BGR(225, 225, 225) == bgr: return True else: logger.error("进入交易所失败") @@ -54,11 +49,7 @@ def go_business(type: Literal["buy", "sell"] = "buy"): return False -def run( - order: str, - path: str, - route: RoutesModel, -): +def run(order: str, path: str, route: RoutesModel): status = connect(order, path) if not status: logger.error("ADB连接失败") diff --git a/auto/run_business/sell.py b/auto/run_business/sell.py index 0a9a8af..cbcb2a5 100644 --- a/auto/run_business/sell.py +++ b/auto/run_business/sell.py @@ -1,7 +1,7 @@ """ Author: Night-stars-1 nujj1042633805@gmail.com Date: 2024-04-05 15:17:19 -LastEditTime: 2024-04-22 23:27:51 +LastEditTime: 2024-04-30 02:56:30 LastEditors: Night-stars-1 nujj1042633805@gmail.com """ @@ -12,9 +12,8 @@ from core.adb import input_tap, screenshot from core.exception_handling import get_excption from core.image import get_bgr, get_hsv -from core.module.bgr import BGR +from core.module.bgr import BGR, BGRGroup from core.ocr import number_predict, predict -from core.utils import compare_ranges def sell_business(num=0): @@ -29,7 +28,7 @@ def sell_business(num=0): bgr = get_bgr(screenshot(), (1156, 100)) logger.debug(f"是否出售货物颜色检查 {bgr}") if not (bgr.b == 0 and bgr.g == 0 and 90 <= bgr.r <= 100): - logger.info(f"出售全部货物 {bgr}") + logger.debug(f"出售全部货物颜色检查 {bgr}") input_tap((1187, 103)) time.sleep(0.5) break @@ -63,7 +62,7 @@ def click_bargain_button(num=0): return True bgr = get_bgr(screenshot(), (1176, 461)) logger.debug(f"抬价界面颜色检查: {bgr}") - if compare_ranges([0, 170, 240], bgr, [0, 183, 253]): + if BGRGroup([0, 170, 240], [2, 183, 253]) == bgr: input_tap((1177, 461)) time.sleep(1.0) elif bgr == [251, 253, 253]: diff --git a/auto/scan_res_level/main.py b/auto/scan_res_level/main.py index a1159b3..2e3d83f 100644 --- a/auto/scan_res_level/main.py +++ b/auto/scan_res_level/main.py @@ -21,7 +21,6 @@ from core.module.bgr import BGR from core.ocr import predict from core.presets import go_home -from core.utils import compare_ranges def get_skill_level_list(): @@ -35,7 +34,7 @@ def get_skill_level_list(): ) logger.debug(f"角色共振等级颜色检测: {bgrs}") for bgr in bgrs: - if bgr[-1] > 200: + if bgr.r > 200: levels.append(True) return levels diff --git a/auto/this_road_that/attack_boss.py b/auto/this_road_that/attack_boss.py index 179b7db..60e6e4b 100644 --- a/auto/this_road_that/attack_boss.py +++ b/auto/this_road_that/attack_boss.py @@ -9,15 +9,10 @@ from core.presets import ( click, click_image, - click_station, - find_text, go_home, go_outlets, - wait, wait_fight_end as _wait_fight_end, - wait_time, ) -from core.utils import compare_ranges def click_task(): diff --git a/core/goods/shop_use_first.py b/core/goods/shop_use_first.py index 822f56b..23184d4 100644 --- a/core/goods/shop_use_first.py +++ b/core/goods/shop_use_first.py @@ -253,7 +253,7 @@ def get_good_buy_price(self, price, num, city_name, good_name): 说明: 获取购买商品的价格 参数: - :param price: 商品价格 + :param price: 商品价格, 砍价前 :param num: 商品数量 :param city_name: 城市名称 :param good_name: 商品名称 @@ -263,9 +263,9 @@ def get_good_buy_price(self, price, num, city_name, good_name): ).buy_num # 城市声望数量加成 skill_num = self.goods_addition.get(good_name, 0) # 角色技能增加的数量 new_num = round5(num * (1 + buy_num + skill_num)) - tax_rate = self.all_city_info[city_name].revenue # 税率 + # tax_rate = self.all_city_info[city_name].revenue # 税率 new_price = round5( - price * (1 - 0.2 + tax_rate) # 砍价前的价格 # 砍抬一律0.2 + price * 0.8 # 砍抬一律0.2 ) # 砍价后的价格 return new_price, new_num @@ -286,9 +286,15 @@ def get_good_sell_price(self, buy_price: int, city_name: str, good_name: str): ) # 不带税的售价, 抬价后 tax_rate = self.all_city_info[city_name].revenue # 税率 no_tax_profit = no_revenue_sell_price - buy_price # 不带税的利润, 单个商品 - revenue = (no_revenue_sell_price - buy_price) * tax_rate # 税收 + revenue = round5(no_tax_profit * tax_rate) # 税收 - new_sell_price = round5((no_revenue_sell_price - revenue)) + new_sell_price = no_revenue_sell_price - revenue + """ + if city_name == "阿妮塔战备工厂" and good_name == "阿妮塔小型桦树发电机": + print( + f"{city_name=} {good_name=} {new_sell_price=} {buy_price=} {no_tax_profit=} {revenue}" + ) + """ return new_sell_price, no_tax_profit def get_need_buy_use_first( diff --git a/core/models/config.py b/core/models/config.py index 8b50283..664b06c 100644 --- a/core/models/config.py +++ b/core/models/config.py @@ -46,8 +46,10 @@ class RSBModel(BaseModel): class GlobalConfigModel(BaseModel): """全局配置模型""" - isSpeed: bool = True + is_speed: bool = True """是否使用加速弹丸""" + is_auto_pick: bool = False + """是否自动拾取""" class Config(BaseModel): diff --git a/core/module/bgr.py b/core/module/bgr.py index 8aac707..a909d4a 100644 --- a/core/module/bgr.py +++ b/core/module/bgr.py @@ -1,10 +1,10 @@ - from typing import List, Tuple, Union + def compare_ranges( - low: Union['BGR', Tuple[int, int, int], List[int]], - x: Union['BGR', Tuple[int, int, int], List[int]], - high: Union['BGR', Tuple[int, int, int], List[int]], + low: Union["BGR", Tuple[int, int, int], List[int]], + x: Union["BGR", Tuple[int, int, int], List[int]], + high: Union["BGR", Tuple[int, int, int], List[int]], ): """ 说明: @@ -26,22 +26,23 @@ def compare_ranges( and (low_2 <= x_2 <= high_2) ) + class BGR: """BGR 模块""" - def __init__(self, r: int, g: int, b: int, offset: int = 5): - self.r = r - self.g = g + def __init__(self, b: int, g: int, r: int, offset: int = 5): self.b = b + self.g = g + self.r = r self.offset = offset def __str__(self): - return f"R: {self.r}, G: {self.g}, B: {self.b}" - + return f"B: {self.b}, G: {self.g}, R: {self.r}" + def __repr__(self): - return f"BGR({self.r}, {self.g}, {self.b})" + return f"BGR({self.b}, {self.g}, {self.r})" - def __eq__(self, other: Union['BGR', Tuple[int, int, int], List[int]]): + def __eq__(self, other: Union["BGR", Tuple[int, int, int], List[int]]): """ 说明: 判断指定BGR是否在范围 @@ -49,9 +50,13 @@ def __eq__(self, other: Union['BGR', Tuple[int, int, int], List[int]]): :param other: 另一个 BGR :warning: 该方法会根据 offset 对前一个 BGR 进行范围偏移 """ - return compare_ranges((self.r-self.offset, self.g-self.offset, self.b-self.offset), other, (self.r+self.offset, self.g+self.offset, self.b+self.offset)) + return compare_ranges( + (self.b - self.offset, self.g - self.offset, self.r - self.offset), + other, + (self.b + self.offset, self.g + self.offset, self.r + self.offset), + ) - def __ne__(self, other: Union['BGR', Tuple[int, int, int], List[int]]): + def __ne__(self, other: Union["BGR", Tuple[int, int, int], List[int]]): """ 说明: 判断指定BGR是否不在范围 @@ -59,13 +64,29 @@ def __ne__(self, other: Union['BGR', Tuple[int, int, int], List[int]]): :param other: 另一个 BGR :warning: 该方法会根据 offset 对前一个 BGR 进行范围偏移 """ - return not compare_ranges((self.r-self.offset, self.g-self.offset, self.b-self.offset), other, (self.r+self.offset, self.g+self.offset, self.b+self.offset)) - + return not compare_ranges( + (self.b - self.offset, self.g - self.offset, self.r - self.offset), + other, + (self.b + self.offset, self.g + self.offset, self.r + self.offset), + ) def __iter__(self): - yield self.r - yield self.g yield self.b + yield self.g + yield self.r + + def __getitem__(self, key): + if isinstance(key, int): + if key == 0 or key == -3: + return self.r + elif key == 1 or key == -2: + return self.g + elif key == 2 or key == -1: + return self.b + else: + raise IndexError("BGR index out of range") + else: + raise TypeError("Invalid index type. Must be an integer.") class BGRGroup: """BGR 组""" @@ -76,11 +97,11 @@ def __init__(self, low_bgr: Tuple[int, int, int], high_bgr: Tuple[int, int, int] def __str__(self): return f"Low: {self.low_bgr}, High: {self.high_bgr}" - + def __repr__(self): return f"BGRGroup({self.low_bgr}, {self.high_bgr})" - def __eq__(self, other: Union['BGR', Tuple[int, int, int]]): + def __eq__(self, other: Union["BGR", Tuple[int, int, int]]): """ 说明: 判断指定BGR是否在范围 @@ -89,7 +110,7 @@ def __eq__(self, other: Union['BGR', Tuple[int, int, int]]): """ return compare_ranges(self.low_bgr, other, self.high_bgr) - def __ne__(self, other: Union['BGR', Tuple[int, int, int]]): + def __ne__(self, other: Union["BGR", Tuple[int, int, int]]): """ 说明: 判断指定BGR是否不在范围 diff --git a/core/module/hsv.py b/core/module/hsv.py index a08cbba..dc221cd 100644 --- a/core/module/hsv.py +++ b/core/module/hsv.py @@ -1,10 +1,17 @@ +""" +Author: Night-stars-1 nujj1042633805@gmail.com +Date: 2024-04-29 19:44:17 +LastEditTime: 2024-04-30 03:33:10 +LastEditors: Night-stars-1 nujj1042633805@gmail.com +""" from typing import List, Tuple, Union + def compare_ranges( - low: Union['HSV', Tuple[int, int, int], List[int]], - x: Union['HSV', Tuple[int, int, int], List[int]], - high: Union['HSV', Tuple[int, int, int], List[int]], + low: Union["HSV", Tuple[int, int, int], List[int]], + x: Union["HSV", Tuple[int, int, int], List[int]], + high: Union["HSV", Tuple[int, int, int], List[int]], ): """ 说明: @@ -26,6 +33,7 @@ def compare_ranges( and (low_2 <= x_2 <= high_2) ) + class HSV: """HSV 模块""" @@ -37,11 +45,11 @@ def __init__(self, h: int, s: int, v: int, offset: int = 5): def __str__(self): return f"H: {self.h}, S: {self.s}, V: {self.v}" - + def __repr__(self): return f"HSV({self.h}, {self.s}, {self.v})" - def __eq__(self, other: Union['HSV', Tuple[int, int, int], List[int]]): + def __eq__(self, other: Union["HSV", Tuple[int, int, int], List[int]]): """ 说明: 判断指定HSV是否在范围 @@ -49,9 +57,13 @@ def __eq__(self, other: Union['HSV', Tuple[int, int, int], List[int]]): :param other: 另一个 HSV :warning: 该方法会根据 offset 对前一个 HSV 进行范围偏移 """ - return compare_ranges((self.h-self.offset, self.s-self.offset, self.v-self.offset), other, (self.h+self.offset, self.s+self.offset, self.v+self.offset)) + return compare_ranges( + (self.h - self.offset, self.s - self.offset, self.v - self.offset), + other, + (self.h + self.offset, self.s + self.offset, self.v + self.offset), + ) - def __ne__(self, other: Union['HSV', Tuple[int, int, int], List[int]]): + def __ne__(self, other: Union["HSV", Tuple[int, int, int], List[int]]): """ 说明: 判断指定HSV是否不在范围 @@ -59,9 +71,26 @@ def __ne__(self, other: Union['HSV', Tuple[int, int, int], List[int]]): :param other: 另一个 HSV :warning: 该方法会根据 offset 对前一个 HSV 进行范围偏移 """ - return not compare_ranges((self.h-self.offset, self.s-self.offset, self.v-self.offset), other, (self.h+self.offset, self.s+self.offset, self.v+self.offset)) + return not compare_ranges( + (self.h - self.offset, self.s - self.offset, self.v - self.offset), + other, + (self.h + self.offset, self.s + self.offset, self.v + self.offset), + ) def __iter__(self): yield self.h yield self.s yield self.v + + def __getitem__(self, key): + if isinstance(key, int): + if key == 0 or key == -3: + return self.h + elif key == 1 or key == -2: + return self.s + elif key == 2 or key == -1: + return self.v + else: + raise IndexError("BGR index out of range") + else: + raise TypeError("Invalid index type. Must be an integer.") diff --git a/core/presets/control.py b/core/presets/control.py index 53da9eb..e9c670a 100644 --- a/core/presets/control.py +++ b/core/presets/control.py @@ -11,7 +11,6 @@ from loguru import logger from core.module.bgr import BGRGroup -from core.utils import compare_ranges from ..adb import input_tap, screenshot from ..exception_handling import get_excption diff --git a/core/presets/station.py b/core/presets/station.py index e3166a2..e6d491d 100644 --- a/core/presets/station.py +++ b/core/presets/station.py @@ -1,7 +1,7 @@ """ Author: Night-stars-1 nujj1042633805@gmail.com Date: 2024-04-05 17:24:47 -LastEditTime: 2024-04-29 21:18:33 +LastEditTime: 2024-04-30 02:58:34 LastEditors: Night-stars-1 nujj1042633805@gmail.com """ @@ -13,7 +13,6 @@ from core.image import get_bgr, get_bgrs, match_screenshot from core.models.config import config from core.module.bgr import BGRGroup -from core.utils import compare_ranges FIGHT_TIME = 300 MAP_WAIT_TIME = 3000 @@ -56,7 +55,7 @@ def wait(self): logger.info("检测到拦截,进行攻击") self.join_wait_fight() elif ( - BGRGroup([20, 20, 20], reach_bgrs[0], [25, 25, 25]) == reach_bgrs[0] + BGRGroup([20, 20, 20], [25, 25, 25]) == reach_bgrs[0] and BGRGroup([250, 250, 250], [255, 255, 255]) == reach_bgrs[1] ): logger.info("站点到达") @@ -66,11 +65,12 @@ def wait(self): elif ( reach_bgrs[2] == [251, 253, 253] and BGRGroup([235, 235, 250], [240, 240, 255]) != reach_bgrs[2] - and config.global_config.isSpeed + and config.global_config.is_speed ): logger.info("点击加速弹丸") input_tap((1061, 657)) - time.sleep(1) + config.global_config.is_auto_pick and input_tap((781, 484)) # 捡垃圾 + time.sleep(0.3) logger.error("站点超时") return False @@ -116,7 +116,9 @@ def join_wait_fight(self): # 等待战斗结束 start = time.perf_counter() while time.perf_counter() - start < FIGHT_TIME: - bgrs = get_bgrs(screenshot(), [(1114, 630), (1204, 624), (236, 26)]) + bgrs = get_bgrs( + screenshot(), [(1114, 630), (1204, 624), (236, 26), (1134, 628)] + ) if ( BGRGroup([198, 200, 200], [202, 204, 204]) == bgrs[0] and BGRGroup([183, 185, 185], [187, 189, 189]) == bgrs[1] diff --git a/tests/test_goods/test_goods.py b/tests/test_goods/test_goods.py index 8f8d7be..0fabb09 100644 --- a/tests/test_goods/test_goods.py +++ b/tests/test_goods/test_goods.py @@ -110,8 +110,9 @@ def test_get_goods_info_kmou(): station_level={ "7号自由港": 19, "修格里城": 13, - "曼德矿场": 12, - "澄明数据中心": 18, + "曼德矿场": 14, + "澄明数据中心": 17, + "阿妮塔发射中心": 0 }, negotiate_price={ "buyTired": 12, diff --git a/tests/tools/get_pos.py b/tests/tools/get_pos.py index a73449d..379723e 100644 --- a/tests/tools/get_pos.py +++ b/tests/tools/get_pos.py @@ -1,7 +1,7 @@ """ Author: Night-stars-1 nujj1042633805@gmail.com Date: 2024-04-01 23:06:19 -LastEditTime: 2024-04-22 00:28:20 +LastEditTime: 2024-04-30 03:19:47 LastEditors: Night-stars-1 nujj1042633805@gmail.com """ @@ -16,7 +16,7 @@ from core.adb import connect, screenshot -connect("127.0.0.1:16384") +connect("127.0.0.1:21523") def click_event(event, x, y, flags, param): diff --git a/updater.py b/updater.py index 00182c4..fe8d695 100644 --- a/updater.py +++ b/updater.py @@ -1,7 +1,7 @@ """ Author: Night-stars-1 nujj1042633805@gmail.com Date: 2024-04-29 12:51:19 -LastEditTime: 2024-04-29 22:25:16 +LastEditTime: 2024-04-30 03:14:04 LastEditors: Night-stars-1 nujj1042633805@gmail.com """ @@ -9,6 +9,7 @@ import shutil import sys import time +from enum import Enum from pathlib import Path from typing import List, Optional, Tuple, TypedDict from zipfile import ZipFile @@ -37,6 +38,14 @@ class APIResultModel(TypedDict): """资源""" +class UpdateStatus(Enum): + """更新状态枚举类""" + + Latest = 1 + UPDATE = 2 + FAILURE = 0 + + class Updater: """应用程序更新器,负责检查、下载、解压和安装最新版本的应用程序。""" @@ -84,18 +93,16 @@ async def fetch_url(session: ClientSession, mirror_url: str): print(f"最快的下载地址: {fastest_url} 响应时间: {fastest_time:.2f}s") return fastest_url - async def get_first_valid_response( - self, - ) -> Tuple[Optional[APIResultModel], Optional[str]]: + async def get_first_valid_response(self): async def fetch(session: ClientSession, url): try: async with session.get(url) as response: data: APIResultModel = await response.json() if data["tag_name"]: # 检查是否是有效结果 - return data, url + return data except Exception as e: - return None, url - return None, url + return None + return None async with ClientSession() as session: tasks = [asyncio.create_task(fetch(session, url)) for url in self.api_urls] @@ -106,17 +113,17 @@ async def fetch(session: ClientSession, url): # 检查已完成的任务是否有有效结果 for task in done: - result, url = task.result() + result = task.result() if result: # 如果找到有效结果,取消所有其他任务 for p in pending: p.cancel() - return result, url # 返回第一个有效的结果 + return result # 返回第一个有效的结果 # 没有有效结果,更新任务列表继续等待 tasks = list(pending) - return None, None # 所有请求完成但没有有效结果 + return None # 所有请求完成但没有有效结果 async def download_file_with_progress(self, url: str): """ @@ -227,31 +234,43 @@ def move_directory_with_progress(self, source: Path, destination: Path): # 创建目标子目录 target.mkdir(parents=True, exist_ok=True) - async def is_last(self): + async def get_update_status(self): """ 说明: 检查是否是最新版本 参数: :param version 版本号 """ - result, url = await self.get_first_valid_response() - version = result["tag_name"] - url = result["assets"][0]["browser_download_url"] - self.unzip_dir = TEMP_PATH / f"Auto_Resonance_{version}" - return parse(version) <= parse(__version__), url + try: + result = await self.get_first_valid_response() + if result: + version = result["tag_name"] + url: str = result["assets"][0]["browser_download_url"] + self.unzip_dir = TEMP_PATH / f"Auto_Resonance_{version}" + return ( + UpdateStatus.Latest + if parse(version) <= parse(__version__) + else UpdateStatus.UPDATE + ), url + return UpdateStatus.FAILURE, "" + except Exception as e: + print(f"获取更新信息失败: {e}") + return UpdateStatus.FAILURE, "" async def run(self): """ 说明: 运行更新流程 """ - is_last_version, url = await self.is_last() - if not is_last_version: + update_status, url = await self.get_update_status() + if update_status == UpdateStatus.UPDATE: self.mirror_urls = await self.find_fastest_mirror(url) await self.download_file_with_progress(self.mirror_urls) self.unzip_with_progress(HEIYUE_FILE_PATH, TEMP_PATH) self.sync_subdirectories(self.unzip_dir, ROOT_PATH) self.move_directory_with_progress(self.unzip_dir, ROOT_PATH) + elif update_status == UpdateStatus.FAILURE: + print("获取更新信息失败") else: print("已经是最新版了")