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)); } } }
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))); }
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); }
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(); }
//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()); }
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)}"); } }
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); }
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); }
public static Monster GetByKind(string monsterKind) { return(Monsters.FirstOrDefault(x => x.Kind.StartsWith(monsterKind))); }
public Monster QueryMonster(Vector2 point) { return(Monsters.FirstOrDefault(m => m.Bounds.Contains(point))); }
public Monster GetMonsterAt(int x, int y) { return(Monsters.FirstOrDefault(m => m.AreaControlled.Any(cell => cell.X == x && cell.Y == y))); }
public Monster GetMonsterAt(int x, int y) { return(Monsters.FirstOrDefault(m => m.X == x && m.Y == y)); }