ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -70,6 +70,7 @@
    Sync_GubaoInfo(curPlayer)
    Sync_GubaoItemEffInfo(curPlayer)
    Sync_GubaoPieceInfo(curPlayer)
    Sync_GubaoResonanceInfo(curPlayer)
    return
def AddGubaoPiece(curPlayer, gubaoID, addCount, useItemID):
@@ -109,6 +110,49 @@
    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
#
@@ -295,6 +339,7 @@
def CalcGubaoAttr(curPlayer):
    
    allAttrList = [{} for _ in range(4)]
    allAttrListResonance = [{} for _ in range(4)]
    
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in xrange(ipyDataMgr.GetGubaoCount()):
@@ -316,6 +361,12 @@
                
        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))
@@ -325,9 +376,27 @@
            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):
@@ -796,6 +865,36 @@
    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: