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