Example #1
0
        private void AddBet(ClientUser user, string[] cmds)
        {
            decimal betAmount;

            if (timeToRoll <= 0)
            {
                this.room.UserInform(user, $"You cant bet right now");
                return;
            }
            var o = bets.Where(b => b.User == user);

            if (o.Count() != 0)
            {
                this.room.UserInform(user, "You already placed your bet");
                return;
            }
            if (cmds.Length == 3 && (cmds[1] == "red" || cmds[1] == "black") && decimal.TryParse(cmds[2], out betAmount))
            {
                if (!EnoughBalance(user, betAmount))
                {
                    this.room.UserInform(user, $"You dont have enough money");
                    return;
                }
                RouletteColor c   = (cmds[1] == "red") ? RouletteColor.Red : RouletteColor.Black;
                Bet           bet = new Bet(user, c, betAmount);
                bets.Add(bet);
                Database.Query($"update Users set Balance = Balance - {betAmount} where id = {user.Id};");
                this.room.UserInform(user, $"Bet for {betAmount}$ placed on {cmds[1]}");
            }
        }
Example #2
0
        void ITimerService.Process(double time)
        {
            if (currentbets.Count > 0)
            {
                int index = RNG.XORShift64.NextInt(numbers.Length);

                int           number = numbers[index];
                RouletteColor color  = colors[index];

                lock (historylock) {
                    history.Enqueue(new RouletteField(number, color));
                    while (history.Count > 10)
                    {
                        history.Dequeue();
                    }
                }

                RPGMessageBuilder builder = context.GetModule <RPGMessageModule>().Create();
                builder.Text("The ball fell to field ").Text($"{number} {color}", GetColor(color), FontWeight.Bold).Text(". ");

                Dictionary <long, int> winnings = new Dictionary <long, int>();
                lock (betlock) {
                    foreach (RouletteBet bet in currentbets)
                    {
                        int factor = GetFactor(bet, number, color);
                        if (factor > 0)
                        {
                            if (!winnings.ContainsKey(bet.UserID))
                            {
                                winnings[bet.UserID] = 0;
                            }
                            winnings[bet.UserID] += bet.Gold * factor;
                        }
                    }
                    currentbets.Clear();
                }

                foreach (KeyValuePair <long, int> win in winnings)
                {
                    builder.User(win.Key).Text(" won ").Gold(win.Value);
                    context.GetModule <PlayerModule>().UpdateGold(win.Key, win.Value);
                }
                builder.Send();
            }
            else
            {
                if (nextbets.Count > 0)
                {
                    lock (betlock) {
                        currentbets.AddRange(nextbets);
                        nextbets.Clear();
                    }
                    context.GetModule <RPGMessageModule>().Create().Text("A new roulette round has started.").Send();
                }
            }
        }
Example #3
0
        Color GetColor(RouletteColor color)
        {
            switch (color)
            {
            case RouletteColor.Black:
                return(Color.LightGray);

            case RouletteColor.Green:
                return(Color.LawnGreen);

            case RouletteColor.Red:
                return(Color.OrangeRed);

            default:
                return(Color.White);
            }
        }
Example #4
0
 /// <summary>
 /// creates a new <see cref="RouletteField"/>
 /// </summary>
 /// <param name="number"></param>
 /// <param name="color"></param>
 public RouletteField(int number, RouletteColor color)
 {
     Number = number;
     Color  = color;
 }
Example #5
0
 public RouletteRoll(int number)
 {
     this.Number = number;
     this.Color  = (number > 50) ? RouletteColor.Red : RouletteColor.Black;
 }
Example #6
0
 public Bet(ClientUser u, RouletteColor c, decimal a)
 {
     this.User   = u;
     this.Color  = c;
     this.Amount = a;
 }
Example #7
0
        int GetFactor(RouletteBet bet, int number, RouletteColor color)
        {
            switch (bet.Type)
            {
            case BetType.Plein:
                if (number == bet.BetParameter)
                {
                    return(36);
                }
                break;

            case BetType.Color:
                if ((color == RouletteColor.Red && bet.BetParameter == 0) || (color == RouletteColor.Black && bet.BetParameter == 1))
                {
                    return(2);
                }
                break;

            case BetType.OddEven:
                if (number != 0 && ((number & 1) == bet.BetParameter))
                {
                    return(2);
                }
                break;

            case BetType.HalfBoard:
                if (number > 18 * bet.BetParameter && number <= 18 * (bet.BetParameter + 1))
                {
                    return(2);
                }
                break;

            case BetType.Douzaines:
                if (number != 0 && ((number - 1) / 12) == bet.BetParameter)
                {
                    return(3);
                }
                break;

            case BetType.Colonnes:
                if (number != 0 && ((number - 1) % 3) == bet.BetParameter)
                {
                    return(3);
                }
                break;

            case BetType.TransversalePlein:
                if (number != 0 && ((number - 1) / 3) == bet.BetParameter)
                {
                    return(12);
                }
                break;

            case BetType.TransversaleSimple:
                if (number != 0 && (((number - 1) / 3) == bet.BetParameter || ((number - 1) / 3) == bet.BetParameter + 1))
                {
                    return(6);
                }
                break;

            case BetType.LesQuatre:
                if (number > 0 && number < 5)
                {
                    return(9);
                }
                break;

            case BetType.LesCinq:
                if (number > 0 && number < 6)
                {
                    return(7);
                }
                break;
            }
            return(0);
        }