#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerOfflineSupport # # @todo:Íæ¼ÒÀëÏßÖ§³ÖÄÜÁ¦ # @author hxp # @date 2025-06-03 # @version 1.0 # # ÏêϸÃèÊö: Ö÷ÒªÓÃÓÚ´¦ÀíÀëÏßÍæ¼ÒÏà¹ØÖ§³ÖµÄÄÜÁ¦ # µäÐÍÓ¦Ó㺠# 1. ºǫ́GM¹¤¾ßÃüÁî£¬Íæ¼Ò²»ÔÚÏßÖ§³Ö£¬¹æ±Üºǫ́²Ù×÷Ò»¶¨ÒªÍæ¼ÒÔÚÏßµÄÏÞÖÆ£» # 2. ¿ç·þ֪ͨµÄÍæ¼ÒÏà¹Ø²Ù×÷ÐÅÏ¢ # ÓÉÓÚ×Ó·þ¿ç·þͨѶÓÐÒ»¶¨µÄÑÓ³Ù£¬ËùÒÔÈ·±£Ä³Ð©Í¨¹ý¿ç·þÐÞ¸ÄÍæ¼ÒÏà¹ØÐÅÏ¢ÃüÁîÔÚ×Ó·þÍæ¼ÒÀëÏßʱÄÜÔÚÉÏÏߺóÖ´ÐÐ # Èç¿ÛÎïÆ·¡¢»õ±Ò»òÕ߸ø½±ÀøµÈ£¬·ÀÖ¹ÓÉÍæ¼ÒÀëÏߺó²ÅÊÕµ½ÏûÏ¢ÒýÆðµÄÉÙ¿Û»òÉÙ¸ø # 3. ÆäËû # #------------------------------------------------------------------------------- #"""Version = 2025-06-03 14:00""" #------------------------------------------------------------------------------- import DBDataMgr import GameWorld import ShareDefine import traceback import time def AddOfflineUnprocessed(playerID, eventName, eventData, outtimeDays=7): '''Ìí¼ÓÍæ¼ÒÀëÏßδ´¦ÀíµÄʼþ @param eventName: ʼþÃû @param eventData: ʼþÊý¾Ý£¬Óɹ¦ÄÜ×Ô¶¨¶¨Ò壬ÈÎÒâ¸ñʽ @param outtimeDays: ¹ýÆÚÌìÊý£¬0-ÓÀ¾Ã, >0-Ö¸¶¨ÌìÊý, ĬÈÏ30Ìì ''' gameRecMgr = DBDataMgr.GetGameRecMgr() recIDMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_PlayerOfflineUnprocessed, playerID) recData = recIDMgr.AddRecData() recData.SetValue1(outtimeDays) recData.GetUserDict().update({"eventName":eventName, "eventData":eventData}) GameWorld.Log("Ìí¼ÓÍæ¼ÒÀëÏßδ´¦ÀíµÄʼþ: %s, %s, %s" % (eventName, outtimeDays, eventData), playerID) return def DoOfflineUnprocessed(curPlayer, eventName, dofunc): '''Ö´Ðд¦ÀíÍæ¼ÒÀëÏßδ´¦ÀíµÄʼþ @param dofunc: Ö´Ðк¯Êý£¬²ÎÊý[curPlayer, recData, eventName, eventData] ''' if not dofunc: return playerID = curPlayer.GetPlayerID() recIDMgr = DBDataMgr.GetGameRecMgr().GetRecTypeIDMgr(ShareDefine.Def_GameRecType_PlayerOfflineUnprocessed, playerID) # ±ØÐë°´Ìí¼Ó˳ÐòÖ´ÐУ¬²»È»¿ÉÄܵ¼ÖÂÒì³££¬È磬ÏȼÓ1000½ð±Ò£¬ÔÙ¿Û³ý500£¬Èç¹û²»°´Ë³ÐòÖ´ÐпÉÄܵ¼ÖÂ×îºó½ð±ÒÓëÔ¤ÆÚ²»·ûºÏ delRecDataList = [] try: for index in range(recIDMgr.GetCount()): recData = recIDMgr.At(index) recDict = recData.GetUserDict() if recDict.get("eventName") != eventName: continue eventData = recDict.get("eventData") GameWorld.Log("Ö´ÐÐÍæ¼ÒÉÏ´ÎÀëÏßǰδ´¦Àíʼþ: %s, %s" % (eventName, eventData), playerID) dofunc(curPlayer, recData, eventName, eventData) delRecDataList.append(recData) except: accID = curPlayer.GetAccID() msgInfo = "eventName=%s,accID=%s, %s" % (eventName, accID, traceback.format_exc()) GameWorld.SendGameErrorEx("DoOfflineUnprocessed", msgInfo, playerID) # Ö´ÐÐÍêºóÔÙͳһɾ³ý for recData in delRecDataList: recIDMgr.DelRecData(recData) return def DelOfflineUnprocessed(eventName): ## ɾ³ýËùÓÐÍæ¼ÒijÖÖÀëÏßδ´¦ÀíµÄʼþ # @param eventName: ʼþÃû delCnt = 0 recTypeMgr = DBDataMgr.GetGameRecMgr().GetRecTypeMgr(ShareDefine.Def_GameRecType_PlayerOfflineUnprocessed) for recID in recTypeMgr.GetRecIDList(): recIDMgr = recTypeMgr.GetRecIDMgr(recID) for index in range(recIDMgr.GetCount())[::-1]: recData = recIDMgr.At(index) if recData.GetUserDict().get("eventName") != eventName: continue recIDMgr.DelRecData(recData) delCnt += 1 GameWorld.DebugLog("ɾ³ýÍæ¼ÒÀëÏßδ´¦ÀíµÄʼþ: %s, delCnt=%s" % (eventName, delCnt)) return def DelOuttimeOfflineUnprocessed(): ## ɾ³ý¹ýÆÚÍæ¼ÒÀëÏßδ´¦ÀíµÄʼþ curTime = int(time.time()) recTypeMgr = DBDataMgr.GetGameRecMgr().GetRecTypeMgr(ShareDefine.Def_GameRecType_PlayerOfflineUnprocessed) for recID in recTypeMgr.GetRecIDList(): recIDMgr = recTypeMgr.GetRecIDMgr(recID) for index in range(recIDMgr.GetCount())[::-1]: recData = recIDMgr.At(index) recTime = recData.GetTime() outtimeDays = recData.GetValue1() if not outtimeDays: continue diffDays = GameWorld.GetDiff_Day(curTime, recTime) + 1 if diffDays <= outtimeDays: continue recIDMgr.DelRecData(recData) GameWorld.DebugLog("ɾ³ýÍæ¼ÒÀëÏßδ´¦ÀíµÄ¹ýÆÚʼþ: %s, %s" % (outtimeDays, recData.GetUserData()), recID) return def OnDay(): DelOuttimeOfflineUnprocessed() return