public static void HandleGameRolePlayAttackMonsterRequest(GameRolePlayAttackMonsterRequestMessage message, WorldClient client) { if (client.Character.Map != null) { MonsterGroup group = client.Character.Map.Instance.GetEntity <MonsterGroup>((long)message.monsterGroupId); if (group != null && client.Character.CellId == group.CellId) { if (client.Character.Map.BlueCells.Count >= group.MonsterCount && client.Character.Map.RedCells.Count() >= client.Character.FighterCount) { client.Character.Map.Instance.RemoveEntity(group); FightPvM fight = FightProvider.Instance.CreateFightPvM(group, client.Character.Map, (short)group.CellId); fight.RedTeam.AddFighter(client.Character.CreateFighter(fight.RedTeam)); foreach (var fighter in group.CreateFighters(fight.BlueTeam)) { fight.BlueTeam.AddFighter(fighter); } fight.StartPlacement(); } else { client.Character.ReplyError("Unable to fight on this map"); } } else { client.Character.NoMove(); } } }
public static void HandleAttackRequest(GameRolePlayAttackMonsterRequestMessage message, WorldClient client) { if (client.Character.Map == null) { return; } if (client.Character.CancelMonsterAgression) { client.Character.CancelMonsterAgression = false; return; } if (!client.Character.Map.IsValid()) { client.Character.Reply("Unable to start placement,this map is not valid"); return; } var group = client.Character.Map.Instance.GetMapMonsterGroup(message.monsterGroupId); if (group != null) { FightPvM fight = FightProvider.Instance.CreatePvMFight(group, client.Character.Map, (short)group.CellId); fight.BlueTeam.AddFighter(client.Character.CreateFighter(fight.BlueTeam)); // on ajoute le perso group.Monsters.ForEach(x => fight.RedTeam.AddFighter(x.CreateFighter(fight.RedTeam))); // on ajoute les monstres fight.StartPlacement(); } else { client.Character.NotificationError("Unable to fight, MonsterGroup dosent exist..."); } }
/// <summary> /// Launch a fight by sending a GameRolePlayAttackMonsterRequestMessage. /// </summary> public void LaunchFight(int id) { GameRolePlayAttackMonsterRequestMessage msg = new GameRolePlayAttackMonsterRequestMessage(id); m_Account.SocketManager.Send(msg); m_Account.Log(new ActionTextInformation("Launch Fight !"), 1); Thread t = new Thread(new ThreadStart(m_Account.Map.CheckFight)); t.Start(); }
private void HandleBasicAckMessage(BasicAckMessage message, ConnectedHost source) { if (mConfirmed) { mConfirmed = false; GameRolePlayAttackMonsterRequestMessage newMessage = new GameRolePlayAttackMonsterRequestMessage(); newMessage.monsterGroupId = AttackedMonstersId; mHost.SendMessage(newMessage); } }
public void LaunchFight(int id) { /* Ajout temporaire (?) pour résoudre le bug du lancement de combat qui ne se faisait pas * parce que le groupe de mob bougeait */ MovementPath path = (new Pathfinder(m_Account.Map.Data, m_Account.Map)).FindPath(m_Account.Map.Character.CellId, followinggroup.m_cellId); if (!(path == null)) { using (BigEndianWriter writer = new BigEndianWriter()) { GameRolePlayAttackMonsterRequestMessage msg = new GameRolePlayAttackMonsterRequestMessage(id); m_Account.SocketManager.Send(msg); m_Account.Log(new ActionTextInformation("Launch Fight !"), 1); } } else { m_Account.Log(new ActionTextInformation("Search Fight: le groupe de mob n'est pas au même emplacement.."), 1); this.SearchFight(); } }
private void GameRolePlayAttackMonsterRequestMessageHandler(DofusClient client, GameRolePlayAttackMonsterRequestMessage message) { // }
public void GameRolePlayAttackMonsterRequestMessageFrame(WorldClient client, GameRolePlayAttackMonsterRequestMessage gameRolePlayAttackMonsterRequestMessage) { var map = MapManager.Instance.GetMap(client.ActiveCharacter.MapId); if (map == null) { return; } var monstergroup = map.MonstersGroups.Find(x => x.Id == (int)gameRolePlayAttackMonsterRequestMessage.monsterGroupId); if (monstergroup == null) { return; } if (client.ActiveCharacter.CellId != monstergroup.RolePlayGroupMonsterInformations.disposition.cellId) { return; } client.SendPacket(new GameContextDestroyMessage()); client.SendPacket(new GameContextCreateMessage(2)); client.SendPacket(new CharacterStatsListMessage(client.ActiveCharacter.GetCharacterCharacteristicsInformations())); client.SendPacket(new GameFightStartingMessage((uint)FightTypeEnum.FIGHT_TYPE_PvM, 1, (double)client.ActiveCharacter.Id, gameRolePlayAttackMonsterRequestMessage.monsterGroupId)); client.SendPacket(new GameFightJoinMessage(true, false, true, false, 450, (uint)FightTypeEnum.FIGHT_TYPE_PvM)); client.SendPacket(new GameFightPlacementPossiblePositionsMessage(map.FightStartingPosition.positionsForChallengers, map.FightStartingPosition.positionsForDefenders, 0)); //Add monster to Defenders List <Fighter> monsters = new List <Fighter>(); for (int i = 0; i < monstergroup.Monsters.Count; i++) { var cellUsed = monsters.Select(x => (uint)x.CellId).ToList(); var cellPlacementId = map.FightStartingPosition.positionsForDefenders.Find(x => !cellUsed.Contains(x)); //check dans fighters la cell utilisé if (cellPlacementId != 0) { monsters.Add(new MonsterFighter((i + 1) * -1, TeamEnum.TEAM_DEFENDER, monstergroup.Monsters[i], (int)cellPlacementId)); //ajout des monstres } } //on enléve le monster group map.RemoveMonsterGroup(client, monstergroup); //add characters to challengers List <Fighter> characters = new List <Fighter>(); characters.Add(new CharacterFighter(TeamEnum.TEAM_CHALLENGER, client.ActiveCharacter, (int)map.FightStartingPosition.positionsForChallengers[0])); //ajout du character //add fight to fightmanager var fight = new Fight(map, FightTypeEnum.FIGHT_TYPE_PvM, monsters, characters, map.FightStartingPosition); FightManager.Instance.Fights.Add(fight); fight.UpdateFightersDispositionInformations(client); //ajout du fight sur la map map.AddFight(client, fight); }
public static void HandleGameRolePlayAttackMonsterRequestMessage(WorldClient client, GameRolePlayAttackMonsterRequestMessage message) { if (!client.Character.IsFighting()) { var actor = client.Character.Map.GetActor <MonsterGroup>(message.monsterGroupId); if (actor != null) { if (actor.Position.Cell == client.Character.Cell) { actor.FightWith(client.Character); } } } }
public static void HandleGameRolePlayAttackMonsterRequestMessage(WorldClient client, GameRolePlayAttackMonsterRequestMessage message) { var map = client.Character.Map; var monster = map.GetActor <MonsterGroup>(entry => entry.Id == message.monsterGroupId); if (monster != null && monster.Position.Cell == client.Character.Position.Cell) { monster.FightWith(client.Character); } }