From 59557612e1f6c0237742f681748920b17f5e0e91 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 11 四月 2025 16:31:10 +0800 Subject: [PATCH] 10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(增加圣泉抽奖;积分总榜增加轮次积分明细记录;优化活动相关榜单排序规则,支持战斗阶段每分钟统计最新积分情况;优化轮次结算汇总信息;轮次支持升降级;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py | 144 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 144 insertions(+), 0 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py index 4c3d753..c060da6 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py @@ -45,6 +45,9 @@ AtkType_SkillArea, # 技能群攻 3 ) = range(1, 1 + 3) +# 圣泉过关标记物品ID +SQPass_ItemID = 2000000000 + def GetRoundState(state): ## 获取轮次、状态信息 if state < 10 or state == FamilyGCZState_Award: @@ -145,6 +148,7 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZFamilyID, familyID) if state: Sync_FamilyGCZPlayerInfo(curPlayer) + Sync_FamilyGCZSQInfo(curPlayer) return GameWorld.DebugLog("仙盟攻城战活动玩家重置! zoneID=%s,actID=%s,playerZoneID=%s,playerActID=%s" @@ -175,6 +179,17 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZEnergyTime, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZAwardState, 0) + # 重置圣泉 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQLayer, 0) + gridCntMax = 0 + ipyDataMgr = IpyGameDataPY.IPY_Data() + for index in range(ipyDataMgr.GetCrossActFamilyGCZSQCount()): + ipyData = ipyDataMgr.GetCrossActFamilyGCZSQByIndex(index) + gridCntMax = max(0, ipyData.GetGridCnt()) + for gridNum in range(1, gridCntMax + 1): + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQGridItemID % gridNum, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQGridItemCnt % gridNum, 0) + # # 回收道具 # for itemID in IpyGameDataPY.GetFuncEvalCfg("LianqiUseItem", 5): # ItemControler.RecycleItem(curPlayer, itemID, "ActLianqiRecycleItem") @@ -182,7 +197,9 @@ if state: maxEnergy = IpyGameDataPY.GetFuncCfg("FamilyGCZEnergy", 1) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZEnergy, maxEnergy) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQLayer, 1) Sync_FamilyGCZPlayerInfo(curPlayer) + Sync_FamilyGCZSQInfo(curPlayer) return True @@ -514,6 +531,111 @@ ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["FamilyGCZAward", True, drDict]) return + +#// C1 27 仙盟攻城战圣泉抽奖 #tagCMFamilyGCZSQ +# +#struct tagCMFamilyGCZSQ +#{ +# tagHead Head; +# BYTE GridNum; // 选中格子编号,1~n +#}; +def OnFamilyGCZSQ(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + gridNum = clientData.GridNum + playerID = curPlayer.GetPlayerID() + + layerNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZSQLayer) + if not layerNum: + layerNum = 1 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQLayer, 1) + + ipyData = IpyGameDataPY.GetIpyGameData("CrossActFamilyGCZSQ", layerNum) + if not ipyData: + return + gridCnt = ipyData.GetGridCnt() + if gridNum < 1 or gridNum > gridCnt: + GameWorld.DebugLog("圣泉抽奖不存在该格子编号! layerNum=%s, gridNum=%s" % (layerNum, gridNum), playerID) + return + + if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZSQGridItemID % gridNum): + Sync_FamilyGCZSQInfo(curPlayer, gridNum) + return + + costItemID = ipyData.GetCostItemID() + costItemCount = ipyData.GetCostItemCnt() + if not costItemID or not costItemCount: + return + + itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) + hasEnough, itemIndexList = ItemCommon.GetItem_FromPack_ByID(costItemID, itemPack, costItemCount) + if not hasEnough: + GameWorld.DebugLog("圣泉抽奖道具不足! costItemID=%s, costItemCount=%s" % (costItemID, costItemCount), playerID) + return + + emptyCnt = 0 + for gNum in range(1, gridCnt + 1): + if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZSQGridItemID % gNum): + continue + emptyCnt += 1 + if emptyCnt > 1: + break + + if emptyCnt > 1: + isPass = GameWorld.CanHappen(ipyData.GetPassRate()) + else: + isPass = 1 + GameWorld.DebugLog("仙盟攻城战圣泉抽奖最后一格必过关! layerNum=%s" % layerNum, playerID) + + if not isPass: + randItem = GameWorld.GetResultByWeightList(ipyData.GetGridWeightItemList()) + GameWorld.DebugLog("仙盟攻城战圣泉抽奖未过关! layerNum=%s,gridNum=%s,randItem=%s" % (layerNum, gridNum, randItem), playerID) + if not randItem: + return + itemID, itemCount = randItem + if not itemID or not itemCount: + return + + ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, costItemCount, True, "FamilyGCZSQ") + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQGridItemID % gridNum, itemID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQGridItemCnt % gridNum, itemCount) + ItemControler.GivePlayerItemOrMail(curPlayer, [[itemID, itemCount]], event=["FamilyGCZSQGrid", False, {}]) + Sync_FamilyGCZSQInfo(curPlayer, gridNum) + return + + # 过关 + ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, costItemCount, True, "FamilyGCZSQ") + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQGridItemID % gridNum, SQPass_ItemID) + passAwardItemList = ipyData.GetLayerAwardItemList() # 过关奖励 + ItemControler.GivePlayerItemOrMail(curPlayer, passAwardItemList, event=["FamilyGCZSQPass", False, {}]) + Sync_FamilyGCZSQInfo(curPlayer, gridNum) + GameWorld.DebugLog("仙盟攻城战圣泉抽奖过关! layerNum=%s,gridNum=%s,passAwardItemList=%s" + % (layerNum, gridNum, passAwardItemList), playerID) + + #重置格子记录 + for gridNum in range(1, ipyData.GetGridCnt() + 1): + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQGridItemID % gridNum, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQGridItemCnt % gridNum, 0) + + nextLayerNum = layerNum + 1 + #下一层 + if IpyGameDataPY.GetIpyGameDataNotLog("CrossActFamilyGCZSQ", nextLayerNum): + GameWorld.DebugLog(" 下一层! nextLayerNum=%s" % (nextLayerNum), playerID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQLayer, nextLayerNum) + Sync_FamilyGCZSQInfo(curPlayer) + return + + #通关,从头开始 + weightItemList = ipyData.GetLayerWeightItemList() # 通关随机奖励 + awardItemEx = GameWorld.GetResultByWeightList(weightItemList) + if awardItemEx and len(awardItemEx) == 2: + itemID, itemCount = awardItemEx + ItemControler.GivePlayerItemOrMail(curPlayer, [[itemID, itemCount]], event=["FamilyGCZSQPassAll", False, {}]) + + GameWorld.DebugLog(" 没有下一层了,从头开始! awardItemEx=%s" % str(awardItemEx), playerID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyGCZSQLayer, 1) + Sync_FamilyGCZSQInfo(curPlayer) + return + def Sync_FamilyGCZPlayerInfo(curPlayer): clientPack = ChPyNetSendPack.tagMCFamilyGCZPlayerInfo() clientPack.ContributionCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZContributionCnt) @@ -523,3 +645,25 @@ NetPackCommon.SendFakePack(curPlayer, clientPack) return +def Sync_FamilyGCZSQInfo(curPlayer, gridNum=0): + layerNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZSQLayer) + ipyData = IpyGameDataPY.GetIpyGameData("CrossActFamilyGCZSQ", layerNum) + if not ipyData: + return + clientPack = ChPyNetSendPack.tagMCFamilyGCZSQInfo() + clientPack.SQLayer = layerNum + if gridNum: + syncGridList = [gridNum] + else: + syncGridList = range(1, ipyData.GetGridCnt() + 1) + clientPack.SQGridList = [] + for gNum in syncGridList: + grid = ChPyNetSendPack.tagMCFamilyGCZSQGrid() + grid.GridNum = gNum + grid.ItemID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZSQGridItemID % gNum) + grid.ItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZSQGridItemCnt % gNum) + clientPack.SQGridList.append(grid) + clientPack.SQGirdCnt = len(clientPack.SQGridList) + NetPackCommon.SendFakePack(curPlayer, clientPack) + return + -- Gitblit v1.8.0