Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
    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);
            }
        }
    }
Ejemplo n.º 3
0
 public static void SendUseSkill(UseSkillInfo info)
 {
     byte[] args = SerializeHelper.Serialize <UseSkillInfo>(info);
     SendMsgManager.Instance.SendPvpMsg(PvpCode.C2P_UseSkill, args);
 }
Ejemplo n.º 4
0
    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);
        }
    }