Переглянути джерело

!2 all dongri global vars change to global class

pcacc 3 тижнів тому
батько
коміт
e516e4d201
1 змінених файлів з 133 додано та 149 видалено
  1. 133 149
      app_dongri.py

+ 133 - 149
app_dongri.py

@@ -19,19 +19,19 @@ app = Flask(__name__)
 cache.init_app(app)
 app.config['TEMPLATES_AUTO_RELOAD'] = True
 socketio = SocketIO(app, cors_allowed_origins="*", max_http_buffer_size=1e8)
-event = threading.Event()
-g_status_list = []
-last_time = 0.0
-task_queue = deque()
-last_process = ''
-isGameBegin = True
-autoTask = None
-isReset = False
-g_times = 0
-g_cureNum = 500
-g_switch = False
-g_isRestart = True
-last_change_time = time.time()
+class GlobalState:
+    event = threading.Event()
+    g_status_list = []
+    last_time = 0.0
+    task_queue = deque()
+    last_process = ''
+    isGameBegin = True
+    isReset = False
+    g_times = 0
+    g_cureNum = 500
+    g_switch = False
+    g_isRestart = True
+    last_change_time = time.time()
 
 @app.after_request
 def add_no_cache_header(response):
@@ -42,18 +42,16 @@ def add_no_cache_header(response):
     return response
 
 def thread_runTask():
-    global last_process
-    global task_queue,isReset
     while True:
-        if event.is_set():
-            task_queue.clear()
-        if len(task_queue) != 0:
+        if GlobalState.event.is_set():
+            GlobalState.task_queue.clear()
+        if len(GlobalState.task_queue) != 0:
             # 初始时间
             current_time = time.time()
-            task = task_queue[-1]
-            task_queue.pop()
+            task = GlobalState.task_queue[-1]
+            GlobalState.task_queue.pop()
             print(f"{task.name} 开始执行")
-            last_process = task.name
+            GlobalState.last_process = task.name
             try:
                 task.run()
             except Exception as e:
@@ -64,8 +62,8 @@ def thread_runTask():
             myTimeSleep_small()
         else:
             myTimeSleep_big()
-        if isReset:
-            isReset = False
+        if GlobalState.isReset:
+            GlobalState.isReset = False
             cfg = read_cfg()
             if cfg['switch']:
                 type = update_rungame_type()
@@ -94,28 +92,27 @@ def send_todo():
     emit('processing_todo', get_todo_msgList())
 
 def send_status(msg):#软件执行状态
-    global g_status_list, g_times
     try:
         if not msg == "":
             # 添加新的状态消息和时间到列表
             timestamp = datetime.now().strftime('%H:%M:%S')  # 获取当前时间
             status_entry = {'msg': msg, 'time': timestamp}  # 存储消息和时间
-            g_status_list.append(status_entry)
+            GlobalState.g_status_list.append(status_entry)
 
             # 如果列表超过 5 条,移除最早的一条
-            if len(g_status_list) > 5:
-                g_status_list.pop(0)
+            if len(GlobalState.g_status_list) > 5:
+                GlobalState.g_status_list.pop(0)
         else:
             sendStr = ''
-            for item in g_status_list:
-                sendStr = f"{g_times}次-{item['time']}-{item['msg']}<br>" + sendStr
+            for item in GlobalState.g_status_list:
+                sendStr = f"{GlobalState.g_times}次-{item['time']}-{item['msg']}<br>" + sendStr
 
             emit('processing_status', sendStr)
         
         # 如果消息是 "结束",发送所有状态并清空列表
         if msg == "结束":
-            g_status_list = []  # 清空列表
-            event.clear()
+            GlobalState.g_status_list = []  # 清空列表
+            GlobalState.event.clear()
     except Exception as e:
         print(f"Error in send_status: {e}")
         return
@@ -123,12 +120,11 @@ def send_status(msg):#软件执行状态
 
 @socketio.on('monitor_begin')
 def monitor_begin():
-    global last_time, last_process
     current_time = time.time()
-    elapsed_time = current_time - last_time
+    elapsed_time = current_time - GlobalState.last_time
     if elapsed_time < 0.5:
         return
