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