public void Bet(BetSide side)
        {
            var add_score = balance >= (int)denomination ? (int)denomination : balance;

            balance         -= add_score;
            bet_score[side] += add_score;
        }
Beispiel #2
0
 private void KillBig()
 {
     try
     {
         if (!_isKillBig)
         {
             return;
         }
         var b_profit = Desk.GetProfit((int)BetSide.banker, Desk.Instance.desk_amount[BetSide.banker],
                                       Desk.Instance.desk_amount[BetSide.player], Desk.Instance.desk_amount[BetSide.tie]);
         var p_profit = Desk.GetProfit((int)BetSide.player, Desk.Instance.desk_amount[BetSide.banker],
                                       Desk.Instance.desk_amount[BetSide.player], Desk.Instance.desk_amount[BetSide.tie]);
         //var t_profit = Desk.GetProfit((int)BetSide.player, Desk.Instance.desk_amount[BetSide.banker],
         //    Desk.Instance.desk_amount[BetSide.player], Desk.Instance.desk_amount[BetSide.tie]);
         BetSide winner = BetSide.banker;
         if (b_profit == p_profit)
         {
             return;
         }
         if (b_profit < p_profit && CurrentRound.Winner.Item1 == BetSide.banker)
         {
             winner = BetSide.player;
         }
         if (p_profit < b_profit && CurrentRound.Winner.Item1 == BetSide.player)
         {
             winner = BetSide.banker;
         }
         var round    = Session.CreateRoundByWinner(winner);
         var roundidx = Game.Instance.RoundIndex == -1 ? 0 : Game.Instance.RoundIndex;
         Game.Instance.CurrentSession.RoundsOfSession[roundidx] = round;
     }
     catch (Exception ex)
     {
     }
 }
Beispiel #3
0
        private bool CanHeBet(Player p, BetSide side)
        {
            var bet_amount = (int)p.denomination;

            //待加入其他限制规则
            var can_he = LimitRed(bet_amount, side) && true;

            return(can_he);
        }
Beispiel #4
0
        public int CalcPlayerEarning(BetSide winner, int[] p_bets)
        {
            var cost = p_bets[(int)winner];

            float native_odds;

            if (winner == BetSide.banker)
            {
                native_odds = cost >= 10 ? odds_map[(int)winner] : 1;
            }
            else
            {
                native_odds = odds_map[(int)winner];
            }

            var earning = cost + cost * native_odds;

            return(Mathf.FloorToInt(earning));
        }
Beispiel #5
0
        /// <summary>
        /// 检测限红
        /// </summary>
        /// <param name="bet_amount">押注大小</param>
        /// <param name="side">押注哪边</param>
        /// <returns></returns>
        private bool LimitRed(int bet_amount, BetSide side)
        {
            var b_amount = desk_amount[BetSide.banker];
            var t_amount = desk_amount[BetSide.tie];
            var p_amount = desk_amount[BetSide.player];

            var desk_limit = Setting.Instance.GetIntSetting("desk_limit_red");

            if (side == BetSide.banker)
            {
                var desk_red = Mathf.Abs(bet_amount + b_amount - p_amount);
                if (desk_red > desk_limit)
                {
                    return(false);
                }
            }

            if (side == BetSide.player)
            {
                var desk_red = Mathf.Abs(bet_amount + p_amount - b_amount);
                if (desk_red > desk_limit)
                {
                    return(false);
                }
            }

            if (side == BetSide.tie)
            {
                var tie_limit    = Setting.Instance.GetIntSetting("tie_limit_red");
                var desk_tie_red = Mathf.Abs(bet_amount + t_amount);
                if (desk_tie_red > tie_limit)
                {
                    return(false);
                }
            }

            return(true);
        }
Beispiel #6
0
 public static int Bet(int moneyType, string connectionId, long accountId, string username, string clientIP, BetSide betSide, long betAmount, out long sumaryBet, out long newBalance, out string messageError, bool botBet = false)
 {
     if (moneyType == 1)
     {
         return(_gameLoopGold.Bet(connectionId, accountId, username, clientIP, betSide, betAmount, out sumaryBet, out newBalance, out messageError));
     }
     else
     {
         return(_gameLoopCoin.Bet(connectionId, accountId, username, clientIP, betSide, betAmount, out sumaryBet, out newBalance, out messageError));
     }
 }
