コード例 #1
0
        public void RemovePlayer(Client cl)
        {
            Player pl = Players.FirstOrDefault(p => p.Client == cl);

            if (pl != null)
            {
                cl.stopAnimation();
                cl.collisionless  = false;
                cl.freezePosition = false;
                cl.triggerEvent("LEAVE_GAME");
                int index = Players.IndexOf(pl);

                UnclaimedCash += pl.CurrentBet;
                pl.Money      -= pl.CurrentBet;
                if (OnPlayerMoneyChange != null)
                {
                    OnPlayerMoneyChange.Invoke(pl.Client, pl.Money);
                }
                Players.Remove(pl);

                if (CurrentBetter == index && Players.Count > 1)
                {
                    CurrentBetter--;
                    Advance();
                }

                foreach (Player player in Players)
                {
                    player.Client.triggerEvent("PLAYER_LEAVE_GAME", cl.name);
                }

                SendToPlayers("Player ~r~~n~" + pl.Client.name + "~n~~w~ has left the lobby!");

                if (_hasTable)
                {
                    RebuildCash();
                }
            }
        }
コード例 #2
0
        public void ReceiveClientEvent(Client cl, string ev, object[] args)
        {
            Player pl = Players.FirstOrDefault(p => p.Client == cl);

            if (pl == null)
            {
                return;
            }

            int index = Players.IndexOf(pl);

            if (ev == "TURN_RESPONSE")
            {
                if (index != CurrentBetter)
                {
                    return;
                }
                API.shared.consoleOutput("index : " + index);
                API.shared.consoleOutput("response from " + pl.Client.name);
                API.shared.consoleOutput("args: {0} {1}", args[0], args[1]);

                int selection = (int)args[1];
                switch (selection)
                {
                case 0:     // raise
                    int newBet = (int)args[2];
                    API.shared.consoleOutput("newBet: {0}", newBet);
                    if (pl.Money >= newBet && newBet > CurrentBet)
                    {
                        MaxBetter     = CurrentBetter;
                        CurrentBet    = newBet;
                        pl.CurrentBet = newBet;
                        pl.Client.triggerEvent("UPDATE_MONEY", pl.Money, pl.CurrentBet);

                        foreach (Player player in Players)
                        {
                            player.Client.triggerEvent("SET_MAX_BET", CurrentBet);
                            if (player != pl)
                            {
                                player.Client.triggerEvent("UPDATE_LAST_PLAYER_ACTION", pl.Client.name, "raised $" + newBet);
                            }
                        }

                        SendToPlayers("Player ~n~" + pl.Client.name + "~n~ has ~y~raised~w~ the bet to ~g~" + CurrentBet + "~w~!");
                    }
                    break;

                case 1:     // call
                    bool check = pl.CurrentBet == CurrentBet;
                    pl.CurrentBet = Math.Min(CurrentBet, pl.Money);
                    pl.Client.triggerEvent("UPDATE_MONEY", pl.Money, pl.CurrentBet);
                    foreach (Player player in Players.Where(p => p != pl))
                    {
                        player.Client.triggerEvent("UPDATE_LAST_PLAYER_ACTION", pl.Client.name, (check ? "checked" : "called") + " $" + pl.CurrentBet);
                    }

                    SendToPlayers("Player ~n~" + pl.Client.name + "~n~ has ~g~" + (check ? "checked." : "called."));
                    break;

                case 2:     // Fold
                    pl.State  = PlayerState.Folded;
                    pl.Money -= pl.CurrentBet;
                    pl.Client.triggerEvent("UPDATE_MONEY", pl.Money, pl.CurrentBet);
                    foreach (Player player in Players.Where(p => p != pl))
                    {
                        player.Client.triggerEvent("UPDATE_LAST_PLAYER_ACTION", pl.Client.name, "folded");
                    }
                    if (OnPlayerMoneyChange != null)
                    {
                        OnPlayerMoneyChange.Invoke(pl.Client, pl.Money);
                    }
                    SendToPlayers("Player ~n~" + pl.Client.name + "~n~ has ~r~folded!");
                    break;
                }

                int pot = UnclaimedCash;

                foreach (Player player in Players)
                {
                    pot += player.CurrentBet;
                }

                Pot = pot;

                Players.ForEach(p => p.Client.triggerEvent("SET_POT", pot));

                RebuildCash();

                if (Players.Count(p => p.State == PlayerState.Playing) == 1)
                {
                    //API.shared.consoleOutput("erryone folded.");
                    Player winner = Players.First(p => p.State == PlayerState.Playing);
                    winner.Money += Pot;
                    SendToPlayers("Everyone folded, player ~n~" + winner.Client.name + "~n~ has won the round!");

                    foreach (var player in Players)
                    {
                        foreach (var player1 in Players.Where(p => p != player))
                        {
                            player1.Client.triggerEvent("SET_PLAYER_CARDS", player.Client.name,
                                                        player.Cards[0].ToJsCode(), player.Cards[1].ToJsCode());
                        }
                    }

                    API.shared.sleep(5000);

                    EndRound();
                    return;
                }

                API.shared.sleep(1000);
                Advance();
            }
        }