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); }