| | |
| | | #---------------------------------------------------------------------
|
| | | import GameWorld
|
| | | import PlayerDBOper
|
| | | import PyDataManager
|
| | | import IPY_GameServer
|
| | | import PlayerDBGSEvent
|
| | | import CrossChampionship
|
| | |
| | | import PyGameData
|
| | | import ChConfig
|
| | | import types
|
| | | import time
|
| | | #---------------------------------------------------------------------
|
| | | #系统提示参数列表
|
| | | NotifyCodeList = IPY_GameServer.IPY_NotifyCodeList()
|
| | |
| | | FuncOpenLogicDict[funcID](curPlayer)
|
| | | return
|
| | |
|
| | | def AddOfflineUnprocessed(playerID, eventName, eventData, outtimeDays=30):
|
| | | '''添加玩家离线未处理的事件
|
| | | @param eventName: 事件名
|
| | | @param eventData: 事件数据,由功能自定定义,任意格式
|
| | | @param outtimeDays: 过期天数,0-永久, >0-指定天数, 默认30天
|
| | | '''
|
| | | playerRecMgr = PyDataManager.GetDBPlayerRecDataManager()
|
| | | recData = playerRecMgr.AddPlayerRecData(ShareDefine.Def_PlayerRecType_OfflineUnprocessed, playerID)
|
| | | recData.SetValue1(outtimeDays)
|
| | | recData.SetUserDataByKey("eventName", eventName)
|
| | | recData.SetUserDataByKey("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()
|
| | | playerRecMgr = PyDataManager.GetDBPlayerRecDataManager()
|
| | | recDataList = playerRecMgr.GetPlayerRecDataList(ShareDefine.Def_PlayerRecType_OfflineUnprocessed, playerID)
|
| | | delRecDataList = []
|
| | | # 需按添加顺序执行逻辑
|
| | | for recData in recDataList:
|
| | | if recData.GetUserDataByKey("eventName") != eventName:
|
| | | continue
|
| | | eventData = recData.GetUserDataByKey("eventData")
|
| | | GameWorld.Log("执行玩家上次离线前未处理事件: %s, %s" % (eventName, eventData), playerID)
|
| | | dofunc(curPlayer, recData, eventName, eventData)
|
| | | delRecDataList.append(recData)
|
| | | |
| | | # 执行完后再统一删除
|
| | | for recData in delRecDataList:
|
| | | playerRecMgr.DelRecData(recData)
|
| | | return
|
| | |
|
| | | def DelOfflineUnprocessed(eventName):
|
| | | ## 删除玩家离线未处理的事件
|
| | | playerRecMgr = PyDataManager.GetDBPlayerRecDataManager() |
| | | recDict = playerRecMgr.GetPlayerRecDataDict(ShareDefine.Def_PlayerRecType_OfflineUnprocessed)
|
| | | if not recDict:
|
| | | return
|
| | | |
| | | delCnt = 0
|
| | | for recDataList in recDict.values():
|
| | | for recData in recDataList[::-1]: # 倒序处理删除到期
|
| | | if recData.GetUserDataByKey("eventName") != eventName:
|
| | | continue
|
| | | playerRecMgr.DelRecData(recData)
|
| | | delCnt += 1
|
| | | |
| | | GameWorld.DebugLog("删除玩家离线未处理的事件: %s, delCnt=%s" % (eventName, delCnt))
|
| | | return
|
| | |
|
| | | def DelOuttimeOfflineUnprocessed():
|
| | | ## 删除过期玩家离线未处理的事件
|
| | | playerRecMgr = PyDataManager.GetDBPlayerRecDataManager() |
| | | recDict = playerRecMgr.GetPlayerRecDataDict(ShareDefine.Def_PlayerRecType_OfflineUnprocessed)
|
| | | if not recDict:
|
| | | return
|
| | | |
| | | curTime = int(time.time())
|
| | | for recDataList in recDict.values():
|
| | | for recData in recDataList[::-1]: # 倒序处理删除到期
|
| | | recTime = recData.GetTime()
|
| | | outtimeDays = recData.GetValue1()
|
| | | if not outtimeDays:
|
| | | continue
|
| | | diffDays = GameWorld.GetDiff_Day(curTime, recTime) + 1
|
| | | if diffDays <= outtimeDays:
|
| | | continue
|
| | | playerRecMgr.DelRecData(recData)
|
| | | |
| | | GameWorld.DebugLog("删除玩家离线未处理的过期事件: %s, %s" % (outtimeDays, recData.GetUserData()), recData.GetPlayerID())
|
| | | return
|
| | |
|
| | | def DoOnDay():
|
| | | DelOuttimeOfflineUnprocessed()
|
| | | return
|