| | |
| | | Sync_GubaoInfo(curPlayer)
|
| | | Sync_GubaoItemEffInfo(curPlayer)
|
| | | Sync_GubaoPieceInfo(curPlayer)
|
| | | Sync_GubaoResonanceInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def AddGubaoPiece(curPlayer, gubaoID, addCount, useItemID):
|
| | |
| | | GameWorld.DebugLog("转化古宝功能所需物品: needItemList=%s,realNeedItemList=%s,needPieceInfo=%s"
|
| | | % (needItemList, realNeedItemList, needPieceInfo), curPlayer.GetPlayerID())
|
| | | return needPieceInfo, realNeedItemList
|
| | |
|
| | | #// B2 15 古宝共鸣激活 #tagCMGubaoResonanceActivate
|
| | | #
|
| | | #struct tagCMGubaoResonanceActivate
|
| | | #{
|
| | | # tagHead Head;
|
| | | # WORD ResonanceID; |
| | | #};
|
| | | def OnGubaoResonanceActivate(index, curPackData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | resonanceID = curPackData.ResonanceID
|
| | | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("GubaoResonance", resonanceID)
|
| | | if not ipyData:
|
| | | return
|
| | | gubaoIDList = ipyData.GetGubaoIDList()
|
| | | attrIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("GubaoResonanceAttr", {"ResonanceID":resonanceID}, True)
|
| | | if not attrIpyDataList:
|
| | | return
|
| | | nextStar = resonanceStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoResonanceStar % resonanceID)
|
| | | |
| | | for attrIpyData in attrIpyDataList:
|
| | | star = attrIpyData.GetResonanceStar()
|
| | | if star > nextStar:
|
| | | nextStar = star
|
| | | break
|
| | | |
| | | if nextStar <= resonanceStar:
|
| | | GameWorld.DebugLog("古宝共鸣没有下一星级了! resonanceID=%s,resonanceStar=%s" % (resonanceID, resonanceStar), playerID)
|
| | | return
|
| | | |
| | | for gubaoID in gubaoIDList:
|
| | | _, star = GetGubaoLVInfo(curPlayer, gubaoID)
|
| | | if star < nextStar:
|
| | | GameWorld.DebugLog("古宝未达到共鸣星级,无法激活共鸣! gubaoID=%s,star=%s < %s" % (gubaoID, star, nextStar), playerID)
|
| | | return
|
| | | |
| | | GameWorld.DebugLog("古宝共鸣星级激活! resonanceID=%s,nextStar=%s" % (resonanceID, nextStar), playerID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoResonanceStar % resonanceID, nextStar)
|
| | | RefreshGubaoAttr(curPlayer)
|
| | | Sync_GubaoResonanceInfo(curPlayer, [resonanceID])
|
| | | return
|
| | |
|
| | | #// B2 16 古宝激活 #tagCMGubaoActivate
|
| | | #
|
| | |
| | | def CalcGubaoAttr(curPlayer):
|
| | |
|
| | | allAttrList = [{} for _ in range(4)]
|
| | | allAttrListResonance = [{} for _ in range(4)]
|
| | |
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in xrange(ipyDataMgr.GetGubaoCount()):
|
| | |
| | |
|
| | | starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
|
| | | if starIpyData:
|
| | | starAttrIDList = starIpyData.GetStarAttrIDList()
|
| | | starAttrValueList = starIpyData.GetStarAttrValueList()
|
| | | for i, attrID in enumerate(starAttrIDList):
|
| | | attrValue = starAttrValueList[i]
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
| | | |
| | | starEffIDList = starIpyData.GetStarEffIDList()
|
| | | effAttrInfo = {}
|
| | | #GameWorld.DebugLog("GubaoStar属性: gubaoID=%s,star=%s,starEffIDList=%s" % (gubaoID, star, starEffIDList))
|
| | |
| | | for attrID, attrValue in effAttrInfo.items():
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
| | |
|
| | | # 共鸣
|
| | | for index in range(ipyDataMgr.GetGubaoResonanceCount()):
|
| | | ipyData = ipyDataMgr.GetGubaoResonanceByIndex(index)
|
| | | resonanceID = ipyData.GetResonanceID()
|
| | | resonanceStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoResonanceStar % resonanceID)
|
| | | if not resonanceStar:
|
| | | continue
|
| | | resonanceAttrIpyData = IpyGameDataPY.GetIpyGameData("GubaoResonanceAttr", resonanceID, resonanceStar)
|
| | | if not resonanceAttrIpyData:
|
| | | continue
|
| | | resonanceAttrIDList = resonanceAttrIpyData.GetResonanceAttrIDList()
|
| | | resonanceAttrValueList = resonanceAttrIpyData.GetResonanceAttrValueList()
|
| | | for i, attrID in enumerate(resonanceAttrIDList):
|
| | | attrValue = resonanceAttrValueList[i]
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListResonance)
|
| | | |
| | | # 保存计算值
|
| | | GameWorld.DebugLog("古宝属性: %s" % allAttrList)
|
| | | #GameWorld.DebugLog("古宝共鸣属性: %s" % allAttrListResonance)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_GubaoResonance, allAttrListResonance)
|
| | | return
|
| | |
|
| | | def __calcStarEffAttrByID(curPlayer, gubaoID, effID, effAttrInfo):
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | | def Sync_GubaoResonanceInfo(curPlayer, resonanceIDList=None):
|
| | | if resonanceIDList == None:
|
| | | syncIDList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in range(ipyDataMgr.GetGubaoResonanceCount()):
|
| | | ipyData = ipyDataMgr.GetGubaoResonanceByIndex(index)
|
| | | syncIDList.append(ipyData.GetResonanceID())
|
| | | else:
|
| | | syncIDList = resonanceIDList
|
| | | |
| | | resonanceInfoList = []
|
| | | for resonanceID in syncIDList:
|
| | | resonanceStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoResonanceStar % resonanceID)
|
| | | if not resonanceStar and resonanceIDList == None:
|
| | | # 没有指定时只同步激活的
|
| | | continue
|
| | | resonanceInfo = ChPyNetSendPack.tagMCGubaoResonance()
|
| | | resonanceInfo.ResonanceID = resonanceID
|
| | | resonanceInfo.ResonanceStar = resonanceStar
|
| | | resonanceInfoList.append(resonanceInfo)
|
| | | |
| | | if not resonanceInfoList:
|
| | | return
|
| | | |
| | | clientPack = ChPyNetSendPack.tagMCGubaoResonanceInfo()
|
| | | clientPack.ResonanceInfoList = resonanceInfoList
|
| | | clientPack.Count = len(clientPack.ResonanceInfoList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | | def Sync_GubaoItemEffInfo(curPlayer, gubaoID=0, effType=0, force=False):
|
| | | syncIDList = []
|
| | | if not gubaoID:
|