From 5a027b7b71bc1b3044942f7d2b98ccbdd7d776bc Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 24 五月 2019 10:46:35 +0800
Subject: [PATCH] 6351 骑宠boss击杀状态修改
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 63 ++++++++++++++++++++-----------
1 files changed, 40 insertions(+), 23 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 1b2f8a6..44493b4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -2069,6 +2069,7 @@
#{
# tagHead Head;
# DWORD SkillTypeID; // 专精技能ID
+# BYTE DoType; // 0-激活升级 1-使用
#};
def OnSelectSkillElement(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
@@ -2086,37 +2087,46 @@
if not mainSkill:
GameWorld.DebugLog('主技能未学习,无法选专精mainSkillID=%s'%mainSkillID)
return
+ doType = clientData.DoType
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
- skillElementType = GetSkillElementType(nextSkill)
isChangeSkill = False #是否变更生效的技能
- if updSelectSkillLV != activeSkillLV:
+ updSelectSkillLV = activeSkillLV
+ #先判断是否可升级
+ if doType is 0:
+ nextSkill = GameWorld.GetGameData().FindSkillByType(selectSkillID, activeSkillLV + 1)
+ if not nextSkill:
+ return
+
+ if not CheckLearnSkillNeedAttr(curPlayer, nextSkill):
+ return
+ updSelectSkillLV = activeSkillLV + 1
+ skillElementType = GetSkillElementType(nextSkill)
+
#可升级则激活升一级
EventShell.EventRespons_ElementSkill(curPlayer, mainSkillID, skillElementType, updSelectSkillLV)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % selectSkillID, updSelectSkillLV)
- if curElementSkillID == selectSkillID:
+ if not curElementSkillID or curElementSkillID == selectSkillID:
#正在使用的专精技能,则立即生效
isChangeSkill = True
- elif selectSkillID != curElementSkillID:
+ else: # 使用
+ if not activeSkillLV:
+ #未激活不能使用
+ return
+ if selectSkillID == curElementSkillID:
+ return
isChangeSkill = True
-
+
if isChangeSkill:
#更换专精
- if not RefreshElementSkill(curPlayer, selectSkillID):
+ if not RefreshElementSkill(curPlayer, selectSkillID)[1]:
GameWorld.DebugLog('更换专精 不成功 selectSkillID=%s'%selectSkillID)
return
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, selectSkillID)
- if curElementSkillID:
- if curElementSkillID != selectSkillID:
- #原技能删除
- skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
+ if curElementSkillID and curElementSkillID != selectSkillID:
+ #原技能删除
+ skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
# 重刷被动技能
@@ -2131,9 +2141,10 @@
def RefreshElementSkill(curPlayer, skillTypeID, isChangeLV=True):
##更新专精技能生效的等级
+ isNotify, hasChangeLV = False, False
__InitElementSkillInfo()
if skillTypeID not in PyGameData.g_elemntSkillDict:
- return
+ return isNotify, hasChangeLV
baseAttrDict = {
ShareDefine.Def_Effect_Metal:PlayerControl.GetMetal(curPlayer),
ShareDefine.Def_Effect_Wood:PlayerControl.GetWood(curPlayer),
@@ -2153,15 +2164,16 @@
break
if activeSkillLV > updSkillLV:
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % skillTypeID, updSkillLV)
+ isNotify = True
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 not isChangeLV:
- return
+ return isNotify, hasChangeLV
if updSkillLV == curSkillLV:
- return
+ return isNotify, hasChangeLV
elif updSkillLV < curSkillLV:
skillManager.DeleteSkillBySkillTypeID(skillTypeID)
for _ in xrange(updSkillLV):
@@ -2170,10 +2182,11 @@
ipyData = IpyGameDataPY.GetIpyGameData('SkillElement', skillTypeID)
mainSkillID = ipyData.GetMainSkillID()
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, 0)
+ isNotify = True
else:
for _ in xrange(updSkillLV-curSkillLV):
skillManager.LVUpSkillBySkillTypeID(skillTypeID)
- return True
+ return isNotify, True
def RefreshElementSkillByAttr(curPlayer, attrIDList):
#加点、丹药、境界、洗点 会影响灵根点
@@ -2198,9 +2211,12 @@
needRefreshSkillIDDict[curElementSkillID] = curSelectSkillID == curElementSkillID
#GameWorld.DebugLog('属性点变更 刷新专精attrIDList=%s,needRefreshSkillIDList=%s'%(attrIDList,needRefreshSkillIDList))
- isRefresh = False
+ needNotify, isRefresh = False, False
for skillID, isChangeLV in needRefreshSkillIDDict.items():
- if RefreshElementSkill(curPlayer, skillID, isChangeLV):
+ isNotify, hasChangeLV = RefreshElementSkill(curPlayer, skillID, isChangeLV)
+ if isNotify:
+ needNotify = True
+ if hasChangeLV:
isRefresh = True
if isRefresh:
# 重刷被动技能
@@ -2209,7 +2225,8 @@
curControl = PlayerControl.PlayerControl(curPlayer)
curControl.RefreshAllSkill()
curControl.RefreshPlayerAttrState()
- NotifyElementSkillInfo(curPlayer)
+ if needNotify:
+ NotifyElementSkillInfo(curPlayer)
return
def GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV, elementType=0):
--
Gitblit v1.8.0