public static void HandleExchangeRequestOnTaxCollectorMessage(WorldClient client, ExchangeRequestOnTaxCollectorMessage message)
        {
            if (client.Character.Guild == null)
            {
                return;
            }

            var taxCollectorNpc = client.Character.Map.TaxCollector;

            if (taxCollectorNpc == null)
            {
                return;
            }

            var guildMember = client.Character.GuildMember;

            if (!taxCollectorNpc.IsTaxCollectorOwner(guildMember))
            {
                client.Send(new TaxCollectorErrorMessage((sbyte)TaxCollectorErrorReasonEnum.TAX_COLLECTOR_NOT_OWNED));
                return;
            }

            if (!((string.Equals(taxCollectorNpc.Record.CallerName, client.Character.Name) &&
                   guildMember.HasRight(GuildRightsBitEnum.GUILD_RIGHT_COLLECT_MY_TAX_COLLECTOR)) || guildMember.HasRight(GuildRightsBitEnum.GUILD_RIGHT_COLLECT)))
            {
                client.Send(new TaxCollectorErrorMessage((sbyte)TaxCollectorErrorReasonEnum.TAX_COLLECTOR_NO_RIGHTS));
                return;
            }

            if (taxCollectorNpc.IsBusy())
            {
                return;
            }

            var exchange = new TaxCollectorExchange(taxCollectorNpc, client.Character);

            exchange.Open();
        }
