| | |
| | | AtkType_SkillArea, # 技能群攻 3
|
| | | ) = range(1, 1 + 3)
|
| | |
|
| | | # 圣泉过关标记物品ID
|
| | | SQPass_ItemID = 2000000000
|
| | |
|
| | | def GetRoundState(state):
|
| | | ## 获取轮次、状态信息
|
| | | if state < 10 or state == FamilyGCZState_Award:
|
| | |
| | | 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"
|
| | |
| | | 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")
|
| | |
| | | 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
|
| | |
|
| | |
| | | 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)
|
| | |
| | | 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
|
| | |
|