From 6274c5968871f06e479bf138259c433f5fd7534f Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 26 三月 2019 14:20:26 +0800
Subject: [PATCH] 6351 【后端】【2.1】新版骑宠争夺(查询血量)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py | 75 +++++++++++++++++++++++++++++++++----
1 files changed, 67 insertions(+), 8 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
index 004abbd..3c3f3ae 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -25,6 +25,7 @@
import PlayerTJG
import OperControlManager
import GameObj
+import CrossPlayerData
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -40,6 +41,13 @@
if curObj == None:
# 避免配表错误导致报错
return False
+
+ if GameWorld.GetMap().GetMapID() == ChConfig.Def_FBMapID_GatherSoul and curObj.GetGameObjType() == IPY_GameWorld.gotNPC:
+ if curSkill.GetSkillTypeID() != 23052:
+ #GameWorld.DebugLog('聚魂副本玩家不能对怪物上buff curSkill=%s,buffOwner=%s'%(curSkill.GetSkillTypeID(),buffOwner.GetID()))
+ return True
+ #GameWorld.DebugLog('聚魂副本对怪物上buff curSkill=%s,buffOwner=%s'%(curSkill.GetSkillTypeID(),buffOwner.GetID()))
+
if curObj.GetGameObjType() == IPY_GameWorld.gotNPC and curObj.GetIsBoss() not in ChConfig.Def_SkillAttack_NPCIsBoss \
and SkillCommon.GetSkillBattleType(curSkill) == ChConfig.Def_BattleRelationType_CommNoBoss:
# 释放后 对指定BOSS无效的技能
@@ -149,6 +157,9 @@
#用于BUFF满的时候处理刷新逻辑
isDelRefresh = False
+ # 向跨服发送数据
+ CrossPlayerData.SendMergeData_Buff(curObj, curSkillID, plusValueList)
+
# buff层级
layerMaxCnt = 0
layerCalc = 0
@@ -209,10 +220,10 @@
curBuff.SetLayer(curLayerCnt + 1)
#BUFF层级变化触发被动
if buffOwner:
- curObj.SetDict("addBuffLayer", curBuff.GetLayer())
+ curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, curBuff.GetLayer())
PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
PassiveBuffEffMng.OnPassiveBuffTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
- curObj.SetDict("addBuffLayer", 0)
+ curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, 0)
else:
curBuff.SetLayer(layerMaxCnt)
changeLayer = True
@@ -310,7 +321,8 @@
#是否需要通知客户端
isNotify = True if curSkill.GetClientEffectType() != 0 else False
- addBuff = buffState.AddBuffEx(skillID, tick, isNotify)
+ # 增加第四个参数是否立即广播
+ addBuff = buffState.AddBuff(skillID, tick, isNotify, False)
buffIndex = buffState.GetBuffCount() # buff在管理器中的索引
if updProcessInterval > 0:
# 继承上一个buff的循环记录
@@ -370,7 +382,9 @@
DoAddBuffOver(curObj, curSkill, addBuff, buffOwner, tick)
# 通知客户端
- buffState.Sync_AddBuffEx()
+ #buffState.Sync_AddBuffEx()
+ if isNotify:
+ PYSync_RefreshBuff(curObj, addBuff, SkillCommon.GetBuffType(curSkill), notifyAll=False, owner = buffOwner)
#检查是否属于刷新BUFF
#===========================================================================
@@ -719,6 +733,47 @@
if passiveEff:
passiveEff.DelBuffInfo(skillData)
return
+
+
+#---------------------------------------------------------------------
+## 执行buff消失触发逻辑,不处理buff的功能逻辑,只处理需要的必须状态逻辑
+# 如不处理buff的 伤害,爆炸等,但必须处理恢复眩晕状态等
+def DoBuffDisApperEx( curObj, curBuff, tick ):
+ #这个函数里面不能做Buff添加和删除逻辑!!!!!不然指针会错乱
+ curSkill = curBuff.GetSkill()
+
+ skillData = GameWorld.GetGameData().GetSkillBySkillID(curSkill.GetSkillID())
+
+ #是否是持续性技能
+ isLstSkill = curSkill.GetSkillType() in ChConfig.Def_LstBuff_List
+
+ PassiveBuffEffMng.OnPassiveSkillTrigger(curObj, None, curSkill, ChConfig.TriggerType_BuffDisappear, tick)
+
+ #buff消失的触发
+ for effectIndex in range( 0, curSkill.GetEffectCount() ):
+ curEffect = curSkill.GetEffect( effectIndex )
+ effectID = curEffect.GetEffectID()
+
+ if not effectID:
+ continue
+
+ if isLstSkill:
+ callFunc = GameWorld.GetExecFunc( GameBuffs, "BuffProcess_%d.%s"%( effectID, "OnBuffDisappearEx") )
+ if not callFunc:
+ callFunc = GameWorld.GetExecFunc( GameBuffs, "Buff_%d.%s"%( effectID, "OnBuffDisappearEx") )
+ else:
+ callFunc = GameWorld.GetExecFunc( GameBuffs, "Buff_%d.%s"%( effectID, "OnBuffDisappearEx") )
+
+ if not callFunc:
+ continue
+
+ callFunc( curObj, curSkill, curBuff, curEffect, tick )
+
+ passiveEff = PassiveBuffEffMng.GetPassiveEffManager().GetPassiveEff(curObj)
+ if passiveEff:
+ passiveEff.DelBuffInfo(skillData)
+ return
+
#---------------------------------------------------------------------
## buff消失
# @param curObj 当前目标
@@ -907,9 +962,8 @@
return DelBuffBySkillID(curObj, skillID, tick)
-def PYSync_RefreshBuff(gameObj, curBuff, buffType):
+def PYSync_RefreshBuff(gameObj, curBuff, buffType, notifyAll=True, owner = None):
sendPack = ChNetSendPack.tagObjAddBuff()
- sendPack
sendPack.ObjType = gameObj.GetGameObjType()
sendPack.ObjID = gameObj.GetID();
@@ -920,7 +974,12 @@
sendPack.Value1 = curBuff.GetValue1();
sendPack.Value2 = curBuff.GetValue2();
sendPack.Layer = curBuff.GetLayer();
- gameObj.NotifyAll(sendPack.GetBuffer(), sendPack.GetLength());
-
+ if owner:
+ sendPack.OwnerID = owner.GetID()
+ sendPack.OwnerType = owner.GetGameObjType()
+ if notifyAll or gameObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
+ gameObj.NotifyAll(sendPack.GetBuffer(), sendPack.GetLength());
+ else:
+ PlayerControl.PyNotifyAll(gameObj, sendPack, notifySelf=True, notifyCnt=-1)
\ No newline at end of file
--
Gitblit v1.8.0