| | |
| | |
|
| | | # 古宝领取物品特殊效果列表
|
| | | GubaoEffTtemIypeList = [GubaoEffType_ActivityPlace, GubaoEffType_Arena, GubaoEffType_KillWorldBoss, GubaoEffType_KillBossHome,
|
| | | GubaoEffType_KillCrossPenglaiBoss, GubaoEffType_KillCrossDemonLandBoss, GubaoEffType_KillSealDemonBoss, |
| | | GubaoEffType_KillCrossPenglaiBoss, GubaoEffType_KillCrossDemonLandBoss, GubaoEffType_KillSealDemonBoss,
|
| | | GubaoEffType_CrossRealmPK,
|
| | | ]
|
| | |
|
| | |
| | | def OnPlayerLogin(curPlayer):
|
| | | Sync_GubaoInfo(curPlayer)
|
| | | Sync_GubaoItemEffInfo(curPlayer)
|
| | | Sync_GubaoPieceInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def AddGubaoPiece(curPlayer, gubaoID, addCount, useItemID):
|
| | | curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoPiece % gubaoID)
|
| | | updCount = min(curCount + addCount, ChConfig.Def_UpperLimit_DWord)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoPiece % gubaoID, updCount)
|
| | | Sync_GubaoPieceInfo(curPlayer, [gubaoID])
|
| | | GameWorld.Log("增加古宝碎片: gubaoID=%s,curCount=%s,addCount=%s,updCount=%s,useItemID=%s" |
| | | % (gubaoID, curCount, addCount, updCount, useItemID), curPlayer.GetPlayerID())
|
| | | return curCount, updCount
|
| | |
|
| | | def DelGubaoPiece(curPlayer, gubaoID, delCount, delName):
|
| | | curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoPiece % gubaoID)
|
| | | if curCount < delCount:
|
| | | return False
|
| | | updCount = curCount - delCount
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoPiece % gubaoID, updCount)
|
| | | Sync_GubaoPieceInfo(curPlayer, [gubaoID])
|
| | | GameWorld.Log("扣除古宝碎片: gubaoID=%s,curCount=%s,delCount=%s,updCount=%s,delName=%s" |
| | | % (gubaoID, curCount, delCount, updCount, delName), curPlayer.GetPlayerID())
|
| | | return True
|
| | |
|
| | | def ParseGubaoNeedItem(curPlayer, needItemList):
|
| | | ## 解析古宝功能所需物品,转化为古宝碎片+物品
|
| | | needPieceInfo, realNeedItemList = {}, []
|
| | | for itemID, itemCount in needItemList:
|
| | | itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
|
| | | if not itemData:
|
| | | continue
|
| | | curEff = itemData.GetEffectByIndex(0)
|
| | | effID = curEff.GetEffectID()
|
| | | if effID != ChConfig.Def_Effect_GubaoPiece:
|
| | | realNeedItemList.append([itemID, itemCount])
|
| | | continue
|
| | | gubaoID = curEff.GetEffectValue(0)
|
| | | needPieceInfo[gubaoID] = needPieceInfo.get(gubaoID, 0) + itemCount
|
| | | GameWorld.DebugLog("转化古宝功能所需物品: needItemList=%s,realNeedItemList=%s,needPieceInfo=%s" |
| | | % (needItemList, realNeedItemList, needPieceInfo), curPlayer.GetPlayerID())
|
| | | return needPieceInfo, realNeedItemList
|
| | |
|
| | | #// B2 16 古宝激活 #tagCMGubaoActivate
|
| | | #
|
| | |
| | | GameWorld.DebugLog("古宝已经激活过! gubaoID=%s" % gubaoID, playerID)
|
| | | return
|
| | |
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, needItemCnt)
|
| | | if not hasEnough:
|
| | | GameWorld.DebugLog("激活古宝道具不足! needItemID=%s,needItemCnt=%s" % (needItemID, needItemCnt), playerID)
|
| | | return
|
| | | ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, "Gubao")
|
| | | |
| | | needPieceInfo, realNeedItemList = ParseGubaoNeedItem(curPlayer, [[needItemID, needItemCnt]])
|
| | | if realNeedItemList:
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, needItemCnt)
|
| | | if not hasEnough:
|
| | | GameWorld.DebugLog("激活古宝道具不足! needItemID=%s,needItemCnt=%s" % (needItemID, needItemCnt), playerID)
|
| | | return
|
| | | for gID, needPieceCount in needPieceInfo.items():
|
| | | curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoPiece % gID)
|
| | | if curCount < needPieceCount:
|
| | | GameWorld.DebugLog("激活古宝碎片不足! gubaoID=%s,curCount=%s < needPieceCount=%s" % (gubaoID, curCount, needPieceCount), playerID)
|
| | | return
|
| | | |
| | | for gID, needPieceCount in needPieceInfo.items():
|
| | | DelGubaoPiece(curPlayer, gID, needPieceCount, "Activate")
|
| | | if realNeedItemList:
|
| | | ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, "Gubao")
|
| | | |
| | | lv, star = 1, 1
|
| | | SetGubaoLVInfo(curPlayer, gubaoID, lv, star)
|
| | | GameWorld.Log("古宝激活成功! gubaoID=%s" % gubaoID, playerID)
|
| | |
| | | if not needItemList:
|
| | | return
|
| | |
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
|
| | | if lackItemDict:
|
| | | GameWorld.DebugLog("古宝升星所需物品不足! star=%s,needItemList=%s,lackItemDict=%s" % (star, needItemList, lackItemDict), playerID)
|
| | | return
|
| | | needPieceInfo, realNeedItemList = ParseGubaoNeedItem(curPlayer, needItemList)
|
| | | if realNeedItemList:
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(realNeedItemList, itemPack)
|
| | | if lackItemDict:
|
| | | GameWorld.DebugLog("古宝升星所需物品不足! star=%s,realNeedItemList=%s,lackItemDict=%s" % (star, realNeedItemList, lackItemDict), playerID)
|
| | | return
|
| | | for gID, needPieceCount in needPieceInfo.items():
|
| | | curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoPiece % gID)
|
| | | if curCount < needPieceCount:
|
| | | GameWorld.DebugLog("古宝升星所需古宝碎片不足! gubaoID=%s,curCount=%s < needPieceCount=%s" % (gubaoID, curCount, needPieceCount), playerID)
|
| | | return
|
| | | |
| | | #扣消耗
|
| | | ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
|
| | | |
| | | for gID, needPieceCount in needPieceInfo.items():
|
| | | DelGubaoPiece(curPlayer, gID, needPieceCount, "StarUp")
|
| | | if realNeedItemList:
|
| | | ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
|
| | | |
| | | updStar = star + 1
|
| | | SetGubaoLVInfo(curPlayer, gubaoID, lv, updStar)
|
| | | GameWorld.Log("古宝升星: gubaoID=%s,updStar=%s" % (gubaoID, updStar), playerID)
|
| | |
| | | if not needItemList:
|
| | | return
|
| | |
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
|
| | | if lackItemDict:
|
| | | GameWorld.DebugLog("古宝升级所需物品不足! quality=%s,lv=%s,needItemList=%s,lackItemDict=%s" |
| | | % (quality, lv, needItemList, lackItemDict), playerID)
|
| | | return
|
| | | needPieceInfo, realNeedItemList = ParseGubaoNeedItem(curPlayer, needItemList)
|
| | | if realNeedItemList:
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(realNeedItemList, itemPack)
|
| | | if lackItemDict:
|
| | | GameWorld.DebugLog("古宝升级所需物品不足! quality=%s,lv=%s,realNeedItemList=%s,lackItemDict=%s" |
| | | % (quality, lv, realNeedItemList, lackItemDict), playerID)
|
| | | return
|
| | | for gID, needPieceCount in needPieceInfo.items():
|
| | | curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoPiece % gID)
|
| | | if curCount < needPieceCount:
|
| | | GameWorld.DebugLog("古宝升级所需古宝碎片不足! gubaoID=%s,curCount=%s < needPieceCount=%s" % (gubaoID, curCount, needPieceCount), playerID)
|
| | | return
|
| | | |
| | | #扣消耗
|
| | | ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
|
| | | for gID, needPieceCount in needPieceInfo.items():
|
| | | DelGubaoPiece(curPlayer, gID, needPieceCount, "LVUp")
|
| | | if realNeedItemList:
|
| | | ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
|
| | |
|
| | | updLV = lv + 1
|
| | | SetGubaoLVInfo(curPlayer, gubaoID, updLV, star)
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | | def Sync_GubaoPieceInfo(curPlayer, gubaoIDList=None):
|
| | | if gubaoIDList == None:
|
| | | syncIDList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in range(ipyDataMgr.GetGubaoCount()):
|
| | | ipyData = ipyDataMgr.GetGubaoByIndex(index)
|
| | | syncIDList.append(ipyData.GetGubaoID())
|
| | | else:
|
| | | syncIDList = gubaoIDList
|
| | | |
| | | pieceInfoList = []
|
| | | for gubaoID in syncIDList:
|
| | | curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoPiece % gubaoID)
|
| | | if not curCount and gubaoIDList == None:
|
| | | # 没有指定时只同步有数量的
|
| | | continue
|
| | | gubao = ChPyNetSendPack.tagMCGubaoPiece()
|
| | | gubao.GubaoID = gubaoID
|
| | | gubao.PieceCount = curCount
|
| | | pieceInfoList.append(gubao)
|
| | | |
| | | if not pieceInfoList:
|
| | | return
|
| | | |
| | | clientPack = ChPyNetSendPack.tagMCGubaoPieceInfo()
|
| | | clientPack.PieceInfoList = pieceInfoList
|
| | | clientPack.Count = len(clientPack.PieceInfoList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|