From 3a62560ad1f29d87134e19675a8b1a8dba57ecdd Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期五, 02 十一月 2018 22:08:17 +0800 Subject: [PATCH] 2683 子 天赋技能和新增双职业各两个技能 / 【后端】天赋技能 ----- 枪的攻和防 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 4 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_222.py | 34 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4515.py | 44 +- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4509.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4511.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4513.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py | 11 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py | 227 +++++++++++---- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4501.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4503.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4520.py | 36 ++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py | 16 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4054.py | 27 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4517.py | 56 +++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py | 30 ++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4056.py | 25 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4512.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4010.py | 12 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLineReduce.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4508.py | 10 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4510.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4516.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_513.py | 50 +++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4514.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4506.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 23 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4027.py | 8 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4500.py | 4 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py | 39 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4502.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4504.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1065.py | 38 ++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4518.py | 24 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4055.py | 53 +++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py | 7 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4057.py | 32 ++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4053.py | 19 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 10 39 files changed, 724 insertions(+), 143 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py index 4d99ba7..4392192 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py @@ -441,6 +441,18 @@ return ChConfig.Def_BattleRelationType_PVE +# 判断PK关系是否可攻击 Def_BattleRelationType_CommNoBoss也可攻击 只是攻击无效果 +def CheckBattleRelationType(skillBattleType, battleRelationType): + if skillBattleType in [ChConfig.Def_BattleRelationType_Comm, ChConfig.Def_BattleRelationType_CommNoBoss]: + return True + + #if battleRelationType in [ChConfig.Def_BattleRelationType_Comm, ChConfig.Def_BattleRelationType_CommNoBoss]: + # return True + + if skillBattleType != battleRelationType: + # PK模式的判定 + return False + return True ## 获取攻击类型 # @param attack 攻击方对象 @@ -1582,7 +1594,7 @@ #攻击触发事件, 该代码应该放在DoAttack函数中处理逻辑比较清晰,也不会破坏GetHurtHP函数 #因为DoAttack修改点比较多,暂不迁移,相关攻击事件逻辑,就往此函数中添加 - AttackEventTrigger(atkObj, defObj, resultHurtType, tick) + AttackEventTrigger(atkObj, defObj, curSkill, resultHurtType, tick) #=========================================================================== # if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer: # GameWorld.DebugAnswer(atkObj, "--%s剩余血量 %s"%(defObj.GetID(), defObj.GetHP())) @@ -1710,6 +1722,7 @@ # atkSkillPer 包含普攻,所以不是用技能增强处理 atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer) + atkSkillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer) @@ -1935,12 +1948,12 @@ ## 攻击时事件处理,反弹吸血或者额外触发技能等 # @param resultHurtType 伤害结构体 # @return -def AttackEventTrigger(atkObj, defObj, resultHurtType, tick): +def AttackEventTrigger(atkObj, defObj, curSkill, resultHurtType, tick): #反弹伤害 CalcBounceHP(atkObj, defObj, resultHurtType.LostHP, resultHurtType.HurtType) #吸血 - CalcSuckBlood(atkObj, defObj, resultHurtType.RealHurtHP, tick) + CalcSuckBlood(atkObj, defObj, curSkill, resultHurtType.RealHurtHP, tick) if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer: # 记录最后一次伤害值 @@ -2062,7 +2075,7 @@ # @param atkObj 攻击者 # @param defObj 防守者 # @return None -def CalcSuckBlood(atkObj, defObj, hurtValue, tick): +def CalcSuckBlood(atkObj, defObj, curSkill, hurtValue, tick): if atkObj.GetGameObjType() != IPY_GameWorld.gotPlayer: return @@ -2089,7 +2102,7 @@ atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj) # 百分比吸血 atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, None, ChConfig.TriggerType_Buff_SuckBloodPer) - atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, None, ChConfig.TriggerType_Buff_SuckBloodPer) + atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer) atkBackHP += int(hurtValue * atkBackHPPer*1.0 / ChConfig.Def_MaxRateValue) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py index 28cfd70..21abbde 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py @@ -1318,6 +1318,9 @@ if curPlayerSkill: SkillCommon.SetSkillRemainTime(curPlayerSkill, PlayerControl.GetReduceSkillCDPer(curPlayer), tick, curPlayer) + + if curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_GiftSkill: + UseSkillOver(curPlayer, target, curSkill, tick) return True #玩家进入战斗状态 @@ -1373,7 +1376,6 @@ # 根据伤血类型触发技能,群攻只触发一次,放在伤血列表被清之前 def OnHurtTypeTriggerSkill(attacker, target, curSkill, tick): - isSuperHit = False usePassiveSkillResult = True # 第一次判断不能调用,即代表都不可用无需循环 usePassiveSkillResultOnSuperHit = True # 暴击对象1V1触发,第一次判断不能调用,即代表都不可用无需循环 @@ -1402,6 +1404,7 @@ if hurtList[1] == IPY_GameWorld.gotPlayer: # 濒死状态触发技能, 不能在GetHurtHP内部触发技能,否则会导致原技能的伤血列表异常 PassiveBuffEffMng.OnPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_WillDead, tick) + PassiveBuffEffMng.OnPassiveBuffTrigger(defender, attacker, None, ChConfig.TriggerType_WillDead, tick) continue if usePassiveSkillResult: @@ -1434,6 +1437,7 @@ # 灵为玩家的替身需要走此逻辑 # 技能使用结束,在处理技能逻辑和通知封包之后调用 def UseSkillOver(attacker, defender, curSkill, tick): + # 根据伤血类型触发技能,群攻只触发一次,放在伤血列表被清之前 OnHurtTypeTriggerSkill(attacker, defender, curSkill, tick) @@ -1444,10 +1448,9 @@ ChConfig.Def_SkillFuncType_NormalAttack]): # 攻击减层级 优先处理,因为同个技能触发buff后,会再处理层级,导致立即减层级 PassiveBuffEffMng.OnPassiveBuffTrigger(attacker, defender, curSkill, ChConfig.TriggerType_Buff_AttackSubLayer, tick) - + # 普攻和对敌技能 if not curSkill or curSkill.GetSkillType() in ChConfig.Def_CanAttackSkill_List: - PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_AttackOver, tick) PassiveBuffEffMng.OnPassiveBuffTrigger(attacker, defender, curSkill, ChConfig.TriggerType_AttackOver, tick) @@ -2196,7 +2199,7 @@ continue #放在函数中可多次触发 如SP 触发减速或者伤害,但不能放在攻击计算中,因为伤害型技能会影响伤血列表 - PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defObj, curSkill, ChConfig.TriggerType_AttackPlayer, tick, + PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defObj, curSkill, ChConfig.TriggerType_StormAttackOneByOne, tick, isEnhanceSkill=False, skillIDSet=skillIDSet) DoLogic_AttackResult(attacker, defObj, curSkill, tick) @@ -2216,6 +2219,11 @@ continue SkillCommon.SetSkillRemainTime(curSkill, 0, tick, attacker) + if attackList: + PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, attackList[0], curSkill, ChConfig.TriggerType_StormAttackReduceCD) + PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, attackList[0], curSkill, ChConfig.TriggerType_StormAttackOver, tick) + + ## 清空伤血列表 # @param 无 # @return 无 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index b13a052..e5f5364 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -4299,7 +4299,7 @@ TriggerType_AttackAddSkillPer, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5 TriggerType_SuperHit, # 暴击时 触发技能 TriggerType_SuperHitValue, # 暴击时 增加暴击值 -TriggerType_AttackPlayer, # 击中玩家(群攻多次触发) 同 TriggerType_HurtObjAddBuff +TriggerType_StormAttackOneByOne, # 类剑刃风暴攻击1对1触发技能 TriggerType_ReduceCD, # 减少CD TriggerType_SuperHitSkillPer, # 暴击时,增加技能伤害 10 TriggerType_AttackAddFinalValue, #增加输出伤害 @@ -4344,7 +4344,13 @@ TriggerType_LuckyHit, # 会心一击时增加会心伤害百分比 50 TriggerType_ChangeHurtToHP, # 把受到伤害的xx%转化为生命值 51 TriggerType_AddLayer, # BUFF层级增加时 52 -) = range(1, 53) +TriggerType_ForbidenCure, # 禁止治疗 53 +TriggerType_PassiveBuffValue, ## 被动buff值计算中二次获取被动值 54 +TriggerType_AttackKillHappen, ## 对被动技能斩杀的概率增强 55 +TriggerType_AddBuffOver, # 添加buff之后触发技能 56 +TriggerType_StormAttackOver, # 类剑刃风暴每攻击一次触发技能 57 +TriggerType_StormAttackReduceCD, # 类剑刃风暴攻击每攻击一次减少CD 58 +) = range(1, 59) # NPC功能类型定义 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_222.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_222.py index 2f8641a..33d750e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_222.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_222.py @@ -25,6 +25,10 @@ import IPY_GameWorld import GameObj import GameMap +import AttackCommon +import SkillCommon +import AICommon + #--------------------------------------------------------------------- #--------------------------------------------------------------------- @@ -58,7 +62,7 @@ npcControl = NPCCommon.NPCControl(curNPC) #刷新自己仇恨度列表 - npcControl.RefreshAngryList(tick, 500) # 为确保踩陷阱体验,暂定1秒 + npcControl.RefreshAngryList(tick, 500) # 为确保踩陷阱体验, #遍历仇恨列表找到最近的,并触发 for i in range(0, curNPC.GetNPCAngry().GetAngryCount()): curAngry = curNPC.GetNPCAngry().GetAngryValueTag(i) @@ -77,7 +81,8 @@ continue #进入战斗 - NPCFight(curNPC, npcControl, curObj, tick) + if not NPCFight(curNPC, npcControl, curObj, tick): + continue return return @@ -97,14 +102,24 @@ if curSkill == None: GameWorld.Log("陷阱 = %s 数据库查找技能失败"%curNPC.GetName()) - return + return True + + battleRelationType = AttackCommon.GetBattleRelationType(curNPC, curObj) + + skillBattleType = SkillCommon.GetSkillBattleType(curSkill) + if not AttackCommon.CheckBattleRelationType(skillBattleType, battleRelationType): + # PK模式的判定 + return False + + curNPC.SetDict("traptagType", curObj.GetGameObjType()) + curNPC.SetDict("traptagID", curObj.GetID()) #触发技能, 改为统一在死亡时释放技能 #SkillShell.NPCUseSkillTag(curNPC, curObj, curSkill, tick) #有玩家进入仇恨列表,,,自爆 npcControl.SetKilled() - return + return True ## NPC死亡 # @param curNPC 当前npc @@ -115,15 +130,20 @@ #死亡NPC不能攻击, 这里设置NPC血量为1 curNPC.SetHP(1) - + #获得技能管理器 skillManager = curNPC.GetSkillManager() curSkill = skillManager.GetSkillByIndex(0) if not curSkill: return - + + curObj = GameWorld.GetObj(curNPC.GetDictByKey("traptagID"), curNPC.GetDictByKey("traptagType")) tick = GameWorld.GetGameWorld().GetTick() - SkillShell.NPCUseSkill(curNPC, curSkill, tick) + if curObj == None or GameObj.GetHP(curObj) <= 0: + SkillShell.NPCUseSkill(curNPC, curSkill, tick) + return + + AICommon.DoNPCUseSkill(curNPC, curObj, curSkill, 0, tick) GameObj.SetHP(curNPC, 0) return 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 c826690..004abbd 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py @@ -35,9 +35,8 @@ # @param tick 当前时间 # @param value Buff总值->用于持续类技能 # @param buffOwner Buff拥有者 -# @return None -# @remarks 函数详细说明. -def DoAddBuff( curObj, buffType, curSkill, tick, addBuffValueList = [], buffOwner = None ): +# @param addForce 代表是否一定添加buff,避免互相反弹buff +def DoAddBuff( curObj, buffType, curSkill, tick, addBuffValueList = [], buffOwner = None, addForce = False ): if curObj == None: # 避免配表错误导致报错 return False @@ -46,7 +45,7 @@ # 释放后 对指定BOSS无效的技能 return True - result = AddBuffNoRefreshState(curObj, buffType, curSkill, tick, addBuffValueList, buffOwner) + result = AddBuffNoRefreshState(curObj, buffType, curSkill, tick, addBuffValueList, buffOwner, addForce) if result is not 0: # 被抵消的buff 不处理 @@ -69,8 +68,7 @@ #异常 else: GameWorld.Log("添加buff刷新失败 curObjType = %s"%(curObjType)) - - + return result @@ -111,8 +109,9 @@ ## 增加BUFF 减少BUFF(参数 -> 当前对象,buff类型,当前技能,当前时间,Buff总值->用于持续类技能 , Buff拥有者) # buff的effect在添加和删除的时候处理,buff共存由buff本身决定而不是effect互斥,不再统一调用RefreshPlayerBuffOnAttrAddEffect # plusValueList 改为buff value列表 第一个为增加数值,其他自定义 +# addForce 表示是否一定会增加buff,避免互相反弹buff # 返回值 返回真刷属性,返回0 代表被抵消buff -def AddBuffNoRefreshState( curObj, buffType, curSkill, tick, plusValueList=[] , buffOwner = None ): +def AddBuffNoRefreshState( curObj, buffType, curSkill, tick, plusValueList=[], buffOwner = None, addForce = False): if not SkillCommon.IsBuff(curSkill): GameWorld.ErrLog("%s 不能加这个buff, 因为它是攻击技能! %s-->TypeID = %d"%(curObj.GetName(), curSkill.GetSkillName(), curSkill.GetSkillType())) return False @@ -122,11 +121,16 @@ if buffTuple == (): return False - if curSkill.GetSkillType() in ChConfig.Def_Debuff_List: + if not addForce and curSkill.GetSkillType() in ChConfig.Def_Debuff_List: if PassiveBuffEffMng.OnPassiveSkillHappen(curObj, buffOwner, curSkill, ChConfig.TriggerType_DebuffOff, tick): # 此处必须返回0 用于外层判断被抵消 return 0 + if PassiveBuffEffMng.OnPassiveBuffHappen(curObj, buffOwner, curSkill, ChConfig.TriggerType_DebuffOff, tick): + # 被动类buff抵消 + # 此处必须返回0 用于外层判断被抵消 + return 0 + buffState = buffTuple[0] maxBuffCount = buffTuple[1] buffCount = buffState.GetBuffCount() @@ -152,6 +156,7 @@ if hasEffect: layerMaxCnt = hasEffect.GetEffectValue(0) # 能叠加的最大上限 layerCalc = hasEffect.GetEffectValue(1) # 增加层级还是减少层级 Def_BuffLayer_Add + #1 检查是否有相同的BUFF,如果有相同的就刷新时间 for i in range( 0, buffCount ): @@ -202,13 +207,15 @@ if curLayerCnt < layerMaxCnt: if layerCalc == ChConfig.Def_BuffLayer_Add: curBuff.SetLayer(curLayerCnt + 1) + #BUFF层级变化触发被动 + if buffOwner: + curObj.SetDict("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) else: curBuff.SetLayer(layerMaxCnt) changeLayer = True - #BUFF层级变化触发被动 - if buffOwner: - PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick) - __BuffCanRemain(buffState, curBuff, i, resultTime, plusValueList, buffOwner) # 此处考虑下plusValue变强是否刷属性 #DoAddBuffOver(curObj, curSkill, addBuff, tick) @@ -360,7 +367,7 @@ #添加BUFF后的特殊处理 - DoAddBuffOver(curObj, curSkill, addBuff, tick) + DoAddBuffOver(curObj, curSkill, addBuff, buffOwner, tick) # 通知客户端 buffState.Sync_AddBuffEx() @@ -380,7 +387,11 @@ # @param addBuff 玩家身上的BUFF实例 # @param tick 时间戳 # @return None -def DoAddBuffOver(curObj, curSkill, addBuff, tick): +def DoAddBuffOver(curObj, curSkill, addBuff, buffOwner, tick): + #触发被动技能 + if buffOwner: + PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddBuffOver, tick) + #是否是持续性技能 isLstSkill = curSkill.GetSkillType() in ChConfig.Def_LstBuff_List diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1065.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1065.py new file mode 100644 index 0000000..25ca8c7 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1065.py @@ -0,0 +1,38 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +##@package +# +# @todo: buff消失后触发技能 +# +# @author: Alee +# @date 2018-10-30 下午03:56:57 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + +import SkillShell +import IPY_GameWorld +import GameWorld +import GameObj + +## BUFF消失后 +# @param None +# @return None +def OnBuffDisappear(curObj, curSkill, curBuff, curEffect, tick): + # 暂且只有玩家,玩家可以取主动攻击的目标 + if curObj.GetGameObjType() != IPY_GameWorld.gotPlayer: + return + defender = GameWorld.GetObj(curObj.GetUseSkillTagID(), curObj.GetUseSkillTagType()) + if not defender or GameObj.GetHP(defender) <= 0: + return + if not GameWorld.CanHappen(curEffect.GetEffectValue(1)): + return + triggerSkill = GameWorld.GetGameData().GetSkillBySkillID(curEffect.GetEffectValue(0)) + SkillShell.DoLogic_UseSkill(curObj, defender, triggerSkill, tick) + + return + + diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_513.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_513.py new file mode 100644 index 0000000..2b33fe6 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_513.py @@ -0,0 +1,50 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +# @todo: 佩戴X代以上翅膀,额外添加属性百分比 +# +# @author: Alee +# @date 2018-1-20 下午02:50:26 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- +#导入 +import ChConfig +import ItemCommon +import ShareDefine +import IPY_GameWorld +import GameWorld +import PlayerControl +#--------------------------------------------------------------------- + + +def OnCalcBuffEx(defender, curEffect, calcDict, curBuff): + equipPack = defender.GetItemManager().GetPack(IPY_GameWorld.rptEquip) + curWing = equipPack.GetAt(ShareDefine.retWing) + + if not ItemCommon.CheckItemCanUse(curWing): + #GameWorld.Log("翅膀不合法,或者没有带翅膀") + return + + if curWing.GetItemColor() < curEffect.GetEffectValue(2): + return + + attrType = curEffect.GetEffectValue(1) + attrTypeList = [attrType] + # 攻击力有最大最小 特殊处理 + if attrType in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]: + attrTypeList = [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax] + for tmpType in attrTypeList: + calcDict[tmpType] = calcDict.get(tmpType, 0) + curEffect.GetEffectValue(0) + return + + +## 返回buff类型,线性与否 +# @param +# @return None +# @remarks 函数详细说明. +def GetCalcType(): + return ChConfig.TYPE_NoLinear + diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLineReduce.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLineReduce.py index a2f2fc9..5f4112e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLineReduce.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_NoLineReduce.py @@ -35,7 +35,7 @@ effect = curEffect.GetEffectValue(0) if curBuff and curBuff.GetLayer(): # 层级叠加效果 - effect = effect*curBuff.GetLayer()() + effect = effect*curBuff.GetLayer() # 属性buff效果id对应计算模块字典{效果id:(计算模块名后缀, [属性类型])} suffixName, attrTypeList = BuffSkill.FindBuffAttrByEffectID(curEffect) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py index 949f755..2444a95 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py @@ -108,6 +108,7 @@ # remainTime = skillData.GetCoolDownTime() reduceSkillCDPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, None, curSkill, ChConfig.TriggerType_ReduceCD) + # 减CD比率 if reduceSkillCDPer > 0: remainTime = int(remainTime * max(0, ShareDefine.Def_MaxRateValue - reduceSkillCDPer) / ShareDefine.Def_MaxRateValue) @@ -1127,6 +1128,10 @@ if curHP <= 0: return + if PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(curObj, None, None, ChConfig.TriggerType_ForbidenCure): + # 禁止治疗 + return + # 治疗加成 curePer = PlayerControl.GetCurePer(curObj) if curObjType == IPY_GameWorld.gotPlayer else ChConfig.Def_MaxRateValue addValue = int(addValue*curePer*1.0/ChConfig.Def_MaxRateValue) @@ -1237,7 +1242,7 @@ # 濒死状态触发技能 if GameObj.GetHP(curObj) == 0: PassiveBuffEffMng.OnPassiveSkillTrigger(curObj, None, curSkill, ChConfig.TriggerType_WillDead, tick) - + PassiveBuffEffMng.OnPassiveBuffTrigger(curObj, None, curSkill, ChConfig.TriggerType_WillDead, tick) #无法找到Buff拥有者 if not buffOwner: diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4500.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4500.py index 1c706cb..e795937 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4500.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4500.py @@ -16,13 +16,13 @@ import SkillCommon import BuffSkill -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): onlySkillID = passiveEffect.GetEffectValue(2) # 单状态不可重复的BUFFID, 层数决定触发次数 if onlySkillID: if not defender: return False # 目标身上查找 - findSkill = GameWorld.GetGameData().GetSkillBySkillID(passiveEffect.GetEffectValue(2)) + findSkill = GameWorld.GetGameData().GetSkillBySkillID(onlySkillID) if not findSkill: return False diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4501.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4501.py index 0bb0c94..6397dc3 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4501.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4501.py @@ -16,7 +16,7 @@ import PassiveBuffEffMng import SkillCommon -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID) if not curSkill: return diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4502.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4502.py index d401976..fbaa13e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4502.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4502.py @@ -16,7 +16,7 @@ import SkillCommon import BuffSkill -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): onlySkillID = passiveEffect.GetEffectValue(2) # 单状态不可重复的BUFFID, 层数决定触发次数 if onlySkillID: if not defender: diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4503.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4503.py index 86bbc52..60eddc4 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4503.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4503.py @@ -15,7 +15,7 @@ import GameWorld import GameObj -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): if not defender: return False diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4504.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4504.py index 1fffaa8..36887d2 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4504.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4504.py @@ -15,7 +15,7 @@ import GameWorld import GameObj -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): return True diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4506.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4506.py index dd4ca1e..57c1f96 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4506.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4506.py @@ -19,7 +19,7 @@ import BuffSkill import PlayerControl -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): tick = GameWorld.GetGameWorld().GetTick() # 判断间隔 if tick - attacker.GetDictByKey("atkRefresh4506") < passiveEffect.GetEffectValue(0): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py index 67ed17f..db170f6 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py @@ -16,7 +16,7 @@ import IPY_GameWorld import SkillCommon -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): if not defender: return False if defender.GetGameObjType() != IPY_GameWorld.gotPlayer: diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4508.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4508.py index ab20270..ac475bc 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4508.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4508.py @@ -16,22 +16,22 @@ import SkillCommon import BuffSkill -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID) if not curSkill: return False - + buffType = SkillCommon.GetBuffType(curSkill) buffTuple = SkillCommon.GetBuffManagerByBuffType(attacker, buffType) #通过类型获取目标的buff管理器为空,则跳出 if buffTuple == (): return False - + buffManager = buffTuple[0] - buff = buffManager.FindBuff(skillID) + buff = buffManager.FindBuff(curSkill.GetSkillTypeID()) if not buff: return False - + if buff.GetLayer() <= 0: return False diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4509.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4509.py index 5ab4b6d..766e1b1 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4509.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4509.py @@ -16,7 +16,7 @@ import SkillCommon import BuffSkill -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): return passiveEffect.GetEffectValue(0) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4510.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4510.py index fce8f74..9e74655 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4510.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4510.py @@ -16,7 +16,7 @@ import SkillCommon import BuffSkill -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): return True diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4511.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4511.py index 3bd60d3..b53c6c5 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4511.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4511.py @@ -15,7 +15,7 @@ import GameWorld import PlayerControl -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): return True diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4512.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4512.py index 6e82b34..41c5999 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4512.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4512.py @@ -15,7 +15,7 @@ import GameWorld import PlayerControl -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): return True diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4513.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4513.py index ce7eb70..d5d6a7b 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4513.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4513.py @@ -14,7 +14,7 @@ import ChConfig import GameObj -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): return True diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4514.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4514.py index b0691f1..fdf8ad8 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4514.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4514.py @@ -16,7 +16,7 @@ import SkillCommon import BuffSkill -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID) if not curSkill: return False diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4515.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4515.py index 63797b4..d1eefbb 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4515.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4515.py @@ -1,22 +1,22 @@ -#!/usr/bin/python -# -*- coding: GBK -*- -# -# @todo: BUFF类:攻击附加真实伤害百分比 -# -# @author: Alee -# @date 2018-1-30 下午05:11:45 -# @version 1.0 -# -# @note: -# -#--------------------------------------------------------------------- - -import ChConfig -import GameWorld - -def CheckCanHappen(attacker, defender, passiveEffect, skillID): - return GameWorld.CanHappen(passiveEffect.GetEffectValue(1)) - - -def GetValue(attacker, defender, passiveEffect): - return float(passiveEffect.GetEffectValue(0))/ChConfig.Def_MaxRateValue +#!/usr/bin/python +# -*- coding: GBK -*- +# +# @todo: BUFF类:攻击附加真实伤害百分比 +# +# @author: Alee +# @date 2018-1-30 下午05:11:45 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + +import ChConfig +import GameWorld + +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): + return GameWorld.CanHappen(passiveEffect.GetEffectValue(1)) + + +def GetValue(attacker, defender, passiveEffect): + return float(passiveEffect.GetEffectValue(0))/ChConfig.Def_MaxRateValue diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4516.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4516.py index cd3e54f..9ea98a2 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4516.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4516.py @@ -13,7 +13,7 @@ import ChConfig -def CheckCanHappen(attacker, defender, passiveEffect, skillID): +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): return True diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4517.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4517.py new file mode 100644 index 0000000..9f98ce1 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4517.py @@ -0,0 +1,56 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +# @todo: buff中抵消debuff并且反射debuff,层级决定次数 +# +# @author: Alee +# @date 2018-1-9 下午09:39:37 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + +import ChConfig +import GameWorld +import SkillCommon +import BuffSkill + +def CheckCanHappen(attacker, defender, effect, tagSkill): + debuffState = effect.GetEffectValue(1) + if debuffState and debuffState != SkillCommon.GetBuffStateType(tagSkill): + return False + + if effect.GetEffectValue(2): + if SkillCommon.GetBuffType(tagSkill) != ChConfig.Def_SkillBuffList.get(effect.GetEffectValue(2)): + return False + if not effect.GetEffectValue(0): + return True + return GameWorld.CanHappen(effect.GetEffectValue(0)) + +def DoLogic(attacker, defender, effect, tagSkill, skillID): + # 反射debuff + if not defender: + return + + findSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID) + if not findSkill: + return + + buffType = SkillCommon.GetBuffType(findSkill) + buffTuple = SkillCommon.GetBuffManagerByBuffType(attacker, buffType) + if buffTuple == (): + return + + buffManager = buffTuple[0] + findBuff = buffManager.FindBuffEx(skillID) + if not findBuff: + return + + BuffSkill.SetBuffLayer(attacker, findBuff, findBuff.GetLayer()-1, skillTypeID=findSkill.GetSkillTypeID()) + + # 给对方加buff + BuffSkill.DoAddBuff(defender, SkillCommon.GetBuffType(tagSkill), tagSkill, + GameWorld.GetGameWorld().GetTick(), [], attacker, addForce = True) + return + diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4518.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4518.py new file mode 100644 index 0000000..24c585c --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4518.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +# @todo: 禁止治疗 +# +# @author: Alee +# @date 2018-1-9 下午09:39:37 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + +import ChConfig +import GameWorld +import SkillCommon +import BuffSkill + +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): + return True + + +def GetValue(attacker, defender, passiveEffect): + return 1 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py new file mode 100644 index 0000000..9b42979 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +# @todo: 进入濒死状态 血量为1, 不触发技能 +# +# @author: Alee +# @date 2017-12-9 下午09:41:44 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + +import ChConfig +import GameWorld +import SkillCommon +import BuffSkill + +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): + attacker.SetHP(1) + + return False + + +def GetSkillData(passiveEffect): + return + +def AfterUsePassiveSkill(attacker, defender, passiveEffect, tick): + return + diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4520.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4520.py new file mode 100644 index 0000000..0754760 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4520.py @@ -0,0 +1,36 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +# @todo: buff中对目标的buff层级达到第几层触发技能 +# +# @author: Alee +# @date 2017-12-9 下午09:41:44 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + +import ChConfig +import GameWorld +import SkillCommon +import BuffSkill + +def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs): + if not defender: + return False + + useSkill = skillkwargs['useSkill'] + skillTypeID = useSkill.GetSkillTypeID() if useSkill else 0 + if passiveEffect.GetEffectValue(2) and passiveEffect.GetEffectValue(2) != skillTypeID: + # 验证关联技能 + return False + return defender.GetDictByKey("addBuffLayer") == passiveEffect.GetEffectValue(0) + + +def GetSkillData(passiveEffect): + skillID = passiveEffect.GetEffectValue(1) + + return GameWorld.GetGameData().GetSkillBySkillID(skillID) + + diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4010.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4010.py index 9b79a01..9b7ba7a 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4010.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4010.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -*- coding: GBK -*- # -# @todo: 减CD +# @todo: 减CD,添加自身血量判断,自身血量低于百分比,默认0为不受血量影响 # # @author: Alee # @date 2018-1-9 下午09:39:37 @@ -11,12 +11,18 @@ # #--------------------------------------------------------------------- -import ItemControler import ChConfig +import GameObj def CheckCanHappen(attacker, defender, effect, curSkill): + + # 未配置不验证血量百分比 + hpPer = effect.GetEffectValue(1) + if hpPer: + if GameObj.GetHP(attacker)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(attacker) >= hpPer: + return False + return True - def GetValue(attacker, defender, effect): return effect.GetEffectValue(0) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4027.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4027.py index 7dad201..149e0f8 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4027.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4027.py @@ -15,7 +15,7 @@ import GameWorld import GameObj import IPY_GameWorld - +import PassiveBuffEffMng # 血量低于XX def CheckCanHappen(attacker, defender, effect, curSkill): if not defender: @@ -25,7 +25,11 @@ if GameObj.GetHP(defender)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(defender) >= effect.GetEffectValue(0): return False - return GameWorld.CanHappen(effect.GetEffectValue(1)) + value = effect.GetEffectValue(1) + + value += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_AttackKillHappen) + + return GameWorld.CanHappen(value) def GetValue(attacker, defender, effect): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py index 67de7f5..a4d4399 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py @@ -18,7 +18,16 @@ def CheckCanHappen(attacker, defender, effect, curSkill): + result = GameWorld.CanHappen(effect.GetEffectValue(0)) if result: GameObj.SetHP(attacker, 1) # 为了避免生命为0时,屏蔽过多逻辑 - return result + return True + + if effect.GetEffectValue(1): + #不死血量1,但不触发技能 + if GameWorld.CanHappen(effect.GetEffectValue(1)): + GameObj.SetHP(attacker, 1) + return False + + return False diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4053.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4053.py new file mode 100644 index 0000000..fcee521 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4053.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +# 对目标的buff层级达到第几层触发技能 +# +# @author: Alee +# @date 2018-1-9 下午09:39:37 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + + +def CheckCanHappen(attacker, defender, effect, curSkill): + + return defender.GetDictByKey("addBuffLayer") == effect.GetEffectValue(0) + + diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4054.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4054.py new file mode 100644 index 0000000..5edd9af --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4054.py @@ -0,0 +1,27 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +# @todo: 对某个职业提高技能伤害 +# +# @author: Alee +# @date 2018-1-9 下午09:39:37 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + +import ChConfig +import IPY_GameWorld + +def CheckCanHappen(attacker, defender, effect, curSkill): + if not defender: + return False + + if defender.GetGameObjType() != IPY_GameWorld.gotPlayer: + return False + + return defender.GetJob() == effect.GetEffectValue(1) + +def GetValue(attacker, defender, effect): + return effect.GetEffectValue(0)*1.0/ChConfig.Def_MaxRateValue diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4055.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4055.py new file mode 100644 index 0000000..ee8cd03 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4055.py @@ -0,0 +1,53 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +# @todo: 减少指定技能的CD,如果有次数控制 需要做成层级buff ----- 类剑刃风暴技能使用 +# 第三个效果值默认为0,每次都减少CD 则不需要配置成buff; 配置数字则需要和buff层级搭配来控制次数 +# +# @author: Alee +# @date 2018-1-9 下午09:39:37 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + +import ChConfig +import IPY_GameWorld +import GameWorld +import SkillCommon +import BuffSkill + +def CheckCanHappen(attacker, defender, effect, curSkill): + if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer: + return False + + if effect.GetEffectValue(2): + skillID = curSkill.GetSkillID() + if SkillCommon.IsBuff(curSkill): + buffType = SkillCommon.GetBuffType(curSkill) + buffTuple = SkillCommon.GetBuffManagerByBuffType(attacker, buffType) + if buffTuple == (): + return False + + buffManager = buffTuple[0] + findBuff = buffManager.FindBuff(skillID) + if findBuff and findBuff.GetLayer() >= effect.GetEffectValue(2): + # 超过不再减CD + return False + + return True + +def GetValue(attacker, defender, effect): + # 此处处理减少CD逻辑 + skillID = effect.GetEffectValue(0) + + curSkill = attacker.GetSkillManager().FindSkillBySkillID(skillID) + coolDownTime = curSkill.GetCoolDownTime() + remainTime = curSkill.GetRemainTime() + remainTime = int(max(remainTime - coolDownTime*1.0*effect.GetEffectValue(1)/ChConfig.Def_MaxRateValue, 0)) + + curSkill.SetRemainTime(remainTime) + curSkill.SetLastUseTick(GameWorld.GetGameWorld().GetTick()) + curSkill.Sync_Skill() + return 0 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4056.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4056.py new file mode 100644 index 0000000..59ea7e5 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4056.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +# @todo: # 如被动技能:千幻冥炎真实伤害从2变4倍 +# +# @author: Alee +# @date 2018-1-9 下午09:39:37 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + +import ChConfig +import IPY_GameWorld +import GameWorld +import SkillCommon +import BuffSkill + +def CheckCanHappen(attacker, defender, effect, curSkill): + + return True + +def GetValue(attacker, defender, effect): + return float(effect.GetEffectValue(0))/ChConfig.Def_MaxRateValue diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4057.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4057.py new file mode 100644 index 0000000..5c27874 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4057.py @@ -0,0 +1,32 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +# +##@package +# +# @todo: 对被动技能斩杀的概率增强 +# +# @author: Alee +# @date 2018-10-26 下午03:26:26 +# @version 1.0 +# +# @note: +# +#--------------------------------------------------------------------- + +import GameWorld +import GameObj + +# 目标某个状态时触发 +def CheckCanHappen(attacker, defender, effect, curSkill): + if not defender: + return False + + if GameObj.GetPyPlayerState(defender, effect.GetEffectValue(1)):#ChConfig.Def_PlayerState_Stun): + #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1)) + return True + + return False + + +def GetValue(attacker, defender, effect): + return effect.GetEffectValue(0) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py index 3b3543c..e4e37db 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py @@ -328,8 +328,16 @@ 4050:ChConfig.TriggerType_OneDamage, # 伤害降低到1点 4051:ChConfig.TriggerType_LuckyHit, # 会心一击时增加会心伤害百分比 50 4052:ChConfig.TriggerType_Buff_SuckBloodPer, # 攻击 百分比吸血 + 4053:ChConfig.TriggerType_AddLayer, # BUFF层级增加时 52 + 4054:ChConfig.TriggerType_AttackAddSkillPer, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5 + 4055:ChConfig.TriggerType_StormAttackReduceCD, # 类剑刃风暴攻击后触发效果 + 4056:ChConfig.TriggerType_PassiveBuffValue, ## 被动buff值计算中二次获取被动值 54 + 4057:ChConfig.TriggerType_AttackKillHappen, ## 对被动技能斩杀的概率增强 55 + 4058:ChConfig.TriggerType_AddBuffOver, # 添加buff之后触发技能 56 + 4059:ChConfig.TriggerType_StormAttackOneByOne, # 类剑刃风暴攻击1对1触发技能 57 + 4060:ChConfig.TriggerType_StormAttackOver, # 类剑刃风暴攻击后触发技能 57 } - return tdict.get(effectID, -1) + return tdict.get(effectID, -1) #=========================================================================== # # 此表配置 影响类型 # ipyData = IpyGameDataPY.GetIpyGameData('SkillEffect', effectID) @@ -360,6 +368,10 @@ 4513:ChConfig.TriggerType_AttackAddFinalValue, #攻击增加输出伤害11 4515:ChConfig.TriggerType_AddIceAtkPer, # BUFF类:攻击附加真实伤害百分比 4516:ChConfig.TriggerType_ChangeHurtToHP, # BUFF类:buff中把受到伤害的xx%转化为生命值 + 4517:ChConfig.TriggerType_DebuffOff, # BUFF类: 抵消debuff + 4518:ChConfig.TriggerType_ForbidenCure, # BUFF类: 禁止治疗 53 + 4519:ChConfig.TriggerType_WillDead, # BUFF类: 进入濒死状态 25 + 4520:ChConfig.TriggerType_AddLayer, # BUFF类: 目标BUFF层级增加时 52 803:ChConfig.TriggerType_BloodShield, # 血盾 806:ChConfig.TriggerType_BloodShield, # 血盾 808:ChConfig.TriggerType_BloodShield, # 血盾 @@ -715,18 +727,20 @@ # #=========================================================================== # OnPassiveSkillTrigger(attacker, target, ChConfig.TriggerType_AttackOver, tick) -# 判断PK关系是否可攻击 Def_BattleRelationType_CommNoBoss也可攻击 只是攻击无效果 -def CheckBattleRelationType(skillBattleType, battleRelationType): - if skillBattleType in [ChConfig.Def_BattleRelationType_Comm, ChConfig.Def_BattleRelationType_CommNoBoss]: - return True - - #if battleRelationType in [ChConfig.Def_BattleRelationType_Comm, ChConfig.Def_BattleRelationType_CommNoBoss]: - # return True - - if skillBattleType != battleRelationType: - # PK模式的判定 - return False - return True +#=============================================================================== +# # 判断PK关系是否可攻击 Def_BattleRelationType_CommNoBoss也可攻击 只是攻击无效果 +# def CheckBattleRelationType(skillBattleType, battleRelationType): +# if skillBattleType in [ChConfig.Def_BattleRelationType_Comm, ChConfig.Def_BattleRelationType_CommNoBoss]: +# return True +# +# #if battleRelationType in [ChConfig.Def_BattleRelationType_Comm, ChConfig.Def_BattleRelationType_CommNoBoss]: +# # return True +# +# if skillBattleType != battleRelationType: +# # PK模式的判定 +# return False +# return True +#=============================================================================== # 查找被动技能时的对象 def GetPassiveDefender(attacker, defender): @@ -757,47 +771,58 @@ if not attacker: return False + stopPassiveSkill = False # 被动技能不能再触发被动技能,但可以触发天赋技能 if connSkill: if not connSkill.GetFuncType(): # 非功能类技能,避免死循环 return False if SkillCommon.isPassiveSkill(connSkill): #GameWorld.DebugLog("被动技能不能再次触发被动技能") - return False + #return False + stopPassiveSkill = True if SkillCommon.GetUsingPassiveSkill(attacker) and triggerType != ChConfig.TriggerType_BuffState: # 防范被动技能触发的 非被动技能 - GameWorld.DebugLog("被动技能不能再次触发被动技能---%s"%triggerType) - return + #GameWorld.DebugLog("被动技能释放中不能再次触发被动技能---%s"%triggerType) + #return + stopPassiveSkill = True passiveEff = GetPassiveEffManager().GetPassiveEff(attacker) if not passiveEff: return False - + connSkillID = connSkill.GetSkillTypeID() if connSkill else 0 skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID) if not skills: return False - + defender = GetPassiveDefender(attacker, defender) + result = False # 当前战斗关系 pvp pve battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender) #GameWorld.DebugLog("OnPassiveSkillTrigger-----------%s-%s"%(skills, battleRelationType)) for skillTypeID, effectID in skills: + if connSkillID == skillTypeID: + continue curSkill = attacker.GetSkillManager().FindSkillBySkillTypeID(skillTypeID) if not curSkill: continue + if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill: + # 只有天赋才可以再次被触发 + continue + effect = SkillCommon.GetSkillEffectByEffectID(curSkill, effectID) if not effect: continue if SkillCommon.RefreshSkillRemainTime(curSkill, tick): continue + result = True # 代表有效触发,但不关系触发结果 skillBattleType = SkillCommon.GetSkillBattleType(curSkill) - if not CheckBattleRelationType(skillBattleType, battleRelationType): + if not AttackCommon.CheckBattleRelationType(skillBattleType, battleRelationType): # PK模式的判定 continue @@ -813,8 +838,9 @@ curSkill.SetRemainTime(0) # 一次攻击多次调用 ,在外层统一调用CD skillIDSet.add(skillTypeID) SkillCommon.SetUsingPassiveSkill(attacker, 0) - - return True + + # 代表有效触发,但不关系触发结果, 外层根据需求使用,如减少循环判断 + return result #ntSummon:(3)普通召唤兽,可继承主人基础属性如攻击 @@ -853,9 +879,12 @@ if not attacker: return 0 + stopPassiveSkill = False # 被动技能不能再触发被动技能,但可以触发天赋技能 if connSkill and SkillCommon.isPassiveSkill(connSkill): #GameWorld.DebugLog("被动技能不能再次触发被动技能") - return 0 + #return 0 + stopPassiveSkill = True + passiveEff = GetPassiveEffManager().GetPassiveEff(attacker) if not passiveEff: return 0 @@ -870,9 +899,15 @@ curValue = 0 for skillTypeID, effectID in skills: + if connSkillID == skillTypeID: + continue curSkill = attacker.GetSkillManager().FindSkillBySkillTypeID(skillTypeID) if not curSkill: continue + if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill: + # 只有天赋才可以再次被触发 + continue + if curSkill.GetCoolDownTime() and SkillCommon.RefreshSkillRemainTime(curSkill, tick): #有配置CD的才判断 continue @@ -881,11 +916,11 @@ if not effect: continue skillBattleType = SkillCommon.GetSkillBattleType(curSkill) - if not CheckBattleRelationType(skillBattleType, battleRelationType): + if not AttackCommon.CheckBattleRelationType(skillBattleType, battleRelationType): continue pyName = "PassiveSkill_%s" % effectID - + callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "CheckCanHappen")) # 条件不满足 @@ -924,6 +959,8 @@ #tick = GameWorld.GetGameWorld().GetTick() skillList = [] for skillTypeID, effectID in skills: + if connSkillID == skillTypeID: + continue curSkill = attacker.GetSkillManager().FindSkillBySkillTypeID(skillTypeID) #if SkillCommon.RefreshSkillRemainTime(curSkill, tick): # continue @@ -934,7 +971,7 @@ if not effect: continue skillBattleType = SkillCommon.GetSkillBattleType(curSkill) - if not CheckBattleRelationType(skillBattleType, battleRelationType): + if not AttackCommon.CheckBattleRelationType(skillBattleType, battleRelationType): continue pyName = "PassiveSkill_%s" % effectID @@ -969,6 +1006,8 @@ battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender) for skillTypeID, effectID in skills: + if connSkillID == skillTypeID: + continue curSkill = attacker.GetSkillManager().FindSkillBySkillTypeID(skillTypeID) if not curSkill: continue @@ -979,7 +1018,7 @@ if SkillCommon.RefreshSkillRemainTime(curSkill, tick): continue skillBattleType = SkillCommon.GetSkillBattleType(curSkill) - if not CheckBattleRelationType(skillBattleType, battleRelationType): + if not AttackCommon.CheckBattleRelationType(skillBattleType, battleRelationType): # PK模式的判定 continue @@ -997,42 +1036,30 @@ return False - -#------------------------Buff类 被动触发, 并非全是被动技能----------------------------------------------- - -#buff类触发释放技能,无CD验证 -def OnPassiveBuffTrigger(attacker, defender, useSkill, triggerType, tick): +# 被动技能触发但无需释放,如抵消debuff,只需走CD即可 +def OnPassiveBuffHappen(attacker, defender, tagSkill, triggerType, tick): attacker = FindRealAttacker(attacker) if not attacker: - return - if useSkill: - if not useSkill.GetFuncType(): - # 非功能类技能,避免死循环 - return - if SkillCommon.isPassiveSkill(useSkill): - #GameWorld.DebugLog("被动技能不能再次触发被动技能") - return - - if SkillCommon.GetUsingPassiveSkill(attacker): - # 防范被动技能触发的 非被动技能 - GameWorld.DebugLog("被动技能不能再次触发被动技能---%s"%triggerType) - return - - + return False + passiveEff = GetPassiveEffManager().GetPassiveEff(attacker) if not passiveEff: - return - + return False buffDict = passiveEff.GetBuffsByTriggerType(triggerType) if not buffDict: - return + return False - defender = GetPassiveDefender(attacker, defender) - # 当前战斗关系 pvp pve battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender) + skillBattleType = SkillCommon.GetSkillBattleType(tagSkill) + if not AttackCommon.CheckBattleRelationType(skillBattleType, battleRelationType): + return + + tagSkillID = tagSkill.GetSkillID() if tagSkill else 0 for skillID, effectList in buffDict.items(): + if tagSkillID == skillID: + continue for passiveEffect in effectList: # 被动触发的技能 pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID() @@ -1041,7 +1068,71 @@ if not callFunc: continue - if not callFunc(attacker, defender, passiveEffect, skillID): + if not callFunc(attacker, defender, passiveEffect, tagSkill): + continue + + callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "DoLogic")) + if callFunc: + callFunc(attacker, defender, passiveEffect, tagSkill, skillID) + + return True + + return False +#------------------------Buff类 被动触发, 并非全是被动技能----------------------------------------------- + +#buff类触发释放技能,无CD验证 +def OnPassiveBuffTrigger(attacker, defender, useSkill, triggerType, tick): + attacker = FindRealAttacker(attacker) + if not attacker: + return + + stopPassiveSkill = False # 被动技能不能再触发被动技能,但可以触发天赋技能 + if useSkill: + if not useSkill.GetFuncType(): + # 非功能类技能,避免死循环 + return + if SkillCommon.isPassiveSkill(useSkill): + #GameWorld.DebugLog("被动技能不能再次触发被动技能") + #return + stopPassiveSkill = True + + if SkillCommon.GetUsingPassiveSkill(attacker): + # 防范被动技能触发的 非被动技能 + #GameWorld.DebugLog("被动技能不能再次触发被动技能---%s"%triggerType) + #return + stopPassiveSkill = True + + passiveEff = GetPassiveEffManager().GetPassiveEff(attacker) + if not passiveEff: + return + + buffDict = passiveEff.GetBuffsByTriggerType(triggerType) + if not buffDict: + return + + defender = GetPassiveDefender(attacker, defender) + + # 当前战斗关系 pvp pve + battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender) + useSkillID = useSkill.GetSkillID() if useSkill else 0 + + for skillID, effectList in buffDict.items(): + if skillID == useSkillID: + continue + for passiveEffect in effectList: + # 被动触发的技能 + pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID() + curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID) + if not curSkill: + continue + if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill: + # 只有天赋才可以再次被触发 + continue + callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "CheckCanHappen")) + if not callFunc: + continue + + if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill): continue callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "GetSkillData")) @@ -1053,7 +1144,7 @@ continue skillBattleType = SkillCommon.GetSkillBattleType(skillData) - if not CheckBattleRelationType(skillBattleType, battleRelationType): + if not AttackCommon.CheckBattleRelationType(skillBattleType, battleRelationType): # PK模式的判定 continue @@ -1076,9 +1167,13 @@ attacker = FindRealAttacker(attacker) if not attacker: return 0 + + stopPassiveSkill = False # 被动技能不能再触发被动技能,但可以触发天赋技能 if useSkill and SkillCommon.isPassiveSkill(useSkill): #GameWorld.DebugLog("被动技能不能再次触发被动技能") - return 0 + #return 0 + stopPassiveSkill = True + passiveEff = GetPassiveEffManager().GetPassiveEff(attacker) if not passiveEff: @@ -1090,14 +1185,25 @@ # 当前战斗关系 pvp pve battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender) skillBattleType = SkillCommon.GetSkillBattleType(useSkill) - if not CheckBattleRelationType(skillBattleType, battleRelationType): + if not AttackCommon.CheckBattleRelationType(skillBattleType, battleRelationType): return 0 - + + useSkillID = useSkill.GetSkillID() if useSkill else 0 #tick = GameWorld.GetGameWorld().GetTick() curValue = 0 - + for skillID, effectList in buffDict.items(): + if skillID == useSkillID: + continue + curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID) + if not curSkill: + continue + for passiveEffect in effectList: + if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill: + # 只有天赋才可以再次被触发 + continue + # 被动触发的技能 pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID() @@ -1105,17 +1211,16 @@ if not callFunc: continue - if not callFunc: - continue - # 条件不满足 - if not callFunc(attacker, defender, passiveEffect, skillID): + if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill): continue callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "GetValue")) if callFunc is None: continue + # 如被动技能:千幻冥炎真实伤害从2变4倍 + curValue += GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_PassiveBuffValue) curValue += callFunc(attacker, defender, passiveEffect) return curValue diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py index 0e6f4cb..1fbe500 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py @@ -166,6 +166,10 @@ if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer: return False + if not curSkill: + # 玩家普通也是技能,正常是不会走到这边 + return False + useSkillData = attacker.GetUseSkill() if useSkillData and curSkill.GetSkillTypeID() != useSkillData.GetSkillTypeID(): # 默认群攻附加触发buff的对象与攻击对象一致 -- Gitblit v1.8.0