public static void HandleExchangePlayerRequestMessage(WorldClient client, ExchangePlayerRequestMessage message)
        {
            switch ((ExchangeTypeEnum)message.exchangeType)
            {
            case ExchangeTypeEnum.PLAYER_TRADE:
                var target = World.Instance.GetCharacter((int)message.target);

                if (target == null)
                {
                    SendExchangeErrorMessage(client, ExchangeErrorEnum.BID_SEARCH_ERROR);
                    return;
                }

                if (target.Map.Id != client.Character.Map.Id)
                {
                    SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_CHARACTER_TOOL_TOO_FAR);
                    return;
                }

                if (target.IsBusy() || target.IsTrading())
                {
                    SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_CHARACTER_OCCUPIED);
                    return;
                }

                if (target.FriendsBook.IsIgnored(client.Account.Id))
                {
                    SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_CHARACTER_RESTRICTED);
                    return;
                }

                if (!target.IsAvailable(client.Character, false))
                {
                    SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_CHARACTER_OCCUPIED);
                    return;
                }

                if (!client.Character.Map.AllowExchangesBetweenPlayers)
                {
                    SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_IMPOSSIBLE);
                    return;
                }

                var request = new PlayerTradeRequest(client.Character, target);
                client.Character.OpenRequestBox(request);
                target.OpenRequestBox(request);

                request.Open();

                break;

            default:
                SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_IMPOSSIBLE);
                break;
            }
        }
        public static void HandleExchangePlayerRequestMessage(WorldClient client, ExchangePlayerRequestMessage message)
        {
            ExchangeTypeEnum exchangeType = (ExchangeTypeEnum)message.exchangeType;

            if (exchangeType != ExchangeTypeEnum.PLAYER_TRADE)
            {
                InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_IMPOSSIBLE);
            }
            else
            {
                Character character = Singleton <World> .Instance.GetCharacter((int)message.target);

                if (character == null)
                {
                    InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.BID_SEARCH_ERROR);
                }
                else
                {
                    if (character.Map.Id != client.Character.Map.Id)
                    {
                        InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_CHARACTER_TOOL_TOO_FAR);
                    }
                    else
                    {
                        if (character.IsInRequest() || character.IsTrading())
                        {
                            InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_CHARACTER_OCCUPIED);
                        }
                        else
                        {
                            if (character.IsAway)
                            {
                                InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_CHARACTER_OCCUPIED);
                            }
                            else
                            {
                                if (!client.Character.Map.AllowExchangesBetweenPlayers)
                                {
                                    InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_IMPOSSIBLE);
                                }
                                else
                                {
                                    PlayerTradeRequest playerTradeRequest = new PlayerTradeRequest(client.Character, character);
                                    client.Character.OpenRequestBox(playerTradeRequest);
                                    character.OpenRequestBox(playerTradeRequest);
                                    playerTradeRequest.Open();
                                }
                            }
                        }
                    }
                }
            }
        }
        public static void HandleExchangePlayer(ExchangePlayerRequestMessage message, WorldClient client)
        {
            WorldClient target = WorldServer.Instance.GetOnlineClient((int)message.target);

            if (target.Character.Busy)
            {
                client.Character.Reply("Impossible car le joueur est occupé.");
                return;
            }
            target.Character.PlayerTradeInstance = new PlayerTradeExchange(target, client);
            client.Character.PlayerTradeInstance = new PlayerTradeExchange(client, target);
            client.Character.PlayerTradeInstance.Ask();
        }
Exemple #4
0
        public static void HandleExchangePlayerRequest(ExchangePlayerRequestMessage message, WorldClient client)
        {
            Character target = client.Character.Map.Instance.GetEntity <Character>((long)message.target);

            if (target == null)
            {
                client.Character.OnExchangeError(ExchangeErrorEnum.REQUEST_IMPOSSIBLE);

                return;
            }

            if (target.Busy)
            {
                client.Character.OnExchangeError(ExchangeErrorEnum.REQUEST_CHARACTER_OCCUPIED);

                return;
            }

            if (target.Map == null || target.Record.MapId != client.Character.Record.MapId)
            {
                client.Character.OnExchangeError(ExchangeErrorEnum.REQUEST_IMPOSSIBLE);

                return;
            }

            if (!target.Map.Position.AllowExchangesBetweenPlayers)
            {
                client.Character.OnExchangeError(ExchangeErrorEnum.REQUEST_IMPOSSIBLE);

                return;
            }

            switch ((ExchangeTypeEnum)message.exchangeType)
            {
            case ExchangeTypeEnum.PLAYER_TRADE:
                target.OpenRequestBox(new PlayerTradeRequest(client.Character, target));

                break;

            default:
                client.Send(new ExchangeErrorMessage((sbyte)ExchangeErrorEnum.REQUEST_IMPOSSIBLE));

                break;
            }
        }