From 34fec42a90f2b3f726afa3e104e3e3112d9dc819 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 26 五月 2021 11:41:12 +0800 Subject: [PATCH] 8921 【主干】【BT2】【后端】H.活动-节日活动-垃圾分类(1.删除引导任务;2.环保抽奖改为独立的活动仙匣秘境;3.活动结束销毁剩余垃圾物品、重置祝福值;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py | 574 +-------------------------------------------------------- 1 files changed, 11 insertions(+), 563 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py index 177a4ce..9fbfda5 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py @@ -26,9 +26,6 @@ import ChConfig import ItemCommon import PlayerBillboard -import QuestCommon - -Def_SuperLibType = 9 # 大奖库类型固定为9 def OnPlayerLogin(curPlayer): @@ -39,7 +36,6 @@ # 活动中同步活动信息 if actInfo.get(ShareDefine.ActKey_State): Sync_GarbageSortingActionInfo(curPlayer, actNum) - Sync_GarbageSortingPlayerInfo(curPlayer, actNum) Sync_GarbageTaskInfo(curPlayer, actNum) return @@ -74,64 +70,20 @@ GameWorld.DebugLog("垃圾分类重置! actNum=%s,actID=%s,playerActID=%s,state=%s,cfgID=%s" % (actNum, actID, playerActID, state, cfgID), playerID) - guideTaskID = IpyGameDataPY.GetFuncCfg("GarbageSorting", 1) - if guideTaskID: - if state: - curMission = QuestCommon.AddNewMission(curPlayer, guideTaskID) - if curMission: - QuestCommon.SetPlayerMissionState(curPlayer, curMission, 1) - else: - QuestCommon.DeleteMission(curPlayer, guideTaskID) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageSortingID % actNum, actID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageSortingWorldLV % actNum, actWorldLV) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageGuideState % actNum, 0) for taskID in ChConfig.GarbageTaskList: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageTaskValue % (actNum, taskID), 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageTaskFinishCount % (actNum, taskID), 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, 0) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValueHis % actNum, 0) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum, 0) - ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID) if cfgID else None - templateID = ipyData.GetTemplateID() if ipyData else 0 - awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGarbageAward", templateID) if templateID else [] - if awardIpyDataList: - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - libItemCount = awardIpyData.GetAwardItemCount() - for num in xrange(libItemCount): - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num), 0) - - itemAwardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() - for itemID in itemAwardTimesTotalInfo.keys(): - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, itemID), 0) - - # 活动中,生成新奖池 - if state: - __RefreshGarbageAwardPool(curPlayer, actInfo, awardIpyDataList) - + # 清除垃圾背包物品、重置环保值 + ItemControler.ClearPack(curPlayer, ShareDefine.rptGarbage) + PlayerControl.SetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_Environment, 0) + Sync_GarbageSortingActionInfo(curPlayer, actNum) - Sync_GarbageSortingPlayerInfo(curPlayer, actNum) Sync_GarbageTaskInfo(curPlayer, actNum) return True - -def OnFinishTask(curPlayer, taskID): - guideTaskID = IpyGameDataPY.GetFuncCfg("GarbageSorting", 1) - if not guideTaskID: - return - - if taskID != guideTaskID: - return - - for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_GarbageSorting, {}).values(): - if not actInfo.get(ShareDefine.ActKey_State): - continue - actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageGuideState % actNum, 1) - Sync_GarbageSortingPlayerInfo(curPlayer, actNum) - - return def AddActGarbageTaskProgress(curPlayer, taskID, addValue=1, valueInfo=None): ## 增加垃圾收集任务进度 @@ -281,17 +233,13 @@ if not addEnvValueTotal: return - curEnvValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValue % actNum) + addEnvValueTotal - hisEnvValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValueHis % actNum) + addEnvValueTotal + PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_Environment, addEnvValueTotal) + actEnvValueTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValue % actNum) + addEnvValueTotal + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, actEnvValueTotal) + GameWorld.DebugLog(" addEnvValueTotal=%s,actEnvValueTotal=%s,curEnvValue=%s" + % (addEnvValueTotal, actEnvValueTotal, PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_Environment)), playerID) - GameWorld.DebugLog(" addEnvValueTotal=%s,curEnvValue=%s,hisEnvValue=%s" % (addEnvValueTotal, curEnvValue, hisEnvValue), playerID) - - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, curEnvValue) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValueHis % actNum, hisEnvValue) - - PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Environment, hisEnvValue) - - Sync_GarbageSortingPlayerInfo(curPlayer, actNum) + PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Environment, actEnvValueTotal) return @@ -308,411 +256,6 @@ actNum = clientData.ActNum taskID = clientData.GarbageTaskID __DoCheckFinishGarbageTask(curPlayer, actNum, taskID) - return - - -#// AA 16 垃圾分类活动选择大奖 #tagCMActGarbageChooseSuperItem -# -#struct tagCMActGarbageChooseSuperItem -#{ -# tagHead Head; -# BYTE ActNum; //活动编号 -# BYTE SuperItemCount; //选择物品数量 -# DWORD SuperItemIDList[SuperItemCount]; //选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID; -#}; -def OnActGarbageChooseSuperItem(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - actNum = clientData.ActNum - superItemIDList = clientData.SuperItemIDList - - GameWorld.DebugLog("垃圾分类活动选择大奖: actNum=%s,superItemIDList=%s" % (actNum, superItemIDList)) - - actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GarbageSorting, actNum) - if not actInfo.get(ShareDefine.ActKey_State): - return - - cfgID = actInfo.get(ShareDefine.ActKey_CfgID) - ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID) - if not ipyData: - return - - templateID = ipyData.GetTemplateID() - if not templateID: - return - - actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) - awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGarbageAward", templateID) - if not awardIpyDataList: - return - - superAwardIpyData = None - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - if libType == Def_SuperLibType: - superAwardIpyData = awardIpyData - break - - if not superAwardIpyData: - GameWorld.ErrLog("没有配置垃圾分类活动大奖库! cfgID=%s,actNum=%s,templateID=%s" % (cfgID, actNum, templateID)) - return - - superLibItemCount = superAwardIpyData.GetAwardItemCount() - if len(superItemIDList) != superLibItemCount: - GameWorld.ErrLog("垃圾分类活动选择大奖个数错误! cfgID=%s,actNum=%s,templateID=%s,superLibItemCount=%s,reqSuperItemIDList=%s" - % (cfgID, actNum, templateID, superLibItemCount, superItemIDList)) - return - - posNumItemIDList = [] # 已抽中的大奖物品ID - libType = superAwardIpyData.GetAwardLibType() - for num in xrange(superLibItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - if not itemInfoValue: - break - itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 - if posNum and itemID not in superItemIDList: - GameWorld.ErrLog("垃圾分类活动选择大奖ID错误! 已抽中的大奖ID为必选ID! posNum=%s, itemID=%s not in superItemIDList=%s" - % (posNum, itemID, superItemIDList)) - return - - if posNum: - posNumItemIDList.append(itemID) - - GameWorld.DebugLog(" 已抽中的大奖ID! %s" % posNumItemIDList) - - layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum) - layerNum = layerInfoValue % 100 - - libItemDict = __GetGarbageAwardLibItem(superAwardIpyData.GetLibItemInfo(), actWorldLV) - layerLimitInfo = superAwardIpyData.GetItemLayerLimitInfo() - awardTimesTotalInfo = superAwardIpyData.GetItemAwardTimesTotalInfo() - - replaceSuperItemIDList = [] # 需要替换的大奖ID列表 - - for selectItemID in superItemIDList: - if selectItemID in posNumItemIDList: - GameWorld.DebugLog(" 已抽中的大奖ID,不验证!selectItemID=%s" % (selectItemID)) - continue - - if selectItemID not in libItemDict: - GameWorld.ErrLog("垃圾分类活动选择大奖ID错误! 大奖ID不存在大奖库中! selectItemID=%s not in libItemDict=%s" - % (selectItemID, libItemDict)) - return - - layerLimit = layerLimitInfo.get(selectItemID, 0) - if layerLimit > layerNum: - GameWorld.ErrLog("垃圾分类活动选择大奖ID错误! 大奖ID该层不能选择! selectItemID=%s layerLimit(%s) > layerNum(%s)" - % (selectItemID, layerLimit, layerNum)) - return - - totalTimesLimit = awardTimesTotalInfo.get(selectItemID, 0) - if totalTimesLimit: - totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, selectItemID)) - if totalTimesNow >= totalTimesLimit: - GameWorld.ErrLog("垃圾分类活动选择大奖ID错误! 大奖ID已达到最大奖励次数,不能选择! selectItemID=%s totalTimesNow(%s) >= totalTimesLimit(%s)" - % (selectItemID, totalTimesNow, totalTimesLimit)) - return - - replaceSuperItemIDList.append(selectItemID) - - GameWorld.DebugLog(" 验证通过,可替换大奖ID! replaceSuperItemIDList=%s" % replaceSuperItemIDList) - if not replaceSuperItemIDList: - return - - for num in xrange(superLibItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 - if itemID in posNumItemIDList: - GameWorld.DebugLog(" 已抽中的大奖ID,不替换!itemID=%s" % (itemID)) - continue - replaceSuperItemID = replaceSuperItemIDList.pop(0) - updItemInfoValue = replaceSuperItemID * 100 + posNum - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num), updItemInfoValue) - GameWorld.DebugLog(" 替换大奖ID选择!num=%s,itemID=%s,posNum=%s,replaceSuperItemID=%s,updItemInfoValue=%s" - % (num, itemID, posNum, replaceSuperItemID, updItemInfoValue)) - - if not replaceSuperItemIDList: - break - - Sync_GarbageSortingActionInfo(curPlayer, actNum) - return - -#// AA 18 垃圾分类活动奖池刷新 #tagCMGarbageAwardPoolRefresh -# -#struct tagCMGarbageAwardPoolRefresh -#{ -# tagHead Head; -# BYTE ActNum; //活动编号 -#}; -def OnActGarbageAwardPoolRefresh(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - actNum = clientData.ActNum - - GameWorld.DebugLog("垃圾分类活动奖池刷新: actNum=%s" % (actNum)) - - actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GarbageSorting, actNum) - if not actInfo.get(ShareDefine.ActKey_State): - return - - cfgID = actInfo.get(ShareDefine.ActKey_CfgID) - ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID) - if not ipyData: - return - - templateID = ipyData.GetTemplateID() - if not templateID: - return - - awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGarbageAward", templateID) - if not awardIpyDataList: - return - - if not __RefreshGarbageAwardPool(curPlayer, actInfo, awardIpyDataList): - return - - Sync_GarbageSortingActionInfo(curPlayer, actNum) - return - -def __RefreshGarbageAwardPool(curPlayer, actInfo, awardIpyDataList): - ## 刷新垃圾收集环保奖池物品 - - cfgID = actInfo.get(ShareDefine.ActKey_CfgID) - actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) - actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) - - layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum) - layerNum = layerInfoValue % 100 - - GameWorld.DebugLog("刷新垃圾收集环保奖池物品: cfgID=%s,actNum=%s,actWorldLV=%s,layerNum=%s" % (cfgID, actNum, actWorldLV, layerNum)) - - if layerNum: - # 非0层,验证大奖是否已抽完,抽完才可以刷新奖池层 - superLib = False - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - if libType != Def_SuperLibType: - continue - superLib = True - libItemCount = awardIpyData.GetAwardItemCount() - for num in xrange(libItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 - if itemID and not posNum: - GameWorld.ErrLog("有大奖未抽中!无法刷新环保奖池! cfgID=%s,actNum=%s,layerNum=%s,num=%s,itemID=%s,posNum=%s" - % (cfgID, actNum, layerNum, num, itemID, posNum)) - return - break - if not superLib: - GameWorld.ErrLog("奖池配置没有大奖库!无法刷新环保奖池! cfgID=%s,actNum=%s,layerNum=%s,superLib=%s" % (cfgID, actNum, layerNum, superLib)) - return - - layerNum += 1 # 可刷新奖池,默认+1层 - GameWorld.DebugLog(" 可刷新奖池!下一层: layerNum=%s" % (layerNum)) - - refreshLibDict = {} - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - libItemCount = awardIpyData.GetAwardItemCount() - libItemDict = __GetGarbageAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV) - layerLimitInfo = awardIpyData.GetItemLayerLimitInfo() - awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() - - canRandItemDict = {} - for itemID, libItemInfo in libItemDict.items(): - _, weight = libItemInfo - - layerLimit = layerLimitInfo.get(itemID, 0) - if layerLimit > layerNum: - GameWorld.DebugLog(" 该层不能选择该奖品! itemID=%s layerLimit(%s) > layerNum(%s)" - % (itemID, layerLimit, layerNum)) - continue - - totalTimesLimit = awardTimesTotalInfo.get(itemID, 0) - if totalTimesLimit: - totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, itemID)) - if totalTimesNow >= totalTimesLimit: - GameWorld.DebugLog(" 奖品ID已达到最大奖励次数,不能选择! itemID=%s totalTimesNow(%s) >= totalTimesLimit(%s)" - % (itemID, totalTimesNow, totalTimesLimit)) - continue - - canRandItemDict[itemID] = [weight, itemID] - - if libItemCount > len(canRandItemDict): - GameWorld.ErrLog("奖品库配置可选择奖品个数不够!无法刷新环保奖池! cfgID=%s,actNum=%s,libType=%s,layerNum=%s,libItemCount=%s > %s canRandItemDict(%s)" - % (cfgID, actNum, libType, layerNum, libItemCount, len(canRandItemDict), canRandItemDict)) - return - - refreshLibDict[libType] = [libItemCount, canRandItemDict] - - for libType, refreshInfo in refreshLibDict.items(): - libItemCount, canRandItemDict = refreshInfo - GameWorld.DebugLog(" 随机奖池物品: libType=%s,libItemCount=%s,canRandItemDict=%s, %s" % (libType, libItemCount, len(canRandItemDict), canRandItemDict)) - - if libType == Def_SuperLibType: - # 大奖直接重置,系统不生成,由玩家手动选择 - for num in xrange(libItemCount): - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num), 0) - continue - - for num in xrange(libItemCount): - weightList = canRandItemDict.values() - randItemID = GameWorld.GetResultByWeightList(weightList) - canRandItemDict.pop(randItemID, None) - - posNum = 0 - itemInfoValue = randItemID * 100 + posNum - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num), itemInfoValue) - GameWorld.DebugLog(" 随机生成奖品! libType=%s,num=%s,randItemID=%s" % (libType, num, randItemID)) - - playCount = 0 # 每层重置抽奖次数 - layerInfoValue = playCount * 100 + layerNum - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum, layerInfoValue) - GameWorld.DebugLog(" 刷新完成! playCount=%s,layerNum=%s,layerInfoValue=%s" % (playCount, layerNum, layerInfoValue)) - return True - -#// AA 17 垃圾分类活动抽奖 #tagCMActGarbageLottery -# -#struct tagCMActGarbageLottery -#{ -# tagHead Head; -# BYTE ActNum; //活动编号 -# BYTE PosNum; //玩家点击的奖励位置编号,从1开始 -#}; -def OnActGarbageLottery(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - actNum = clientData.ActNum - reqPosNum = clientData.PosNum - - GameWorld.DebugLog("垃圾分类活动抽奖: actNum=%s,reqPosNum=%s" % (actNum, reqPosNum)) - - if reqPosNum <= 0: - return - - actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GarbageSorting, actNum) - if not actInfo.get(ShareDefine.ActKey_State): - return - - cfgID = actInfo.get(ShareDefine.ActKey_CfgID) - ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID) - if not ipyData: - return - - templateID = ipyData.GetTemplateID() - if not templateID: - return - - actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) - awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGarbageAward", templateID) - if not awardIpyDataList: - return - - costEnvValue = IpyGameDataPY.GetFuncCfg("GarbageSorting", 3) - curEnvValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValue % actNum) - if curEnvValue < costEnvValue: - GameWorld.DebugLog(" 环保值不足,无法抽奖! curEnvValue(%s) < costEnvValue(%s)" % (curEnvValue, costEnvValue)) - return - - layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum) - playCount, layerNum = layerInfoValue / 100, layerInfoValue % 100 - - posNumMax = 0 - randLibItemDict = {} - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - libItemCount = awardIpyData.GetAwardItemCount() - unlockLimitTimes = awardIpyData.GetUnlockAwardLimitTimes() - libWeight = awardIpyData.GetAwardLibWeight() - posNumMax += libItemCount - - if libType == Def_SuperLibType: - for num in xrange(libItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - if not itemInfoValue: - GameWorld.DebugLog(" 未选择大奖!无法抽奖! libType=%s,num=%s,itemInfoValue=%s" % (libType, num, itemInfoValue)) - return - - if unlockLimitTimes and playCount < unlockLimitTimes: - GameWorld.DebugLog(" 该库当前抽奖次数无法解锁! libType=%s,playCount(%s) < unlockLimitTimes(%s)" % (libType, playCount, unlockLimitTimes)) - continue - - awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() - libItemDict = __GetGarbageAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV) - canRandItemList = [] - for num in xrange(libItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - if not itemInfoValue: - return - - itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 - if itemID not in libItemDict: - continue - - if posNum: - GameWorld.DebugLog(" 该奖品已被抽中! libType=%s,itemID=%s,posNum=%s" % (libType, itemID, posNum)) - if posNum == reqPosNum: - GameWorld.ErrLog(" 该位置已经有抽奖结果,无法重复选择抽奖! libType=%s,num=%s,itemInfoValue=%s,posNum=%s" - % (libType, num, itemInfoValue, posNum)) - return - continue - - itemCount, weight = libItemDict[itemID] - isAddTimes = (itemID in awardTimesTotalInfo) - canRandItemList.append([weight, itemID, itemCount, num, isAddTimes]) - - if canRandItemList: - randLibItemDict[libType] = [libWeight, libType, canRandItemList] - GameWorld.DebugLog(" 该库有机会抽到物品: libType=%s,libWeight=%s,canRandItemList=%s" % (libType, libWeight, canRandItemList)) - else: - GameWorld.DebugLog(" 该库物品已全被抽完: libType=%s,libWeight=%s,canRandItemList=%s" % (libType, libWeight, canRandItemList)) - - if reqPosNum > posNumMax: - GameWorld.DebugLog(" 请求位置异常,无法抽奖! reqPosNum(%s) > posNumMax(%s)" % (reqPosNum, posNumMax)) - return - - if not randLibItemDict: - GameWorld.DebugLog(" 没有可抽奖的奖品了,无法抽奖!") - return - - randLibInfo = GameWorld.GetResultByWeightList(randLibItemDict.values()) - if not randLibInfo: - return - libType, canRandItemList = randLibInfo - randItemInfo = GameWorld.GetResultByWeightList(canRandItemList) - if not randItemInfo: - return - itemID, itemCount, num, isAddTimes = randItemInfo - - # 扣除抽奖消耗环保值 - updEnvValue = curEnvValue - costEnvValue - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, updEnvValue) - - # 更新已抽中值 - updItemInfoValue = itemID * 100 + reqPosNum - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num), updItemInfoValue) - - totalTimesNow = 0 - if isAddTimes: - totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, itemID)) + 1 - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, itemID), totalTimesNow) - - playCount += 1 - layerInfoValue = playCount * 100 + layerNum - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum, layerInfoValue) - - GameWorld.DebugLog(" 抽中物品: layerNum=%s,libType=%s,itemID=%s,itemCount=%s,num=%s,reqPosNum=%s,updItemInfoValue=%s,totalTimesNow=%s,updEnvValue=%s,playCount=%s(%s)" - % (layerNum, libType, itemID, itemCount, num, reqPosNum, updItemInfoValue, totalTimesNow, updEnvValue, playCount, layerInfoValue)) - - # 给物品 - isAuctionItem = 0 - itemList = [[itemID, itemCount, isAuctionItem]] - ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["ActGarbageLottery", False, {}]) - - # 广播 - if libType == Def_SuperLibType: - PlayerControl.WorldNotify(0, "GarbageSorting%s" % actNum, [curPlayer.GetPlayerName(), itemID, itemCount]) - - # 通知 - awardItemInfo = [libType, itemID, itemCount, reqPosNum, totalTimesNow] - Sync_GarbageSortingPlayerInfo(curPlayer, actNum, awardItemInfo) return def Sync_GarbageTaskInfo(curPlayer, actNum, taskID=0, awardItemList=None): @@ -739,39 +282,6 @@ NetPackCommon.SendFakePack(curPlayer, clientPack) return -def Sync_GarbageSortingPlayerInfo(curPlayer, actNum, awardItemInfo=None): - ## 通知玩家数据信息 - # @param awardItemInfo: 抽奖物品信息 [libType, itemID, itemCount, posNum, totalTimesNow] - - actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GarbageSorting, actNum) - if not actInfo.get(ShareDefine.ActKey_State): - return - - cfgID = actInfo.get(ShareDefine.ActKey_CfgID) - ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID) - if not ipyData: - return - - guideTaskID = IpyGameDataPY.GetFuncCfg("GarbageSorting", 1) - - clientPack = ChPyNetSendPack.tagMCActGarbagePlayerInfo() - clientPack.ActNum = actNum - clientPack.GuideTaskFinish = 1 if not guideTaskID else curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageGuideState % actNum) - clientPack.EnvironmentValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValue % actNum) - clientPack.EnvironmentValueHis = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValueHis % actNum) - - if awardItemInfo: - libType, itemID, itemCount, posNum, totalTimesNow = awardItemInfo - awardItem = ChPyNetSendPack.tagMCActGarbageAwardItemResult() - awardItem.ItemLibType = libType - awardItem.ItemID = itemID - awardItem.ItemCount = itemCount - awardItem.PosNum = posNum - awardItem.TotalTimesNow = totalTimesNow - clientPack.AwardItemResult = awardItem - NetPackCommon.SendFakePack(curPlayer, clientPack) - return - def Sync_GarbageSortingActionInfo(curPlayer, actNum): ## 通知活动信息 @@ -784,75 +294,13 @@ if not ipyData: return - templateID = ipyData.GetTemplateID() - if not templateID: - return - - actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1 - - layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum) - layerNum = layerInfoValue % 100 - clientPack = ChPyNetSendPack.tagMCActGarbageSortingInfo() clientPack.ActNum = actNum clientPack.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay) clientPack.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay) clientPack.LimitLV = ipyData.GetLVLimit() - clientPack.LayerNum = layerNum - clientPack.AwardItemList = [] # 奖池物品列表 - awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGarbageAward", templateID) - if awardIpyDataList: - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - libItemCount = awardIpyData.GetAwardItemCount() - libItemDict = __GetGarbageAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV) - layerLimitInfo = awardIpyData.GetItemLayerLimitInfo() - awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() - - # 奖池物品列表,已生成的,包含已选择的大奖物品 - for num in xrange(libItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - if not itemInfoValue: - break - itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 - if itemID not in libItemDict: - continue - libItemInfo = libItemDict[itemID] - - awardItem = ChPyNetSendPack.tagMCActGarbageAwardItem() - awardItem.ItemLibType = libType - awardItem.ItemID = itemID - awardItem.ItemCount = libItemInfo[0] - awardItem.PosNum = posNum - awardItem.TotalTimesMax = awardTimesTotalInfo.get(itemID, 0) - awardItem.TotalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, itemID)) - awardItem.LayerLimit = layerLimitInfo.get(itemID, 0) - clientPack.AwardItemList.append(awardItem) - - # 大奖物品待选择库,全部同步 - if libType == Def_SuperLibType: - for itemID, libItemInfo in libItemDict.items(): - awardItem = ChPyNetSendPack.tagMCActGarbageAwardItem() - awardItem.ItemLibType = libType - awardItem.ItemID = itemID - awardItem.ItemCount = libItemInfo[0] - awardItem.TotalTimesMax = awardTimesTotalInfo.get(itemID, 0) - awardItem.LayerLimit = layerLimitInfo.get(itemID, 0) - clientPack.SuperItemList.append(awardItem) - clientPack.SuperItemCount = len(clientPack.SuperItemList) - clientPack.SuperItemCanChooseCount = libItemCount - - clientPack.AwardItemCount = len(clientPack.AwardItemList) + clientPack.ResetType = ipyData.GetResetType() NetPackCommon.SendFakePack(curPlayer, clientPack) return - -def __GetGarbageAwardLibItem(libItemInfo, actWorldLV): - ## 获取奖励库物品信息字典,支持按世界等级范围配置的格式 - keyList = libItemInfo.keys() - if not keyList: - return {} - if isinstance(keyList[0], tuple) and len(keyList[0]) == 2: - return GameWorld.GetDictValueByRangeKey(libItemInfo, actWorldLV, {}) - return libItemInfo -- Gitblit v1.8.0