#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerActivity # # @todo:ÈÕ³£»îÔ¾ÈÎÎñ # @author hxp # @date 2025-10-16 # @version 1.0 # # ÏêϸÃèÊö: ÈÕ³£»îÔ¾ÈÎÎñ # #------------------------------------------------------------------------------- #"""Version = 2025-10-16 19:30""" #------------------------------------------------------------------------------- import ChConfig import ShareDefine import NetPackCommon import PlayerControl import ChPyNetSendPack import PlayerZhanling import ItemControler import IpyGameDataPY import GameWorld import DBDataMgr import ObjPool def OnDay(curPlayer): CheckResetWeekActivity(curPlayer) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityTotal, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityAward, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyTaskState, 0) syncTaskCondList = [] ipyDataMgr = IpyGameDataPY.IPY_Data() for index in range(ipyDataMgr.GetDailyTaskCount()): ipyData = ipyDataMgr.GetDailyTaskByIndex(index) taskType = ipyData.GetTaskType() conds = ipyData.GetTaskConds() tcList = [taskType, conds] if tcList in syncTaskCondList: continue if not GetDailyTaskValue(curPlayer, taskType, conds): continue SetDailyTaskValue(curPlayer, taskType, conds, 0) syncTaskCondList.append(tcList) SyncDailyTaskInfo(curPlayer, isAll=True) return def OnPlayerLogin(curPlayer): CheckResetWeekActivity(curPlayer) SyncDailyTaskInfo(curPlayer, isAll=True) return def CheckResetWeekActivity(curPlayer): ## ¼ì²éÖØÖÃÿÖÜ»îÔ¾½±ÀøÕ½Áî playerActivityWeek = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityWeek) serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1 nowActivityWeek = (serverDay - 1) / 7 # Ôݶ¨7ÌìÒ»ÂÖ£¬°´¿ª·þÌìËã GameWorld.DebugLog("¼ì²éÖØÖÃÖÜ»îÔ¾½±ÀøÕ½Áî! serverDay=%s,nowActivityWeek=%s,playerActivityWeek=%s" % (serverDay, nowActivityWeek, playerActivityWeek), curPlayer.GetPlayerID()) if nowActivityWeek and playerActivityWeek != nowActivityWeek: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityWeek, nowActivityWeek) PlayerZhanling.ResetZhanling(curPlayer, PlayerZhanling.ZhanlingType_WeekActivity) return def AddDailyTaskValue(curPlayer, taskType, addValue=1, conds=[]): ## Ôö¼ÓÈÎÎñ½ø¶È ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("DailyTask", taskType) if not ipyDataList: return maxValue = 0 for ipyData in ipyDataList: taskConds = ipyData.GetTaskConds() if conds or taskConds: # ¿É°´ÈÎÎñÀàÐÍÀ©Õ¹²»Í¬µÄÌõ¼þÑéÖ¤·½Ê½ if taskConds != tuple(conds): #GameWorld.DebugLog("Ìõ¼þ²»Í¬taskConds=%s,conds=%s" % (taskConds, conds)) continue needValue = ipyData.GetNeedValue() maxValue = max(maxValue, needValue) curValue = GetDailyTaskValue(curPlayer, taskType, conds) if curValue >= maxValue: return updValue = min(curValue + addValue, maxValue) SetDailyTaskValue(curPlayer, taskType, conds, updValue) SyncDailyTaskInfo(curPlayer, taskType, conds) return def GetDailyTaskValue(curPlayer, taskType, conds=[]): ##»ñÈ¡Íê³É¶È condition = "" if not conds else str(list(conds)).replace(" ", "")[1:-1] return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyTaskValue % (taskType, condition)) def SetDailyTaskValue(curPlayer, taskType, conds, value): ##ÉèÖÃÍê³É¶È condition = "" if not conds else str(list(conds)).replace(" ", "")[1:-1] PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyTaskValue % (taskType, condition), value) GameWorld.DebugLog("¸üÐÂÿÈÕÈÎÎñ½ø¶ÈÖµ: taskType=%s,conds=%s,value=%s" % (taskType, condition, value), curPlayer.GetPlayerID()) return def GetDailyTaskAward(curPlayer, taskID): playerID = curPlayer.GetPlayerID() ipyData = IpyGameDataPY.GetIpyGameDataByCondition("DailyTask", {"TaskID":taskID}) if not ipyData: return taskState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyTaskState) if taskState&pow(2, taskID): GameWorld.DebugLog("ÿÈÕÈÎÎñÒѾ­ÁìÈ¡¹ý½±Àø! taskID=%s,taskState=%s" % (taskID, taskState), playerID) return taskType = ipyData.GetTaskType() conds = ipyData.GetTaskConds() needValue = ipyData.GetNeedValue() curValue = GetDailyTaskValue(curPlayer, taskType, conds) if curValue < needValue: GameWorld.DebugLog("ÿÈÕÈÎÎñ½ø¶È²»×㣬ÎÞ·¨Áì½±! taskID=%s,taskType=%s,conds=%s,curValue=%s < %s" % (taskID, taskType, conds, curValue, needValue), playerID) return updState = taskState|pow(2, taskID) GameWorld.DebugLog("ÿÈÕÈÎÎñÁì½±! taskID=%s,updState=%s" % (taskID, updState), playerID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyTaskState, updState) awardItemList = ipyData.GetAwardItemList() ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["DailyTaskAward", False, {}]) return def DoAddActivity(curPlayer, addValue): ## Ôö¼Ó»îÔ¾Öµ updValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityTotal) + addValue PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityTotal, updValue) SyncDailyTaskInfo(curPlayer) GameWorld.DebugLog("Ôö¼Ó»îÔ¾¶È: addValue=%s,updValue=%s" % (addValue, updValue), curPlayer.GetPlayerID()) PlayerZhanling.AddZhanlingValue(curPlayer, PlayerZhanling.ZhanlingType_WeekActivity, addValue) return updValue def GetActivityAward(curPlayer, awardID): ## ÁìÈ¡»îÔ¾¶È½±Àø playerID = curPlayer.GetPlayerID() ipyData = IpyGameDataPY.GetIpyGameData("DailyLivenessReward", awardID) if not ipyData: return awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityAward) if awardState&pow(2, awardID): GameWorld.DebugLog("»îÔ¾½±ÀøIDÒÑÁìÈ¡! awardID=%s,awardState=%s" % (awardID, awardState), playerID) return needActivity = ipyData.GetNeedLiveness() activityTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityTotal) # ÅжϻîÔ¾¶È if activityTotal < needActivity: GameWorld.DebugLog("Áì½±»îÔ¾¶È²»×ã! awardID=%s,activityTotal=%s < %s" % (awardID, activityTotal, needActivity), playerID) return awardItemList = ipyData.GetAwardItemList() updState = awardState|pow(2, awardID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityAward, updState) GameWorld.DebugLog("Áì½±»îÔ¾¶È! awardID=%s,updState=%s,awardItemList=%s" % (awardID, updState, awardItemList), playerID) ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["ActivityAward", False, {}]) SyncDailyTaskInfo(curPlayer) return def SyncDailyTaskInfo(curPlayer, taskType=0, conds=[], isAll=False): clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCDailyTaskInfo) clientPack.ActivityTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityTotal) clientPack.ActivityAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityAward) clientPack.DailyTaskState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyTaskState) syncTaskCondList = [] if isAll: ipyDataMgr = IpyGameDataPY.IPY_Data() for index in range(ipyDataMgr.GetDailyTaskCount()): ipyData = ipyDataMgr.GetDailyTaskByIndex(index) taskType = ipyData.GetTaskType() conds = ipyData.GetTaskConds() tcList = [taskType, conds] if tcList in syncTaskCondList: continue syncTaskCondList.append(tcList) elif taskType: syncTaskCondList = [[taskType, conds]] clientPack.TaskList = [] for taskType, conds in syncTaskCondList: task = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCDailyTask) task.TaskType = taskType task.Conds = conds task.CLen = len(task.Conds) task.CurValue = GetDailyTaskValue(curPlayer, taskType, conds) clientPack.TaskList.append(task) clientPack.TaskCount = len(clientPack.TaskList) NetPackCommon.SendFakePack(curPlayer, clientPack) return