Example #1
0
        public static void GameMapMovementMessageTreatment(Message message, byte[] packetDatas, AccountUC account)
        {
            GameMapMovementMessage msg = (GameMapMovementMessage)message;

            using (BigEndianReader reader = new BigEndianReader(packetDatas))
            {
                msg.Deserialize(reader);
            }
            List <uint> keys = new List <uint>();

            foreach (short s in msg.keyMovements)
            {
                keys.Add((uint)s);
            }
            MovementPath clientMovement = MapMovementAdapter.GetClientMovement(keys);

            BlueSheep.Core.Fight.Entity entity = null;
            foreach (BlueSheep.Core.Fight.Entity en in account.Map.Entities)
            {
                if (en.Id == msg.actorId)
                {
                    entity = en;
                }
            }
            if (entity != null)
            {
                (account.Map.Entities[account.Map.Entities.IndexOf(entity)]).CellId = clientMovement.CellEnd.CellId;
            }

            //GameRolePlayGroupMonsterInformations e = null;
            foreach (MonsterGroup en in account.Map.List)
            {
                if (en.m_contextualId == msg.actorId)
                {
                    en.m_cellId = clientMovement.CellEnd.CellId;
                }
            }
            //if (e != null)
            //{
            //    account.Map.List.RemoveAt(i);
            //    account.Map.List.Add(new GameRolePlayGroupMonsterInformations(msg.actorId, e.look, new EntityDispositionInformations((short)clientMovement.CellEnd.CellId, e.disposition.direction), e.keyRingBonus, e.hasHardcoreDrop, e.hasAVARewardToken, e.staticInfos, e.ageBonus, e.lootShare, e.alignmentSide));
            //}
            //if (msg.actorId == account.Map.Character.Id)
            //{
            //    account.Wait(100, 200);
            //    using (BigEndianWriter writer = new BigEndianWriter())
            //    {
            //        GameMapMovementConfirmMessage newmsg = new GameMapMovementConfirmMessage();
            //        newmsg.Serialize(writer);
            //        MessagePackaging pack = new MessagePackaging(writer);
            //        pack.Pack((int)newmsg.ProtocolID);
            //        account.SocketManager.Send(pack.Writer.Content);
            //    }
            //}
            //    if (account.Fight.flag != 0)
            //    {
            //        account.Fight.LaunchFight(account.Fight.flag);
            //    }
            //}
        }
Example #2
0
        private void Map_MapMovement(GameMapMovementMessage message)
        {
            if (message.ActorId != _account.Character.Id || message.KeyMovements[0] != _path.CellStart.CellId)
            {
                return;
            }
            _account.Character.Map.MapMovement -= Map_MapMovement;
            _account.Character.Status           = CharacterStatus.Moving;

            MovementVelocity.MovementTypeEnum type;
            if (_path.Cells.Count >= 4) // Need check pods
            {
                type = MovementVelocity.MovementTypeEnum.WALKING;
            }
            else
            {
                type = MovementVelocity.MovementTypeEnum.RUNNING;
            }

            var time = MovementVelocity.GetPathVelocity(_path, type);

            _account.PerformAction(() =>
            {
                _account.Network.SendToServer(new GameMapMovementConfirmMessage());
                OnMovementFinished(true);
            }, (int)time);
        }
Example #3
0
File: Map.cs Project: Teles1/Cookie
        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);
        }
Example #4
0
        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);
        }
Example #5
0
 private void Map_MapMovement(GameMapMovementMessage message)
 {
     if (message.ActorId != _account.Character.Id)
     {
         return;                                           // packet doesn't match the move requested.
     }
     Console.WriteLine($"Receiving[GameMapMovementMessage] Destination {message.KeyMovements[message.KeyMovements.Count-1]}");
     _account.Character.Map.MapMovement -= Map_MapMovement;
     if (_account.Character.Status != CharacterStatus.Fighting)
     {
         _account.PerformAction(() =>
         {
             _account.Network.SendToServer(new GameMapMovementConfirmMessage());
             OnMovementFinished(true);
         },
                                (int)MovementVelocity.GetPathVelocity(_path,
                                                                      _path.Cells.Count >= 4
                     ? MovementVelocity.MovementTypeEnum.WALKING
                     : MovementVelocity.MovementTypeEnum.RUNNING));
     }
     else
     {
         OnMovementFinished(true);
     }
 }
