From 5e5ceb375b230198c7a1a2e63be7ebb075122da8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 27 十月 2020 16:19:09 +0800
Subject: [PATCH] 8577 【主干】【长尾】【BT】【后端】支持给宠物表配置的技能学习在玩家身上; 修复灵宠技能刷战力bug;
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py | 75 +++++++++++++++++++++++--------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py | 3 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 2 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 4 +
4 files changed, 52 insertions(+), 32 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 70203af..87ac492 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/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,
}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py
index 7da936f..116e74a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py
+++ b/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():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 6ad330b..ea7c8fc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/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
## 技能升级刷属性战斗力处理
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
index 39e1e37..fa12d39 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
+++ b/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
--
Gitblit v1.8.0