private static Result <BonusResult, ErrorCode> ExecuteFreeSpin(int level, RequestContext <BonusArgs> requestContext, BullRushFreeSpinBonus freeSpinBonus, BonusEntity bonusEntity) { freeSpinBonus.IsStarted = true; var fsr = new BullRushFreeSpinResult(requestContext.UserGameKey) { SpinTransactionId = freeSpinBonus.SpinTransactionId, Level = level, PlatformType = requestContext.Platform, Multiplier = freeSpinBonus.Multiplier, TotalSpin = freeSpinBonus.NumOfFreeSpin, Step = freeSpinBonus.CurrentStep, CumulativeWin = freeSpinBonus.CumulativeWin, SpinResult = freeSpinBonus.GameResult as BullRushSpinResult }; if (fsr.SpinResult == null) { if (freeSpinBonus.GameResult is BullRushFreeSpinResult) { fsr.SpinResult = (freeSpinBonus.GameResult as BullRushFreeSpinResult).SpinResult; } } GenerateFreeSpinResult(level, requestContext, fsr, freeSpinBonus); var selectedValue = Convert.ToInt32(fsr.SpinResult.DistributedAllRows[0][requestContext.Parameters.Param]); if (selectedValue == BullRushConfiguration.MAGNET) { fsr.SpinResult.NumberOfMagnetActiveRows = freeSpinBonus.CurrentStep + BullRushConfiguration.MagnetActiveRows; fsr.SpinResult.PreviousPowerUp = selectedValue; fsr.SpinResult.SelectedPowerUps.Add(selectedValue); } else if (selectedValue == BullRushConfiguration.VACUUM) { fsr.SpinResult.NumberOfVacuumActiveRows = freeSpinBonus.CurrentStep + BullRushConfiguration.VacuumActiveRows; fsr.SpinResult.PreviousPowerUp = selectedValue; fsr.SpinResult.SelectedPowerUps.Add(selectedValue); } else if (selectedValue == BullRushConfiguration.SHIELD) { fsr.SpinResult.NumberOfShieldActiveRows = freeSpinBonus.CurrentStep + BullRushConfiguration.ShieldActiveRows; fsr.SpinResult.PreviousPowerUp = selectedValue; fsr.SpinResult.SelectedPowerUps.Add(selectedValue); } else if (fsr.SpinResult.PreviousPowerUp == BullRushConfiguration.MAGNET && freeSpinBonus.CurrentStep <= fsr.SpinResult.NumberOfMagnetActiveRows) { for (int i = 0; i < fsr.SpinResult.DistributedAllRows[0].Count; i++) { if (fsr.SpinResult.DistributedAllRows[0][i] == BullRushConfiguration.OBSTACLE && fsr.SpinResult.CumulativeWin >= 25 * fsr.SpinResult.SpinBet.LineBet) { fsr.SpinResult.Win += (-25 * fsr.SpinResult.SpinBet.LineBet); } fsr.SpinResult.Win += fsr.SpinResult.DistributedAllRows[0][i]; } } else if (fsr.SpinResult.PreviousPowerUp == BullRushConfiguration.VACUUM && freeSpinBonus.CurrentStep <= fsr.SpinResult.NumberOfVacuumActiveRows) { for (int i = 0; i < fsr.SpinResult.DistributedAllRows[0].Count; i++) { // If Treasure if (fsr.SpinResult.DistributedAllRows[0][requestContext.Parameters.Param] >= 25 * fsr.SpinResult.SpinBet.LineBet) { fsr.SpinResult.Win += fsr.SpinResult.DistributedAllRows[0][requestContext.Parameters.Param]; } else if (fsr.SpinResult.DistributedAllRows[0][requestContext.Parameters.Param] == fsr.SpinResult.SpinBet.LineBet) // Attracts coins { fsr.SpinResult.Win += fsr.SpinResult.DistributedAllRows[0][i]; } else if (fsr.SpinResult.DistributedAllRows[0][i] == BullRushConfiguration.OBSTACLE && fsr.SpinResult.CumulativeWin >= 25 * fsr.SpinResult.SpinBet.LineBet) { fsr.SpinResult.Win += (-25 * fsr.SpinResult.SpinBet.LineBet); } } } else if (fsr.SpinResult.PreviousPowerUp == BullRushConfiguration.SHIELD && freeSpinBonus.CurrentStep <= fsr.SpinResult.NumberOfShieldActiveRows) { for (int i = 0; i < fsr.SpinResult.DistributedAllRows[0].Count; i++) { if (fsr.SpinResult.DistributedAllRows[0][i] != BullRushConfiguration.OBSTACLE) { fsr.SpinResult.Win += fsr.SpinResult.DistributedAllRows[0][i]; } } } else if (requestContext.Parameters.Param == BullRushConfiguration.OBSTACLE) { fsr.SpinResult.Win += (-25 * fsr.SpinResult.SpinBet.LineBet); } else if (fsr.SpinResult.SelectedBonusRacingPrize > 0 && fsr.SpinResult.IsBonusRacing) { var coinValue = (fsr.SpinResult.SelectedBonusRacingPrize / BullRushConfiguration.HeightBonusRacing) * fsr.SpinResult.SpinBet.LineBet; if (fsr.SpinResult.DistributedAllRows[0][requestContext.Parameters.Param] == coinValue) { fsr.SpinResult.Win = coinValue; } } else if (fsr.SpinResult.DistributedAllRows[0][requestContext.Parameters.Param] == fsr.SpinResult.SpinBet.LineBet) { fsr.SpinResult.Win = fsr.SpinResult.SpinBet.LineBet; } fsr.SpinResult.DistributedAllRows.RemoveAt(0); fsr.Win = fsr.SpinResult.Win; fsr.CumulativeWin = freeSpinBonus.CumulativeWin + fsr.SpinResult.Win; fsr.SpinResult.CumulativeWin = freeSpinBonus.CumulativeWin + fsr.SpinResult.Win; freeSpinBonus.CumulativeWin += fsr.Win; fsr.Counter = fsr.SpinResult.IsBonusRacing ? --freeSpinBonus.BonusRacingCounter : --freeSpinBonus.RacingCounter; freeSpinBonus.CurrentStep++; fsr.SpinResult.CurrentRacingCounter = freeSpinBonus.RacingCounter; fsr.SpinResult.CurrentBonusRacingCounter = freeSpinBonus.BonusRacingCounter; fsr.SpinResult.CurrentRacingStep = freeSpinBonus.CurrentStep; freeSpinBonus.GameResult = fsr; fsr.Bonus = freeSpinBonus; if ((fsr.SpinResult.CurrentRacingCounter == 0 && freeSpinBonus.CurrentStep == 105) || (fsr.SpinResult.IsBonusRacing && fsr.SpinResult.CurrentBonusRacingCounter == 0 && freeSpinBonus.CurrentStep == 50)) { fsr.IsCompleted = true; } else { bonusEntity.BonusType = freeSpinBonus.GetType().Name; } return(fsr); }
private static void GenerateFreeSpinResult(int level, RequestContext <BonusArgs> requestContext, BullRushFreeSpinResult fsr, BullRushFreeSpinBonus bonus) { var bullRushSpinResult = new BullRushSpinResult() { Level = fsr.SpinResult.Level, SpinBet = fsr.SpinResult.SpinBet, DistributedAllRows = fsr.SpinResult.DistributedAllRows, WinPositions = new List <BullRushWinPosition>(), BonusPositions = new List <BonusPosition>(), RowPositions = new List <int>(), CurrentRacingCounter = fsr.SpinResult.CurrentRacingCounter, IsRacing = fsr.SpinResult.IsRacing, IsBonusRacing = fsr.SpinResult.IsBonusRacing, CurrentRacingStep = fsr.SpinResult.CurrentRacingStep, PreviousPowerUp = fsr.SpinResult.PreviousPowerUp, NumberOfMagnetActiveRows = fsr.SpinResult.NumberOfMagnetActiveRows, InventoryList = fsr.SpinResult.InventoryList, SelectedBonusRacingPrize = fsr.SpinResult.SelectedBonusRacingPrize, CumulativeWin = fsr.SpinResult.CumulativeWin, NumOfJackpot = fsr.SpinResult.NumOfJackpot, Bet = 0, SpinTransactionId = fsr.SpinTransactionId.HasValue ? fsr.SpinTransactionId : fsr.TransactionId, PlatformType = requestContext.Platform, RoundId = fsr.RoundId }; //bullRushSpinResult.Wheel = MegaMoneyCommon.GenerateFreeSpin(level, variantWheel, bullRushSpinResult.InventoryList, chosenPowerUpItems, fsr.SpinResult.SpinBet.FunPlayDemoKey); fsr.SpinResult = bullRushSpinResult; }