Esempio n. 1
0
    private void AttackTo(Role target)
    {
        _attackingTarget = target;
        Skill skill      = null;
        bool  GroupAllow = true;

        skill = SelectSkill(target);
        if (skill != null)
        {
            if (target.isLife && _monster.Group != null)
            {
                GroupMemberAction action = new GroupMemberAction(_monster, GroupMemberAction.USE_SKILL);
                GroupAllow = _monster.Group.MemberAction(action);
            }
            if (GroupAllow)
            {
                _monster.SetFaceTo(target.transform.position);
                skill.Release();
            }
        }
        if (skill == null)
        {
            PursueAction action = new PursueAction(_monster, target, _monster.GetRoleInfo().PursueRange);
            _monster.AddAction(action);
        }
    }
Esempio n. 2
0
    private void RefreshState()
    {
        if (_target.transform == null && worker.transform == null)
        {
            return;
        }
        float dis = Vector2.Distance(_target.transform.position, worker.transform.position);

        if (_pursueAction != null && !_pursueAction.Finished)
        {
            if (Vector2.Distance(worker.transform.position, _pursueAction.TargetRole.transform.position) < worker.SeeDistance)
            {
                _pursueAction.Cancel();
                _pursueAction = null;

                state = STATE_FREE;
            }
            else if (Vector2.Distance(_target.transform.position, _pursueAction.TargetRole.transform.position) > SystemConsts.IN_HARMFUL_DIS * 1.5f)
            {
                _pursueAction.Cancel();
                _pursueAction = null;
                state         = STATE_FREE;
            }
        }
        else
        {
            Role enemy = _target.GetHarmfulEnemy();

            if (enemy != null)
            {
                if (Vector2.Distance(worker.transform.position, enemy.transform.position) > worker.SeeDistance)
                {
                    _pursueAction = new PursueAction(worker, enemy, 100f);
                    worker.AddAction(_pursueAction);
                    state = STATE_ON_DUTY;
                }
                else
                {
                    state = STATE_FREE;
                }
            }
            else
            {
                state = STATE_FREE;
            }
        }
    }
Esempio n. 3
0
    private void AttackToHero()
    {
        if (!(_monster.CurrentAction is PursueAction))
        {
            if (_hero != null && _hero.Alive)
            {
                Role target = _hero;

                Skill skill      = null;
                bool  GroupAllow = true;

                skill = SelectSkill(target);
                if (skill != null)
                {
                    if (target.isLife && _monster.Group != null)
                    {
                        GroupMemberAction action = new GroupMemberAction(_monster, GroupMemberAction.USE_SKILL);
                        GroupAllow = _monster.Group.MemberAction(action);
                    }
                    if (GroupAllow)
                    {
                        skill.Release();
                    }
                }

                if (skill == null)
                {
                    if (_monster.aiTpl.Matrixjob != Matrix.JOB_REMOTE_ATTACK)
                    {
                        PursueAction action = new PursueAction(_monster, target, _monster.GetRoleInfo().PursueRange);
                        _monster.AddAction(action);
                    }
                }
            }
        }
    }