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); } }
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; } } }
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); } } } } }