From fd892c53d4c0f97b11713d9571f20b110dd2fece Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 21 六月 2019 22:40:57 +0800
Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能 - 特殊技能不进入CD
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py | 68 ++++++++++++++++++++++++++++++++--
1 files changed, 64 insertions(+), 4 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
index eb752ad..c67d95b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
@@ -15,6 +15,8 @@
import ShareDefine
import ChConfig
import IPY_GameWorld
+import IpyGameDataPY
+import SkillCommon
# 关于血量的函数这里只包装最简单的超DWORD处理
@@ -43,10 +45,15 @@
return gameObj.GetHPEx()*ShareDefine.Def_PerPointValue + gameObj.GetHP()
-def SetHP(gameObj, value, isNotify=True):
+def SetHP(gameObj, value, isNotify=True, isByTime=False):
if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
gameObj.SetHP(value, isNotify)
else:
+ if gameObj.GetGameObjType() == IPY_GameWorld.gotNPC:
+ npcID = gameObj.GetNPCID()
+ if IpyGameDataPY.GetIpyGameDataNotLog("NPCTimeLostHP", npcID) and not isByTime and value not in [GetMaxHP(gameObj), 0]:
+ #GameWorld.DebugLog("不能设置按时间掉血的怪物血量! id=%s,npciD=%s,value=%s,isByTime=%s" % (gameObj.GetID(), gameObj.GetNPCID(), value, isByTime))
+ return
gameObj.SetHPEx(value/ShareDefine.Def_PerPointValue)
gameObj.SetHP(value%ShareDefine.Def_PerPointValue)
@@ -56,6 +63,8 @@
# @param isTrue 是否设置该状态
# @return None
def SetPyPlayerState(gameObj, pyState, isAdd):
+ if pyState == 0:
+ return
if pyState not in ChConfig.Def_PlayerStateList:
return
@@ -80,14 +89,65 @@
# @param pyState 状态
# @return 是否该状态
# @remarks 该状态为buff对应的自定义状态效果
-# 目前当目标身上多个buff都有同一效果时(如定身),在一个buff消失时会解除该状态
-# 故该状态标记仅为一个非精确的标记,应用中请注意!!!(当且仅当多个buff有同一个效果时会提前结束该状态)
-def GetPyPlayerState(gameObj, pyState):
+
+#===============================================================================
+# 此问题在4012 消失时处理
+# # 目前当目标身上多个buff都有同一效果时(如定身),在一个buff消失时会解除该状态
+# # 故该状态标记仅为一个非精确的标记,应用中请注意!!!(当且仅当多个buff有同一个效果时会提前结束该状态)
+#===============================================================================
+def GetPyPlayerState(gameObj, pyState, ownerID = 0, ownerType = 0):
+ if not gameObj:
+ return False
+ if pyState == 0:
+ # 0不需要判断
+ return True
curState = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_CurState)
state = curState & pow(2, pyState)
+
+ if state and ownerID:
+ # 进一步判断是否释放者
+ return True if IsInStateEffectByOwner(gameObj, ChConfig.Def_Skill_Effect_BuffState, pyState, ownerID, ownerType) else False
return state
+# 大于等于2个状态 则不清理状态
+def IsInStateEffectByOwner(curObj, effectID, stateType, ownerID, ownerType):
+
+ for buffType in xrange(IPY_GameWorld.bfBuff, IPY_GameWorld.btBufMax):
+ if buffType in ChConfig.Def_BuffType_OnlyPlayer:
+ continue
+
+ buffTuple = SkillCommon.GetBuffManagerByBuffType(curObj, buffType)
+ #通过类型获取目标的buff管理器为空,则跳出
+ if buffTuple == ():
+ continue
+
+ buffManager = buffTuple[0]
+
+ for i in range(buffManager.GetEffectCount()):
+ effect = buffManager.GetEffect(i)
+ if not effect:
+ continue
+
+ if effect.GetEffectID() != effectID:
+ continue
+
+ if effect.GetEffectValue(0) != stateType:
+ continue
+
+ if buffManager.GetEffectOwnerID(i) != ownerID:
+ continue
+
+ if buffManager.GetEffectOwnerType(i) != ownerType:
+ continue
+
+ return True
+ return False
+
+
+def ClearPyPlayerState(gameObj):
+ gameObj.SetDict(ChConfig.Def_PlayerKey_CurState, 0)
+ return
def GetPetDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
def SetPetDamPer(gameObj, value):
--
Gitblit v1.8.0