public void RefreshActor(double contextualId, short cellEnd) { if (Players.Find(p => p.ContextualId == contextualId) != null) { Players.Find(p => p.ContextualId == contextualId).Disposition.CellId = cellEnd; Console.WriteLine( $@"(Players) { Players.Find(p => p.ContextualId == contextualId).Name } se déplace sur la cellid -> {cellEnd}"); } else if (Monsters.Find(p => p.ContextualId == contextualId) != null) { Monsters.Find(p => p.ContextualId == contextualId).Disposition.CellId = cellEnd; Console.WriteLine($@"(Monsters) se déplace sur la cellid -> {cellEnd}"); } else if (Others.Find(p => p.ContextualId == contextualId) != null) { Others.Find(p => p.ContextualId == contextualId).Disposition.CellId = cellEnd; Console.WriteLine($@"(Others) se déplace sur la cellid -> {cellEnd}"); } else if (Npcs.Find(p => p.ContextualId == contextualId) != null) { Npcs.Find(p => p.ContextualId == contextualId).Disposition.CellId = cellEnd; Console.WriteLine($@"(Npcs) se déplace sur la cellid -> {cellEnd}"); } else { Console.WriteLine($@"Quelque chose se déplace sur la cellid -> {cellEnd}"); } }
private void HandleGameMapMovementMessage(IAccount account, GameMapMovementMessage message) { // The player has moved. Console.WriteLine($"GameMapMovementMessage[{message.ActorId}]CharacterId[{account.Character.Id}]"); lock (CheckLock) { var clientMovement = MapMovementAdapter.GetClientMovement(message.KeyMovements.Select(s => (uint)s).ToList()); if (message.ActorId == account.Character.Id) { account.Character.CellId = clientMovement.CellEnd.CellId; } else if (Players.Find(x => x.Id == message.ActorId) != null) { Players.Find(x => x.Id == message.ActorId).CellId = clientMovement.CellEnd.CellId; } else if (Entities.Find(x => x.Id == message.ActorId) != null) { Entities.Find(x => x.Id == message.ActorId).CellId = clientMovement.CellEnd.CellId; } else if (Monsters.Find(x => x.Id == message.ActorId) != null) { Monsters.Find(x => x.Id == message.ActorId).CellId = clientMovement.CellEnd.CellId; } //else //Logger.Default.Log($"ActorId[{message.ActorId}] not found"); //Monsters.Add(new MonsterGroup(new GroupMonsterStaticInformations(), message.ActorId, clientMovement.CellEnd.CellId)); } UpdateMapControl(); OnMapMovement(message); }
private void HandleGameMapMovementMessage(IAccount account, GameMapMovementMessage message) { lock (CheckLock) { var clientMovement = MapMovementAdapter.GetClientMovement(message.KeyMovements.Select(s => (uint)s).ToList()); if (Players.Find(x => x.Id == message.ActorId) != null) { Players.Find(x => x.Id == message.ActorId).CellId = clientMovement.CellEnd.CellId; } if (Entities.Find(x => x.Id == message.ActorId) != null) { Entities.Find(x => x.Id == message.ActorId).CellId = clientMovement.CellEnd.CellId; } if (Monsters.Find(x => x.Id == message.ActorId) != null) { Monsters.Find(x => x.Id == message.ActorId).CellId = clientMovement.CellEnd.CellId; } if (message.ActorId == account.Character.Id) { account.Character.CellId = clientMovement.CellEnd.CellId; } } UpdateMapControl(); OnMapMovement(message); }
public void ThrowItems(Tuple <int, short, byte, int, int, short> parameter) { MapMonster mon = Monsters.Find(s => s.MapMonsterId == parameter.Item1) ?? Monsters.Find(s => s.MonsterVNum == parameter.Item1); if (mon == null) { return; } short originX = mon.MapX; short originY = mon.MapY; short destX; short destY; int amount = 1; Observable.Timer(TimeSpan.FromSeconds(parameter.Item6)).Subscribe(s => { for (int i = 0; i < parameter.Item3; i++) { amount = ServerManager.RandomNumber(parameter.Item4, parameter.Item5); destX = (short)(originX + ServerManager.RandomNumber(-10, 10)); destY = (short)(originY + ServerManager.RandomNumber(-10, 10)); if (Map.IsBlockedZone(destX, destY)) { destX = originX; destY = originY; } 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)}"); } }); }
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))); }
protected void RemoveFighter(double Id) { lock (CheckLock) { Fighters.Remove(Fighters.Find(f => f.Id == Id)); Monsters.Remove(Monsters.Find(m => m.Id == Id)); } }
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(); }
private void HandleGameContextRemoveElementMessage(IAccount account, GameContextRemoveElementMessage message) { lock (CheckLock) { Players.Remove(Players.Find(p => p.Id == message.ObjectId)); Monsters.Remove(Monsters.Find(x => x.Id == message.ObjectId)); Entities.Remove(Entities.Find(x => x.Id == message.ObjectId)); UpdateMapControl(); } }
private void HandleGameActionFightDeathMessage(IAccount account, GameActionFightDeathMessage message) { lock (CheckLock) { if (Fighter.Id == message.TargetId) { Logger.Default.Log("Bot mort"); Fighters.Remove(Fighters.Find(f => f.Id == message.TargetId)); } if (Monsters.Exists(m => m.Id == message.TargetId)) { Logger.Default.Log($"Monstre[{message.TargetId}] est mort"); Monsters.Remove(Monsters.Find(m => m.Id == message.TargetId)); Logger.Default.Log($"Signalig FighterDiedAutoReset", LogMessageType.Divers); FighterDiedAutoReset.Set(); } } }
public void ThrowItems(Tuple <int, short, byte, int, int> parameter) { MapMonster mon = Monsters.Find(s => s.MapMonsterId == parameter.Item1) ?? Monsters.Find(s => s.MonsterVNum == parameter.Item1); if (mon == null) { return; } short originX = mon.MapX; short originY = mon.MapY; short destX; short destY; int amount = ServerManager.RandomNumber(parameter.Item4, parameter.Item5); for (int i = 0; i < parameter.Item3; i++) { destX = (short)(originX + ServerManager.RandomNumber(-10, 10)); destY = (short)(originY + ServerManager.RandomNumber(-10, 10)); MonsterMapItem droppedItem = new MonsterMapItem(destX, destY, parameter.Item2, amount); if (parameter.Item2 == 99) { return; } if (amount == 99) { return; } if (parameter == null) { return; } if (droppedItem == null) { return; } DroppedList[droppedItem.TransportId] = droppedItem; Broadcast($"throw {droppedItem.ItemVNum} {droppedItem.TransportId} {originX} {originY} {droppedItem.PositionX} {droppedItem.PositionY} {(droppedItem.GoldAmount > 1 ? droppedItem.GoldAmount : droppedItem.Amount)}"); } }
protected void RemoveFighter(double Id) { Fighters.Remove(Fighters.Find(f => f.Id == Id)); Monsters.Remove(Monsters.Find(m => m.Id == Id)); Companions.Remove(Companions.Find(c => c.Id == Id)); }
public bool NoEntitiesOnCell(int cellId) { return(Monsters.Find(p => p.Disposition.CellId == cellId) == null); }