Example #2
0
        public static void ProcessExchangeRequest(WorldClient Client, string Packet)
        {
            if (!Packet.Contains('|'))
            {
                Client.Send(new BasicNoOperationMessage());
                return;
            }

            var Data = Packet.Substring(2).Split('|');

            if (Data.Length != 2)
            {
                Client.Send(new BasicNoOperationMessage());
                return;
            }

            var  ExchangeType = 0;
            long ActorId      = 0;

            if (!int.TryParse(Data[0], out ExchangeType))
            {
                Client.Send(new BasicNoOperationMessage());
                return;
            }

            if (!Enum.IsDefined(typeof(ExchangeTypeEnum), ExchangeType))
            {
                Client.Send(new BasicNoOperationMessage());
                return;
            }

            if (!long.TryParse(Data[1], out ActorId) && (ExchangeTypeEnum)ExchangeType != ExchangeTypeEnum.EXCHANGE_MOUNT && (ExchangeTypeEnum)ExchangeType != ExchangeTypeEnum.EXCHANGE_BIGSTORE_BUY && (ExchangeTypeEnum)ExchangeType != ExchangeTypeEnum.EXCHANGE_BIGSTORE_SELL)
            {
                Client.Send(new BasicNoOperationMessage());
                return;
            }

            var Actor = Client.Character.myMap.GetActor(ActorId);

            // inexistant ?
            if (Actor == null && (ExchangeTypeEnum)ExchangeType != ExchangeTypeEnum.EXCHANGE_MOUNT && (ExchangeTypeEnum)ExchangeType != ExchangeTypeEnum.EXCHANGE_BIGSTORE_BUY && (ExchangeTypeEnum)ExchangeType != ExchangeTypeEnum.EXCHANGE_BIGSTORE_SELL)
            {
                Client.Send(new BasicNoOperationMessage());
                return;
            }

            // Il peu echanger ?
            if (!Client.CanGameAction(GameActionTypeEnum.EXCHANGE) && !(Client.GetExchange() != null && Client.GetExchange() is MarketSellExchange && ExchangeType == 11))
            {
                Client.Send(new BasicNoOperationMessage());
                return;
            }

            switch ((ExchangeTypeEnum)ExchangeType)
            {
            case ExchangeTypeEnum.EXCHANGE_BIGSTORE_BUY:
                if (Client.Character.Deshonor >= 5)
                {
                    Client.Send(new TextInformationMessage(TextInformationTypeEnum.ERREUR, 83));
                    Client.Send(new ExchangeLeaveMessage());
                    return;
                }
                if (Client.GetExchange() != null)
                {
                    ProcessExchangeLeaveMessage(Client);
                }
                if (!BidHouseTable.Cache.ContainsKey(Client.Character.Map))
                {
                    //TODO IM Message HDV Not Exist
                    Client.Send(new ExchangeLeaveMessage());
                    return;
                }
                var Market = BidHouseTable.Cache[Client.Character.Map];

                var MbExchange = new MarketBuyExchange(Client, Market);

                Client.AddGameAction(new GameExchange(Client.Character, MbExchange));
                Client.SetExchange(MbExchange);

                Client.Send(new ExchangeCreateMessage(ExchangeTypeEnum.EXCHANGE_BIGSTORE_BUY, "1,10,100;" + Market.CategoriesString + ";" + Market.TaxRate() + ";" + Market.levelMax + ";" + Market.countItem + ";-1;" + Market.sellTime));

                break;

            case ExchangeTypeEnum.EXCHANGE_SHOP:

                // lol ?
                if (Actor.ActorType != GameActorTypeEnum.TYPE_NPC)
                {
                    Client.Send(new BasicNoOperationMessage());
                    return;
                }

                var Npc      = Actor as Npc;
                var Exchange = new NpcExchange(Client, Npc);


                Client.AddGameAction(new GameExchange(Client.Character, Exchange));
                Client.SetExchange(Exchange);

                Client.Send(new ExchangeCreateMessage((ExchangeTypeEnum)ExchangeType, Npc.ActorId.ToString()));
                Client.Send(new ExchangeItemListMessage(Npc));
                break;

            case ExchangeTypeEnum.EXCHANGE_BIGSTORE_SELL:
                if (Client.Character.Deshonor >= 5)
                {
                    Client.Send(new TextInformationMessage(TextInformationTypeEnum.ERREUR, 83));
                    Client.Send(new ExchangeLeaveMessage());
                    return;
                }
                if (!BidHouseTable.Cache.ContainsKey(Client.Character.Map))
                {
                    //TODO IM Message HDV Not Exist
                    Client.Send(new ExchangeLeaveMessage());
                    return;
                }
                Market = BidHouseTable.Cache[Client.Character.Map];

                var MaExchange = new MarketSellExchange(Client, Market);

                Client.AddGameAction(new GameExchange(Client.Character, MaExchange));
                Client.SetExchange(MaExchange);

                Client.Send(new ExchangeCreateMessage(ExchangeTypeEnum.EXCHANGE_BIGSTORE_SELL, "1,10,100;" + Market.CategoriesString + ";" + Market.TaxRate() + ";" + Market.levelMax + ";" + Market.countItem + ";-1;" + Market.sellTime));
                Client.Send(new ExchangeItemListMessagePerAccount(Client.Account.Data, Market.HdvID));

                break;

            case ExchangeTypeEnum.EXCHANGE_MOUNT:

                var Mount = Client.Character.Mount;

                if (Mount == null)
                {
                    return;
                }

                var MExchange = new MountExchange(Client, Mount);


                Client.AddGameAction(new GameExchange(Client.Character, MExchange));
                Client.SetExchange(MExchange);

                Client.Send(new ExchangeCreateMessage((ExchangeTypeEnum)ExchangeType, Mount.ID.ToString()));
                Client.Send(new ExchangeMountItemListMessage(Mount));
                Client.Send(new MountActualPodMessage(Mount));
                break;

            case ExchangeTypeEnum.EXCHANGE_PLAYER:

                // lol?
                if (Actor.ActorType != GameActorTypeEnum.TYPE_CHARACTER)
                {
                    Client.Send(new BasicNoOperationMessage());
                    return;
                }

                // cast
                var Target = (Actor as Player).Client;

                if (!Target.CanGameAction(GameActionTypeEnum.BASIC_REQUEST) ||
                    Target.Character.HasRestriction(RestrictionEnum.RESTRICTION_CANT_EXCHANGE) ||
                    Client.Character.HasRestriction(RestrictionEnum.RESTRICTION_CANT_EXCHANGE))
                {
                    Client.Send(new BasicNoOperationMessage());
                    return;
                }

                var Request       = new ExchangeRequest(Client, Target);
                var RequestAction = new GameRequest(Client.Character, Request);

                Client.AddGameAction(RequestAction);
                Target.AddGameAction(RequestAction);

                Client.SetBaseRequest(Request);
                Target.SetBaseRequest(Request);

                var Message = new ExchangeRequestMessage(Client.Character.ID, Target.Character.ID);

                Client.Send(Message);
                Target.Send(Message);
                break;

            case ExchangeTypeEnum.EXCHANGE_TAXCOLLECTOR:
                if (Packet.Length < 4 || !Client.Character.HasGuild())
                {
                    Client.Send(new BasicNoOperationMessage());
                    return;
                }
                long         PercepteurID = long.Parse(Packet.Substring(4));
                TaxCollector perco        = TaxCollectorTable.GetPerco(PercepteurID);

                if (perco == null || perco.inFight > 0 || perco.inExchange)
                {
                    Client.Send(new BasicNoOperationMessage());
                    return;
                }

                perco.inExchange = true;

                if (Actor.ActorType != GameActorTypeEnum.TYPE_TAX_COLLECTOR)
                {
                    Client.Send(new BasicNoOperationMessage());
                    return;
                }

                var TC        = Actor as TaxCollector;
                var TExchange = new TaxCollectorExchange(Client, TC);


                Client.AddGameAction(new GameExchange(Client.Character, TExchange));
                Client.SetExchange(TExchange);

                Client.Send(new ExchangeCreateMessage((ExchangeTypeEnum)ExchangeType, TC.ActorId.ToString()));
                Client.Send(new ExchangeTaxItemListMessage(TC.SerializeAsItemList()));

                break;
            }
        }