-    last_time = current_time
+    GlobalState.last_time = current_time
     regionRet, regionPos = game_region()
     screenshot = pyautogui.screenshot(region=regionPos)
     #binary_img = binarize_image(screenshot)
@@ -137,9 +133,9 @@ def monitor_begin():
     image_data_base64 = base64.b64encode(compressed_data).decode('utf-8')
     socketio.emit('image_data', image_data_base64)
     task_arr = []
-    if not event.is_set():
-        task_arr.append(last_process)
-    for item in reversed(task_queue):
+    if not GlobalState.event.is_set():
+        task_arr.append(GlobalState.last_process)
+    for item in reversed(GlobalState.task_queue):
         task_arr.append(item.name)
     latest_tasks = task_arr[:5] # only show the last 5 tasks
     send_hint(json.dumps(latest_tasks, ensure_ascii=False))
@@ -149,14 +145,14 @@ def monitor_begin():
 
 @socketio.on('end_script')
 def handle_end_script():
-    event.set()
+    GlobalState.event.set()
 
 @socketio.on('end_game')
 def handle_end_game():
-    event.set()
+    GlobalState.event.set()
     task_close_game()
     send_status("结束2")
-    event.clear()
+    GlobalState.event.clear()
 
 @socketio.on('get_title')
 def handle_get_title():
@@ -206,7 +202,7 @@ def http_restart_game():
 def handle_close_game():
     task_close_game()
     send_status("结束2")
-    event.clear()
+    GlobalState.event.clear()
 
 @app.route('/close_game', methods=['POST'])
 def http_close_game():
@@ -222,34 +218,33 @@ def handle_read_cfg():
     emit('processing_cfg', cfg)
 
 def restart_game(type=0):
-    global isGameBegin
-    isGameBegin = False
+    GlobalState.isGameBegin = False
     while True:
         task_close_game()
         if True == task_start_game(type):
             break
         else:
             send_status("启动失败")
-    isGameBegin = True
+    GlobalState.isGameBegin = True
     send_status("结束")
     config = read_cfg()
     print("config", config)
     auto_task(config)
 
 def auto_participate():
-    task_queue.appendleft(task_returnAllLine())
+    GlobalState.task_queue.appendleft(task_returnAllLine())
 
     timeout = 40 * 60
     start_time = time.time()  # 记录开始时间
 
 
-    while not event.is_set():
-        if len(task_queue) < 4:
-            task_queue.appendleft(task_useAnnimalSkill(True))
-            task_queue.appendleft(task_paticipateInTeam(False))
-            task_queue.appendleft(task_paticipateInTeam())
-            task_queue.appendleft(task_paticipateInTeam(False))
-            task_queue.appendleft(task_paticipateInTeam())
+    while not GlobalState.event.is_set():
+        if len(GlobalState.task_queue) < 4:
+            GlobalState.task_queue.appendleft(task_useAnnimalSkill(True))
+            GlobalState.task_queue.appendleft(task_paticipateInTeam(False))
+            GlobalState.task_queue.appendleft(task_paticipateInTeam())
+            GlobalState.task_queue.appendleft(task_paticipateInTeam(False))
+            GlobalState.task_queue.appendleft(task_paticipateInTeam())
         myTimeSleep_big()
         # 每次循环检查已用时间
         current_time = time.time()
@@ -261,16 +256,15 @@ def auto_participate():
 
 
 def auto_palace():
-    global g_times, g_cureNum
     timeout = 180 * 60
     start_time = time.time()  # 记录开始时间
     read_cfg()
-    while not event.is_set():
-        g_times += 1
-        if len(task_queue) < 4:
-            task_queue.appendleft(task_cure(True, g_cureNum * 5))
-            task_queue.appendleft(task_cure(True, g_cureNum * 3))
-            task_queue.appendleft(task_fight_enemy())
+    while not GlobalState.event.is_set():
+        GlobalState.g_times += 1
+        if len(GlobalState.task_queue) < 4:
+            GlobalState.task_queue.appendleft(task_cure(True, GlobalState.g_cureNum * 5))
+            GlobalState.task_queue.appendleft(task_cure(True, GlobalState.g_cureNum * 3))
+            GlobalState.task_queue.appendleft(task_fight_enemy())
 
         myTimeSleep_big()
         current_time = time.time()
