| | |
| | | import PlayerTJG
|
| | | import OperControlManager
|
| | | import GameObj
|
| | | import CrossPlayerData
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | 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无效的技能
|
| | |
| | | #用于BUFF满的时候处理刷新逻辑
|
| | | isDelRefresh = False
|
| | |
|
| | | # 向跨服发送数据
|
| | | CrossPlayerData.SendMergeData_Buff(curObj, curSkillID, plusValueList)
|
| | | |
| | | # buff层级
|
| | | layerMaxCnt = 0
|
| | | layerCalc = 0
|
| | |
| | | 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
|
| | |
| | | # 通知客户端
|
| | | #buffState.Sync_AddBuffEx()
|
| | | if isNotify:
|
| | | PYSync_RefreshBuff(curObj, addBuff, SkillCommon.GetBuffType(curSkill), notifyAll=False)
|
| | | PYSync_RefreshBuff(curObj, addBuff, SkillCommon.GetBuffType(curSkill), notifyAll=False, owner = buffOwner)
|
| | |
|
| | | #检查是否属于刷新BUFF
|
| | | #===========================================================================
|
| | |
| | | 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 当前目标
|
| | |
| | |
|
| | | return DelBuffBySkillID(curObj, skillID, tick)
|
| | |
|
| | | def PYSync_RefreshBuff(gameObj, curBuff, buffType, notifyAll=True):
|
| | | def PYSync_RefreshBuff(gameObj, curBuff, buffType, notifyAll=True, owner = None):
|
| | | sendPack = ChNetSendPack.tagObjAddBuff()
|
| | |
|
| | | sendPack.ObjType = gameObj.GetGameObjType()
|
| | |
| | | sendPack.Value1 = curBuff.GetValue1();
|
| | | sendPack.Value2 = curBuff.GetValue2();
|
| | | sendPack.Layer = curBuff.GetLayer();
|
| | | 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:
|