Ejemplo n.º 1
0
    protected override int UseAction(GameManager gameManager, AutoControllerState state)
    {
        int x = m_target.Item2, y = m_target.Item3;

        gameManager.SetMainPlayerFacingDirection(x, y);
        gameManager.HandlePlayerAttack();
        return(gameManager.GetMainPlayerAttackSpeed() + 50);
    }
Ejemplo n.º 2
0
 protected override int UseAction(GameManager gameManager, AutoControllerState state)        // Todo create data object to keep track of slot / playerId
 {
     if (m_target != null)
     {
         int x = m_target.Item2, y = m_target.Item3;
         gameManager.SetMainPlayerFacingDirection(x, y);
     }
     CastSpell(gameManager, m_slot, m_playerId);
     return(m_aether);
 }
Ejemplo n.º 3
0
 void Start()
 {
     m_cts             = new CancellationTokenSource();
     m_controllerState = new AutoControllerState();
     m_taskList        = new ConcurrentQueue <AutoTask>();
     m_actionList      = new List <AutoAction>();
     RefreshAutomation();
     m_pathManager = PathManager.Instance;
     m_pathManager.InitializeCache(m_gameManager);
 }
Ejemplo n.º 4
0
 protected override bool CanUseAction(GameManager gameManager, AutoControllerState state)
 {
     if (!gameManager.IsMainPlayerMoving())
     {
         MapTile start = GetPlayerPosition(gameManager);
         int     map   = start.Item1;
         foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
         {
             if (player.IsPlayerMob())
             {
                 MapTile goal           = GetPlayerPosition(gameManager, player);
                 int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                 if (simpleDistance <= 1)
                 {
                     m_target = goal;
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Ejemplo n.º 5
0
    public override async Task <bool> IsActive(GameManager gameManager, PathManager pathManager, AutoControllerState state)
    {
        MapTile start = GetPlayerPosition(gameManager);
        int     map = start.Item1, minDistance = Int32.MaxValue;
        bool    targetFound = false;

        // TODO Sort players based on DistanceHeuristic first and loop through until the heuristic distance is more than the min actual distance.
        foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
        {
            if (player.IsPlayerMob())
            {
                MapTile goal           = GetPlayerPosition(gameManager, player);
                int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                if (simpleDistance < minDistance)
                {
                    LinkedList <MapTile> walkPath = null;
                    if (await pathManager.TryGetWalkPath(gameManager, start, goal, player, value => walkPath = value))
                    {
                        int distance = walkPath.Count;
                        if (distance < minDistance)
                        {
                            minDistance = distance;
                            state.SetTargetTile(goal);
                            state.SetTarget(player);
                            targetFound = true;
                        }
                    }
                }
            }
        }
        return(targetFound);
    }
Ejemplo n.º 6
0
    // TODO Consider simply returning WalkToTile if samearea is true.
    protected async Task MoveToMapTile(GameManager gameManager, PathManager pathManager, AutoControllerState state, MapTile goal, PlayerManager player, int distanceFromGoal = 0)
    {
        MapTile start = GetPlayerPosition(gameManager);
        Tuple <LinkedList <MapTile>, WarpDevice, int> mapPathInfo = await pathManager.GetMapPath(gameManager, start, goal);

        if (mapPathInfo != null)
        {
            LinkedList <MapTile> mapPath    = mapPathInfo.Item1;
            WarpDevice           warpDevice = mapPathInfo.Item2;
            int  pathDistance = mapPathInfo.Item3;
            bool sameArea     = await pathManager.IsSameArea(gameManager, start, goal);

            if (!sameArea || pathDistance > distanceFromGoal)
            {
                if (warpDevice != default(WarpDevice))
                {
                    // Use spell/item
                }
                else if (mapPath.Count > 1)
                {
                    MapTile targetTile = mapPath.ElementAt(1);
                    await WalkToTile(gameManager, pathManager, state, start, targetTile, player);
                }
            }
        }
    }
Ejemplo n.º 7
0
 public AttackAction(GameManager gameManager, AutoControllerState state, CancellationToken token) : base(gameManager, state, token)
 {
 }
Ejemplo n.º 8
0
    public override async Task Move(GameManager gameManager, PathManager pathManager, AutoControllerState state)
    {
        MapTile       goal     = state.GetTargetTile();
        PlayerManager player   = state.GetTarget();
        int           distance = (player == null ? 3 : 0);

        if (goal != null)
        {
            await MoveToMapTile(gameManager, pathManager, state, goal, player, distance);
        }
    }
Ejemplo n.º 9
0
    protected async Task WalkToTile(GameManager gameManager, PathManager pathManager, AutoControllerState state, MapTile start, MapTile goal, PlayerManager player, int distanceFromGoal = 0)
    {
        LinkedList <MapTile> walkPath = null;

        if (await pathManager.TryGetWalkPath(gameManager, start, goal, player, value => walkPath = value))
        {
            if (walkPath.Count > 1 && PathManager.DistanceHeuristic(start, goal) > distanceFromGoal)
            {
                MapTile nextTile  = walkPath.ElementAt(1);
                Vector3 direction = new Vector3(nextTile.Item2 - start.Item2, -(nextTile.Item3 - start.Item3), 0);
                gameManager.HandlePlayerPosition(direction, false);
                Vector3 previous = default(Vector3);
                foreach (MapTile tile in walkPath)
                {
                    Vector3 current = gameManager.WorldPosition(tile.Item2, tile.Item3, true) + Vector3.forward;
                    if (!previous.Equals(default(Vector3)))
                    {
                        Debug.DrawLine(previous, current, Color.red, 1f, false);
                    }
                    previous = current;
                }
            }
        }
    }
Ejemplo n.º 10
0
 protected override int DelayAction(GameManager gameManager, AutoControllerState state)
 {
     return(m_aether);
 }
Ejemplo n.º 11
0
 public override async Task Move(GameManager gameManager, PathManager pathManager, AutoControllerState state)
 {
     await Task.Yield();
 }
Ejemplo n.º 12
0
 public AutoAction(GameManager gameManager, AutoControllerState state, CancellationToken token)
 {
     m_manager         = gameManager;
     m_controllerState = state;
     LoopAction(token);
 }
Ejemplo n.º 13
0
 protected override bool CanUseAction(GameManager gameManager, AutoControllerState state)
 {
     return(true);
 }
Ejemplo n.º 14
0
    public override async Task Move(GameManager gameManager, PathManager pathManager, AutoControllerState state)
    {
        MapTile       start  = GetPlayerPosition(gameManager);
        MapTile       goal   = state.GetTargetTile();
        PlayerManager player = state.GetTarget();

        if (goal != null)
        {
            await WalkToTile(gameManager, pathManager, state, start, goal, player);
        }
    }
Ejemplo n.º 15
0
 protected override bool CanUseAction(GameManager gameManager, AutoControllerState state)
 {
     m_target = null;
     if (!String.IsNullOrEmpty(m_type))
     {
         gameManager.GetMainPlayerHP(out int curHp, out int maxHp);
         gameManager.GetMainPlayerMP(out int curMp, out int maxMp);
         int hpPercent = GetPercent(curHp, maxHp);
         int mpPercent = GetPercent(curMp, maxMp);
         if (m_type.Equals("Healing"))
         {
             int targetPlayerId = 0;
             if (hpPercent < 90)
             {
                 targetPlayerId = gameManager.GetMainPlayerId();
             }
             else
             {
                 if (mpPercent > 20)
                 {
                     foreach (PartyPlayerUI partyPlayer in gameManager.GetAllPartyPlayers())
                     {
                         if (partyPlayer.GetHPBar() < 90)
                         {
                             targetPlayerId = partyPlayer.GetPlayerId();
                             break;
                         }
                     }
                 }
             }
             if (targetPlayerId > 0)
             {
                 m_playerId = targetPlayerId;
                 return(true);
             }
         }
         else if (m_type.Equals("Sacrifice"))
         {
             if (hpPercent > 50)
             {
                 int targetPlayerId = 0;
                 if (mpPercent < 50)
                 {
                     targetPlayerId = gameManager.GetMainPlayerId();
                 }
                 else
                 {
                     foreach (PartyPlayerUI partyPlayer in gameManager.GetAllPartyPlayers())
                     {
                         if (partyPlayer.GetMPBar() < 90)
                         {
                             targetPlayerId = partyPlayer.GetPlayerId();
                             break;
                         }
                     }
                 }
                 if (targetPlayerId > 0)
                 {
                     m_playerId = targetPlayerId;
                     return(true);
                 }
             }
         }
         else if (m_type.Equals("Regeneration"))
         {
             m_playerId = gameManager.GetMainPlayerId();
             return(true);
         }
         else if (m_type.Equals("Blast"))
         {
             if (mpPercent == 100)
             {
                 int     maxDistance = Int32.MinValue, maxPlayerId = 0;
                 bool    targetFound = false;
                 MapTile start       = GetPlayerPosition(gameManager);
                 foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
                 {
                     if (player.IsPlayerMob())
                     {
                         MapTile goal           = GetPlayerPosition(gameManager, player);
                         int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                         if (maxDistance < simpleDistance)
                         {
                             maxDistance = simpleDistance;
                             maxPlayerId = player.GetPlayerId();
                             targetFound = true;
                         }
                     }
                 }
                 if (targetFound)
                 {
                     m_playerId = maxPlayerId;
                     return(true);
                 }
             }
         }
         else if (m_type.Equals("Assault"))
         {
             if (mpPercent > 90)
             {
                 int     maxDistance = Int32.MinValue, maxPlayerId = 0;
                 bool    targetFound = false;
                 MapTile start       = GetPlayerPosition(gameManager);
                 foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
                 {
                     if (player.IsPlayerMob())
                     {
                         MapTile goal           = GetPlayerPosition(gameManager, player);
                         int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                         if (maxDistance < simpleDistance)
                         {
                             maxDistance = simpleDistance;
                             maxPlayerId = player.GetPlayerId();
                             targetFound = true;
                         }
                     }
                 }
                 if (targetFound)
                 {
                     m_playerId = maxPlayerId;
                     return(true);
                 }
             }
         }
         else if (m_type.Equals("Spirit Strike"))
         {
             if (!gameManager.IsMainPlayerMoving())
             {
                 if (hpPercent > 90)
                 {
                     m_playerId = gameManager.GetMainPlayerId();
                     MapTile start = GetPlayerPosition(gameManager);
                     foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
                     {
                         if (player.IsPlayerMob())
                         {
                             MapTile goal           = GetPlayerPosition(gameManager, player);
                             int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                             if (simpleDistance <= 1)
                             {
                                 m_target = goal;
                                 return(true);
                             }
                         }
                     }
                 }
             }
         }
         else if (m_type.Equals("Critical Strike"))
         {
             if (!gameManager.IsMainPlayerMoving())
             {
                 if (hpPercent > 90)
                 {
                     m_playerId = gameManager.GetMainPlayerId();
                     MapTile start = GetPlayerPosition(gameManager);
                     foreach (PlayerManager player in gameManager.GetAllPlayerManagers())
                     {
                         if (player.IsPlayerMob())
                         {
                             MapTile goal           = GetPlayerPosition(gameManager, player);
                             int     simpleDistance = PathManager.DistanceHeuristic(start, goal);
                             if (simpleDistance <= 1)
                             {
                                 m_target = goal;
                                 return(true);
                             }
                         }
                     }
                 }
             }
         }
         else if (m_type.Equals("Covenant"))
         {
             if (hpPercent > 90 && mpPercent < 90)
             {
                 m_playerId = gameManager.GetMainPlayerId();
                 return(true);
             }
         }
     }
     return(false);
 }
Ejemplo n.º 16
0
 protected abstract bool CanUseAction(GameManager gameManager, AutoControllerState state);
Ejemplo n.º 17
0
 public CastAction(GameManager gameManager, AutoControllerState state, CancellationToken token, SlotUI slot, int aether, string type) : base(gameManager, state, token)
 {
     m_slot   = slot;
     m_aether = aether;
     m_type   = type;
 }
Ejemplo n.º 18
0
 protected abstract int DelayAction(GameManager gameManager, AutoControllerState state);
Ejemplo n.º 19
0
 public MessageAction(GameManager gameManager, AutoControllerState state, CancellationToken token, int aether, string message) : base(gameManager, state, token)
 {
     m_aether  = aether;
     m_message = message;
 }
Ejemplo n.º 20
0
    /*public async override Task<bool> IsActive(GameManager gameManager, PathManager pathManager, AutoControllerState state) {
     *  int distanceFromTarget = pathManager.GetDistanceToPlayer();
     *  MapTile start = GetPlayerPosition(gameManager);
     *  List<int> playerIdList = new List<int>();
     *  int map = start.Item1;
     *  float totalX = 0f, totalY = 0f, followPositionScale = 0f;
     *  foreach(GameManager manager in ClientManager.GetAllGameManagers()) {
     *      if(!manager.Equals(gameManager)) {
     *          int playerId = manager.GetMainPlayerId();
     *          MapTile goal = GetPlayerPosition(manager);
     *          if(await pathManager.IsSameArea(gameManager, start, goal)) {
     *              int distance = PathManager.DistanceHeuristic(start, goal);
     *              float scale = (float) distance / distanceFromTarget * 2;
     *              if(!playerIdList.Contains(playerId)) {
     *                  totalX += goal.Item2 * scale;
     *                  totalY += goal.Item3 * scale;
     *                  followPositionScale+=scale;
     *                  playerIdList.Add(playerId);
     *              }
     *          }
     *      }
     *  }
     *  foreach(PartyPlayerUI partyPlayer in gameManager.GetAllPartyPlayers()) {
     *      int playerId = partyPlayer.GetPlayerId();
     *      PlayerManager player = gameManager.GetPlayerManager(playerId);
     *      if(player != null) {
     *          MapTile goal = GetPlayerPosition(gameManager, player);
     *          int distance = PathManager.DistanceHeuristic(start, goal);
     *          float scale = (float) distance / distanceFromTarget * 2;
     *          int x = goal.Item2, y = goal.Item3;
     *          if(!playerIdList.Contains(playerId)) {
     *              totalX += x * scale;
     *              totalY += y * scale;
     *              followPositionScale+=scale;
     *              playerIdList.Add(playerId);
     *          }
     *      }
     *  }
     *  if(playerIdList.Count > 0) {
     *      int x = (int) Mathf.Round(totalX / followPositionScale);
     *      int y = (int) Mathf.Round(totalY / followPositionScale);
     *      state.SetTargetTile(Tuple.Create(map, x, y));
     *  }
     *  return playerIdList.Count > 0;
     *  }*/

    public override async Task Move(GameManager gameManager, PathManager pathManager, AutoControllerState state)
    {
        MapTile start = GetPlayerPosition(gameManager);
        MapTile goal  = state.GetTargetTile();

        if (goal != null)
        {
            int distanceFromTarget = pathManager.GetDistanceToPlayer();
            await WalkToTile(gameManager, pathManager, state, start, goal, null, distanceFromTarget);
        }
    }
Ejemplo n.º 21
0
 protected override int UseAction(GameManager gameManager, AutoControllerState state)        // Todo create data object to keep track of slot / playerId
 {
     gameManager.HandleChatInput(m_message);
     return(m_aether);
 }
Ejemplo n.º 22
0
    public async override Task <bool> IsActive(GameManager gameManager, PathManager pathManager, AutoControllerState state)
    {
        await Task.Yield();

        GameManager currentManager = ClientManager.GetCurrentGameManager();

        if (!currentManager.Equals(gameManager))
        {
            PlayerManager player = currentManager.GetMainPlayerManager();
            state.SetTarget(player);
            state.SetTargetTile(GetPlayerPosition(currentManager, player));
            return(true);
        }
        return(false);
    }
Ejemplo n.º 23
0
 public abstract Task <bool> IsActive(GameManager gameManager, PathManager pathManager, AutoControllerState state);
Ejemplo n.º 24
0
 public abstract Task Move(GameManager gameManager, PathManager pathManager, AutoControllerState state);
Ejemplo n.º 25
0
    public async override Task <bool> IsActive(GameManager gameManager, PathManager pathManager, AutoControllerState state)
    {
        await Task.Yield();

        return(false);
    }
Ejemplo n.º 26
0
    public override async Task <bool> IsActive(GameManager gameManager, PathManager pathManager, AutoControllerState state)
    {
        GameManager closestGameManager = ClientManager.GetCurrentGameManager();
        int         minDistance        = Int32.MaxValue;
        bool        regroupRequired    = false;
        bool        allWithinRange     = true;
        MapTile     start = GetPlayerPosition(gameManager);

        foreach (GameManager manager in ClientManager.GetAllGameManagers())
        {
            if (!manager.Equals(gameManager))
            {
                MapTile goal = GetPlayerPosition(manager);
                Tuple <LinkedList <MapTile>, WarpDevice, int> mapPathInfo = await pathManager.GetMapPath(gameManager, start, goal);

                int  distance = mapPathInfo.Item3;
                bool sameArea = await pathManager.IsSameArea(gameManager, start, goal);

                if (distance > REGROUP_REQUIRED_DISTANCE)
                {
                    if (distance < minDistance)
                    {
                        minDistance        = distance;
                        closestGameManager = manager;
                    }
                    allWithinRange = false;
                }
                if (distance > REGROUP_REQUIRED_DISTANCE || !sameArea)
                {
                    regroupRequired = true;
                }
            }
        }
        if (closestGameManager != null)
        {
            PlayerManager player = closestGameManager.GetMainPlayerManager();
            state.SetTargetTile(GetPlayerPosition(closestGameManager, player));
            state.SetTarget(player);
        }
        if (regroupRequired && !allWithinRange)
        {
            MapTile safePoint = pathManager.GetSafePoint();
            Tuple <LinkedList <MapTile>, WarpDevice, int> mapPathInfo = await pathManager.GetMapPath(gameManager, start, safePoint);

            int distance = mapPathInfo.Item3;
            if (distance < minDistance)
            {
                state.SetTargetTile(safePoint);
                state.SetTarget(null);
            }
        }
        return(regroupRequired);
    }