示例#1
0
        private Utils.LuckyGameCardResult getLuckyGameResultFor(int slotCount, string group, double amount)
        {
            var res = new Utils.LuckyGameCardResult();

            res.Cards = new List <Utils.LuckyGameCard>();

            if (amount < 1)
            {
                res.ErrorNumber = 667;
                res.Message     = BaseResource.Get("AmountToLow");
            }

            var user      = userRepository.GetUserFromSignalR(Context.ConnectionId);
            var userTotal = userRepository.GetUserTotalMoney(user.Id);

            if (userTotal < amount)
            {
                res.ErrorNumber = 666;
                res.Message     = BaseResource.Get("NotEnoughMoney");
                return(res);
            }


            List <Utils.LuckyGameCard> reslist = new List <Utils.LuckyGameCard>();

            for (int i = 0; i < slotCount; i++)
            {
                reslist.Add(Utils.LuckyGameUtils.GetRandomCard());
            }

            var groups = reslist.OrderBy(x => x.Key).GroupBy(x => x.Key);


            var service = db.ServiceSettings.FirstOrDefault(ln => ln.ServiceUrl == group);

            if (service != null)
            {
                var gameSettings = service.LuckyGameSettings.FirstOrDefault();
                if (gameSettings != null)
                {
                    float winFactor = 0;
                    foreach (var gitem in groups)
                    {
                        var matches = gitem.Count();
                        var rule    = gameSettings.WinningRules.FirstOrDefault(ln => ln.AmountMatchingCards == matches);
                        if (rule != null)
                        {
                            if (rule.WinFactor > winFactor)
                            {
                                winFactor = rule.WinFactor;
                            }
                        }
                    }
                    if (winFactor == 0)
                    {
                        //lost
                        res.AmountLost           = amount;
                        res.UserTotalAmount      = userRepository.WithdrawMoneyFromUser(user.Id, amount);
                        res.TotalAmountAvailable = gameSettingsRepository.AddMoneyToGame(amount, group);
                    }
                    else
                    {
                        //won
                        res.WinFactor            = winFactor;
                        res.AmountWon            = amount * winFactor;
                        res.TotalAmountAvailable = gameSettingsRepository.WidthdrawMoneyFromGame(amount, group);
                        res.UserTotalAmount      = userRepository.DepositMoneyToUser(user.Id, amount);
                    }
                }
                else
                {
                    res.ErrorNumber = 231;
                    res.Message     = "No gameSettings...";
                }
            }

            res.Cards = reslist;

            return(res);
        }