@@ -280,27 +274,26 @@ def auto_palace():
             handle_restart_game()
 
 def add_auto_task(isMaxCollect, isJina, isSimple = False, isAddStrengh = False, activity = 'None', isAutoParticipate = True, isDailyConfig = False, train_type = 'None', always = False):  
-    global g_times, g_cureNum, g_switch, g_isRestart
     collectArr = [int(x) for x in isMaxCollect.split(",")]
     print("collectArr", collectArr)
     if len(collectArr) == 1:
         collectArr = collectArr[0]
-    while not event.is_set():
+    while not GlobalState.event.is_set():
         if isSimple == False and is_within_n_minutes(get_todo_time("巨熊行动"), 30, 35):
             print("in fight bear")
-            if len(task_queue) < 5:
+            if len(GlobalState.task_queue) < 5:
                 start_recording()
-                task_queue.appendleft(task_returnAllLine())
-                task_queue.appendleft(task_useAnnimalSkill(True))
-                task_queue.appendleft(task_paticipateInTeam2(not g_switch))
-                task_queue.appendleft(task_paticipateInTeam2(not g_switch))
-                task_queue.appendleft(task_paticipateInTeam(not g_switch))
-                task_queue.appendleft(task_paticipateInTeam(not g_switch))
-                task_queue.appendleft(task_paticipateInTeam2(not g_switch))
-                task_queue.appendleft(task_paticipateInTeam2(not g_switch))
-                task_queue.appendleft(task_paticipateInTeam(not g_switch))
-                task_queue.appendleft(task_paticipateInTeam(not g_switch))
-                task_queue.appendleft(task_paticipateInTeam(False))
+                GlobalState.task_queue.appendleft(task_returnAllLine())
+                GlobalState.task_queue.appendleft(task_useAnnimalSkill(True))
+                GlobalState.task_queue.appendleft(task_paticipateInTeam2(not GlobalState.g_switch))
+                GlobalState.task_queue.appendleft(task_paticipateInTeam2(not GlobalState.g_switch))
+                GlobalState.task_queue.appendleft(task_paticipateInTeam(not GlobalState.g_switch))
+                GlobalState.task_queue.appendleft(task_paticipateInTeam(not GlobalState.g_switch))
+                GlobalState.task_queue.appendleft(task_paticipateInTeam2(not GlobalState.g_switch))
+                GlobalState.task_queue.appendleft(task_paticipateInTeam2(not GlobalState.g_switch))
+                GlobalState.task_queue.appendleft(task_paticipateInTeam(not GlobalState.g_switch))
+                GlobalState.task_queue.appendleft(task_paticipateInTeam(not GlobalState.g_switch))
+                GlobalState.task_queue.appendleft(task_paticipateInTeam(False))
                 
             myTimeSleep_big()
             send_status(f'巨熊行动中')