Example #6
0
 private void HandleMapComplementaryInformationsDataMessage(GameMapMovementMessage message, ConnectedHost source)
 {
     if (fight != null)
     {
         fight.Update(message);
     }
 }
 private void HandleMapComplementaryInformationsDataMessage(GameMapMovementMessage message, ConnectedHost source)
 {
     if (message.actorId == this.Id)
     {
         CellId = message.keyMovements.Last();
     }
     OnUpdated();
 }
Example #8
0
 private void GameMapMovementMessageHandler(DofusClient Client, GameMapMovementMessage Message)
 {
     if (Message.ActorId == Client.Account.Character.Id)
     {
         Client.Account.Character.Status = Utils.Enums.CharacterStatus.Moving;
         Client.Account.Character.CellId = Message.KeyMovements.Last();
     }
 }
Example #9
0
 private void GameMapMovementMessageHandler(DofusClient client, GameMapMovementMessage message)
 {
     if (message.ActorId == client.Account.Character.Id)
     {
         client.Account.Character.Status = CharacterStatus.Moving;
         client.Account.Character.CellId = message.KeyMovements.Last();
     }
     client.Account.Character.MapData.RefreshActor(message.ActorId, message.KeyMovements.Last());
 }
Example #10
0
 public static Task HandleGameMapMovementMessage(Account account, GameMapMovementMessage message)
 => Task.Run(() =>
 {
     if (account.State == Enums.AccountStates.FIGHTING)
     {
         account.Game.Fight.Update(message);
         account.Extensions.CharacterCreation.Update(message);
     }
 });
Example #11
0
        public static Task HandleGameMapMovementMessage(Account account, GameMapMovementMessage message)
        => Task.Run(() =>
        {
            if (account.State == AccountStates.FIGHTING)
            {
                return;
            }

            account.Game.Map.Update(message);
            account.Game.Managers.Movements.Update(message);
            account.Extensions.CharacterCreation.Update(message);
        });
Example #12
0
 public void HandleGameMapMovementMessage(Bot bot, GameMapMovementMessage message)
 {
     if (message.actorId == PartyLeaderId && Character.Id != message.actorId)
     {
         //foreach (FFight ffight in GetOtherFFights().Where(plug => Party != null && Party.Any(member => member.id == plug.Character.Id)))
         if (message.keyMovements.Length > 0)
         {
             LastLeaderCell = message.keyMovements.Last();
             Character.SendInformation("Follow leader in {0}s : {1} => 1 cell from {2}", (500.0m * Id) / 1000.0m, Character.Cell, Character.Map.Cells[message.keyMovements.Last()]);
             Character.MoveIfNeededThenAction(message.keyMovements.Last(), null, 500 * Id, 1, true);
         }
     }
 }
Example #13
0
        private void HandleGameMapMovementMessage(IAccount account, GameMapMovementMessage message)
        {
            if (Account.Character.Status != CharacterStatus.Fighting)
            {
                return;
            }
            var clientMovement = MapMovementAdapter.GetClientMovement(message.KeyMovements.Select(k => (uint)k).ToList());
            var fighter        = (Fighter)GetFighter(message.ActorId);

            if (fighter != null)
            {
                fighter.CellId = clientMovement.CellEnd.CellId;
            }
        }
