ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -21,7 +21,6 @@
import PlayerControl
import ChConfig
import OperControlManager
import OpenServerCampaign
import ItemCommon
import ChEquip
import ShareDefine
@@ -29,7 +28,6 @@
import ItemControler
import NetPackCommon
import PlayerBillboard
import PlayerAttrFruit
import GameFuncComm
import IpyGameDataPY
import CrossPlayerData
@@ -314,9 +312,9 @@
        PlayerRideHorseDown(curPlayer, False)
    
    #---执行玩家换装逻辑---
    if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ItemCommon.GetEquipPackIndex(curHorse), tick):
        if isRideHorse:
            PlayerRideHorseUp(curPlayer, False)
    #if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ItemCommon.GetEquipPackIndex(curHorse), tick):
    #    if isRideHorse:
    #        PlayerRideHorseUp(curPlayer, False)
            
    return True
@@ -377,8 +375,8 @@
        if not curHorse:
            return
        #---执行玩家换装逻辑---
        tick = GameWorld.GetGameWorld().GetTick()
        ChEquip.DoPlayerEquipItem(curPlayer, curHorse, Def_HorseEquipIndex, tick)
        #tick = GameWorld.GetGameWorld().GetTick()
        #ChEquip.DoPlayerEquipItem(curPlayer, curHorse, Def_HorseEquipIndex, tick)
        
    GameWorld.DebugLog("坐骑功能开启! horseLV=%s,horseID=%s" % (horseLV, horseID))
    Sync_HorseClassData(curPlayer)
@@ -394,166 +392,167 @@
def CalcHorseAttrEx(curPlayer):
    ## 计算马匹属性
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Horse):
        return
    allAttrList = [{} for _ in range(4)]
    allAttrListHorseSoul = [{} for _ in range(4)]
    allAttrListSkin = [{} for _ in range(4)]
    allAttrListTrain = [{} for _ in range(4)]
    allAttrListStar = [{} for _ in range(4)]
    customAttrDictHorse = {}
    customAttrDictSkin = {}
    horseSpeed = 0 # 坐骑功能增加的速度值,骑乘时才有效果
    horseLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserLV)
    # 等阶培养属性
    #totalItemCount = 0
    horseBaseAttrInfo = {}
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in xrange(ipyDataMgr.GetHorseLVUpCount()):
        horseIpyData = ipyDataMgr.GetHorseLVUpByIndex(index)
        dataHorseLV = horseIpyData.GetHorseLV()
        if dataHorseLV > horseLV:
            break
        elif dataHorseLV == horseLV:
            upItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserEatItemCount)
        else:
            upItemCount = horseIpyData.GetNeedEatCount()
        # 等阶额外属性
        lvAttrTypeList = horseIpyData.GetLVAttrType()
        lvAttrValueList = horseIpyData.GetLVAttrValue()
        for i, attrID in enumerate(lvAttrTypeList):
            attrValue = lvAttrValueList[i]
            if attrID == ShareDefine.Def_Effect_Speed:
                horseSpeed += attrValue
                continue
            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
            horseBaseAttrInfo[attrID] = horseBaseAttrInfo.get(attrID, 0) + attrValue
        # 培养丹增加属性
        upItemPerCount = horseIpyData.GetUpEatItemPerCount()
        if upItemCount and upItemPerCount:
            upItemAttrTypeList = horseIpyData.GetUpItemAttrType()
            upItemAttrValueList = horseIpyData.GetUpItemAttrValue()
            attrMultiple = upItemCount / upItemPerCount
            for i, attrID in enumerate(upItemAttrTypeList):
                attrValue = upItemAttrValueList[i]
                PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrList)
                horseBaseAttrInfo[attrID] = horseBaseAttrInfo.get(attrID, 0) + attrValue * attrMultiple
    customAttrDictHorse["horseBaseAttrInfo"] = horseBaseAttrInfo
