public async Task <Guid> Create(Models.Race rac)
        {
            try
            {
                var context = CreateContext();
                var created = new Data.Race
                {
                    Id        = rac.Id,
                    UniversId = rac.UniversId,
                    NomRace   = rac.NomRace,
                };
                var enr = await context
                          ._Race
                          .AddAsync(created);

                await context.SaveChangesAsync();

                return(enr.Entity.Id);
            }
            catch (DbUpdateException e)
            {
                Console.WriteLine(e.Message);
                return(rac.Id);
            }
        }
Exemple #2
0
 public TriStats()
 {
     Swim        = new SwimStats();
     Bike        = new BikeStats();
     Run         = new RunStats();
     Finish      = new FinishStats();
     DivRank     = new DivRankingStats();
     GenderRank  = new GenderRankingStats();
     OverallRank = new OverallRankingStats();
     Points      = new PointsStats();
     Race        = new Models.Race();
     Athletes    = new List <Triathlete>();
     AgeGroupId  = 0;
 }
        public async Task Delete(Models.Race rac)
        {
            try
            {
                var context  = CreateContext();
                var toDelete = await context._Race.FindAsync(rac.Id);

                if (toDelete != null)
                {
                    context._Race.Remove(toDelete);
                    await context.SaveChangesAsync();
                }
            }
            catch (DbUpdateException e)
            {
                Console.WriteLine(e.Message);
            }
        }
        public async Task Update(Models.Race rac)
        {
            try
            {
                var context  = CreateContext();
                var toUpdate = await context._Race.FindAsync(rac.Id);

                if (toUpdate != null)
                {
                    toUpdate.Id        = rac.Id;
                    toUpdate.UniversId = rac.UniversId;
                    toUpdate.NomRace   = rac.NomRace;

                    await context.SaveChangesAsync();
                }
            }
            catch (DbUpdateException e)
            {
                Console.WriteLine(e.Message);
            }
        }
