From 89cd1373014cea5337624c82d25fa6f84c7fe7c7 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 25 四月 2019 17:38:48 +0800
Subject: [PATCH] 6607 【2.0】【后端】技能升级功能改版
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 166 insertions(+), 8 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 ba1c674..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")
@@ -965,10 +967,12 @@
#GameWorld.ErrLog('UseSkill findSkillErr = %s'%(pack_SkillID), curPlayerID)
return
- if not CheckClientAttackTick(curPlayer, clientTick, tick):
- AttackFailNotify(curPlayer, curSkill, ChConfig.SkillFail_AtkInterval)
- curPlayer.Sync_ClientTick()
- return
+ if pack_SkillID != ChConfig.Def_SkillID_Somersault:
+ # 翻滚特殊处理,实时响应, 由CD 总控制
+ if not CheckClientAttackTick(curPlayer, clientTick, tick):
+ AttackFailNotify(curPlayer, curSkill, ChConfig.SkillFail_AtkInterval)
+ curPlayer.Sync_ClientTick()
+ return
#已经在攻击中
if curPlayer.GetPlayerAction() == IPY_GameWorld.paAttack:
@@ -2016,10 +2020,11 @@
needBaseAttrID, needBaseAttrValue = stateSkillLV /10000, stateSkillLV%10000
if needBaseAttrID and needBaseAttrValue:
baseAttrDict = {
- ShareDefine.Def_Effect_STR:curPlayer.GetSTR(),
- ShareDefine.Def_Effect_PHY:curPlayer.GetPHY(),
- ShareDefine.Def_Effect_CON:curPlayer.GetCON(),
- ShareDefine.Def_Effect_PNE:curPlayer.GetPNE(),
+ 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))
@@ -2031,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 对象
@@ -2381,6 +2536,9 @@
houseSkill = ChConfig.Def_Skill_TypeID_Speed
curSkillType = curSkill.GetSkillTypeID()
+ if not SkillCommon.IsBuff(curSkill):
+ continue
+
if curSkillType in houseSkill:
#不使用,不添加buff
if playerVehicle != IPY_GameWorld.pvHorse :
--
Gitblit v1.8.0