From ed9a3de1449dc0c428f9bfdc28ae9128fec3014d Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期日, 28 四月 2019 09:44:49 +0800
Subject: [PATCH] 6457 宝藏副本刷怪修改
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 244 +++++++++++++++++++++++++++++++++++++++---------
1 files changed, 197 insertions(+), 47 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 7581367..68e1a6a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -27,12 +27,10 @@
import FBLogic
import ItemCommon
import OperControlManager
-import GameLogic_ManorWar
import PetControl
import ReadChConfig
import DataRecordPack
-import ChItem
-import PlayerActivity
+#import ChItem
import ShareDefine
import PlayerGreatMaster
import PlayerHorse
@@ -43,10 +41,13 @@
import GameMap
import collections
import PassiveBuffEffMng
+import EffGetSet
import SkillShell
import FBCommon
import IpyGameDataPY
-import EquipZhuXian
+import PyGameData
+import EventShell
+#import EquipZhuXian
#---------------------------------------------------------------------
GameWorld.ImportAll("Script\\Skill\\" , "GameSkills")
GameWorld.ImportAll("Script\\Skill\\" , "GameBuffs")
@@ -967,10 +968,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:
@@ -980,7 +983,7 @@
#使用技能行为状态, 客户端限制
if not OperControlManager.IsObjCanDoAction(curPlayer,
ChConfig.Def_Obj_ActState_ClientSkill,
- curSkill.GetSkillOfSeries()):
+ curSkill.GetSkillOfSeries(), curSkill):
AttackFailNotify(curPlayer, curSkill)
return
@@ -2014,14 +2017,15 @@
return False
#玩家属性点要求
- stateSkillLV = curSkill.GetStateSkillLV() #需要基础属性ID*10000+需要属性点
- needBaseAttrID, needBaseAttrValue = stateSkillLV /10000, stateSkillLV%10000
+ stateSkillLV = curSkill.GetStateSkillLV() #需要基础属性ID*100000+需要属性点
+ needBaseAttrID, needBaseAttrValue = GetSkillUpNeedAttr(stateSkillLV)
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))
@@ -2032,7 +2036,179 @@
return False
return True
+## 获取技能升级属性需求 rutrun attrID, attrvalue
+def GetSkillUpNeedAttr(stateSkillLV):return stateSkillLV /100000, stateSkillLV%100000
+#// 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)
+ if curElementSkillID:
+ #原技能删除
+ skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
+ else:
+ EventShell.EventRespons_ElementSkill(curPlayer)
+ #更新新技能
+ 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 = GetSkillUpNeedAttr(limitInfo)
+ 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
+ attrID = GetSkillUpNeedAttr(PyGameData.g_elemntSkillDict[curElementSkillID][0])[0]
+ if attrID not in attrIDList:
+ continue
+ if RefreshElementSkill(curPlayer, curElementSkillID):
+ isRefresh = True
+ if isRefresh:
+ # 重刷被动技能
+ PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer)
+ # 重刷技能战力
+ PlayerControl.PlayerControl(curPlayer).RefreshAllSkill()
+ return
+
+def GetElementSkillCnt(curPlayer):
+ ##获取已选择的专精技能数量
+ cnt = 0
+ 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
+ cnt +=1
+ return cnt
+
+def __InitElementSkillInfo():
+ #缓存技能专精信息{skillID:[attrID*100000+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 对象
@@ -2252,14 +2428,6 @@
#GameWorld.Log("删除场景Buff %d"%skillID)
processResult = True
continue
- else:
- # 非领地战期间, 该区域有领地旗buff, 删除区域buff
- if skillID == ChConfig.Def_SkillID_ManorFlagArea and not GameLogic_ManorWar.CanManorWarAtk():
- mapBuffManager.DeleteBuffByIndex(index)
- ClearBuffEffectBySkillID(curPlayer, skillID, ownerID, ownerType)
- processResult = True
- #GameWorld.DebugLog("非领地战期间, 该区域有领地旗buff, 删除区域buff")
- continue
index += 1
@@ -2285,10 +2453,7 @@
continue
if findBuff.GetSkill().GetSkillLV() > curSkill.GetSkillLV():
continue
-
- if skillTypeID == ChConfig.Def_SkillID_ManorFlagArea and not GameLogic_ManorWar.CanManorWarAtk():
- #GameWorld.DebugLog(" i=%s,effectID=%s,skillID=%s, 该位置有buff, 非领地战期间, 不添加" % (i, effectID, skillTypeID))
- continue
+
#添加场景buff
isOK = BuffSkill.AddBuffNoRefreshState(curPlayer, IPY_GameWorld.bfMapBuff, curSkill, tick)
processResult = processResult or isOK
@@ -2393,6 +2558,9 @@
#骑马触发技能
houseSkill = ChConfig.Def_Skill_TypeID_Speed
curSkillType = curSkill.GetSkillTypeID()
+
+ if not SkillCommon.IsBuff(curSkill):
+ continue
if curSkillType in houseSkill:
#不使用,不添加buff
@@ -2699,19 +2867,6 @@
OperControlManager.SetObjActState(curObj, buffSkill)
-# 非属性技能算属性 特殊处理
-# 法宝SP技能 如1-4级为增加属性,第5级为伤害效果,第6-10级就要包含属性和伤害效果
-def CalcFabaoSPSkillAttr(curPlayer, curPlayerSkill, allAttrList):
- if curPlayerSkill.GetFuncType() != ChConfig.Def_SkillFuncType_FbSPSkill:
- return
-
- value = GetMaxHPAttrValue(curPlayerSkill)
- if value == 0:
- return
-
- PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_MaxHP, value, allAttrList)
- return
-
# 计算属性类技能的属性,同buff层不算战力
def CalcPassiveAttr_Effect(curPlayer, allAttrList):
@@ -2721,7 +2876,6 @@
if curPlayerSkill == None:
continue
- CalcFabaoSPSkillAttr(curPlayer, curPlayerSkill, allAttrList)
if not SkillCommon.isPassiveAttr(curPlayerSkill):
continue
@@ -3202,7 +3356,6 @@
# 不受限制和影响的技能
def Trigger_UseSkill(attacker, defender, curSkill, tick, tagRoundPosX = 0, tagRoundPosY = 0, isEnhanceSkill = False):
-
#这个技能是Buff
if SkillCommon.IsBuff(curSkill):
@@ -3301,7 +3454,6 @@
def GetAddBuffValue(attacker, curSkill, defender):
#验证该技能效果1的ID,提取公式
curEffect = curSkill.GetEffect(0)
- effectID = curEffect.GetEffectID()
moduleSuffix = GetBuffModuleSuffix(curEffect)
@@ -3418,7 +3570,7 @@
return
#---------------------------------------------------------------------
-# 获得关联技能
+# 获得关联技能,0 全部 1是主动型技能(法宝,普攻) 其他技能ID
def GetConnectSkillID(curSkill):
return curSkill.GetExAttr1()
@@ -3455,9 +3607,7 @@
def GetUpLVCostItemNum(curSkill):
return curSkill.GetExAttr5()
-# 技能特殊增加属性配置,目前只支持生命,潜力技能专用
-def GetMaxHPAttrValue(curSkill):
- return curSkill.GetMP()
+
##获得当前技能升级消耗的真气值
# @param curSkill 当前技能技能
--
Gitblit v1.8.0