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); }
public void Pulse() { if (State == GameState.PreGame) { Blinds = 200; return; } if (State == GameState.NewRound) { if (Players.Count <= 1) { SendToPlayers("Not enough players to continue!"); State = GameState.PreGame; return; } if (++_numberOfRounds > 10) { _numberOfRounds = 0; _deck.Shuffle(); } if (_numberOfRounds % 5 == 0 && _numberOfRounds != 0) { Blinds = Blinds * 2; } foreach (Player player in Players) { player.CurrentBet = 0; player.State = PlayerState.Playing; player.Cards = new Card[2] { _deck.Pop(), _deck.Pop() }; player.Client.triggerEvent("SET_HAND_CARDS", player.Cards[0].ToJsCode(), player.Cards[1].ToJsCode()); } CurrentBet = Blinds; // Blind? MaxBetter = 0; Pot = 0; UnclaimedCash = 0; Table = null; Players.ForEach(p => p.Client.triggerEvent("NEW_ROUND")); Players.ForEach(p => p.Client.triggerEvent("SET_MAX_BET", CurrentBet)); Players.ForEach(p => p.Client.triggerEvent("SET_POT", CurrentBet)); //API.shared.consoleOutput("starting"); _starter = (_starter + 1) % Players.Count; //API.shared.consoleOutput("starter: " + _starter); CurrentBetter = _starter; MaxBetter = CurrentBetter; Players[CurrentBetter].CurrentBet = Math.Min(CurrentBet, Players[CurrentBetter].Money); CurrentBet = Players[CurrentBetter].CurrentBet; Players[CurrentBetter].Client.triggerEvent("UPDATE_MONEY", Players[CurrentBetter].Money, Players[CurrentBetter].CurrentBet); SendToPlayers("Player ~n~" + Players[CurrentBetter].Client.name + "~n~ has placed a blind of $" + CurrentBet + "."); foreach (Player player in Players.Where(p => p != Players[CurrentBetter])) { player.Client.triggerEvent("UPDATE_LAST_PLAYER_ACTION", Players[CurrentBetter].Client.name, "blind $" + CurrentBet); } //API.shared.consoleOutput("Test test test"); CurrentBetter = (CurrentBetter + 1) % Players.Count; //API.shared.consoleOutput("better: " + CurrentBetter); RebuildCash(); GiveTurn(Players[CurrentBetter]); if (OnLobbyRoundStart != null) { OnLobbyRoundStart.Invoke(); } } }