| | |
| | | return callFunc(attacker, defender, skill, tick)
|
| | |
|
| | |
|
| | | def GetSkillHurtList():
|
| | | global g_skillHurtList
|
| | | return g_skillHurtList
|
| | |
|
| | |
|
| | | def GetFirstHurtObj():
|
| | | global g_skillHurtList
|
| | | if g_skillHurtList.GetHurtCount():
|
| | |
| | | if GameObj.GetHP(defender) <= 0:
|
| | | defender.SetDict(ChConfig.Def_NPCDead_KillerType, attacker.GetGameObjType())
|
| | | defender.SetDict(ChConfig.Def_NPCDead_KillerID, attacker.GetID())
|
| | | PlayerGeTui.TJGDead(defender, attacker.GetName())
|
| | | #PlayerGeTui.TJGDead(defender, attacker.GetName())
|
| | | if defender.GetGameObjType() == IPY_GameWorld.gotNPC:
|
| | | skillID = 0 if not useSkill else useSkill.GetSkillID()
|
| | | # 记录死亡原因
|
| | |
| | |
|
| | | # 根据触发技能的特点决定是触发一次还是 触发多次
|
| | | # 群体BUFF的请参考IsPlayerUseSkill 客户端决定对象,一样可以实现同样效果
|
| | | for enhanceSkillID in [curSkill.GetSkillEnhance1(), curSkill.GetSkillEnhance2()]:
|
| | | if GetIsEnhanceSkillGroup(curSkill, enhanceSkillID):
|
| | | for defObj in attackList:
|
| | | SkillShell.SkillTrigSkill(attacker, defObj, curSkill, enhanceSkillID, tick)
|
| | | else:
|
| | | SkillShell.SkillTrigSkill(attacker, defender, curSkill, enhanceSkillID, tick)
|
| | | if curSkill:
|
| | | for enhanceSkillID in [curSkill.GetSkillEnhance1(), curSkill.GetSkillEnhance2()]:
|
| | | if GetIsEnhanceSkillGroup(curSkill, enhanceSkillID):
|
| | | for defObj in attackList:
|
| | | SkillShell.SkillTrigSkill(attacker, defObj, curSkill, enhanceSkillID, tick)
|
| | | else:
|
| | | SkillShell.SkillTrigSkill(attacker, defender, curSkill, enhanceSkillID, tick)
|
| | | else:
|
| | | OnHurtTypeTriggerPassiveSkill(attacker, defender, curSkill, tick)
|
| | |
|
| | |
| | |
|
| | | #技能攻击
|
| | | skillID = curSkill.GetSkillID()
|
| | | changeSkillID = PassiveBuffEffMng.GetPassiveSkillValueByTriggerTypeEx(attacker, None, curSkill, ChConfig.TriggerType_ChangeSkillEff)
|
| | | if changeSkillID:
|
| | | skillID = changeSkillID
|
| | | battleType = AttackCommon.GetBattleType(attacker, curSkill)
|
| | | #无目标类技能
|
| | | if not defender:
|
| | |
| | | if curPlayerSkill:
|
| | | SkillCommon.SetSkillRemainTime(curPlayerSkill, PlayerControl.GetReduceSkillCDPer(curPlayer), tick, curPlayer)
|
| | |
|
| | | if curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_GiftSkill, ChConfig.Def_SkillFuncType_FbSPSkill]:
|
| | | if curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_GiftSkill, ChConfig.Def_SkillFuncType_FbSPSkill,
|
| | | ChConfig.Def_SkillFuncType_PassiveSkillWithSP]:
|
| | | UseSkillOver(curPlayer, target, curSkill, tick)
|
| | | else:
|
| | | OnHurtTypeTriggerPassiveSkill(curPlayer, target, curSkill, tick)
|
| | |
| | |
|
| | | skillHurtLists.append([hurtObj.GetObjID(), hurtObj.GetObjType(), hurtObj.GetAttackType()])
|
| | |
|
| | | #只对第一目标造成某伤害类型时触发技能, 需先存储 skillHurtLists
|
| | | OnHurtTypeTriggerSkillFirstObj(attacker, curSkill, tick)
|
| | | #命中个数记录特殊处理
|
| | | PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, target, curSkill, ChConfig.TriggerType_HitValue)
|
| | | |
| | | # #持续攻击类BUFF 类剑刃风暴是先给自身一个持续性buff,这一次不算伤害不可触发
|
| | | if curSkill and ChConfig.Def_SkillType_LstPlsBuffAtk != curSkill.GetSkillType():
|
| | | #只对第一目标造成某伤害类型时触发技能, 需先存储 skillHurtLists
|
| | | OnHurtTypeTriggerSkillFirstObj(attacker, curSkill, tick)
|
| | |
|
| | | skillIDSet = set()
|
| | | for hurtList in skillHurtLists:
|
| | |
| | | # 攻击减层级 优先处理,因为同个技能触发buff后,会再处理层级,导致立即减层级
|
| | | PassiveBuffEffMng.OnPassiveBuffTrigger(attacker, defender, curSkill, ChConfig.TriggerType_Buff_AttackSubLayer, tick)
|
| | |
|
| | | # 普攻和对敌技能
|
| | | if not curSkill or curSkill.GetSkillType() in ChConfig.Def_CanAttackSkill_List:
|
| | | # 普攻和对敌技能, 此处暂且特殊处理Def_SkillFuncType_PassiveSkillWithSP,待优化
|
| | | if not curSkill or curSkill.GetSkillType() in ChConfig.Def_CanAttackSkill_List or curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_PassiveSkillWithSP:
|
| | | PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_AttackOver, tick)
|
| | | PassiveBuffEffMng.OnPassiveBuffTrigger(attacker, defender, curSkill, ChConfig.TriggerType_AttackOver, tick)
|
| | |
|
| | |
| | | sendPack.HurtList.append(hurtList)
|
| | |
|
| | | sendPack.HurtCount = len(sendPack.HurtList)
|
| | |
|
| | | sendPack.SkillElementID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % skillID)
|
| | | PlayerControl.PyNotifyAll(curPlayer, sendPack, notifySelf=True, notifyCnt=-1)
|
| | | return
|
| | |
|
| | |
|
| | | # py重现View_UseSkillPos效果,对地通知,只用于玩家
|
| | |
| | | # ChangeAction(paAttack);
|
| | | # m_LastBattleTick = GetGameWorldManager()->GetTick();
|
| | | #===========================================================================
|
| | | |
| | | sendPack = ChNetSendPack.tagUseSkillPos()
|
| | | sendPack.Clear()
|
| | | sendPack.ObjID = attacker.GetID()
|
| | |
| | |
|
| | | sendPack.HurtCount = len(sendPack.HurtList)
|
| | | if attacker.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | sendPack.SkillElementID = attacker.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % skillID)
|
| | | PlayerControl.PyNotifyAll(attacker, sendPack, notifySelf, -1)
|
| | | else:
|
| | | attacker.NotifyAll(sendPack.GetBuffer(), sendPack.GetLength())
|
| | |
| | | sendPack.HurtList.append(hurtList)
|
| | |
|
| | | sendPack.HurtCount = len(sendPack.HurtList)
|
| | | sendPack.SkillElementID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % skillID)
|
| | | NetPackCommon.SendFakePack(curPlayer, sendPack)
|
| | | return
|
| | |
|