Example #14
0
        public static void HandleGameMapMovementMessage(Bot bot, GameMapMovementMessage message)
        {
            if (bot.Character == null || bot.Character.Context == null)
            {
                logger.Error("Context is null as processing movement");
                return;
            }

            ContextActor actor      = null;
            bool         fightActor = false;

            if (bot.Character.IsFighting())
            {
                actor = bot.Character.Fight.GetActor(message.actorId);
            }
            if (actor == null)
            {
                actor = bot.Character.Context.GetActor(message.actorId);
            }
            else
            {
                fightActor = true;
            }
            if (actor == null)
            {
                logger.Error("Actor {0} not found (known : {1})", message.actorId, String.Join(",", fightActor ? bot.Character.Fight.Actors : bot.Character.Context.Actors)); // only a log for the moment until context are fully handled
                return;
            }

            // just to update the position. If in fight, better update immediately to be sure that the next action take the mouvement into account
            if (message.keyMovements.Length == 1)
            {
                actor.UpdatePosition(message.keyMovements[0]);
            }
            else
            {
                Path path = Path.BuildFromServerCompressedPath(bot.Character.Map, message.keyMovements);

                if (path.IsEmpty())
                {
                    logger.Warn("Try to start moving with an empty path");
                    return;
                }

                var movement = new MovementBehavior(path, actor.GetAdaptedVelocity(path));
                movement.Start(DateTime.Now + TimeSpan.FromMilliseconds(EstimatedMovementLag));

                actor.NotifyStartMoving(movement);
            }
        }
        public void Update(GameMapMovementMessage message)
        {
            if (!IsDoingTutorial || message.ActorId != _account.Game.Character.Id)
            {
                return;
            }

            if (_currentStepNumber != 1 && _currentStepNumber != 7)
            {
                return;
            }

            ValidateCurrentStep();
        }
Example #16
0
        public static void GameMapMovementMessageTreatment(Message message, byte[] packetDatas, AccountUC account)
        {
            GameMapMovementMessage msg = (GameMapMovementMessage)message;

            using (BigEndianReader reader = new BigEndianReader(packetDatas))
            {
                msg.Deserialize(reader);
            }
            MovementPath clientMovement = MapMovementAdapter.GetClientMovement(msg.keyMovements.Select <short, uint>(k => (uint)k).ToList());

            if (account.state == Enums.Status.Fighting)
            {
                account.FightData.UpdateFighterCell(msg.actorId, clientMovement.CellEnd.CellId);
            }
        }
Example #17
0
File: Map.cs Project: Bia10/Cookie
 private void HandleGameMapMovementMessage(IAccount account, GameMapMovementMessage message)
 {
     lock (CheckLock)
     {
         var clientMovement =
             MapMovementAdapter.GetClientMovement(message.KeyMovements.Select(s => (uint)s).ToList());
         var entity = Entities.FirstOrDefault(e => e.Id == message.ActorId);
         if (entity != null)
         {
             ((Entity.Entity)Entities[Entities.IndexOf(entity)]).CellId = clientMovement.CellEnd.CellId;
         }
         if (message.ActorId == account.Character.Id)
         {
             account.Character.CellId = clientMovement.CellEnd.CellId;
         }
     }
     OnMapMovement(message);
 }
Example #18
0
        public void Update(GameMapMovementMessage message)
        {
            var fighter = GetFighter(message.ActorId);

            if (fighter != null)
            {
                fighter.Update(message);

                if (fighter.ContextualId == PlayedFighter?.ContextualId)
                {
                    PlayedFighterMoving?.Invoke(message.KeyMovements.Select(c => (short)c).ToList());
                }
                else
                {
                    FightersUpdated?.Invoke();
                }
            }
        }
Example #19
0
 public void Update(GameMapMovementMessage message)
 {
     foreach (FighterModel fighter in Defenders)
     {
         if (fighter.ContextualId == message.actorId)
         {
             fighter.CellId = message.keyMovements.Last();
             break;
         }
     }
     foreach (FighterModel fighter in Challengers)
     {
         if (fighter.ContextualId == message.actorId)
         {
             fighter.CellId = message.keyMovements.Last();
             break;
         }
     }
 }
Example #20
0
        public static void GameMapMovementMessageTreatment(Message message, byte[] packetDatas, AccountUC account)
        {
            GameMapMovementMessage msg = (GameMapMovementMessage)message;

            using (BigEndianReader reader = new BigEndianReader(packetDatas))
            {
                msg.Deserialize(reader);
            }
            MovementPath clientMovement = MapMovementAdapter.GetClientMovement(msg.keyMovements.Select <short, uint>(k => (uint)k).ToList());

            if (account.state == Enums.Status.Fighting)
            {
                BFighter fighter = account.Fight.GetFighter(msg.actorId);
                if (fighter != null)
                {
                    //account.Log(new BotTextInformation("GameMap Ancienne cellid of " + fighter.Id + " = " + fighter.CellId));
                    fighter.CellId = clientMovement.CellEnd.CellId;
                    //account.Log(new BotTextInformation("GameMap Nouvelle cellid of " + fighter.Id + " = " + fighter.CellId));
                }
            }
        }
