From 41ad793ca9cf294333dd215fee303397ca44aac2 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 14 十二月 2018 14:50:04 +0800
Subject: [PATCH] 5461 【后端】【1.3】【1.3.100】坐骑和灵宠老号处理

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py  |   35 +++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py |   46 +++++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py           |    4 +
 3 files changed, 84 insertions(+), 1 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 25a277e..d439484 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/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)
 
 ##==================================================================================================
 #游戏消费点类型定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
index 023be02..bb71268 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
+++ b/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
 #---------------------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index 2b1367b..30205b2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/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
 

--
Gitblit v1.8.0