From 7730bc2cd0bb4524e59d979eae556df202bd7fd6 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 08 六月 2021 10:42:56 +0800 Subject: [PATCH] 8971 【主干】【BT2】仙玉和灵石增加支持负数(上线A709通知货币负值,有值才通知) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py | 90 +++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 82 insertions(+), 8 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py index efd3f40..d88f64e 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py @@ -33,6 +33,7 @@ import PlayerFamilyRedPacket import PlayerFairyCeremony import PlayerNewFairyCeremony +import PlayerActGarbageSorting import PlayerUniversalGameRec import GameWorldAverageLv import PlayerFamilyBoss @@ -151,6 +152,43 @@ ## 运营活动类型 return actNum / 10 +def __SaveActWorldLVLimitInfo(actWorldLVLimitInfo): + GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_ActWorldLVLimitInfo) + recDataList = GameWorld.GetUniversalRecMgr().GetTypeList(ShareDefine.Def_UniversalGameRecType_ActWorldLVLimitInfo) + GameWorld.Log("保存运营活动世界等级限制开启信息: %s" % len(actWorldLVLimitInfo)) + for actName, cfgLimitInfoDict in actWorldLVLimitInfo.items(): + for cfgID, limitInfo in cfgLimitInfoDict.items(): + recStartDateStr, recEndDateStr, recLimitWorldLV, recWorldLV = limitInfo + recData = recDataList.AddRec() + recData.SetStrValue1(recStartDateStr) + recData.SetStrValue2(recEndDateStr) + recData.SetStrValue3(actName) + recData.SetValue1(cfgID) + recData.SetValue2(recLimitWorldLV) + recData.SetValue3(recWorldLV) + GameWorld.Log(" actName=%s,cfgID=%s,recStartDateStr=%s,recEndDateStr=%s,recLimitWorldLV=%s,recWorldLV=%s" + % (actName, cfgID, recStartDateStr, recEndDateStr, recLimitWorldLV, recWorldLV)) + return + +def __GetActWorldLVLimitInfo(): + actWorldLVLimitInfo = {} + recDataList = GameWorld.GetUniversalRecMgr().GetTypeList(ShareDefine.Def_UniversalGameRecType_ActWorldLVLimitInfo) + GameWorld.Log("加载运营活动世界等级限制开启信息: %s" % recDataList.Count()) + for index in xrange(recDataList.Count()): + recData = recDataList.At(index) + recStartDateStr = recData.GetStrValue1() + recEndDateStr = recData.GetStrValue2() + actName = recData.GetStrValue3() + cfgID = recData.GetValue1() + recLimitWorldLV = recData.GetValue2() + recWorldLV = recData.GetValue3() + if actName not in actWorldLVLimitInfo: + actWorldLVLimitInfo[actName] = {} + actWorldLVLimitInfo[actName][cfgID] = [recStartDateStr, recEndDateStr, recLimitWorldLV, recWorldLV] + GameWorld.Log(" actName=%s,cfgID=%s,recStartDateStr=%s,recEndDateStr=%s,recLimitWorldLV=%s,recWorldLV=%s" + % (actName, cfgID, recStartDateStr, recEndDateStr, recLimitWorldLV, recWorldLV)) + return actWorldLVLimitInfo + def __GetOperationActionInfo(isRefreshState=True): # @return: isReload, OperationActionInfo @@ -180,10 +218,13 @@ serverGroupID = GameWorld.GetServerGroupID() ipyDataMgr = IpyGameDataPY.IPY_Data() curWeekday = curDateTime.weekday() + 1 # 今天星期几, 1代表星期1 + curWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) + actWorldLVLimitInfoOld = __GetActWorldLVLimitInfo() + actWorldLVLimitInfoNew = {} GameWorld.Log("===== 加载本日运营活动信息: %s, serverGroupID=%s,openServerDay=%s,customMaxServerDay=%s,isMixServer=%s,mixServerDay=%s,maxCustomServerDayMix=%s,reloadSign=%s =====" % (curDateTime, serverGroupID, openServerDay, customMaxServerDay, isMixServer, mixServerDay, maxCustomServerDayMix, reloadSign)) - GameWorld.Log(" 今日周%s" % (curWeekday)) + GameWorld.Log(" 今日周%s, curWorldLV=%s" % (curWeekday, curWorldLV)) for actName in ShareDefine.OperationActionNameList: @@ -338,7 +379,7 @@ advanceMinutes = 0 if not hasattr(ipyData, "GetAdvanceMinutes") else ipyData.GetAdvanceMinutes() # 提前通知时间,分钟,暂只支持按天的 GameWorld.Log(" resetType=%s,startDayDate=%s,endDayDate=%s,startHMStrList=%s,endHMStrList=%s,advanceMinutes=%s" % (resetType, startDayDate, endDayDate, startHMStrList, endHMStrList, advanceMinutes)) - + advanceNoticeDateTime = None startDayDateJudge = startDayDate # 用于判断是否需要处理的起始时间,一般是活动开始时间,如果有提前广播或预告则时间会提前 # 提前预告 @@ -363,6 +404,29 @@ % (activityIpyData.GetCfgID(), cfgID, advanceMinutes, minNotifyStartMinute, startDayDateJudge)) continue + # 在需要处理的时间内附加世界等级开启限制,未达到最低世界等级要求的不开,活动时间从未达到到达到也不开 + limitWorldLV = 0 if not hasattr(ipyData, "GetLimitWorldLV") else ipyData.GetLimitWorldLV() # 限制开启世界等级 + if limitWorldLV: + GameWorld.Log(" limitWorldLV=%s,curWorldLV=%s" % (limitWorldLV, curWorldLV)) + recInfoType = "" + worldLVLimitInfo = actWorldLVLimitInfoOld.get(actName, {}) + # 注: 该逻辑是在活动时间内的额外处理,所以需要判断此逻辑的前提理论上都在活动时间内,故只要有记录则以当时的记录为准 + if cfgID in worldLVLimitInfo: + recInfoType = "Old" + recStartDateStr, recEndDateStr, recLimitWorldLV, recWorldLV = worldLVLimitInfo[cfgID] + else: + recInfoType = "New" + recStartDateStr, recEndDateStr, recLimitWorldLV, recWorldLV = startDateStr, endDateStr, limitWorldLV, curWorldLV + + if actName not in actWorldLVLimitInfoNew: + actWorldLVLimitInfoNew[actName] = {} + actWorldLVLimitInfoNew[actName][cfgID] = [recStartDateStr, recEndDateStr, recLimitWorldLV, recWorldLV] + + if recLimitWorldLV > recWorldLV: + GameWorld.Log(" 活动时间内,但服务器世界等级未达到开启活动世界等级,不处理!recLimitWorldLV=%s > recWorldLV=%s %s" + % (recLimitWorldLV, recWorldLV, recInfoType)) + continue + startList = [] # [startDateTime, ...] endList = [] # [endDateTime, ...] startNotifyDict = {} # {notifyDateTime:notifyInfo, ...} @@ -476,6 +540,7 @@ mapServerOperationActionDict[actName] = activityInfoDict OperationActionInfo = IpyGameDataPY.SetConfigEx(key, [reloadSign, operationTodayActionDict, mapServerOperationActionDict]) + __SaveActWorldLVLimitInfo(actWorldLVLimitInfoNew) GameWorld.Log("本日运营活动信息加载完毕!reloadSign=%s,isRefreshState=%s" % (reloadSign, isRefreshState)) GameWorld.Log(" operationTodayActionDict=%s" % operationTodayActionDict) @@ -726,7 +791,7 @@ PlayerControl.WorldNotify(0, notifyKey, paramList) dictName = ChConfig.Def_WorldKey_OperationActionState % actName - if actName in ShareDefine.MultiActNumOperationActNameList: + if actName in ShareDefine.MultiActNumOperationActNameList: dictName += "_%s" % actNum preState = gameWorld.GetDictByKey(dictName) if not isReload and preState == state: @@ -774,10 +839,16 @@ #限时抢购重置购买次数 本次活动每场不能重复 #dayIndex = sendMapServerMsgDict.get(ShareDefine.ActKey_DayIndex, 0) PlayerStore.ResetFlashSaleBuyCnt(ipyData) + elif actName == ShareDefine.OperationActionName_GarbageSorting: + PlayerActGarbageSorting.OnActStart(actNum) + else: + if actName == ShareDefine.OperationActionName_GarbageSorting: + PlayerActGarbageSorting.OnActEnd(actNum) + else: GameWorld.Log(" dbActID不变: dbActID=%s,curActID=%s" % (dbActID, curActID)) - if state and actName in ShareDefine.NeedWorldLVOperationActNameList: + if ipyData and actName in ShareDefine.NeedWorldLVOperationActNameList: actWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(dbOperationActWorldLVKey) sendMapServerMsgDict[ShareDefine.ActKey_WorldLV] = actWorldLV GameWorld.Log(" 活动世界等级: actWorldLV=%s" % (actWorldLV)) @@ -786,13 +857,16 @@ if isReload and ipyData: Sync_OperationAction_ExpRate(ipyData) - elif actName == ShareDefine.OperationActionName_CostRebate: - if isReload and ipyData: - pass elif actName == ShareDefine.OperationActionName_BossReborn: if isReload and ipyData: GameWorldBoss.SetBossRebornNeedPoint(True) - + + elif actName == ShareDefine.OperationActionName_HorsePetFeast: + if preState != state and state: + relatedID = "%s|%s" % (actName, actNum) + GameWorld.Log(" 骑宠盛宴开始: relatedID=%s" % (relatedID)) + GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ActionBossRebornSign % relatedID, int(time.time())) + elif actName == ShareDefine.OperationActionName_FairyCeremony: if isReload and ipyData: PlayerFairyCeremony.Sync_OperationAction_FairyCeremony(ipyData) -- Gitblit v1.8.0