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...");
            }
        }
Example #3
0
        /// <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();
        }
Example #4
0
 private void HandleBasicAckMessage(BasicAckMessage message, ConnectedHost source)
 {
     if (mConfirmed)
     {
         mConfirmed = false;
         GameRolePlayAttackMonsterRequestMessage newMessage = new GameRolePlayAttackMonsterRequestMessage();
         newMessage.monsterGroupId = AttackedMonstersId;
         mHost.SendMessage(newMessage);
     }
 }
Example #5
0
        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();
            }
        }
Example #6
0
 private void GameRolePlayAttackMonsterRequestMessageHandler(DofusClient client,
                                                             GameRolePlayAttackMonsterRequestMessage message)
 {
     //
 }
Example #7
0
        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);
        }
Example #8
0
 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);
            }
        }