Esempio n. 1
0
        protected IFighter GetFighter(double fighterId)
        {
            lock (CheckLock)
            {
                //Logger.Default.Log($"Looking for id [{fighterId}]");

                //foreach (var monster in Account.Character.Map.Monsters)
                //    Logger.Default.Log($"[Monster]{monster.GroupName} has id {monster.Id} and level [{monster.GroupLevel}]");
                //foreach (var fighter in Fighters)
                //    Logger.Default.Log($"[Fighter]Fighter on {fighter.CellId} has id {fighter.Id}");
                //foreach (var companion in Companions)
                //    Logger.Default.Log($"[Companion]{companion.Name} has id {companion.Id}");

                if (Monsters.Find(x => x.Id == fighterId) != null)
                {
                    return(Monsters.FirstOrDefault(m => m.Id == fighterId));
                }
                //else if (Companions.Find(x => x.Id == fighterId) != null)
                //    return Companions.FirstOrDefault(c => c.Id == fighterId);
                else
                {
                    return(Fighters.FirstOrDefault(f => f.Id == fighterId));
                }
            }
        }
Esempio n. 2
0
 protected IFighter GetFighter(double fighterId)
 {
     return(Monsters.Find(x => x.Id == fighterId) != null
         ? Monsters.FirstOrDefault(m => m.Id == fighterId)
         : (Companions.Find(x => x.Id == fighterId) != null
             ? Companions.FirstOrDefault(c => c.Id == fighterId)
             : Fighters.FirstOrDefault(f => f.Id == fighterId)));
 }
Esempio n. 3
0
        public Obj_AI_Minion JungleClear(bool useCast = true, int numberOfHits = 1)
        {
            if (IsReady && numberOfHits >= 1)
            {
                BestPositionResult best;
                switch (Type)
                {
                case SpellType.Linear:
                    best = GetBestObjectInLine(Monsters, numberOfHits);
                    if (best.Hits >= numberOfHits)
                    {
                        if (useCast)
                        {
                            Cast(best.Position);
                        }
                        return(best.Target as Obj_AI_Minion);
                    }
                    break;

                case SpellType.Circular:
                    best = GetBestCircularObject(Monsters, numberOfHits);
                    if (best.Hits >= numberOfHits)
                    {
                        if (useCast)
                        {
                            Cast(best.Position);
                        }
                        return(best.Target as Obj_AI_Minion);
                    }
                    break;

                case SpellType.Self:
                    var objects = ObjectsInRange(Monsters);
                    if (objects.Count >= numberOfHits)
                    {
                        if (useCast)
                        {
                            Cast();
                        }
                        return(objects.FirstOrDefault() as Obj_AI_Minion);
                    }
                    break;

                case SpellType.Targeted:
                    var minion = Monsters.FirstOrDefault();
                    if (minion != null)
                    {
                        if (useCast)
                        {
                            Cast(minion);
                        }
                        return(minion as Obj_AI_Minion);
                    }
                    break;
                }
            }
            return(null);
        }
Esempio n. 4
0
File: Map.cs Progetto: Teles1/Cookie
        public void LaunchAttack(double removeMob = 0)
        {
            if (removeMob != 0)
            {
                Monsters.Remove(Monsters.Find(x => x.Id == removeMob));
            }
            Logger.Default.Log($"LaunchAttack");
            var monsterGroup = Monsters.FirstOrDefault();

            if (monsterGroup == null)
            {
                return;
            }
            int maxLevel = monsterGroup.GroupLevel;

            foreach (var monster in Monsters)
            {
                if (monster.GroupLevel > maxLevel)
                {
                    monsterGroup = monster;
                }
            }
            if (_account.Character.CellId == monsterGroup.CellId)
            {
                _account.Network.SendToServer(new GameRolePlayAttackMonsterRequestMessage(monsterGroup.Id));
                return;
            }
            var movement = MoveToCell(monsterGroup.CellId);

            void MovementFinished(object s, CellMovementEventArgs e)
            {
                movement.MovementFinished -= MovementFinished;
                if (e.Sucess)
                {
                    if (e.EndCell == monsterGroup.CellId)
                    {
                        Task.Delay(250).Wait();
                        _account.Network.SendToServer(new GameRolePlayAttackMonsterRequestMessage(monsterGroup.Id));
                        Logger.Default.Log($"Launching Attack");
                    }
                    else
                    {
                        Logger.Default.Log($"Movement returned Success but endCell[{e.EndCell}] doens't match with monsterCell[{monsterGroup.CellId}]. Perhaps listening to wrong movement?");
                        LaunchAttack(monsterGroup.Id);
                    }
                }

                /*else
                 * {
                 *  Logger.Default.Log($"Could not move closer to {monsterGroup.GroupName}.");
                 *  _account.PerformAction(_account.Character.PathManager.DoAction, 1000);
                 * }
                 */
            }

            movement.MovementFinished += MovementFinished;
            movement.PerformMovement();
        }