Exemple #5
0
        public void Execute(Message msg, IMessageSenderService sender, IBot bot)
        {
            if (Main.Api.Users.IsBanned(msg))
            {
                return;
            }

            if (!Main.Api.Users.CheckUser(msg))
            {
                var kb2 = new KeyboardBuilder(bot);
                kb2.AddButton("➕ Зарегистрироваться", "start");
                sender.Text("❌ Вы не зарегистрированы, нажмите на кнопку ниже, чтобы начать", msg.ChatId, kb2.Build());
                return;
            }

            Models.Race race        = null;
            User        userEnemy   = null;
            User        userCreator = null;

            Models.Garage garageEnemy        = null;
            Models.Garage garageCreator      = null;
            var           kb                 = new KeyboardBuilder(bot);
            Car           carCreator         = null;
            Car           carEnemy           = null;
            bool          sendMessageToEnemy = true;
            bool          isBot              = false;
            bool          isFriendStart      = false;

            if (msg.Payload.Arguments.Count == 0)
            {
                if (msg.Payload.Arguments[0] == "222")
                {
                    isFriendStart = true;
                }
                userEnemy = Main.Api.Users.GetUser(msg);
                if (userEnemy.OnWork)
                {
                    sender.Text("❌ Вы не можете идти в гонку, пока находитесь на работе, дождитесь завершения и возвращайтесь!", msg.ChatId);
                    return;
                }
                //Пользователь принимает гонку.
                isBot = false;
                using (var db = new Database())
                {
                    try
                    {
                        race = db.Races.FirstOrDefault(r => r.Enemy == userEnemy.Id && r.IsRequest == true);
                    }catch
                    {
                        kb.AddButton(ButtonsHelper.ToHomeButton());
                        sender.Text("❌ Ваш противник уже отменил гонку!", msg.ChatId, kb.Build());
                        var a = db.Users.Single(u => u.Id == userEnemy.Id);
                        a.Race = 0;
                        db.SaveChanges();
                        return;
                    }

                    if (race is null)
                    {
                        kb.AddButton(ButtonsHelper.ToHomeButton());
                        sender.Text("❌ Мы не смогли найти эту гонку в базе данных.", msg.ChatId, kb.Build());
                        var a = db.Users.Single(u => u.Id == userEnemy.Id);
                        a.Race = 0;
                        db.SaveChanges();
                        return;
                    }

                    userCreator   = db.Users.Single(u => u.Id == race.Creator);
                    garageCreator = db.Garages.Single(g => g.UserId == userCreator.Id);
                    carCreator    = db.Cars.Single(c => c.Id == garageCreator.SelectCar);

                    race.IsRequest = false;
                    garageEnemy    = db.Garages.Single(g => g.UserId == userEnemy.Id);
                    var usrE = db.Users.Single(u => u.Id == userEnemy.Id);
                    carEnemy  = db.Cars.Single(c => c.Id == garageEnemy.SelectCar);
                    usrE.Race = race.Id;
                    db.SaveChanges();
                }
            }
            else
            {
                //если какой-то тип
                var typeRace = msg.Payload.Arguments[0].ToLong();
                if (typeRace == 1) //если это быстрая гонка
                {
                    var enemyId = msg.Payload.Arguments[1].ToLong();

                    race           = new Models.Race();
                    userCreator    = Main.Api.Users.GetUser(msg);
                    garageCreator  = Main.Api.Garages.GetGarage(userCreator.Id);
                    race.Creator   = userCreator.Id;
                    race.Enemy     = enemyId;
                    race.IsRequest = false;

                    using (var db = new Database())
                    {
                        carCreator = db.Cars.Single(c => c.Id == garageCreator.SelectCar);
                        race.Id    = db.Races.Count() + 1;
                        db.Races.Add(race);
                        db.SaveChanges();
                    }



                    if (enemyId == -2) //генерим бота
                    {
                        sendMessageToEnemy = false;
                        isBot          = true;
                        userEnemy      = new User();
                        userEnemy.Id   = -2;
                        userEnemy.Name = "Бот без имени";

                        garageEnemy           = new Models.Garage();
                        carEnemy              = new Car();
                        carEnemy.Id           = -2;
                        carEnemy.Manufacturer = "abc";
                        carEnemy.Model        = "def";

                        var r = new Random();

                        int a = r.Next(1, 3);

                        carEnemy.Power = a == 2 ? carCreator.Power + 1 : carCreator.Power - 1;

                        int b = r.Next(1, 3);
                    }
                    else
                    {
                        using (var db = new Database())
                        {
                            userEnemy   = db.Users.Single(u => u.Id == enemyId);
                            garageEnemy = db.Garages.Single(g => g.UserId == enemyId);
                            carEnemy    = db.Cars.Single(c => c.Id == garageEnemy.SelectCar);
                        }
                    }
                }
            }

            long enemyChatId   = 0;
            long creatorChatId = 0;

            if (sender.Platform == Fooxboy.NucleusBot.Enums.MessengerPlatform.Vkontakte)
            {
                if (sendMessageToEnemy && !isBot)
                {
                    enemyChatId = userEnemy.VkId;
                }
                creatorChatId = userCreator.VkId;
            }
            else
            {
                if (sendMessageToEnemy && !isBot)
                {
                    enemyChatId = userEnemy.TgId;
                }
                creatorChatId = userCreator.TgId;
            }
            if (sendMessageToEnemy && !isBot)
            {
                Task.Run(() => sender.Text($"🏁 Гонка с игроком {userCreator.Name} на автомобиле {carCreator.Manufacturer} {carCreator.Model} ({carCreator.Number}) началась! Не переходите по разделам во время гонки", enemyChatId));
            }
            Task.Run(() => sender.Text($"🏁 Гонка с игроком {userEnemy.Name} на автомобиле {carEnemy.Manufacturer} {carEnemy.Model} ({carEnemy.Number}) началась! Не переходите по разделам во время гонки", creatorChatId));


            Task.Run(() =>
            {
                Thread.Sleep(TimeSpan.FromSeconds(5));
                long scoreCreator = 0;
                long scoreEnemy   = 0;
                if (carEnemy.Power > carCreator.Power)
                {
                    scoreEnemy += 5;
                }
                else
                {
                    scoreCreator += 5;
                }

                if (carEnemy.Weight > carCreator.Weight)
                {
                    scoreCreator += 3;
                }
                else
                {
                    scoreEnemy += 3;
                }

                Skills skillsCretor = null;
                Skills skillsEnemy  = null;

                using (var db = new Database())
                {
                    try
                    {
                        skillsCretor = db.Skillses.Single(s => s.UserId == userCreator.Id);
                    }
                    catch
                    {
                        skillsCretor = new Skills();
                    }

                    try
                    {
                        if (isBot)
                        {
                            //генерируем рандомный скилл
                            skillsEnemy         = new Skills();
                            var r               = new Random();
                            int i               = r.Next(1, 3);
                            skillsEnemy.Driving = i == 2? skillsCretor.Driving - 1 : skillsCretor.Driving + 1;
                        }
                        else
                        {
                            skillsEnemy = db.Skillses.Single(s => s.UserId == userEnemy.Id);
                        }
                    }
                    catch
                    {
                        if (isBot)
                        {
                            //генерируем рандомный скилл
                            skillsEnemy         = new Skills();
                            skillsEnemy.Driving = 0;
                        }
                        else
                        {
                            skillsEnemy = new Skills();
                        }
                    }
                }

                //тут считаем навыки

                scoreCreator += skillsCretor.Driving;
                scoreEnemy   += skillsEnemy.Driving;

                var winner = scoreEnemy > scoreCreator ? userEnemy : userCreator;

                using (var db = new Database())
                {
                    var raceLocal = db.Races.Single(r => r.Id == race.Id);
                    if (raceLocal.Winner != 0)
                    {
                        winner = db.Users.Single(u => u.Id == raceLocal.Winner);
                    }
                    raceLocal.Winner = winner.Id;

                    if (winner.Id != -2)
                    {
                        if (!isFriendStart)
                        {
                            //Добавляем опыта и денег победителю.
                            var winnerLocal = db.Users.Single(u => u.Id == winner.Id);
                            int factor      = 1;
                            if (winnerLocal.Access >= 1)
                            {
                                factor = 2;
                            }
                            winnerLocal.Money += (winnerLocal.Level * factor * 50);
                            winnerLocal.Score += (10 * factor);
                        }
                    }
                    var usr1 = db.Users.Single(u => u.Id == raceLocal.Creator);
                    var gar1 = db.Garages.Single(u => u.UserId == usr1.Id);
                    var car1 = db.Cars.Single(c => c.Id == carCreator.Id);
                    //gar1.Fuel = gar1.Fuel - 5;
                    car1.Health = car1.Health - 5;
                    if (!isBot)
                    {
                        var usr2 = db.Users.Single(u => u.Id == raceLocal.Enemy);
                        var gar2 = db.Garages.Single(u => u.UserId == usr2.Id);
                        var car2 = db.Cars.Single(c => c.Id == carEnemy.Id);
                        // gar2.Fuel = gar2.Fuel - 5;
                        car2.Health = car2.Health - 5;
                        usr2.Race   = 0;
                    }
                    usr1.Race = 0;
                    db.SaveChanges();
                }

                if (winner.Id != -2)
                {
                    Task.Run(() =>
                    {
                        var kb1 = new KeyboardBuilder(bot);
                        kb1.AddButton("🏁 Назад в гонки", "race");
                        var t = isFriendStart
                            ? "🎉 Поздравляю с победой  над своим другом!"
                            : $"🎉 Поздравляю с победой! Вы получили: 💵 {(winner.Access >=1? $"{winner.Level *50 *2}": $"{winner.Level * 50}")} рублей и ⭐ {(winner.Access >=1? $"{10 *2}": $"{10}")} опыта";
                        sender.Text(
                            t,
                            winner.Id == userEnemy.Id ? enemyChatId : creatorChatId, kb1.Build());

                        sender.Text($"🏁 Вы проиграли в этой гонке.", winner.Id == userEnemy.Id ? creatorChatId : enemyChatId, kb1.Build());
                    });
                }
Exemple #6
0
        public static string RunFriendBattle(long creatorId, long enemyId, IMessageSenderService sender, IBot bot, Message msg)
        {
            if (creatorId == enemyId)
            {
                return("❌ Участвовать в гонке с самим собой невозможно.");
            }

            using (var db = new Database())
            {
                var creator = db.Users.Single(u => u.Id == creatorId);
                var friends = FriendsHelper.GetFriends(creator.Friends);
                if (!friends.Any(f => f == enemyId))
                {
                    return("❌ Этот пользователь не в списке Ваших друзей.");
                }

                if (creator.Race != 0)
                {
                    return("❌ Вы уже участвуете в гонке!");
                }
                User enemy;
                try
                {
                    enemy = db.Users.Single(u => u.Id == enemyId);
                    if (enemy.Race != 0)
                    {
                        return("❌ Этот пользователь уже учавствует в гонке!");
                    }
                }
                catch
                {
                    return("❌ Не найден пользователь с таким ID");
                }

                var race = new Models.Race();
                race.Creator   = creatorId;
                race.Enemy     = enemyId;
                race.Id        = db.Races.Count() + 1;
                race.IsRequest = true;

                var helper = new UsersHelper();

                if (sender.Platform == MessengerPlatform.Vkontakte)
                {
                    if (enemy.VkId == 0)
                    {
                        return("❌ Этот пользователь зарегестрирован через telegram. Гонки между платформами пока что недоступны.");
                    }
                    sender.Text($"🏁 Пользователь {helper.GetLink(creator)} приглашает Вас на гонку!" +
                                $"\n ❓ Чтобы принять или отклонить гонку, откройте меню телефона в разделе гонок.", enemy.VkId);
                }
                else
                {
                    if (enemy.TgId == 0)
                    {
                        return("❌ Этот пользователь зарегистрирован через ВКонтакте. Гонки между платформами пока что недоступны.");
                    }
                    sender.Text($"🏁 Пользователь {helper.GetLink(creator)} приглашает Вас на гонку!" +
                                $"\n ❓ Чтобы принять или отклонить гонку, откройте меню телефона в разделе гонок.", enemy.TgId);
                }

                creator.Race = race.Id;
                db.Races.Add(race);
                db.SaveChanges();
                UsersCommandHelper.GetHelper().Add("", creatorId);


                Task.Run(() =>
                {
                    Thread.Sleep(TimeSpan.FromSeconds(3));
                    var kb = new KeyboardBuilder(bot);
                    kb.AddButton("❌ Отменить гонку", "racestop");
                    sender.Text("❓ Вы можете отменить гонку, если Ваш противник не принимает гонку.", msg.ChatId, kb.Build());
                });

                return("🏁 Мы отправили пользователю запрос о гонке с Вами. ");
            }
        }