From 8bf2e133de607c17a898bec2264f55aa463a3fa7 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 10 五月 2019 16:37:12 +0800
Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能 - 4012状态判定增加 查找是否释放者

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py |   42 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 41 insertions(+), 1 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
index 0439145..cddd6b8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
@@ -16,6 +16,7 @@
 import ChConfig
 import IPY_GameWorld
 import IpyGameDataPY
+import SkillCommon
 
 # 关于血量的函数这里只包装最简单的超DWORD处理
 
@@ -92,12 +93,51 @@
 # #  目前当目标身上多个buff都有同一效果时(如定身),在一个buff消失时会解除该状态
 # #  故该状态标记仅为一个非精确的标记,应用中请注意!!!(当且仅当多个buff有同一个效果时会提前结束该状态)
 #===============================================================================
-def GetPyPlayerState(gameObj, pyState):
+def GetPyPlayerState(gameObj, pyState, ownerID = 0, ownerType = 0):
     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() != ownerID:
+                continue
+            
+            if buffManager.GetEffectOwnerType() != ownerType:
+                continue
+            
+            return True
+    return False
+
+
 def ClearPyPlayerState(gameObj):
     gameObj.SetDict(ChConfig.Def_PlayerKey_CurState, 0)
     return

--
Gitblit v1.8.0