Esempio n. 5
0
        //TODO: Create helper method for creating monsters
        public static Monster Get(int id)
        {
            var monster = Monsters.FirstOrDefault(m => m.Id == id);

            if (monster == null)
            {
                throw new ArgumentOutOfRangeException(nameof(id), "Unknown monster");
            }

            //TODO: Should this be handled at a higher level to allow for more flexibility
            return(monster.CreateInstance());
        }
Esempio n. 6
0
        public void ThrowItems(Tuple <int, short, byte, int, int> parameter)
        {
            MapMonster mon     = Monsters.FirstOrDefault(s => s.MapMonsterId == parameter.Item1);
            short      originX = mon.MapX;
            short      originY = mon.MapY;
            short      destX;
            short      destY;
            int        amount = ServerManager.Instance.RandomNumber(parameter.Item4, parameter.Item5);

            for (int i = 0; i < parameter.Item3; i++)
            {
                destX = (short)(originX + ServerManager.Instance.RandomNumber(-10, 10));
                destY = (short)(originY + ServerManager.Instance.RandomNumber(-10, 10));
                MonsterMapItem droppedItem = new MonsterMapItem(destX, destY, parameter.Item2, amount);
                DroppedList[droppedItem.TransportId] = droppedItem;
                Broadcast($"throw {droppedItem.ItemVNum} {droppedItem.TransportId} {originX} {originY} {droppedItem.PositionX} {droppedItem.PositionY} {(droppedItem.GoldAmount > 1 ? droppedItem.GoldAmount : droppedItem.Amount)}");
            }
        }
Esempio n. 7
0
        public void LaunchAttack()
        {
            var monsterGroup = Monsters.FirstOrDefault();

            if (_account.Character.CellId == monsterGroup.CellId)
            {
                _account.Network.SendToServer(new GameRolePlayAttackMonsterRequestMessage(monsterGroup.Id));
                return;
            }
            var movement = MoveToCell(monsterGroup.CellId);

            movement.MovementFinished += (sender, e) =>
            {
                if (e.Sucess)
                {
                    _account.Network.SendToServer(new GameRolePlayAttackMonsterRequestMessage(monsterGroup.Id));
                }
            };
            movement.PerformMovement();
        }
        public Monster UpdateAndGetMonster(ulong address, string id, float maxHealth, float currentHealth, float sizeScale)
        {
            Monster monster = null;

            monster = Monsters.FirstOrDefault(existingMonster => existingMonster.Address == address);
            if (monster != null)
            {
                monster.Id             = id;
                monster.Health.Max     = maxHealth;
                monster.Health.Current = currentHealth;
                monster.SizeScale      = sizeScale;

                return(monster);
            }

            monster = new Monster(address, id, maxHealth, currentHealth, sizeScale);
            Monsters.Add(monster);

            return(monster);
        }
Esempio n. 9
0
        public Monster UpdateAndGetMonster(ulong address, string id, float maxHealth, float currentHealth, float sizeScale, float scaleModifier)
        {
            Monster monster = null;

            monster = Monsters.FirstOrDefault(existingMonster => existingMonster.Address == address);
            if (monster != null)
            {
                monster.Id             = id;
                monster.Health.Max     = maxHealth;
                monster.Health.Current = currentHealth;
                monster.SizeScale      = sizeScale;
                monster.ScaleModifier  = scaleModifier;
            }
            else
            {
                monster = new Monster(address, id, maxHealth, currentHealth, sizeScale, scaleModifier);
                Monsters.Add(monster);
            }

            monster.NotifyPropertyChanged(nameof(Monster.IsVisible));

            return(monster);
        }
Esempio n. 10
0
 public static Monster GetByKind(string monsterKind)
 {
     return(Monsters.FirstOrDefault(x => x.Kind.StartsWith(monsterKind)));
 }
Esempio n. 11
0
File: Game.cs Progetto: gormel/has
 public Monster QueryMonster(Vector2 point)
 {
     return(Monsters.FirstOrDefault(m => m.Bounds.Contains(point)));
 }
Esempio n. 12
0
 public Monster GetMonsterAt(int x, int y)
 {
     return(Monsters.FirstOrDefault(m => m.AreaControlled.Any(cell => cell.X == x && cell.Y == y)));
 }
Esempio n. 13
0
 public Monster GetMonsterAt(int x, int y)
 {
     return(Monsters.FirstOrDefault(m => m.X == x && m.Y == y));
 }