Пример #1
0
        public int CreateLobby(Vector3 position, int maxPlayers)
        {
            int id = ++_lobbyCounter;

            _lobbies.Add(id, new PokerLobby(id, true, position, maxPlayers, API.createObject));

            _lobbies[id].OnLobbyRoundEnd += parameters => { if (OnLobbyRoundEnd != null)
                                                            {
                                                                OnLobbyRoundEnd.Invoke(id);
                                                            }
            };
            _lobbies[id].OnLobbyRoundStart += parameters => { if (OnLobbyRoundStart != null)
                                                              {
                                                                  OnLobbyRoundStart.Invoke(id);
                                                              }
            };
            _lobbies[id].OnPlayerLoseRound += parameters => { if (OnPlayerLoseRound != null)
                                                              {
                                                                  OnPlayerLoseRound.Invoke(id, parameters[0]);
                                                              }
            };                                                                                                                               // id, client
            _lobbies[id].OnPlayerWinRound += parameters => { if (OnPlayerWinRound != null)
                                                             {
                                                                 OnPlayerWinRound.Invoke(id, parameters[0], parameters[1], parameters[2]);
                                                             }
            };                                                                                                                                                          // id, client, take, handname
            _lobbies[id].OnPlayerMoneyChange += parameters => { if (OnPlayerMoneyChange != null)
                                                                {
                                                                    OnPlayerMoneyChange.Invoke(id, parameters[0], parameters[1]);
                                                                }
            };                                                                                                                                                    // id, client, newmoney

            return(id);
        }
Пример #2
0
        private void EndRound()
        {
            for (int i = Players.Count - 1; i >= 0; i--)
            {
                var player = Players[i];
                player.Money -= player.CurrentBet;
                player.Client.triggerEvent("UPDATE_MONEY", player.Money, 0);

                if (OnPlayerMoneyChange != null)
                {
                    OnPlayerMoneyChange.Invoke(player.Client, player.Money);
                }

                if (player.Money <= 0)
                {
                    SendToPlayers("Player ~n~" + player.Client.name + "~n~ has lost all their money!");
                    RemovePlayer(player.Client);
                }
            }

            RebuildCash();
            if (OnLobbyRoundEnd != null)
            {
                OnLobbyRoundEnd.Invoke();
            }
            // TODO: remove
            API.shared.sleep(5000);
            State = GameState.NewRound;
        }
Пример #3
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();
                }
            }
        }
Пример #4
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();
            }
        }