Beispiel #7
0
        public int Bet(string connectionId, long accountId, string username, string clientIP, BetSide betSide, long betAmount, out long sumaryBet, out long newBalance, out string messageError, bool botBet = false)
        {
            newBalance   = 0;
            sumaryBet    = 0;
            messageError = string.Empty;
            try
            {
                if (Monitor.TryEnter(_locker, 60000))
                {
                    try
                    {
                        if (betAmount <= 100)//toi thieu dat cuoc 100 xu
                        {
                            messageError = "Sai số đặt cược!";
                            return(-999);
                        }

                        if (CurrentState != GameState.Betting)
                        {
                            messageError = "Không thể đặt cửa vào lúc này!";
                            return(-998);
                        }

                        if (betSide == BetSide.Tai)
                        {
                            if (BetXiu.ContainsKey(accountId))
                            {
                                messageError = "Bạn chỉ có thể đặt một cửa!";
                                return(-997);
                            }
                        }
                        else
                        {
                            if (BetTai.ContainsKey(accountId))
                            {
                                messageError = "Bạn chỉ có thể đặt một cửa!";
                                return(-996);
                            }
                        }

                        long logId    = -1;
                        long logSumId = -1;
                        bool addLog   = false;

                        if (betSide == BetSide.Tai)
                        {
                            addLog = !BetTai.ContainsKey(accountId);
                        }
                        else
                        {
                            addLog = !BetXiu.ContainsKey(accountId);
                        }

                        if (!addLog)
                        {
                            logSumId = LogSumary[accountId];
                        }

                        int response = Lddb.Instance.Bet(SessionID, accountId, username, clientIP, (int)betSide, betAmount, out newBalance, out logId, addLog, ref logSumId, botBet, long.Parse($"{_createdTime}{accountId}"));

                        switch (response)
                        {
                        case -1:
                            messageError = "Phiên không tồn tại!";
                            return(response);

                        case -51:
                            messageError = "Số dư không đủ!";
                            return(response);
                        }
                        NLogManager.LogMessage("LuckdyDiece Bet:" + response);
                        if (response < 0)
                        {
                            messageError = "Lỗi không xác định!";
                            return(response);
                        }

                        if (MoneyType == 1)
                        {
                            ThreadPool.QueueUserWorkItem(_ =>
                            {
                                long addedValue = Lddb.Instance.AddRecentBetting(betAmount, accountId);
                                if (addedValue > 0)
                                {
                                    _cache.UpdateRecentBetting(accountId, username, addedValue, true);
                                }
                            });
                        }

                        if (addLog)
                        {
                            LogSumary.AddOrUpdate(accountId, logSumId, (k, v) => v = logSumId);
                        }


                        if (betSide == BetSide.Tai)
                        {
                            sumaryBet = BetTai.AddOrUpdate(accountId, betAmount, (k, v) => v += betAmount);
                            if (connectionId != "")
                            {
                                BetTaiUser.AddOrUpdate(accountId, betAmount, (k, v) => v += betAmount);
                            }
                            _betInfo.Push(new BetInfo {
                                AccountID = accountId, AccountName = username, Money = betAmount, Side = 0, CreatedTime = DateTime.Now, LogId = logId, LogSumId = logSumId, IsBotBet = botBet ? 1 : 0
                            });
                            NLogManager.LogMessage("add OverBets:" + username + " => " + betAmount + " => " + botBet);
                            _overBets.Push((new BetInfo {
                                AccountID = accountId, AccountName = username, Money = betAmount, Side = 0, CreatedTime = DateTime.Now, LogId = logId, LogSumId = logSumId, IsBotBet = botBet ? 1 : 0
                            }));
                            foreach (var betInfo in _overBets)
                            {
                                NLogManager.LogMessage("betInfo Push:" + betInfo.AccountName + " => " + betInfo.Money + " => " + betInfo.IsBotBet);
                            }
                        }
                        else
                        {
                            sumaryBet = BetXiu.AddOrUpdate(accountId, betAmount, (k, v) => v += betAmount);
                            if (connectionId != "")
                            {
                                BetXiuUser.AddOrUpdate(accountId, betAmount, (k, v) => v += betAmount);
                            }
                            _betInfo.Push(new BetInfo {
                                AccountID = accountId, AccountName = username, Money = betAmount, Side = 1, CreatedTime = DateTime.Now, LogId = logId, LogSumId = logSumId, IsBotBet = botBet ? 1 : 0
                            });
                            _underBets.Push((new BetInfo {
                                AccountID = accountId, AccountName = username, Money = betAmount, Side = 1, CreatedTime = DateTime.Now, LogId = logId, LogSumId = logSumId, IsBotBet = botBet ? 1 : 0
                            }));
                        }

                        if (_isBetKingEvent)
                        {
                            _eventBetKing.AddOrUpdate(accountId, new BetKingState
                            {
                                ID    = $"{_createdTime}{accountId}",
                                Award = 0,
                                Lose  = betAmount
                            }, (k, v) => v = new BetKingState
                            {
                                ID    = v.ID,
                                Award = v.Award,
                                Lose  = v.Lose += betAmount
                            });
                        }

                        OnChangedBettingData();
                        PrepareResult();
                        return(1);
                    }
                    finally
                    {
                        Monitor.Exit(_locker);
                    }
                }
                else
                {
                    messageError = "Hệ thống của chúng tôi đang bận, xin bạn vui lòng thử lại!";
                    return(-995);
                }
            }
            catch (Exception ex)
            {
                NLogManager.PublishException(ex);
                messageError = ex.Message;
                return(-994);
            }
        }
 public void Count(BetSide winner)
 {
     balance += count_rule(winner, bet_score);
 }