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); }
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; }
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(); } } }
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(); } }