From 88650853f1898815f4612280dd2ffc85af9ddd80 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 25 四月 2019 16:57:33 +0800 Subject: [PATCH] 6607 【2.0】【后端】技能升级功能改版 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 157 insertions(+), 5 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py index 890dc9a..3511579 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py @@ -41,9 +41,11 @@ import GameMap import collections import PassiveBuffEffMng +import EffGetSet import SkillShell import FBCommon import IpyGameDataPY +import PyGameData #import EquipZhuXian #--------------------------------------------------------------------- GameWorld.ImportAll("Script\\Skill\\" , "GameSkills") @@ -2018,11 +2020,11 @@ needBaseAttrID, needBaseAttrValue = stateSkillLV /10000, stateSkillLV%10000 if needBaseAttrID and needBaseAttrValue: baseAttrDict = { - ShareDefine.Def_Effect_Metal:PlayerControl.GetMetal(), - ShareDefine.Def_Effect_Wood:PlayerControl.GetWood(), - ShareDefine.Def_Effect_Water:PlayerControl.GetWater(), - ShareDefine.Def_Effect_Fire:PlayerControl.GetFire(), - ShareDefine.Def_Effect_Earth:PlayerControl.GetEarth(), + ShareDefine.Def_Effect_Metal:PlayerControl.GetMetal(curPlayer), + ShareDefine.Def_Effect_Wood:PlayerControl.GetWood(curPlayer), + ShareDefine.Def_Effect_Water:PlayerControl.GetWater(curPlayer), + ShareDefine.Def_Effect_Fire:PlayerControl.GetFire(curPlayer), + ShareDefine.Def_Effect_Earth:PlayerControl.GetEarth(curPlayer), } if needBaseAttrID not in baseAttrDict: GameWorld.ErrLog(' 天赋技能升级属性点条件配置错误,curSkillTypeID=%s,needBaseAttrID=%s'%(curSkillTypeID, needBaseAttrID)) @@ -2034,6 +2036,156 @@ return True +#// A5 16 选择技能五行专精 #tagCMSelectSkillElement +# +#struct tagCMSelectSkillElement +#{ +# tagHead Head; +# DWORD SkillTypeID; // 专精技能ID +#}; +def OnSelectSkillElement(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + selectSkillID = clientData.SkillTypeID + ipyData = IpyGameDataPY.GetIpyGameData('SkillElement', selectSkillID) + if not ipyData: + return + mainSkillID = ipyData.GetMainSkillID() + + curElementSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % mainSkillID) + if selectSkillID == curElementSkillID: + GameWorld.DebugLog('已经是该专精技能!') + return + skillManager = curPlayer.GetSkillManager() + mainSkill = skillManager.FindSkillBySkillTypeID(mainSkillID) + if not mainSkill: + GameWorld.DebugLog('主技能未学习,无法选专精mainSkillID=%s'%mainSkillID) + return + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, selectSkillID) + #原技能删除 + skillManager.DeleteSkillBySkillTypeID(curElementSkillID) + #更新新技能 + RefreshElementSkill(curPlayer, selectSkillID) + # 重刷被动技能 + PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer) + # 重刷技能战力 + PlayerControl.PlayerControl(curPlayer).RefreshAllSkill() + + NotifyElementSkillInfo(curPlayer, mainSkillID) + return + +def RefreshElementSkill(curPlayer, skillTypeID): + ##更新专精技能生效的等级 + __InitElementSkillInfo() + if skillTypeID not in PyGameData.g_elemntSkillDict: + return + baseAttrDict = { + ShareDefine.Def_Effect_Metal:PlayerControl.GetMetal(curPlayer), + ShareDefine.Def_Effect_Wood:PlayerControl.GetWood(curPlayer), + ShareDefine.Def_Effect_Water:PlayerControl.GetWater(curPlayer), + ShareDefine.Def_Effect_Fire:PlayerControl.GetFire(curPlayer), + ShareDefine.Def_Effect_Earth:PlayerControl.GetEarth(curPlayer), + } + + limitInfoList = PyGameData.g_elemntSkillDict[skillTypeID] + maxSkillLV = len(limitInfoList) + updSkillLV = 0 + for i, limitInfo in enumerate(limitInfoList): + needAttrID, needAttrValue = limitInfo /10000, limitInfo%10000 + curAttrValue = baseAttrDict.get(needAttrID, 0) + if curAttrValue >= needAttrValue: + updSkillLV = maxSkillLV - i + break + skillManager = curPlayer.GetSkillManager() + curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID) + curSkillLV = curSkill.GetSkillLV() if curSkill else 0 + + if updSkillLV == curSkillLV: + return + elif updSkillLV < curSkillLV: + skillManager.DeleteSkillBySkillTypeID(skillTypeID) + for _ in xrange(updSkillLV): + skillManager.LVUpSkillBySkillTypeID(skillTypeID) + else: + for _ in xrange(updSkillLV-curSkillLV): + skillManager.LVUpSkillBySkillTypeID(skillTypeID) + return True + +def RefreshElementSkillByAttr(curPlayer, attrIDList): + #加点、丹药、境界、洗点 会影响灵根点 + __InitElementSkillInfo() + isRefresh = False + skillManager = curPlayer.GetSkillManager() + for i in xrange(skillManager.GetSkillCount()): + hasSkill = skillManager.GetSkillByIndex(i) + hasSkillID = hasSkill.GetSkillID() + ipyData = IpyGameDataPY.GetIpyGameDataByCondition('SkillElement', {'MainSkillID':hasSkillID}, False, False) + if not ipyData: + continue + curElementSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % hasSkillID) + if not curElementSkillID: + continue + if curElementSkillID not in PyGameData.g_elemntSkillDict: + continue + if PyGameData.g_elemntSkillDict[curElementSkillID][0] /10000 not in attrIDList: + continue + if RefreshElementSkill(curPlayer, curElementSkillID): + isRefresh = True + if isRefresh: + # 重刷被动技能 + PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer) + # 重刷技能战力 + PlayerControl.PlayerControl(curPlayer).RefreshAllSkill() + return + +def __InitElementSkillInfo(): + #缓存技能专精信息{skillID:[attrID*10000+needValue,..]} + if not PyGameData.g_elemntSkillDict: + ipyMgr = IpyGameDataPY.IPY_Data() + for i in xrange(ipyMgr.GetSkillElementCount()): + ipyData = ipyMgr.GetSkillElementByIndex(i) + elementSkillID = ipyData.GetElementSkillID() + skill = GameWorld.GetGameData().FindSkillByType(elementSkillID, 1) + if not skill: + continue + skillMaxLV = skill.GetSkillMaxLV() # 最高技能等级 + for skillLV in xrange(skillMaxLV, 0, -1): + curSkill = GameWorld.GetGameData().FindSkillByType(elementSkillID, skillLV) + if not curSkill: + continue + if elementSkillID not in PyGameData.g_elemntSkillDict: + PyGameData.g_elemntSkillDict[elementSkillID] = [] + PyGameData.g_elemntSkillDict[elementSkillID].append(curSkill.GetStateSkillLV()) + return + +def NotifyElementSkillInfo(curPlayer, mainSkillID=0): + ##通知五行专精信息 + if not mainSkillID: + syncMainSkillList = [] + skillManager = curPlayer.GetSkillManager() + for i in xrange(skillManager.GetSkillCount()): + hasSkill = skillManager.GetSkillByIndex(i) + hasSkillID = hasSkill.GetSkillID() + ipyData = IpyGameDataPY.GetIpyGameDataByCondition('SkillElement', {'MainSkillID':hasSkillID}, False, False) + if not ipyData: + continue + syncMainSkillList.append(hasSkillID) + + else: + syncMainSkillList = [mainSkillID] + sendPack = ChPyNetSendPack.tagMCSkillElementInfo() + sendPack.InfoList = [] + for mSkillID in syncMainSkillList: + curElementSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % mSkillID) + if not curElementSkillID: + continue + elementData = ChPyNetSendPack.tagMCSkillElementData() + elementData.MainSkillID = mSkillID + elementData.ElementSkillID = curElementSkillID + sendPack.InfoList.append(elementData) + sendPack.Cnt = len(sendPack.InfoList) + NetPackCommon.SendFakePack(curPlayer, sendPack) + return + #--------------------------------------------------------------------- ##当前buff是否能够触发BuffProcess_%d 的脚本 # @param curObj 对象 -- Gitblit v1.8.0