@@ -308,7 +301,7 @@ def add_auto_task(isMaxCollect, isJina, isSimple = False, isAddStrengh = False,
         elif isSimple == False and is_within_n_minutes(get_todo_time("巨熊行动"), 60, 0):
             # 设置无尽运行和启动的游戏为0
             always = True
-            if g_switch:
+            if GlobalState.g_switch:
                 update_rungame_type(0)
             send_status(f'巨熊行动:在60min内,切换到无尽模式')
         stop_recording()
@@ -316,96 +309,93 @@ def add_auto_task(isMaxCollect, isJina, isSimple = False, isAddStrengh = False,
         print("add special activity")
         # special activity
         if activity == 'lianmeng':
-            task_queue.appendleft(task_activity_lianmeng())
+            GlobalState.task_queue.appendleft(task_activity_lianmeng())
         elif activity == 'cure':
-            task_queue.appendleft(task_cure(True, g_cureNum))
+            GlobalState.task_queue.appendleft(task_cure(True, GlobalState.g_cureNum))
         elif activity == 'only_cure':
-            task_queue.appendleft(task_cure(True, g_cureNum))
-            task_queue.appendleft(task_cure(True, g_cureNum))
-            task_queue.appendleft(task_cure(True, g_cureNum))
+            GlobalState.task_queue.appendleft(task_cure(True, GlobalState.g_cureNum))
+            GlobalState.task_queue.appendleft(task_cure(True, GlobalState.g_cureNum))
+            GlobalState.task_queue.appendleft(task_cure(True, GlobalState.g_cureNum))
             return
         
         print("add normal activity")
-        task_queue.appendleft(task_checkActivities())
-        if g_switch == True:
-            task_queue.appendleft(task_checkBenifitStatus())
+        GlobalState.task_queue.appendleft(task_checkActivities())
+        if GlobalState.g_switch == True:
+            GlobalState.task_queue.appendleft(task_checkBenifitStatus())
     
-        # first run
-        #if g_times % 3 == 1:
-        #    task_queue.appendleft(check_safe_collect())
             
         if isSimple == False:
-            task_queue.appendleft(task_information())
+            GlobalState.task_queue.appendleft(task_information())
 
-        task_queue.appendleft(task_check_Research())
-        task_queue.appendleft(task_checkStoreRoom())
+        GlobalState.task_queue.appendleft(task_check_Research())
+        GlobalState.task_queue.appendleft(task_checkStoreRoom())
         if not isSimple:
             if isJina == 'jina':
-                task_queue.appendleft(task_fight_jina(isAddStrengh))
+                GlobalState.task_queue.appendleft(task_fight_jina(isAddStrengh))
             elif isJina == 'yongbing':
-                task_queue.appendleft(task_fight_yongbing(isAddStrengh))
+                GlobalState.task_queue.appendleft(task_fight_yongbing(isAddStrengh))
             elif isJina == 'monster':
-                task_queue.appendleft(task_fightMonster(isAddStrengh, False, isSimple))
+                GlobalState.task_queue.appendleft(task_fightMonster(isAddStrengh, False, isSimple))
             elif isJina == 'big_monster' or isJina == 'bigMonster_max':
-                task_queue.appendleft(task_fightMonster(isAddStrengh, True, isSimple))
+                GlobalState.task_queue.appendleft(task_fightMonster(isAddStrengh, True, isSimple))
             elif isJina == 'jina_call':
                 ### 全部聊天记录都是新吉娜
-                task_queue.appendleft(task_call_jina())
-                task_queue.appendleft(task_call_jina())
-                task_queue.appendleft(task_call_jina())
-                task_queue.appendleft(task_call_jina())
+                GlobalState.task_queue.appendleft(task_call_jina())
+                GlobalState.task_queue.appendleft(task_call_jina())
+                GlobalState.task_queue.appendleft(task_call_jina())
+                GlobalState.task_queue.appendleft(task_call_jina())
             elif isJina == 'jina_onlyFight':
-                task_queue.appendleft(task_fight_jina_only())
-        task_queue.appendleft(task_collect(collectArr, isSimple, isAddStrengh))
-        task_queue.appendleft(task_train(train_type))
+                GlobalState.task_queue.appendleft(task_fight_jina_only())
+        GlobalState.task_queue.appendleft(task_collect(collectArr, isSimple, isAddStrengh))
+        GlobalState.task_queue.appendleft(task_train(train_type))
         
         if isSimple == False:
             if not isAddStrengh: # 如果不是添加体力,则添加一次采集
-                task_queue.appendleft(task_collect(collectArr, isSimple, isAddStrengh))
+                GlobalState.task_queue.appendleft(task_collect(collectArr, isSimple, isAddStrengh))
             if isJina == 'monster' and isAddStrengh:
-                task_queue.appendleft(task_fightMonster(isAddStrengh, False, isSimple))
+                GlobalState.task_queue.appendleft(task_fightMonster(isAddStrengh, False, isSimple))
             else:
-                task_queue.appendleft(task_collect(collectArr, isSimple, isAddStrengh))
+                GlobalState.task_queue.appendleft(task_collect(collectArr, isSimple, isAddStrengh))
         else:
-            task_queue.appendleft(task_collect(collectArr, isSimple, isAddStrengh))
+            GlobalState.task_queue.appendleft(task_collect(collectArr, isSimple, isAddStrengh))
     
         print("add rare activity")
-        if g_times % 5 == 1:
+        if GlobalState.g_times % 5 == 1:
             if get_rungame_type() == 0:
-                task_queue.appendleft(check_buildOrResearch())
-            task_queue.appendleft(task_cure(True, g_cureNum))
-            task_queue.appendleft(task_information())
-            task_queue.appendleft(task_checkDonata())
-            task_queue.appendleft(task_checkMaster())
-            task_queue.appendleft(task_checkAdventure())
-            task_queue.appendleft(task_train(train_type))
-            task_queue.appendleft(task_useAnnimalSkill())
-            task_queue.appendleft(task_read_mails())
-            task_queue.appendleft(task_getStrength())
+                GlobalState.task_queue.appendleft(check_buildOrResearch())
+            GlobalState.task_queue.appendleft(task_cure(True, GlobalState.g_cureNum))
+            GlobalState.task_queue.appendleft(task_information())
+            GlobalState.task_queue.appendleft(task_checkDonata())
+            GlobalState.task_queue.appendleft(task_checkMaster())
+            GlobalState.task_queue.appendleft(task_checkAdventure())
+            GlobalState.task_queue.appendleft(task_train(train_type))
+            GlobalState.task_queue.appendleft(task_useAnnimalSkill())
+            GlobalState.task_queue.appendleft(task_read_mails())
+            GlobalState.task_queue.appendleft(task_getStrength())
             if auto_participate:
-                task_queue.appendleft(task_checkConfilits())
-            task_queue.appendleft(task_checkDiamond())
-            task_queue.appendleft(task_fight_campion())
-            task_queue.appendleft(task_get_fire_crystal())
-            task_queue.appendleft(task_checkUnionTreasure())
-            #task_queue.appendleft(task_checkBenifitStatus())
-            task_queue.appendleft(task_gotoTree())
-            task_queue.appendleft(task_checkHelp())
+                GlobalState.task_queue.appendleft(task_checkConfilits())
+            GlobalState.task_queue.appendleft(task_checkDiamond())
+            GlobalState.task_queue.appendleft(task_fight_campion())
+            GlobalState.task_queue.appendleft(task_get_fire_crystal())
+            GlobalState.task_queue.appendleft(task_checkUnionTreasure())
+            #GlobalState.task_queue.appendleft(task_checkBenifitStatus())
+            GlobalState.task_queue.appendleft(task_gotoTree())
+            GlobalState.task_queue.appendleft(task_checkHelp())
 
         if activity == 'redPackage':
-            task_queue.appendleft(task_get_redPackage())
+            GlobalState.task_queue.appendleft(task_get_redPackage())
         if isJina == 'bigMonster_max':
-            task_queue.appendleft(task_fightMonster(isAddStrengh, True, isSimple))
+            GlobalState.task_queue.appendleft(task_fightMonster(isAddStrengh, True, isSimple))
 
         print("check restart")
-        g_times += 1
+        GlobalState.g_times += 1
         restart_times = 7
-        if g_switch:
+        if GlobalState.g_switch:
             restart_times = 4
-        if g_times % restart_times == 0 and g_times != 0:
-            if g_isRestart:
+        if GlobalState.g_times % restart_times == 0 and GlobalState.g_times != 0:
+            if GlobalState.g_isRestart:
                 handle_end_game()
-            if g_switch == False:
+            if GlobalState.g_switch == False:
                 if always:
                     nextTaskTime = random.randint(400, 450)
                     set_nextTaskTime(nextTaskTime)
@@ -418,7 +408,7 @@ def add_auto_task(isMaxCollect, isJina, isSimple = False, isAddStrengh = False,
                 nextTaskTime = random.randint(20, 50)
                 set_nextTaskTime(nextTaskTime)
                 myTimeSleep(nextTaskTime, send_status)
-            if g_isRestart:
+            if GlobalState.g_isRestart:
                 handle_restart_game()
         else:
             nextTaskTime = random.randint(400, 450)
@@ -426,9 +416,9 @@ def add_auto_task(isMaxCollect, isJina, isSimple = False, isAddStrengh = False,
             myTimeSleep(nextTaskTime, send_status)
             
         
-    task_queue.clear()
+    GlobalState.task_queue.clear()
     send_status(f'自动模式结束')
-    event.clear()
+    GlobalState.event.clear()
 
 daily_config = {
     "login_task": False,
@@ -520,11 +510,10 @@ def write_cfg(config):
     with open('config.json', 'w') as config_file:
         json.dump(config, config_file, indent=4)
 def read_cfg():
-    global g_cureNum
     try:
         with open('config.json', 'r') as config_file:
             config = json.load(config_file)
-            g_cureNum = config['cureNumber']
+            GlobalState.g_cureNum = int(config['cureNumber'])
             return config
     except FileNotFoundError:
         print("配置文件不存在,请检查文件路径。")
@@ -562,7 +551,6 @@ def handle_auto(data):
     auto_task(config)
 
 def auto_task(data):
-    global autoTask, g_cureNum,g_isRestart,g_switch
     if data == None:
         isMaxCollect = '4,3,2,1'
         isSimple = False
@@ -576,7 +564,7 @@ def auto_task(data):
         cureNumber = 500
         lineCheck = False
         switch = False
-        g_isRestart = True
+        GlobalState.g_isRestart = True
     else:
         isMaxCollect = data['maxCollect']
         isSimple = data['simple']
@@ -587,13 +575,13 @@ def auto_task(data):
         auto_daily = False
         train_type = data['train']
         always = data['always']
-        cureNumber = data['cureNumber']
+        cureNumber = int(data['cureNumber'])
         lineCheck = data['lineCheck']
         switch = data['switch']
-        g_isRestart = data['is_restart']
+        GlobalState.g_isRestart = data['is_restart']
 
-    g_cureNum = cureNumber
-    g_switch = switch
+    GlobalState.g_cureNum = cureNumber
+    GlobalState.g_switch = switch
     set_lineCheck(lineCheck)
     send_status(f'开始自动模式')
     executor.submit(add_auto_task, isMaxCollect, isJina, isSimple, isAddStrengh, activity, participateJijie, auto_daily, train_type, always)
@@ -601,13 +589,11 @@ def auto_task(data):
 
 @socketio.on('begin_auto_participate')
 def handle_auto_participate():
-    global autoTask
     send_status(f'开始自动集结模式')
     executor.submit(auto_participate)
 
 @socketio.on('begin_testNewFun')
 def handle_auto_testNewFun():
-    global autoTask
     send_status(f'开始自动测试新功能')
     task_testFun().run()
 
@@ -616,23 +602,21 @@ def handle_auto_testNewFun():
 
 @socketio.on('auto_palace')
 def handle_auto_palace():
-    global autoTask
     send_status(f'开始自动王城')
     executor.submit(auto_palace)
 
 def monitor_game_runtime():
-    global g_times, last_change_time
-    last_value = g_times
+    last_value = GlobalState.g_times
     
     while True:
-        current_value = g_times
+        current_value = GlobalState.g_times
         if current_value != last_value:
             last_value = current_value
-            last_change_time = time.time()
+            GlobalState.last_change_time = time.time()
             print(f"g_times changed to {current_value}")
         
         # 检查是否超过60分钟没有变化
-        if time.time() - last_change_time > 3600:  # 3600秒=60分钟
+        if time.time() - GlobalState.last_change_time > 3600:  # 3600秒=60分钟
             print("g_times hasn't changed for 60 minutes!")
             handle_restart_game()
         
@@ -644,7 +628,7 @@ if __name__ == '__main__':
     init()
     if '--reset' in sys.argv:
         time.sleep(2)
-        isReset = True
+        GlobalState.isReset = True
         print("需要重启游戏")
     runTask = threading.Thread(target=thread_runTask)#启动线程往里面添加任务
     runTask.daemon = True