Example #21
0
        public Task Update(GameMapMovementMessage message)
        => Task.Run(async() =>
        {
            if (_currentPath != null && message.ActorId == _account.Game.Character.Id &&
                message.KeyMovements[0] == _currentPath[0] &&
                _currentPath.Contains((short)message.KeyMovements.Last()))
            {
                // TODO: Not sure if this is the best way to handle the account's state,
                //       Also not sure if this is the best way to handle map changements
                _account.State = AccountStates.MOVING;

                await Task.Delay(PathDuration.Calculate(_currentPath));

                // In case the account was disconnected/disposed
                if (_account == null || _account.State == AccountStates.DISCONNECTED)
                {
                    return;
                }

                await _account.Network.SendMessageAsync(new GameMapMovementConfirmMessage());
                _account.State = AccountStates.NONE;

                if (_neighbourMapId == 0)
                {
                    OnMovementFinished(true);
                }
                else
                {
                    _currentPath = null;        // Needs to be cleared

                    // Handle the map change request
                    if (_neighbourMapId != 0)
                    {
                        await _account.Network.SendMessageAsync(new ChangeMapMessage((uint)_neighbourMapId));
                        _neighbourMapId = 0;
                    }
                    ;
                }
            }
        });
Example #22
0
        public static void GameMapMovementMessageTreatment(Message message, byte[] packetDatas, AccountUC account)
        {
            GameMapMovementMessage msg = (GameMapMovementMessage)message;

            using (BigEndianReader reader = new BigEndianReader(packetDatas))
            {
                msg.Deserialize(reader);
            }
            List <uint> keys = new List <uint>();

            foreach (short s in msg.keyMovements)
            {
                keys.Add((uint)s);
            }
            MovementPath clientMovement = MapMovementAdapter.GetClientMovement(keys);

            account.MapData.UpdateEntityCell(msg.actorId, clientMovement.CellEnd.CellId);
            if (account.Map.Moving && msg.actorId == account.MapData.Character.contextualId)
            {
                account.Map.ConfirmMove();
            }
        }
Example #23
0
        private void HandleMapComplementaryInformationsDataMessage(GameMapMovementMessage message, ConnectedHost source)
        {
            GroupOfMonstersModel value;

            if (Monsters.TryGetValue(message.actorId, out value))
            {
                value.CellId = message.keyMovements[message.keyMovements.Length - 1];
            }

            CharacterModel mvalue;

            if (Characters.TryGetValue(message.actorId, out mvalue))
            {
                mvalue.CellId = message.keyMovements[message.keyMovements.Length - 1];
            }
            ActorModel _value;

            if (Actors.TryGetValue(message.actorId, out _value))
            {
                _value.CellId = message.keyMovements[message.keyMovements.Length - 1];
            }
            OnUpdated();
        }
        public static void HandleGameMapMovementMessage(Bot bot, GameMapMovementMessage message)
        {
            var actor = bot.Character.Context.GetContextActor(message.actorId);

            if (actor == null)
            {
                logger.Error("Actor {0} not found", message.actorId); // only a log for the moment until context are fully handled
            }
            else
            {
                var path = Path.BuildFromServerCompressedPath(bot.Character.Map, message.keyMovements);

                if (path.IsEmpty())
                {
                    logger.Warn("Try to start moving with an empty path");
                    return;
                }

                var movement = new MovementBehavior(path, actor.GetAdaptedVelocity(path));
                movement.Start(DateTime.Now + TimeSpan.FromMilliseconds(EstimatedMovementLag));

                actor.NotifyStartMoving(movement);
            }
        }
Example #25
0
 public void Update(GameMapMovementMessage message)
 {
     CellId = (short)message.KeyMovements.Last();
 }
Example #26
0
 private void OnMapMovement(GameMapMovementMessage message)
 {
     MapMovement?.Invoke(message);
 }