#    # 等阶培养丹累加个数属性
#    eatItemAttrInfo = IpyGameDataPY.GetFuncCfg("HorseUpItem", 3)
#    for attrID, attrValue in eatItemAttrInfo:
#        PlayerControl.CalcAttrDict_Type(attrID, attrValue * totalItemCount, allAttrList)
    # 幻化属性
    initFPAdd = 0 #初始战力
    horseSkinQualityAttrInfo = {}
    for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
        skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
        if not CheckHorseSkinState(curPlayer, skinPlusIpyData):
            continue
        initFPAdd += skinPlusIpyData.GetInitFightPower()
        attrTypeList = skinPlusIpyData.GetAttrType()
        attrValueList = skinPlusIpyData.GetAttrValue()
        for i, attrID in enumerate(attrTypeList):
            attrValue = attrValueList[i]
            if attrID == ShareDefine.Def_Effect_Speed:
                horseSpeed += attrValue
                continue
            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSkin)
        #觉醒战力
        skintype = 1
        horseID = skinPlusIpyData.GetHorseID()
        skinData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorsePetSkinData % (skintype, horseID))
        skinIpyData = IpyGameDataPY.GetIpyGameDataNotLog('HorsePetSkin', skintype, horseID, skinData / 100)
        if skinIpyData:
            for attrID, attrValue in skinIpyData.GetAttrInfo().items():
                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSkin)
        hIpyData = IpyGameDataPY.GetIpyGameData("Horse", horseID)
        if hIpyData:
            quality = hIpyData.GetQuality()
            if quality not in horseSkinQualityAttrInfo:
                horseSkinQualityAttrInfo[quality] = {}
            qualityAttrDict = horseSkinQualityAttrInfo[quality]
            for i, attrID in enumerate(attrTypeList):
                attrValue = attrValueList[i]
                qualityAttrDict[attrID] = qualityAttrDict.get(attrID, 0) + attrValue
        #星级
        horseStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserStar % horseID)
        starIpyData = IpyGameDataPY.GetIpyGameDataNotLog("HorseStarUp", horseID, horseStar)
        if starIpyData:
            starAttrType = starIpyData.GetStarAttrType()
            starAttrValue = starIpyData.GetStarAttrValue()
            for i, attrID in enumerate(starAttrType):
                attrValue = starAttrValue[i]
                if attrID == ShareDefine.Def_Effect_Speed:
                    horseSpeed += attrValue
                    continue
                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
    customAttrDictSkin["horseSkinQualityAttrInfo"] = horseSkinQualityAttrInfo
    # 新培养属性
    for index in xrange(ipyDataMgr.GetHorseTrainCount()):
        trainIpyData = ipyDataMgr.GetHorseTrainByIndex(index)
        trainType = trainIpyData.GetTrainType()
        dataTrainLV = trainIpyData.GetTrainLV()
        trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainLV % trainType)
        if dataTrainLV > trainLV:
            continue
        elif dataTrainLV == trainLV:
            trainItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainItemCount % trainType)
        else:
            trainItemCount = trainIpyData.GetEatCntTotal()
        # 等阶额外属性
        lvAttrTypeList = trainIpyData.GetLVAttrTypeList()
        lvAttrValueList = trainIpyData.GetLVAttrValueList()
        for i, attrID in enumerate(lvAttrTypeList):
            attrValue = lvAttrValueList[i]
            if attrID == ShareDefine.Def_Effect_Speed:
                horseSpeed += attrValue
                continue
            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListTrain)
        # 培养丹增加属性
        eatCntEverytime = trainIpyData.GetEatCntEverytime()
        if trainItemCount and eatCntEverytime:
            eatItemAttrTypeList = trainIpyData.GetEatItemAttrTypeList()
            eatItemAttrValueList = trainIpyData.GetEatItemAttrValueList()
            attrMultiple = trainItemCount / eatCntEverytime
            for i, attrID in enumerate(eatItemAttrTypeList):
                attrValue = eatItemAttrValueList[i]
                PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrListTrain)
    PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Horse, initFPAdd)
    #GameWorld.DebugLog("坐骑功能属性: horseLV=%s,horseSpeed=%s,totalItemCount=%s,initFPAdd=%s" % (horseLV, horseSpeed, totalItemCount, initFPAdd))
    # 先缓存值,骑乘状态时进行附加
    curPlayer.SetDict(ChConfig.Def_PlayerKey_SpeedHorse, horseSpeed)
    # 果实对坐骑的加成, 魂石果实算附加属性层,单独计算
    fightPowerEx = PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrListHorseSoul, ShareDefine.Def_AttrFruitFunc_Horse)
    PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_HorseSoul, fightPowerEx)
    # 保存计算值
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Horse, allAttrList, customAttrDict=customAttrDictHorse)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSoul, allAttrListHorseSoul)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin, allAttrListSkin, customAttrDict=customAttrDictSkin)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseTarin, allAttrListTrain)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseStar, allAttrListStar)
    return
