8577 【主干】【长尾】【BT】【后端】支持给宠物表配置的技能学习在玩家身上; 修复灵宠技能刷战力bug;
4个文件已修改
84 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -5184,7 +5184,8 @@
Def_SkillFuncType_ZhuXian,     #13 诛仙技能
Def_SkillFuncType_SuiteSkill,     #14 套装技能
Def_SkillFuncType_PassiveSkillWithSP,     #15 可有专精的被动技能
) = range(16)
Def_SkillFuncType_PetOwnerSkill,     #16 宠物主人技能
) = range(17)
# 受技能效果完全影响的怪, 对应 Def_BattleRelationType_CommNoBoss
Def_SkillAttack_NPCIsBoss = [ Def_NPCType_Ogre_Normal     ,  #平凡小怪 0    # c++ 定义为普通NPC视野刷新
@@ -5215,6 +5216,7 @@
                           
                           Def_SkillFuncType_HorseSkill:ShareDefine.Def_MFPType_Horse,
                           Def_SkillFuncType_PetSkill:ShareDefine.Def_MFPType_Pet,
                           Def_SkillFuncType_PetOwnerSkill:ShareDefine.Def_MFPType_Pet,
                           Def_SkillFuncType_GWSkill:ShareDefine.Def_MFPType_Prestige,
                           Def_SkillFuncType_SuiteSkill:ShareDefine.Def_MFPType_Equip,
                           }
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py
@@ -46,7 +46,7 @@
                3 : "法宝专精",
                4 : "天赋",
                5 : "坐骑技能",
                6 : "神兵技能",
                6 : "灵宠技能",
                7 : "人族法宝",
                8 : "普攻",
                9 : "无",
@@ -56,6 +56,7 @@
                13 : "诛仙技能",
                14 : "套装技能",
                15 : "可有专精的被动技能",
                16 : "灵宠主人技能",
                }
    
    for funcType, skillList in skillDict.items():
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4976,8 +4976,6 @@
            skillMFP = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpType)
            curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkill % mfpType, skillMFP + curSkill.GetFightPower())
        
        #宠物数据挂在物品上,单独计算
        PlayerPet.SetPetSkillFightPower(curPlayer)
        return
    
    ## 技能升级刷属性战斗力处理
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
@@ -39,6 +39,7 @@
import PlayerMagicWeapon
import PlayerWeekParty
import CalcNoLineEffect
import PassiveBuffEffMng
import CrossPlayerData
import CalcLineEffect
import PlayerActivity
@@ -123,9 +124,37 @@
        limitPetClassLV = petSkillUnLockList[i] # 学习此技能所需宠物阶级
        if initClass < limitPetClassLV:
            continue
        curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillid)
        if not curSkilData:
            continue
        if curSkilData.GetFuncType() == ChConfig.Def_SkillFuncType_PetOwnerSkill:
            __GiveOwnerSkill(curPlayer, skillid)
            continue
        newPetItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillid)
    
    return newPetItem
# 从称号获得技能
def __GiveOwnerSkill(curPlayer, skillResID):
    GameWorld.DebugLog("给灵宠主人技能: skillResID=%s" % skillResID)
    skillData = GameWorld.GetGameData().FindSkillByType(skillResID, 1)
    if skillData == None:
        GameWorld.DebugLog("    not find skill(%s)" % skillResID)
        return
    if not SkillCommon.CheckSkillJob(curPlayer, skillData):
        return
    if not SkillShell.CheckLearnSkillCondition(curPlayer, skillData):
        GameWorld.DebugLog("    learn skill condition isn't enough! skillResID=%s" % skillResID)
        return
    skillManager = curPlayer.GetSkillManager()
    if skillManager.FindSkillBySkillTypeID(skillResID):
        GameWorld.DebugLog("    have learned skill(%s)" % skillResID)
        return
    skillManager.LVUpSkillBySkillTypeID(skillResID)
    PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer, skillResID)
    PlayerControl.PlayerControl(curPlayer).RefreshSkillFightPowerEx(skillResID, 0)
    return
