From fd11ce1c13096dce046ed4f740290eaea2749591 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期三, 08 五月 2019 13:51:13 +0800 Subject: [PATCH] 6681 【2.0】【后端】五行专精激活方式变更 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 132 +++++++++++++++++++++++++++++--------------- 1 files changed, 87 insertions(+), 45 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 ffb92a0..2d2ee46 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py @@ -2013,6 +2013,14 @@ return False #玩家属性点要求 + if not CheckLearnSkillNeedAttr(curPlayer, curSkill): + return False + + return True + +def CheckLearnSkillNeedAttr(curPlayer, curSkill): + #玩家属性点要求 + curSkillTypeID = curSkill.GetSkillTypeID() stateSkillLV = curSkill.GetStateSkillLV() #需要基础属性ID*100000+需要属性点 needBaseAttrID, needBaseAttrValue = GetSkillUpNeedAttr(stateSkillLV) if needBaseAttrID and needBaseAttrValue: @@ -2024,14 +2032,14 @@ ShareDefine.Def_Effect_Earth:PlayerControl.GetEarth(curPlayer), } if needBaseAttrID not in baseAttrDict: - GameWorld.ErrLog(' 天赋技能升级属性点条件配置错误,curSkillTypeID=%s,needBaseAttrID=%s'%(curSkillTypeID, needBaseAttrID)) + GameWorld.ErrLog(' 技能升级属性点条件配置错误,curSkillTypeID=%s,needBaseAttrID=%s'%(curSkillTypeID, needBaseAttrID)) return False curBaseAttrValue = baseAttrDict.get(needBaseAttrID, 0) if curBaseAttrValue < needBaseAttrValue: - GameWorld.DebugLog('升级技能%s需要属性点 %s达到%s, 当前点数=%s!'%(curSkillTypeID, needBaseAttrID, needBaseAttrValue, curBaseAttrValue)) + #GameWorld.DebugLog('升级技能%s需要属性点 %s达到%s, 当前点数=%s!'%(curSkillTypeID, needBaseAttrID, needBaseAttrValue, curBaseAttrValue)) return False - return True + ## 获取技能升级属性需求 rutrun attrID, attrvalue def GetSkillUpNeedAttr(stateSkillLV):return stateSkillLV /100000, stateSkillLV%100000 @@ -2052,30 +2060,50 @@ if curPlayer.GetLV() < ipyData.GetNeedLV(): GameWorld.DebugLog('选择技能五行专精等级不足!') return - - 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) - if curElementSkillID: - #原技能删除 - skillManager.DeleteSkillBySkillTypeID(curElementSkillID) - else: - EventShell.EventRespons_ElementSkill(curPlayer) - #更新新技能 - RefreshElementSkill(curPlayer, selectSkillID) - # 重刷被动技能 - PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer) - # 重刷技能战力 - PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() + curElementSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % mainSkillID) + activeSkillLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementLV % selectSkillID) + #先判断是否可升级 + updSelectSkillLV = activeSkillLV + nextSkill = GameWorld.GetGameData().FindSkillByType(selectSkillID, activeSkillLV + 1) + if nextSkill: + if CheckLearnSkillNeedAttr(curPlayer, nextSkill): + updSelectSkillLV = activeSkillLV + 1 + isChangeSkill = False #是否变更生效的技能 + if updSelectSkillLV != activeSkillLV: + #可升级则激活升一级 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % selectSkillID, updSelectSkillLV) + if curElementSkillID == selectSkillID: + #正在使用的专精技能,则立即生效 + isChangeSkill = True + elif selectSkillID != curElementSkillID: + isChangeSkill = True + + if isChangeSkill: + #更换专精 + if not RefreshElementSkill(curPlayer, selectSkillID): + GameWorld.DebugLog('更换专精 不成功 selectSkillID=%s'%selectSkillID) + return + + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, selectSkillID) + if curElementSkillID: + if curElementSkillID != selectSkillID: + #原技能删除 + skillManager.DeleteSkillBySkillTypeID(curElementSkillID) + else: + EventShell.EventRespons_ElementSkill(curPlayer) - NotifyElementSkillInfo(curPlayer, mainSkillID) + # 重刷被动技能 + PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer) + # 重刷技能战力 + PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() + + NotifyElementSkillInfo(curPlayer, mainSkillID, selectSkillID if updSelectSkillLV != activeSkillLV else 0) return def RefreshElementSkill(curPlayer, skillTypeID): @@ -2090,7 +2118,7 @@ ShareDefine.Def_Effect_Fire:PlayerControl.GetFire(curPlayer), ShareDefine.Def_Effect_Earth:PlayerControl.GetEarth(curPlayer), } - + activeSkillLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementLV % skillTypeID) limitInfoList = PyGameData.g_elemntSkillDict[skillTypeID] maxSkillLV = len(limitInfoList) updSkillLV = 0 @@ -2100,16 +2128,23 @@ if curAttrValue >= needAttrValue: updSkillLV = maxSkillLV - i break + if activeSkillLV > updSkillLV: + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % skillTypeID, updSkillLV) + updSkillLV = min(updSkillLV, activeSkillLV) #不可超过激活的等级 skillManager = curPlayer.GetSkillManager() curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID) curSkillLV = curSkill.GetSkillLV() if curSkill else 0 - + #GameWorld.DebugLog('更新专精技能生效的等级 skillTypeID=%s,curSkillLV=%s,activeSkillLV=%s,updSkillLV=%s'%(skillTypeID, curSkillLV, activeSkillLV, updSkillLV)) if updSkillLV == curSkillLV: return elif updSkillLV < curSkillLV: skillManager.DeleteSkillBySkillTypeID(skillTypeID) for _ in xrange(updSkillLV): skillManager.LVUpSkillBySkillTypeID(skillTypeID) + if updSkillLV == 0:#重置为未选状态 + ipyData = IpyGameDataPY.GetIpyGameData('SkillElement', skillTypeID) + mainSkillID = ipyData.GetMainSkillID() + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, 0) else: for _ in xrange(updSkillLV-curSkillLV): skillManager.LVUpSkillBySkillTypeID(skillTypeID) @@ -2124,19 +2159,18 @@ for i in xrange(skillManager.GetSkillCount()): hasSkill = skillManager.GetSkillByIndex(i) hasSkillID = hasSkill.GetSkillTypeID() - ipyData = IpyGameDataPY.GetIpyGameDataByCondition('SkillElement', {'MainSkillID':hasSkillID}, False, False) - if not ipyData: + ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('SkillElement', {'MainSkillID':hasSkillID}, True, False) + if not ipyDataList: continue - curElementSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % hasSkillID) - if not curElementSkillID: - continue - if curElementSkillID not in PyGameData.g_elemntSkillDict: - continue - attrID = GetSkillUpNeedAttr(PyGameData.g_elemntSkillDict[curElementSkillID][0])[0] - if attrID not in attrIDList: - continue - needRefreshSkillIDList.append(curElementSkillID) - + for ipyData in ipyDataList: + curElementSkillID = ipyData.GetElementSkillID() + if curElementSkillID not in PyGameData.g_elemntSkillDict: + continue + attrID = GetSkillUpNeedAttr(PyGameData.g_elemntSkillDict[curElementSkillID][0])[0] + if attrID not in attrIDList: + continue + needRefreshSkillIDList.append(curElementSkillID) + #GameWorld.DebugLog('属性点变更 刷新专精attrIDList=%s,needRefreshSkillIDList=%s'%(attrIDList,needRefreshSkillIDList)) isRefresh = False for skillID in needRefreshSkillIDList: if RefreshElementSkill(curPlayer, skillID): @@ -2146,6 +2180,7 @@ PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer) # 重刷技能战力 PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() + NotifyElementSkillInfo(curPlayer) return def GetElementSkillCnt(curPlayer): @@ -2184,30 +2219,37 @@ PyGameData.g_elemntSkillDict[elementSkillID].append(curSkill.GetStateSkillLV()) return -def NotifyElementSkillInfo(curPlayer, mainSkillID=0): +def NotifyElementSkillInfo(curPlayer, mainSkillID=0, changeSkillID=0): ##通知五行专精信息 if not mainSkillID: - syncMainSkillList = [] + syncMainSkillDict = {} skillManager = curPlayer.GetSkillManager() for i in xrange(skillManager.GetSkillCount()): hasSkill = skillManager.GetSkillByIndex(i) hasSkillID = hasSkill.GetSkillTypeID() - ipyData = IpyGameDataPY.GetIpyGameDataByCondition('SkillElement', {'MainSkillID':hasSkillID}, False, False) - if not ipyData: + ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('SkillElement', {'MainSkillID':hasSkillID}, True, False) + if not ipyDataList: continue - syncMainSkillList.append(hasSkillID) - + syncMainSkillDict[hasSkillID] = [] + for ipyData in ipyDataList: + syncMainSkillDict[hasSkillID].append(ipyData.GetElementSkillID()) + else: - syncMainSkillList = [mainSkillID] + syncMainSkillDict = {mainSkillID:[changeSkillID]} if changeSkillID else {mainSkillID:[]} sendPack = ChPyNetSendPack.tagMCSkillElementInfo() sendPack.InfoList = [] - for mSkillID in syncMainSkillList: + for mSkillID, elementList in syncMainSkillDict.items(): curElementSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % mSkillID) - if not curElementSkillID: - continue elementData = ChPyNetSendPack.tagMCSkillElementData() elementData.MainSkillID = mSkillID elementData.ElementSkillID = curElementSkillID + elementData.ActiveSkill = [] + for elementSkillID in elementList: + activeData = ChPyNetSendPack.tagMCSkillElementActiveData() + activeData.SkillID = elementSkillID + activeData.ActiveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementLV % elementSkillID) + elementData.ActiveSkill.append(activeData) + elementData.SkillCnt = len(elementData.ActiveSkill) sendPack.InfoList.append(elementData) sendPack.Cnt = len(sendPack.InfoList) NetPackCommon.SendFakePack(curPlayer, sendPack) -- Gitblit v1.8.0