protected void SendUseSkill(string skillID, Units target, Vector3 targetPos, bool isCrazyMode = true) { UseSkillInfo info = new UseSkillInfo { unitId = this.self.unique_id, skillId = skillID, targetUnit = (!(target != null)) ? 0 : target.unique_id, targetPosition = SVector3.Build(targetPos.x, targetPos.y, targetPos.z), targetRotate = this.self.transform.eulerAngles.y, controlMode = (!isCrazyMode) ? 1 : 0 }; PvpEvent.SendUseSkill(info); }
public void Conjure_Impl(string skillId, Units target, Vector3?targetPos, bool isPvp = false) { Skill skillById = this.self.getSkillById(skillId); if (SkillUtility.IsBurnUnitSkill(skillById) && targetPos.HasValue) { Units touchUnit = ManualControlTarget.GetTouchUnit(targetPos.Value); if (touchUnit != null && (touchUnit.GetType() == typeof(Tower) || touchUnit.GetType() == typeof(Home))) { base.OnSkillFailedBeforeStart(skillById); ClientLogger.Warn(string.Concat(new object[] { "不能摆蘑菇在这里", touchUnit, " ", targetPos.Value })); return; } } if (this.self.CanSkill || skillById.CheckSkillCanUseSpecial) { if (target == null && !targetPos.HasValue) { target = this.self.GetAttackTarget(); } skillById.attackTarget = target; skillById.attackPosition = targetPos; if (skillById.CheckCondition() && skillById.CheckTargets()) { if (isPvp) { UseSkillInfo useSkillInfo = new UseSkillInfo { unitId = this.self.unique_id, skillId = skillById.skillMainId, targetUnit = (!(skillById.attackTarget != null)) ? 0 : skillById.attackTarget.unique_id, targetPosition = (!skillById.attackPosition.HasValue) ? null : MoveController.Vector3ToSVector3(skillById.attackPosition.Value), targetRotate = this.self.transform.eulerAngles.y }; PvpEvent.SendUseSkill(useSkillInfo); this.sendUseSkills[skillId] = true; this.sendUseSkillTicks[skillId] = DateTime.Now.Ticks; this.self.moveController.clearContinueMovingTarget(); if (GlobalSettings.Instance.ClientGoAhead) { List <Units> list = new List <Units>(); if (target != null) { list.Add(target); } ActionManager.ReadySkill(new SkillDataKey(useSkillInfo.skillId, skillById.skillLevel, 0), this.self, list, skillById.attackPosition, skillById, false); } } else { this.self.InterruptAction(SkillInterruptType.Initiative); skillById.OnSkillStartCallback = new Callback <Skill>(base.OnSkillStart); skillById.OnSkillEndCallback = new Callback <Skill>(base.OnSkillEnd); skillById.OnSkillFailedBeforeStartCallback = new Callback <Skill>(base.OnSkillFailedBeforeStart); skillById.Start(); base.currSkill = skillById; } } else { base.OnSkillFailedBeforeStart(skillById); } } }
public void ComboAttack_Impl(int index, Units target, bool isPvp = false) { Skill attackByIndex = this.self.getAttackByIndex(index); if (this.self.CanAttack && !this.isComboAttack) { if (attackByIndex == null) { base.OnAttackFailedBeforeStart(null); return; } this.isComboAttack = true; if (target == null) { target = this.self.GetAttackTarget(); } attackByIndex.attackTarget = target; if (attackByIndex.CheckCondition() && attackByIndex.CheckTargets()) { if (!base.IsCurAttackRunnning() && this.self.CanAttack) { if (isPvp) { UseSkillInfo useSkillInfo = new UseSkillInfo { unitId = this.self.unique_id, skillId = attackByIndex.skillMainId, targetUnit = (!(target != null)) ? 0 : target.unique_id, targetPosition = (!(target != null)) ? null : MoveController.Vector3ToSVector3(target.transform.position), targetRotate = this.self.transform.eulerAngles.y }; PvpEvent.SendUseSkill(useSkillInfo); this.sendUseSkills[attackByIndex.skillMainId] = true; this.sendUseSkillTicks[attackByIndex.skillMainId] = DateTime.Now.Ticks; this.self.moveController.clearContinueMovingTarget(); if (GlobalSettings.Instance.ClientGoAhead) { List <Units> list = new List <Units>(); if (target != null) { list.Add(target); } ActionManager.ReadySkill(new SkillDataKey(useSkillInfo.skillId, attackByIndex.skillLevel, 0), this.self, list, null, attackByIndex, false); } } else { attackByIndex.Start(); attackByIndex.OnSkillStartCallback = new Callback <Skill>(base.OnAttackStart); attackByIndex.OnSkillEndCallback = new Callback <Skill>(base.OnAttackEnd); attackByIndex.OnSkillFailedBeforeStartCallback = new Callback <Skill>(base.OnAttackFailedBeforeStart); base.CurAttack = attackByIndex; this.self.playVoice("onNormalAttack"); this.IncComboIndex(); } } } else { base.OnAttackFailedBeforeStart(attackByIndex); } this.isComboAttack = false; } else { base.OnAttackFailedBeforeStart(null); } }