xdh
2018-12-14 41ad793ca9cf294333dd215fee303397ca44aac2
5461 【后端】【1.3】【1.3.100】坐骑和灵宠老号处理
3个文件已修改
85 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4519,7 +4519,9 @@
Def_VerFix_RuneSource, # 修复老号双属性符印的获取途径;
Def_VerFix_FMTDouble, # 1.3版本VIP特权变更,记录切换版本前的VIP特权(封魔坛双倍挑战);
Def_VerFix_SuperGift, # 超值礼包开启变更,原领取首充开启,改成等级到开启;
) = range(5)
Def_VerFix_Horse, # 坐骑等级上限修改,对应技能触发修改;
Def_VerFix_Pet, # 灵宠等级上限修改,对应技能触发修改;
) = range(7)
##==================================================================================================
#游戏消费点类型定义
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
@@ -524,6 +524,41 @@
        __RefreshAndSyncPetInfo(rolePet)
        #自动出战宠物
        __AutoSummonPet_OnLogin(curPlayer, rolePet)
    if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_Pet):
        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_Pet, 1)
        #等级不能超上限,技能删了重新学
        petPackIndex = ShareDefine.rptPet
        petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
        for i in range(petPack.GetCount()):
            petItem = petPack.GetAt(i)
            if petItem.IsEmpty():
                continue
            petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
            curClassLV = petItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV) + 1
            petIpyData = PlayerPet.GetPetIpydata(petItemNPCID)
            if not petIpyData:
                continue
            maxLV = petIpyData.GetMaxRank()
            if curClassLV > maxLV:
                petItem.SetUserAttr(ShareDefine.Def_IudetPet_ClassLV, max(0, maxLV - 1))
                petItem.SetUserAttr(ShareDefine.Def_IudetPet_Exp, 0)
                GameWorld.Log('   老号宠物等级超过上限,宠物ID=%s,原LV=%s,重置为=%s'%(petItemNPCID, curClassLV, maxLV))
                curClassLV = maxLV
            petItem.ClearUserAttr(ShareDefine.Def_IudetPet_Skill)
            petSkillList = petIpyData.GetSkillID()
            petSkillUnLockList = petIpyData.GetSkillUnLock()
            for i, skillid in enumerate(petSkillList):
                limitPetClassLV = petSkillUnLockList[i] # 学习此技能所需宠物阶级
                if curClassLV < limitPetClassLV:
                    continue
                petItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillid)
        if ReCallFightPet(curPlayer):
            PlayerPet.AutoSummonPet(curPlayer)
        # 重刷战力
        PlayerPet.SetPetSkillFightPower(curPlayer)    # 技能战力重算
        PlayerPet.RefreshPetItemAddAttr(curPlayer, True)
    return
#---------------------------------------------------------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -737,6 +737,52 @@
# @param curPlayer 玩家
# @return None
def PlayerHorseLogin(curPlayer):
    if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_Horse):
        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_Horse, 1)
        #等级不能超上限,技能删了重新学
        skillManager = curPlayer.GetSkillManager()
        delCnt = 0
        for i in xrange(skillManager.GetSkillCount()):
            dataIndex = i-delCnt
            skill = skillManager.GetSkillByIndex(dataIndex)
            if skill == None:
                continue
            if skill.GetFuncType() != ChConfig.Def_SkillFuncType_HorseSkill:
                continue
            skillTypeID = skill.GetSkillTypeID()
            skillManager.DeleteSkillBySkillTypeID(skillTypeID)
            delCnt += 1
        tick = GameWorld.GetGameWorld().GetTick()
        ipyDataMgr = IpyGameDataPY.IPY_Data()
        for i in xrange(ipyDataMgr.GetHorseCount()):
            ipyData = ipyDataMgr.GetHorseByIndex(i)
            horseID = ipyData.GetHorseID()
            curlv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Horser_LV % horseID, 0, ChConfig.Def_PDictType_Horse)
            if not curlv:
                continue
            maxLV = ipyData.GetMaxLV()
            if curlv > maxLV:
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Horser_LV % horseID, maxLV, ChConfig.Def_PDictType_Horse)
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Horser_Exp % horseID, 0, ChConfig.Def_PDictType_Horse)
                GameWorld.Log('   老号坐骑等级超过上限,坐骑ID=%s,原LV=%s,重置为=%s'%(horseID, curlv, maxLV))
                curlv = maxLV
            for lv in xrange(1, curlv + 1):
                upIpyData = IpyGameDataPY.GetIpyGameData("HorseUp", horseID, lv)
                if not upIpyData:
                    break
                skillIDList = upIpyData.GetSkillID()
                if not skillIDList:
                    continue
                for skillID in skillIDList:
                    __GiveSkill(curPlayer, skillID, tick)
        # 重刷战力
        curControl = PlayerControl.PlayerControl(curPlayer)
        curControl.RefreshAllSkill()
        RefreshHorseAttr(curPlayer)
    Sync_HorseClassData(curPlayer)
    return