#    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Horse):
#        return
#
#    allAttrList = [{} for _ in range(4)]
#    allAttrListHorseSoul = [{} for _ in range(4)]
#    allAttrListSkin = [{} for _ in range(4)]
#    allAttrListTrain = [{} for _ in range(4)]
#    allAttrListStar = [{} for _ in range(4)]
#
#    customAttrDictHorse = {}
#    customAttrDictSkin = {}
#
#    horseSpeed = 0 # 坐骑功能增加的速度值,骑乘时才有效果
#    horseLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserLV)
#    # 等阶培养属性
#    #totalItemCount = 0
#    horseBaseAttrInfo = {}
#    ipyDataMgr = IpyGameDataPY.IPY_Data()
#    for index in xrange(ipyDataMgr.GetHorseLVUpCount()):
#        horseIpyData = ipyDataMgr.GetHorseLVUpByIndex(index)
#        dataHorseLV = horseIpyData.GetHorseLV()
#        if dataHorseLV > horseLV:
#            break
#        elif dataHorseLV == horseLV:
#            upItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserEatItemCount)
#        else:
#            upItemCount = horseIpyData.GetNeedEatCount()
#
#        # 等阶额外属性
#        lvAttrTypeList = horseIpyData.GetLVAttrType()
#        lvAttrValueList = horseIpyData.GetLVAttrValue()
#        for i, attrID in enumerate(lvAttrTypeList):
#            attrValue = lvAttrValueList[i]
#            if attrID == ShareDefine.Def_Effect_Speed:
#                horseSpeed += attrValue
#                continue
#            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
#            horseBaseAttrInfo[attrID] = horseBaseAttrInfo.get(attrID, 0) + attrValue
#
#        # 培养丹增加属性
#        upItemPerCount = horseIpyData.GetUpEatItemPerCount()
#        if upItemCount and upItemPerCount:
#            upItemAttrTypeList = horseIpyData.GetUpItemAttrType()
#            upItemAttrValueList = horseIpyData.GetUpItemAttrValue()
#            attrMultiple = upItemCount / upItemPerCount
#            for i, attrID in enumerate(upItemAttrTypeList):
#                attrValue = upItemAttrValueList[i]
#                PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrList)
#                horseBaseAttrInfo[attrID] = horseBaseAttrInfo.get(attrID, 0) + attrValue * attrMultiple
#
#    customAttrDictHorse["horseBaseAttrInfo"] = horseBaseAttrInfo
#
##    # 等阶培养丹累加个数属性
##    eatItemAttrInfo = IpyGameDataPY.GetFuncCfg("HorseUpItem", 3)
##    for attrID, attrValue in eatItemAttrInfo:
##        PlayerControl.CalcAttrDict_Type(attrID, attrValue * totalItemCount, allAttrList)
#
#    # 幻化属性
#    initFPAdd = 0 #初始战力
#    horseSkinQualityAttrInfo = {}
#    for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
#        skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
#        if not CheckHorseSkinState(curPlayer, skinPlusIpyData):
#            continue
#        initFPAdd += skinPlusIpyData.GetInitFightPower()
#        attrTypeList = skinPlusIpyData.GetAttrType()
#        attrValueList = skinPlusIpyData.GetAttrValue()
#        for i, attrID in enumerate(attrTypeList):
#            attrValue = attrValueList[i]
#            if attrID == ShareDefine.Def_Effect_Speed:
#                horseSpeed += attrValue
#                continue
#            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSkin)
#
#        #觉醒战力
#        skintype = 1
#        horseID = skinPlusIpyData.GetHorseID()
#        skinData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorsePetSkinData % (skintype, horseID))
#        skinIpyData = IpyGameDataPY.GetIpyGameDataNotLog('HorsePetSkin', skintype, horseID, skinData / 100)
#        if skinIpyData:
#            for attrID, attrValue in skinIpyData.GetAttrInfo().items():
#                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSkin)
#
#        hIpyData = IpyGameDataPY.GetIpyGameData("Horse", horseID)
#        if hIpyData:
#            quality = hIpyData.GetQuality()
#            if quality not in horseSkinQualityAttrInfo:
#                horseSkinQualityAttrInfo[quality] = {}
#            qualityAttrDict = horseSkinQualityAttrInfo[quality]
#            for i, attrID in enumerate(attrTypeList):
#                attrValue = attrValueList[i]
#                qualityAttrDict[attrID] = qualityAttrDict.get(attrID, 0) + attrValue
#
#        #星级
#        horseStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserStar % horseID)
#        starIpyData = IpyGameDataPY.GetIpyGameDataNotLog("HorseStarUp", horseID, horseStar)
#        if starIpyData:
#            starAttrType = starIpyData.GetStarAttrType()
#            starAttrValue = starIpyData.GetStarAttrValue()
#            for i, attrID in enumerate(starAttrType):
#                attrValue = starAttrValue[i]
#                if attrID == ShareDefine.Def_Effect_Speed:
#                    horseSpeed += attrValue
#                    continue
#                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
#
#    customAttrDictSkin["horseSkinQualityAttrInfo"] = horseSkinQualityAttrInfo
#
#    # 新培养属性
#    for index in xrange(ipyDataMgr.GetHorseTrainCount()):
#        trainIpyData = ipyDataMgr.GetHorseTrainByIndex(index)
#        trainType = trainIpyData.GetTrainType()
#        dataTrainLV = trainIpyData.GetTrainLV()
#        trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainLV % trainType)
#
#        if dataTrainLV > trainLV:
#            continue
#        elif dataTrainLV == trainLV:
#            trainItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainItemCount % trainType)
#        else:
#            trainItemCount = trainIpyData.GetEatCntTotal()
#
#        # 等阶额外属性
#        lvAttrTypeList = trainIpyData.GetLVAttrTypeList()
#        lvAttrValueList = trainIpyData.GetLVAttrValueList()
#        for i, attrID in enumerate(lvAttrTypeList):
#            attrValue = lvAttrValueList[i]
#            if attrID == ShareDefine.Def_Effect_Speed:
#                horseSpeed += attrValue
#                continue
#            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListTrain)
#
#        # 培养丹增加属性
#        eatCntEverytime = trainIpyData.GetEatCntEverytime()
#        if trainItemCount and eatCntEverytime:
#            eatItemAttrTypeList = trainIpyData.GetEatItemAttrTypeList()
#            eatItemAttrValueList = trainIpyData.GetEatItemAttrValueList()
#            attrMultiple = trainItemCount / eatCntEverytime
#            for i, attrID in enumerate(eatItemAttrTypeList):
#                attrValue = eatItemAttrValueList[i]
#                PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrListTrain)
#
#    PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Horse, initFPAdd)
#
#    #GameWorld.DebugLog("坐骑功能属性: horseLV=%s,horseSpeed=%s,totalItemCount=%s,initFPAdd=%s" % (horseLV, horseSpeed, totalItemCount, initFPAdd))
#
#    # 先缓存值,骑乘状态时进行附加
#    curPlayer.SetDict(ChConfig.Def_PlayerKey_SpeedHorse, horseSpeed)
#
#    # 果实对坐骑的加成, 魂石果实算附加属性层,单独计算
#    fightPowerEx = PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrListHorseSoul, ShareDefine.Def_AttrFruitFunc_Horse)
#    PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_HorseSoul, fightPowerEx)
#
#    # 保存计算值
#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Horse, allAttrList, customAttrDict=customAttrDictHorse)
#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSoul, allAttrListHorseSoul)
#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin, allAttrListSkin, customAttrDict=customAttrDictSkin)
#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseTarin, allAttrListTrain)
#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseStar, allAttrListStar)
#    return
def GetHorseSkinActCount(curPlayer):
    horseSkinActCount = 0