public void ComboAttack(int index, Units target) { if (Singleton <PvpManager> .Instance.IsInPvp) { if (this.self.CanAttack && !this.isComboAttack) { Skill attackByIndex = this.self.getAttackByIndex(index); if (attackByIndex == null) { ClientLogger.Error(" ComboAttack Error : attack " + index + " is NULL !"); base.OnAttackFailedBeforeStart(null); return; } if (!this.sendUseSkillTicks.ContainsKey(attackByIndex.skillMainId)) { this.sendUseSkillTicks.Add(attackByIndex.skillMainId, 0L); } if (!this.sendUseSkills.ContainsKey(attackByIndex.skillMainId)) { this.sendUseSkills.Add(attackByIndex.skillMainId, false); } if (DateTime.Now.Ticks - this.sendUseSkillTicks[attackByIndex.skillMainId] > 5000000L) { this.sendUseSkills[attackByIndex.skillMainId] = false; } if (this.sendUseSkills[attackByIndex.skillMainId]) { return; } if (target == null) { target = this.self.GetAttackTarget(); } if (PvpServerStartSkillHeroList.IsStartByServer(this.self.npc_id)) { this.ComboAttack_Impl(index, target, true); } else { ReadySkillCheckInfo readySkillCheckInfo = new ReadySkillCheckInfo(); readySkillCheckInfo.unitId = this.self.unique_id; readySkillCheckInfo.skillId = attackByIndex.skillMainId; List <short> list = new List <short>(); if (null != target) { list.Add((short)target.unique_id); } readySkillCheckInfo.targetUnits = list; PvpEvent.SendReadySkillCheckEvent(readySkillCheckInfo); } } else { base.OnAttackFailedBeforeStart(this.self.getAttackByIndex(0)); } } else { this.ComboAttack_Impl(index, target, false); } }
public override void Conjure(string skillId, Units target = null, Vector3?targetPos = null) { this.self.InterruptConjure(SkillInterruptType.Initiative); Skill skillById = this.self.getSkillById(skillId); if (!skillById.CheckCD(false)) { Singleton <TriggerManager> .Instance.SendUnitSkillStateEvent(UnitEvent.UnitSkillCmdFailed, this.self, skillById); return; } if (!this.sendUseSkillTicks.ContainsKey(skillId)) { this.sendUseSkillTicks.Add(skillId, 0L); } if (!this.sendUseSkills.ContainsKey(skillId)) { this.sendUseSkills.Add(skillId, false); } if (DateTime.Now.Ticks - this.sendUseSkillTicks[skillId] > 5000000L) { this.sendUseSkills[skillId] = false; } if (this.sendUseSkills[skillId]) { Singleton <TriggerManager> .Instance.SendUnitSkillStateEvent(UnitEvent.UnitSkillCmdFailed, this.self, skillById); return; } if (targetPos.HasValue) { float y = AstarPath.active.GetPosHeight(targetPos.Value) + 0.05f; targetPos = new Vector3?(new Vector3(targetPos.Value.x, y, targetPos.Value.z)); } if (this.self.CanSkill || skillById.CheckSkillCanUseSpecial) { if (target == null && !targetPos.HasValue) { target = this.self.GetAttackTarget(); } skillById.attackTarget = target; skillById.attackPosition = targetPos; skillById.externalPostion = targetPos; if (Singleton <PvpManager> .Instance.IsInPvp && this.self.isPlayer) { if (PvpServerStartSkillHeroList.IsStartByServer(this.self.npc_id)) { this.Conjure_Impl(skillId, target, targetPos, true); } else if (UnitsSnapReporter.Instance.NetworkDelayInMs > 400L || UnityEngine.Random.Range(0, 100) > 90) { ReadySkillCheckInfo readySkillCheckInfo = new ReadySkillCheckInfo(); readySkillCheckInfo.unitId = this.self.unique_id; readySkillCheckInfo.skillId = skillId; List <Units> skillTargets = skillById.GetSkillTargets(); if (targetPos.HasValue) { readySkillCheckInfo.targetPosition = MoveController.Vector3ToSVector3(targetPos.Value); } List <short> list = new List <short>(); foreach (Units current in skillTargets) { list.Add((short)current.unique_id); } readySkillCheckInfo.targetUnits = list; PvpEvent.SendReadySkillCheckEvent(readySkillCheckInfo); this.sendUseSkills[skillId] = true; this.sendUseSkillTicks[skillId] = DateTime.Now.Ticks; } else { this.Conjure_Impl(skillId, target, targetPos, false); } } else { this.Conjure_Impl(skillId, target, targetPos, false); } } else { Singleton <TriggerManager> .Instance.SendUnitSkillStateEvent(UnitEvent.UnitSkillCmdFailed, this.self, skillById); } }