Example #1
0
        public static async Task CreateGts(Client c, string offer, string request, string index)
        {
            //If user is banned, return
            if (await Database.DbUserChecks.UserBanned(c.Username))
            {
                await c.SendMessage($"<GTSCREATE result=0 index={index}>");

                return;
            }
            //If user has more than max amount of allowed GTS trades, return
            if (await Database.Dbgts.GetNumberOfTrades(c.UserId) >= Data.MaximumGtsTradesPerUser)
            {
                await c.SendMessage($"<GTSCREATE result=1 index={index}>");

                return;
            }
            //Decode data
            var decodeOffer   = Utilities.Encoding.Base64Decode(offer);
            var decodeRequest = Utilities.Encoding.Base64Decode(request);

            int level;

            try
            {
                //Turn data into objects
                var pokemon = JsonConvert.DeserializeObject <GamePokemon>(decodeOffer);

                if (!await TradeValidator.IsPokemonValid(pokemon, c.UserId))
                {
                    await c.SendMessage($"<GTSCREATE result=0 index={index}>");

                    return;
                }

                //Get Pokemon Level
                level = GrowthRates.CalculateLevel(pokemon.species, pokemon.exp);
            }
            catch (InvalidCastException)
            {
                await c.SendMessage($"<GTSCREATE result=2 index={index}>");

                return;
            }

            //Input in database
            try
            {
                await Database.Dbgts.Add(c.UserId, decodeOffer, decodeRequest, level, c.Username);

                await c.SendMessage($"<GTSCREATE result=3 index={index}>");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                await c.SendMessage($"<GTSCREATE result=2 index={index}>");
            }
        }
        public static async Task AddTrade(Client client, string encodedPkmns)
        {
            if (await DbUserChecks.UserBanned(client.Username))
            {
                await client.SendMessage("<WTRESULT reult=0 user=nil pkmn=nil>");

                return;
            }
            if (List.Count(x => x.Value.Client == client) > 0)
            {
                return;
            }

            GamePokemon pkmn;

            try
            {
                pkmn = JsonConvert.DeserializeObject <GTS.GamePokemon>(
                    Utilities.Encoding.Base64Decode(encodedPkmns));
            }
            catch
            {
                await client.SendMessage("<WTRESULT result=1 user=nil pkmn=nil>");

                throw;
            }
            if (!await TradeValidator.IsPokemonValid(pkmn, client.UserId))
            {
                await client.SendMessage("<WTRESULT reult=0 user=nil pkmn=nil>");

                return;
            }

            var holder = new WonderTradeHolder(client, pkmn);

            List.TryAdd(holder.Id, holder);
        }
Example #3
0
        public static async Task OfferGts(Client c, string pokemon, string idstr)
        {
            uint id;

            if (!uint.TryParse(idstr, out id))
            {
                return;
            }
            //If user is banned, return
            if (await Database.DbUserChecks.UserBanned(c.Username))
            {
                await c.SendMessage("<GTSOFFER result=0 pkmn=nil>");

                return;
            }
            //Get Pokemon data from Database
            var poke = await Database.Dbgts.GetSingleTrade(id);

            //If already accepted send negative response
            if (poke == null || poke.Accepted)
            {
                await c.SendMessage("<GTSOFFER result=1 pkmn=nil>");

                return;
            }
            //decode string
            var decoded = Utilities.Encoding.Base64Decode(pokemon);
            //string to object
            var pkmn = JsonConvert.DeserializeObject <GamePokemon>(decoded);

            if (!await TradeValidator.IsPokemonValid(pkmn, c.UserId))
            {
                await c.SendMessage("<GTSOFFER result=0 pkmn=nil>");

                return;
            }


            var request = poke.Request;
            //Compare pokemon offered with requests on pokemon with id offered.
            var correct = GtsCompare.ValidOffer(pkmn, request);

            //If doesn't match, send negative response
            if (correct == false)
            {
                await c.SendMessage("<GTSOFFER result=2 pkmn=nil>");

                return;
            }
            //If it has been accepted, return negative (we do this twice to make absolutely sure it hasn't been traded in between)
            if (await Database.Dbgts.GetAccepted(id))
            {
                await c.SendMessage("<GTSOFFER result=1 pkmn=nil>");

                return;
            }
            //Set accepted to true, Set pokemon offered as pokemon for collector to receive
            await Database.Dbgts.SetAccepted(id, decoded);

            //Send positive response along with pokemon back to client.
            var encodedPokemon = Utilities.Encoding.Base64Encode(JsonConvert.SerializeObject(poke.Offer));
            await c.SendMessage($"<GTSOFFER result=3 pkmn={encodedPokemon}>");
        }