## 获取宠物实例对应的宠物数据物品
def GetPetDataItem(curPetOwner, rolePet):
@@ -411,25 +440,6 @@
            
    learnSkillIDList = [max(a) for a in learnSkillDict.values()]
    return learnSkillIDList, passiveSkillList
## 设置宠物的技能战力
def SetPetSkillFightPower(curPlayer):
    petPackIndex = ShareDefine.rptPet
    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
    allFightPower = 0
    for i in range(petPack.GetCount()):
        petItem = petPack.GetAt(i)
        if petItem.IsEmpty():
            continue
        for i in range(petItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)):
            skillID = petItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, i)
            curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
            if not curSkilData:
                continue
            allFightPower += curSkilData.GetFightPower()
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkill % ShareDefine.Def_MFPType_Pet, allFightPower)
    
#===============================================================================
#// A7 02 宠物激活 #tagCMActivatePet
@@ -504,7 +514,6 @@
            learnSkillList, passiveSkillList = GetPetLearnSkill(curPlayer)
            PetControl.DoLogic_PlayerPetLearnSkillList(rolePet, learnSkillList)
    RefreshPetItemAddAttr(curPlayer, True)
    SetPetSkillFightPower(curPlayer)    # 技能战力重算
    
    # 开服活动数据
    OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_PetLV, GetTotalPetLV(curPlayer))
@@ -542,7 +551,6 @@
    
    if not ItemControler.PlayerItemControler(curPlayer).PutInItem(petPackIndex, newPetItem):
        return
    SetPetSkillFightPower(curPlayer)    # 技能战力重算
    petItemIndex = GetPetDataItemIndexByNPCID(curPlayer, petNPCID)
    DoChangePetState(curPlayer, petItemIndex, ShareDefine.Def_PetState_Fight)
    RefreshPetItemAddAttr(curPlayer, True)
@@ -703,8 +711,13 @@
            # 未达到所需阶级
            if updClassLV + 1 < limitPetClassLV:
                continue
            petDataItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillid)
            curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillid)
            if not curSkilData:
                continue
            if curSkilData.GetFuncType() == ChConfig.Def_SkillFuncType_PetOwnerSkill:
                __GiveOwnerSkill(curPlayer, skillid)
                continue
            petDataItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillid)
            if not SkillCommon.isPassiveAttr(curSkilData):
                #被动技能不学
                learnSkillList.append(skillid)
@@ -720,8 +733,7 @@
        fightPet = curPlayer.GetPetMgr().GetFightPet()
        if learnSkillList and fightPet:
            PetControl.DoLogic_PlayerPetLearnSkillList(fightPet, learnSkillList)
        SetPetSkillFightPower(curPlayer)    # 技能战力重算
        RefreshPetItemAddAttr(curPlayer, True)
        
        # 开服活动数据
@@ -861,18 +873,25 @@
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkill, skillAttrList)
    
    #初始战力
    initFPAdd = 0
    fpExTotal = 0
    petPackIndex = ShareDefine.rptPet
    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
    for i in range(petPack.GetCount()):
        petItem = petPack.GetAt(i)
        if petItem.IsEmpty():
            continue
            continue
        # 物品上的技能战力,主人上的另算
        for i in range(petItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)):
            skillID = petItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, i)
            curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
            if not curSkilData:
                continue
            fpExTotal += curSkilData.GetFightPower()
        petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
        petIpyData = GetPetIpydata(petItemNPCID)
        if not petIpyData:
            continue
        initFPAdd += petIpyData.GetInitFightPower()
        fpExTotal += petIpyData.GetInitFightPower() # 初始战力
        #觉醒战力
        skinData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorsePetSkinData % (2, petItemNPCID), 0)
        skinIpyData = IpyGameDataPY.GetIpyGameDataNotLog('HorsePetSkin', 2, petItemNPCID, skinData/100)
@@ -880,7 +899,7 @@
            for attrID, attrValue in skinIpyData.GetAttrInfo().items():
                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListPetSkin)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkin, allAttrListPetSkin)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Pet, initFPAdd)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Pet, fpExTotal)
#    GameWorld.DebugLog("宠物榜NPCID: %s, petDict=%s" % (billPetNPCID, str(billPetDict)))
    return