Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Type: COServer.PokerHandler
- using COServer.Client;
- using Poker;
- using Poker.Packets;
- using Poker.Structures;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading;
- using System.Timers;
- namespace COServer
- {
- public class PokerHandler
- {
- public static void Shutdown(GameClient client)
- {
- object tableSyncRoot;
- if (Database.Tables != null)
- {
- foreach (PokerTable pokerTable in Database.Tables.Values)
- {
- bool lockTaken = false;
- try
- {
- Monitor.Enter(tableSyncRoot = pokerTable.TableSyncRoot, ref lockTaken);
- if (pokerTable.OnScreen != null)
- {
- if (client.Account != null && pokerTable.OnScreen.ContainsKey(client.Account.EntityID))
- pokerTable.OnScreen.Remove(client.Account.EntityID);
- }
- }
- finally
- {
- if (lockTaken)
- Monitor.Exit(tableSyncRoot);
- }
- }
- }
- if (client.PokerPlayer == null)
- return;
- bool lockTaken1 = false;
- try
- {
- Monitor.Enter(tableSyncRoot = client.PokerPlayer.Table.TableSyncRoot, ref lockTaken1);
- PokerHandler.HandlePacket(new MsgShowHandExit((byte[]) null)
- {
- Action = (byte) 1,
- PlayerUid = client.Entity.UID,
- TableNumber = client.PokerPlayer.Table.Number
- }.ToArray(), client);
- }
- finally
- {
- if (lockTaken1)
- Monitor.Exit(tableSyncRoot);
- }
- }
- public static void HandlePacket(byte[] packet, GameClient client)
- {
- ushort uint16 = BitConverter.ToUInt16(packet, 2);
- PokerTable Table = (PokerTable) null;
- if (client.PokerPlayer != null)
- Table = client.PokerPlayer.Table;
- if ((int) uint16 == 2171)
- {
- MsgTexasInteractive texasInteractive = new MsgTexasInteractive(packet);
- Table = Database.Tables[texasInteractive.TableId];
- }
- if (Table == null)
- return;
- lock (Table.TableSyncRoot)
- {
- ushort num1 = uint16;
- if ((uint) num1 <= 2093U)
- {
- switch (num1)
- {
- case 2088:
- byte num2 = packet[4];
- uint uint32 = System.BitConverter.ToUInt32(packet, 9);
- switch (num2)
- {
- case 0:
- if (client.PokerPlayer != null && (!Table.InGame() && Table.CanInterface(client.Entity.UID) && Table.Time > DateTime.Now && Table.Kick == null))
- {
- Table.Kick = new PokerStructs.Kick();
- Table.Kick.Starter = client.Entity.UID;
- Table.Kick.Target = uint32;
- Table.Kick.Accept = new List<uint>();
- Table.Kick.Refuse = new List<uint>();
- Table.Kick.Refuse.AddRange((IEnumerable<uint>) Table.Players.Keys.ToList<uint>());
- Table.Kick.Total = (byte) Table.Players.Count;
- if (Table.Kick.Refuse.Remove(client.Entity.UID))
- {
- Table.Kick.Accept.Add(client.Entity.UID);
- TimeSpan timeSpan = Table.Time - DateTime.Now;
- timeSpan = new TimeSpan(timeSpan.Ticks);
- uint totalSeconds = (uint) timeSpan.TotalSeconds;
- Table.Kick.Time = DateTime.Now.AddSeconds((double) totalSeconds);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(General.Kick(Table.Kick, (byte) 1, totalSeconds, 0U));
- }
- break;
- }
- break;
- case 2:
- if (client.PokerPlayer != null)
- {
- byte num3 = packet[17];
- if (!Table.InGame() && Table.CanInterface(client.Entity.UID) && client.PokerPlayer.PlayerType == Enums.PlayerType.Player && Table.Kick != null && Table.Kick.Time > DateTime.Now)
- {
- if ((int) num3 == 1)
- {
- if (Table.Kick.Refuse.Remove(client.Entity.UID))
- {
- Table.Kick.Accept.Add(client.Entity.UID);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(General.Kick(Table.Kick, (byte) 2, client.Entity.UID, 1U));
- }
- if (Table.Kick.Accept.Count > Table.Kick.Refuse.Count)
- {
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(General.Kick(Table.Kick, (byte) 3, 0U, 1U));
- GameClient client1 = Kernel.GamePool[Table.Kick.Target];
- if (client1 != null && client1.PokerPlayer != null)
- PokerHandler.HandlePacket(new MsgShowHandExit((byte[]) null)
- {
- Action = (byte) 1,
- PlayerUid = client1.Entity.UID,
- TableNumber = client1.PokerPlayer.Table.Number
- }.ToArray(), client1);
- Table.Kick = (PokerStructs.Kick) null;
- }
- }
- else
- {
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(General.Kick(Table.Kick, (byte) 2, client.Entity.UID, 0U));
- }
- }
- break;
- }
- break;
- }
- case 2090:
- MsgShowHandEnter msgShowHandEnter = new MsgShowHandEnter(packet);
- if ((int) msgShowHandEnter.Action == 0)
- {
- if (client.PokerPlayer != null && client.CanPlayPoker() && (client.PokerPlayer.PlayerType == Enums.PlayerType.Watcher && (int) client.PokerPlayer.Table.Number == (int) msgShowHandEnter.TableNumber))
- {
- ulong money = 0;
- if (!client.PokerPlayer.Table.IsCPs)
- money = client.Entity.Money;
- else if (client.PokerPlayer.Table.IsCPs)
- money = (ulong) client.Entity.ConquerPoints;
- client.PokerPlayer.Create(Enums.PlayerType.Player, (byte) msgShowHandEnter.Seat, client.PokerPlayer.Table, money);
- if (client.PokerPlayer.Table.AddPlayer(client.PokerPlayer))
- {
- client.SendScreen(new MsgTexasInteractive((byte[]) null).ToArray(Enums.TableInteractiveType.Join, client.PokerPlayer), true);
- client.Send(msgShowHandEnter.ToArray((byte) 1, client.PokerPlayer));
- foreach (PokerStructs.Player player in client.PokerPlayer.Table.PlayersOnTable())
- {
- client.Send(msgShowHandEnter.ToArray((byte) 1, player));
- if ((int) player.Uid != (int) client.Entity.UID)
- Kernel.GamePool[player.Uid].Send(msgShowHandEnter.ToArray((byte) 1, client.PokerPlayer));
- }
- byte[] buffer = client.PokerPlayer.Table.Update(Enums.TableUpdate.PlayerCount, 0UL);
- foreach (uint key in client.PokerPlayer.Table.OnScreen.Keys)
- Kernel.GamePool[key].Send(buffer);
- client.Entity.PokerTableID = client.PokerPlayer.Table.Id;
- client.Entity.PokerSeat = (uint) client.PokerPlayer.Seat;
- }
- break;
- }
- break;
- }
- Console.WriteLine("Unhandle Action MsgShowHandEnter " + (object) msgShowHandEnter.Action);
- break;
- case 2093:
- MsgShowHandCallAction showHandCallAction = new MsgShowHandCallAction(packet);
- if (client.PokerPlayer == null)
- break;
- showHandCallAction.Uid = client.PokerPlayer.Uid;
- if (!Table.Players.ContainsKey(client.Entity.UID) || (int) Table.CurrentPlayer != (int) client.Entity.UID)
- break;
- ushort action = showHandCallAction.Action;
- if ((uint) action <= 8U)
- {
- switch (action)
- {
- case 1:
- if (!Table.UnLimited)
- {
- if ((int) Table.NumberOfRaise == 0)
- {
- int num3 = Table.State == Enums.TableState.Pocket ? 0 : (Table.State != Enums.TableState.Flop ? 1 : 0);
- showHandCallAction.RoundPot = num3 != 0 ? (ulong) (Table.MinBet * 2U) : (ulong) Table.MinBet;
- }
- else
- showHandCallAction.RoundPot = Table.State != Enums.TableState.Pocket ? (ulong) (Table.MinBet * 2U) : (ulong) Table.MinBet;
- }
- if ((Table.IsCPs ? ((ulong) client.Entity.ConquerPoints >= showHandCallAction.RoundPot ? 1 : 0) : (client.Entity.Money >= showHandCallAction.RoundPot ? 1 : 0)) != 0)
- {
- if (Table.IsCPs)
- client.Entity.ConquerPoints -= (uint) showHandCallAction.RoundPot;
- else
- client.Entity.Money -= showHandCallAction.RoundPot;
- client.PokerPlayer.Decrement(showHandCallAction.RoundPot);
- client.PokerPlayer.PotinThisRound = true;
- byte[] array = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(array);
- byte[] buffer1 = Table.Update(Enums.TableUpdate.Chips, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- Kernel.GamePool[keyValuePair.Key].Send(buffer1);
- if (Table.Next(true))
- {
- byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(buffer2);
- Table.Time = DateTime.Now.AddSeconds(10.0);
- }
- break;
- }
- break;
- case 2:
- if ((Table.IsCPs ? ((ulong) client.Entity.ConquerPoints >= Table.RequiredPot ? 1 : 0) : (client.Entity.Money >= Table.RequiredPot ? 1 : 0)) != 0)
- {
- if (Table.IsCPs)
- client.Entity.ConquerPoints -= (uint) Table.RequiredPot;
- else
- client.Entity.Money -= Table.RequiredPot;
- System.Timers.Timer myTimer = new System.Timers.Timer();
- client.PokerPlayer.Decrement(Table.RequiredPot);
- client.PokerPlayer.PotinThisRound = true;
- byte[] array = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(array);
- byte[] buffer = Table.Update(Enums.TableUpdate.Chips, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- Kernel.GamePool[keyValuePair.Key].Send(buffer);
- if (Table.Next(true))
- {
- byte[] P3 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
- if ((long) Table.RoundPot != 0L)
- {
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(P3);
- }
- Table.Time = DateTime.Now.AddSeconds(10.0);
- myTimer.Elapsed += (ElapsedEventHandler) ((o, ea) =>
- {
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(P3);
- Table.Time = DateTime.Now.AddSeconds(10.0);
- myTimer.Stop();
- });
- if ((long) Table.RoundPot == 0L)
- {
- myTimer.Interval = 2000.0;
- myTimer.Start();
- }
- }
- break;
- }
- break;
- case 4:
- if ((int) Table.SmallBlind == (int) client.Entity.UID)
- Table.SmallBlind = Table.NextSeat(client.PokerPlayer.Seat);
- client.PokerPlayer.PotinThisRound = true;
- client.PokerPlayer.Fold = true;
- client.PokerPlayer.RoundPot = 0UL;
- byte[] array1 = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(array1);
- byte[] buffer3 = Table.Update(Enums.TableUpdate.Chips, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- Kernel.GamePool[keyValuePair.Key].Send(buffer3);
- if (Table.Next(false))
- {
- byte[] buffer1 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(buffer1);
- Table.Time = DateTime.Now.AddSeconds(10.0);
- break;
- }
- break;
- case 8:
- client.PokerPlayer.PotinThisRound = true;
- byte[] array2 = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(array2);
- byte[] buffer4 = Table.Update(Enums.TableUpdate.Chips, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- Kernel.GamePool[keyValuePair.Key].Send(buffer4);
- System.Timers.Timer myTimer1 = new System.Timers.Timer();
- if (Table.Next(true))
- {
- byte[] P3 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
- Table.Time = DateTime.Now.AddSeconds(10.0);
- myTimer1.Elapsed += (ElapsedEventHandler) ((o, ea) =>
- {
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(P3);
- Table.Time = DateTime.Now.AddSeconds(10.0);
- myTimer.Stop();
- });
- myTimer1.Interval = 750.0;
- myTimer1.Start();
- break;
- }
- break;
- }
- }
- else
- {
- if ((int) action != 16)
- {
- if ((int) action == 32)
- {
- if (Table.IsCPs)
- {
- showHandCallAction.RoundPot = (ulong) client.Entity.ConquerPoints;
- client.Entity.ConquerPoints = 0U;
- }
- else
- {
- showHandCallAction.RoundPot = client.Entity.Money;
- client.Entity.Money = 0UL;
- }
- if ((int) Table.SmallBlind == (int) client.Entity.UID)
- Table.SmallBlind = Table.NextSeat(client.PokerPlayer.Seat);
- client.PokerPlayer.Decrement(showHandCallAction.RoundPot);
- client.PokerPlayer.PotinThisRound = true;
- client.PokerPlayer.IsPotAllin = true;
- byte[] array3 = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(array3);
- byte[] buffer1 = Table.Update(Enums.TableUpdate.Chips, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- Kernel.GamePool[keyValuePair.Key].Send(buffer1);
- if (!Table.HighestBet(client.PokerPlayer.Uid, client.PokerPlayer.RoundPot) ? Table.Next(false) : Table.Next(true))
- {
- byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(buffer2);
- Table.Time = DateTime.Now.AddSeconds(10.0);
- break;
- }
- break;
- }
- break;
- }
- if (!Table.UnLimited)
- {
- showHandCallAction.RoundPot = (ulong) Table.MinBet;
- if ((int) Table.NumberOfRaise == 3)
- break;
- }
- if ((Table.IsCPs ? ((ulong) client.Entity.ConquerPoints >= Table.RequiredPot + showHandCallAction.RoundPot ? 1 : 0) : (client.Entity.Money >= Table.RequiredPot + showHandCallAction.RoundPot ? 1 : 0)) != 0)
- {
- if (!Table.UnLimited)
- ++Table.NumberOfRaise;
- if (Table.IsCPs)
- client.Entity.ConquerPoints -= (uint) (Table.RequiredPot + showHandCallAction.RoundPot);
- else
- client.Entity.Money -= Table.RequiredPot + showHandCallAction.RoundPot;
- client.PokerPlayer.Decrement(Table.RequiredPot + showHandCallAction.RoundPot);
- client.PokerPlayer.PotinThisRound = true;
- byte[] array3 = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(array3);
- byte[] buffer1 = Table.Update(Enums.TableUpdate.Chips, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- Kernel.GamePool[keyValuePair.Key].Send(buffer1);
- if (Table.Next(true))
- {
- byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(buffer2);
- Table.Time = DateTime.Now.AddSeconds(10.0);
- }
- break;
- }
- break;
- }
- }
- }
- else if ((int) num1 != 2096)
- {
- if ((int) num1 == 2171)
- {
- MsgTexasInteractive texasInteractive = new MsgTexasInteractive(packet);
- switch (texasInteractive.InteractiveType)
- {
- case Enums.TableInteractiveType.Join:
- if (!client.CanPlayPoker() || (int) texasInteractive.PlayerUid != (int) client.Entity.UID || client.PokerPlayer != null)
- break;
- if (Table.OnScreen != null && !Table.OnScreen.ContainsKey(client.Entity.UID))
- Table.OnScreen.Add(client.Entity.UID, client.Entity.UID);
- if (Table != null && Table.CanInterface(client.Entity.UID))
- {
- ulong money = 0;
- if (!Table.IsCPs)
- money = client.Entity.Money;
- else if (Table.IsCPs)
- money = (ulong) client.Entity.ConquerPoints;
- client.PokerPlayer = new PokerStructs.Player(client.Entity.Name, client.Entity.UID);
- client.PokerPlayer.Create(Enums.PlayerType.Player, texasInteractive.Seat, Table, money);
- if (Table.AddPlayer(client.PokerPlayer))
- {
- client.SendScreen(texasInteractive.ToArray(), true);
- byte[] array3 = new MsgShowHandEnter((byte[]) null).ToArray((byte) 1, client.PokerPlayer);
- client.Send(array3);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- {
- client.Send(new MsgShowHandEnter((byte[]) null).ToArray((byte) 1, player));
- if ((int) player.Uid != (int) client.Entity.UID)
- Kernel.GamePool[player.Uid].Send(array3);
- }
- byte[] buffer1 = Table.Update(Enums.TableUpdate.PlayerCount, 0UL);
- foreach (uint key in Table.OnScreen.Keys)
- Kernel.GamePool[key].Send(buffer1);
- if (Table.InGame())
- {
- client.Send(Table.Update(Enums.TableUpdate.Chips, 0UL));
- client.Send(General.MsgShowHandState(Table));
- }
- client.Entity.PokerTableID = client.PokerPlayer.Table.Id;
- client.Entity.PokerSeat = (uint) client.PokerPlayer.Seat;
- }
- else
- {
- client.Entity.PokerTableID = 0U;
- client.Entity.PokerSeat = 0U;
- client.PokerPlayer = (PokerStructs.Player) null;
- }
- }
- break;
- case Enums.TableInteractiveType.Watch:
- if ((int) texasInteractive.PlayerUid == (int) client.Entity.UID && client.PokerPlayer == null)
- {
- if (Table.OnScreen != null && !Table.OnScreen.ContainsKey(client.Entity.UID))
- Table.OnScreen.Add(client.Entity.UID, client.Entity.UID);
- if (Table != null && Table.CanInterface(client.Entity.UID))
- {
- ulong money = 0;
- if (!Table.IsCPs)
- money = client.Entity.Money;
- else if (Table.IsCPs)
- money = (ulong) client.Entity.ConquerPoints;
- client.PokerPlayer = new PokerStructs.Player(client.Entity.Name, client.Entity.UID);
- client.PokerPlayer.Create(Enums.PlayerType.Watcher, texasInteractive.Seat, Table, money);
- if (Table.AddWatcher(client.PokerPlayer))
- {
- byte[] array3 = new MsgShowHandEnter((byte[]) null).ToArray((byte) 1, client.PokerPlayer);
- client.Send(array3);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- {
- client.Send(new MsgShowHandEnter((byte[]) null).ToArray((byte) 1, player));
- if ((int) player.Uid != (int) client.Entity.UID)
- Kernel.GamePool[player.Uid].Send(array3);
- }
- if (Table.InGame())
- {
- client.Send(Table.Update(Enums.TableUpdate.Chips, 0UL));
- client.Send(General.MsgShowHandState(Table));
- }
- }
- else
- client.PokerPlayer = (PokerStructs.Player) null;
- }
- break;
- }
- break;
- default:
- Console.WriteLine("Unhandle Action MsgTexasInteractive " + (object) texasInteractive.InteractiveType);
- break;
- }
- }
- }
- else
- {
- MsgShowHandExit msgShowHandExit = new MsgShowHandExit(packet);
- if ((int) msgShowHandExit.Action == 1)
- {
- if (client.PokerPlayer != null && Table != null)
- {
- if (client.PokerPlayer.PlayerType == Enums.PlayerType.Player)
- {
- if (!Table.Players.ContainsKey(client.Entity.UID) || !Table.PlayerLeave(client.PokerPlayer))
- return;
- if ((int) Table.SmallBlind == (int) client.Entity.UID)
- Table.SmallBlind = Table.NextSeat(client.PokerPlayer.Seat);
- byte[] array3 = msgShowHandExit.ToArray((byte) 1, client.PokerPlayer);
- client.Send(array3);
- client.SendScreen(new MsgTexasInteractive((byte[]) null).ToArray(Enums.TableInteractiveType.Leave, client.PokerPlayer), true);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(array3);
- byte[] buffer1 = Table.Update(Enums.TableUpdate.PlayerCount, 0UL);
- foreach (uint key in Table.OnScreen.Keys)
- Kernel.GamePool[key].Send(buffer1);
- if (Table.InGame())
- {
- if ((int) Table.CurrentPlayer == (int) client.Entity.UID)
- {
- if (client.PokerPlayer.Table.Next(false))
- {
- byte[] buffer2 = General.MsgShowHandActivePlayer(client.PokerPlayer.Table, (ushort) 10, client.PokerPlayer.Table.CurrentPlayer);
- foreach (PokerStructs.Player player in client.PokerPlayer.Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(buffer2);
- client.PokerPlayer.Table.Time = DateTime.Now.AddSeconds(10.0);
- }
- }
- else
- Table.NextRound();
- }
- client.PokerPlayer = (PokerStructs.Player) null;
- client.Entity.PokerTableID = 0U;
- client.Entity.PokerSeat = 0U;
- }
- else if (client.PokerPlayer.PlayerType == Enums.PlayerType.Watcher && Table.Watchers.ContainsKey(client.Entity.UID) && Table.WatcherLeave(client.PokerPlayer))
- {
- byte[] array3 = msgShowHandExit.ToArray((byte) 1, client.PokerPlayer);
- client.Send(array3);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(array3);
- client.PokerPlayer = (PokerStructs.Player) null;
- }
- }
- }
- else
- Console.WriteLine("Unhandle Action MsgShowHandExit " + (object) msgShowHandExit.Action);
- }
- }
- }
- public static void PokerTablesCallback(PokerTable Table, int time)
- {
- Table.ThreadTime = DateTime.Now;
- lock (Table.TableSyncRoot)
- {
- if (Table.TableType != Enums.TableType.TexasHoldem)
- return;
- switch (Table.State)
- {
- case Enums.TableState.Unopened:
- if (Table.Time < Table.ThreadTime)
- {
- if (Table.Kick != null)
- {
- try
- {
- if (Table.Kick.Accept.Count > Table.Kick.Refuse.Count)
- {
- byte[] buffer = General.Kick(Table.Kick, (byte) 3, 0U, 2U);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player.Uid))
- Kernel.GamePool[player.Uid].Send(buffer);
- }
- GameClient client = Kernel.GamePool[Table.Kick.Target];
- if (Table.Players.ContainsKey(Table.Kick.Target) && client != null && client.PokerPlayer != null)
- PokerHandler.HandlePacket(new MsgShowHandExit((byte[]) null)
- {
- Action = (byte) 1,
- PlayerUid = client.Entity.UID,
- TableNumber = client.PokerPlayer.Table.Number
- }.ToArray(), client);
- }
- else
- {
- byte[] buffer = General.Kick(Table.Kick, (byte) 4, 0U, 2U);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- Kernel.GamePool[player.Uid].Send(buffer);
- }
- Table.Kick = (PokerStructs.Kick) null;
- }
- catch
- {
- Table.Kick = (PokerStructs.Kick) null;
- }
- }
- }
- if ((int) Table.PlayerCount <= 1 || !(Table.Time < Table.ThreadTime))
- break;
- Table.StartNewRound();
- foreach (PokerStructs.Player player in Table.Players.Values.Where<PokerStructs.Player>((Func<PokerStructs.Player, bool>) (p => p.IsPlaying)))
- {
- if (Kernel.GamePool.ContainsKey(player.Uid))
- {
- GameClient gameClient = Kernel.GamePool[player.Uid];
- if (Table.IsCPs)
- {
- gameClient.Entity.ConquerPoints -= Table.MinBet / 2U;
- if ((int) gameClient.Entity.UID == (int) Table.BigBlind)
- gameClient.Entity.ConquerPoints -= Table.MinBet;
- if ((int) gameClient.Entity.UID == (int) Table.SmallBlind)
- gameClient.Entity.ConquerPoints -= Table.MinBet / 2U;
- }
- else
- {
- gameClient.Entity.Money -= (ulong) (Table.MinBet / 2U);
- if ((int) gameClient.Entity.UID == (int) Table.BigBlind)
- gameClient.Entity.Money -= (ulong) Table.MinBet;
- if ((int) gameClient.Entity.UID == (int) Table.SmallBlind)
- gameClient.Entity.Money -= (ulong) (Table.MinBet / 2U);
- }
- }
- }
- byte[] buffer1 = Table.Update(Enums.TableUpdate.Chips, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- {
- if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
- Kernel.GamePool[keyValuePair.Key].Send(buffer1);
- }
- if (Table.TableIsChange)
- {
- byte[] buffer2 = General.TimerTick(7);
- byte[] buffer3 = General.MsgShowHandDealtCard(Table, (ushort) 7, General.HandDealtCard.OneCardDraw, 0U);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player.Uid))
- {
- GameClient gameClient = Kernel.GamePool[player.Uid];
- gameClient.Send(buffer2);
- gameClient.Send(buffer3);
- }
- }
- Table.TableIsChange = false;
- Table.Time = DateTime.Now.AddSeconds(7.0);
- }
- Table.RoundState = (byte) 0;
- Table.StartPocket();
- break;
- case Enums.TableState.Pocket:
- if ((int) Table.PlayerCount <= 1 || !(Table.Time < Table.ThreadTime))
- break;
- if ((int) Table.RoundState == 0)
- {
- byte[] buffer2 = Table.Update(Enums.TableUpdate.Statue, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- {
- if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
- Kernel.GamePool[keyValuePair.Key].Send(buffer2);
- }
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player.Uid))
- Kernel.GamePool[player.Uid].Send(General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.TwoCardDraw, player.Uid));
- }
- Table.Time = DateTime.Now.AddSeconds((double) Table.Players.Values.Where<PokerStructs.Player>((Func<PokerStructs.Player, bool>) (p => p.IsPlaying)).ToList<PokerStructs.Player>().Count * 1.5);
- Table.RoundState = (byte) 1;
- }
- else if ((int) Table.RoundState == 1)
- {
- byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player.Uid))
- Kernel.GamePool[player.Uid].Send(buffer2);
- }
- Table.RoundState = (byte) 2;
- Table.Time = DateTime.Now.AddSeconds(10.0);
- }
- else if ((int) Table.RoundState == 2)
- {
- PokerStructs.Player player1 = Table.Players[Table.CurrentPlayer];
- MsgShowHandCallAction showHandCallAction = new MsgShowHandCallAction((byte[]) null);
- showHandCallAction.Uid = player1.Uid;
- showHandCallAction.Action = (ushort) 4;
- player1.PotinThisRound = true;
- player1.Fold = true;
- player1.RoundPot = 0UL;
- if ((int) Table.SmallBlind == (int) player1.Uid)
- Table.SmallBlind = Table.NextSeat(player1.Seat);
- byte[] array = showHandCallAction.ToArray(player1.RoundPot, player1.TotalPot);
- foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player2.Uid))
- Kernel.GamePool[player2.Uid].Send(array);
- }
- if (Table.Next(false))
- {
- byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
- foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player2.Uid))
- Kernel.GamePool[player2.Uid].Send(buffer2);
- }
- Table.Time = DateTime.Now.AddSeconds(10.0);
- }
- }
- break;
- case Enums.TableState.Flop:
- case Enums.TableState.Turn:
- case Enums.TableState.River:
- if ((int) Table.PlayerCount <= 1)
- break;
- if ((int) Table.RoundState == 0)
- {
- byte[] buffer2 = Table.Update(Enums.TableUpdate.Statue, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- {
- if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
- Kernel.GamePool[keyValuePair.Key].Send(buffer2);
- }
- byte[] buffer3 = Table.State == Enums.TableState.Flop ? General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.ThreeCardDraw, 0U) : (Table.State == Enums.TableState.Turn ? General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.FourCardDraw, 0U) : (Table.State == Enums.TableState.River ? General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.FiveCardDraw, 0U) : General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.FiveCardDraw, 0U)));
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player.Uid))
- Kernel.GamePool[player.Uid].Send(buffer3);
- }
- Table.RoundState = (byte) 1;
- }
- if (Table.Time < Table.ThreadTime && (int) Table.RoundState == 1)
- {
- PokerStructs.Player player1 = Table.Players[Table.CurrentPlayer];
- MsgShowHandCallAction showHandCallAction = new MsgShowHandCallAction((byte[]) null);
- showHandCallAction.Uid = player1.Uid;
- showHandCallAction.Action = (ushort) 4;
- player1.PotinThisRound = true;
- player1.Fold = true;
- player1.RoundPot = 0UL;
- if ((int) Table.SmallBlind == (int) player1.Uid)
- Table.SmallBlind = Table.NextSeat(player1.Seat);
- byte[] array = showHandCallAction.ToArray(player1.RoundPot, player1.TotalPot);
- foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player2.Uid))
- Kernel.GamePool[player2.Uid].Send(array);
- }
- if (Table.Next(false))
- {
- byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
- foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player2.Uid))
- Kernel.GamePool[player2.Uid].Send(buffer2);
- }
- Table.Time = DateTime.Now.AddSeconds(10.0);
- }
- }
- break;
- case Enums.TableState.ShowDown:
- if ((int) Table.RoundState == 0)
- {
- byte[] buffer2 = Table.Update(Enums.TableUpdate.Statue, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- {
- if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
- Kernel.GamePool[keyValuePair.Key].Send(buffer2);
- }
- if (Table.PreviousState > Enums.TableState.Unopened)
- {
- byte[] buffer3 = General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.ThreeCardDraw, 0U);
- byte[] buffer4 = General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.FourCardDraw, 0U);
- byte[] buffer5 = General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.FiveCardDraw, 0U);
- foreach (PokerStructs.Player player in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player.Uid))
- {
- GameClient gameClient = Kernel.GamePool[player.Uid];
- if (Table.PreviousState < Enums.TableState.Flop)
- {
- gameClient.Send(buffer3);
- gameClient.Send(buffer4);
- gameClient.Send(buffer5);
- }
- if (Table.PreviousState == Enums.TableState.Flop)
- {
- gameClient.Send(buffer4);
- gameClient.Send(buffer5);
- }
- if (Table.PreviousState == Enums.TableState.Turn)
- gameClient.Send(buffer5);
- }
- }
- }
- Table.RoundState = (byte) 1;
- }
- if ((int) Table.RoundState == 1)
- {
- try
- {
- Table.GetWinners();
- Table.RoundState = (byte) 2;
- byte[] buffer2 = General.MsgShowHandGameResult(Table);
- byte[] buffer3 = General.MsgShowHandLayCard(Table);
- Table.TotalPot = 0UL;
- byte[] buffer4 = Table.Update(Enums.TableUpdate.Chips, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- {
- if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
- Kernel.GamePool[keyValuePair.Key].Send(buffer4);
- }
- foreach (PokerStructs.Player player1 in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player1.Uid))
- {
- GameClient gameClient = Kernel.GamePool[player1.Uid];
- gameClient.Send(buffer3);
- gameClient.Send(buffer2);
- if (gameClient.PokerPlayer.PlayerType == Enums.PlayerType.Player)
- {
- if (Table.IsCPs)
- {
- gameClient.Entity.ConquerPoints = (uint) player1.CurrentMoney;
- if (gameClient.Entity.ConquerPoints < Table.MinBet * 10U && Table.PlayerLeave(gameClient.PokerPlayer))
- {
- byte[] array = new MsgTexasInteractive((byte[]) null).ToArray(Enums.TableInteractiveType.Leave, gameClient.PokerPlayer);
- foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player2.Uid))
- Kernel.GamePool[player2.Uid].Send(array);
- }
- gameClient.SendScreen(array, true);
- gameClient.PokerPlayer.Create(Enums.PlayerType.Watcher, gameClient.PokerPlayer.Seat, Table, gameClient.PokerPlayer.CurrentMoney);
- Table.AddWatcher(gameClient.PokerPlayer);
- gameClient.Entity.PokerTableID = 0U;
- gameClient.Entity.PokerSeat = 0U;
- }
- }
- else
- {
- gameClient.Entity.Money = player1.CurrentMoney;
- if (gameClient.Entity.Money < (ulong) (Table.MinBet * 10U) && Table.PlayerLeave(gameClient.PokerPlayer))
- {
- byte[] array = new MsgTexasInteractive((byte[]) null).ToArray(Enums.TableInteractiveType.Leave, gameClient.PokerPlayer);
- foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
- {
- if (Kernel.GamePool.ContainsKey(player2.Uid))
- Kernel.GamePool[player2.Uid].Send(array);
- }
- gameClient.SendScreen(array, true);
- gameClient.PokerPlayer.Create(Enums.PlayerType.Watcher, gameClient.PokerPlayer.Seat, Table, gameClient.PokerPlayer.CurrentMoney);
- Table.AddWatcher(gameClient.PokerPlayer);
- gameClient.Entity.PokerTableID = 0U;
- gameClient.Entity.PokerSeat = 0U;
- }
- }
- }
- }
- }
- }
- catch
- {
- Table.RoundState = (byte) 2;
- }
- }
- if ((int) Table.RoundState != 2)
- break;
- Table.State = Enums.TableState.Unopened;
- Table.RoundState = (byte) 0;
- Table.Clear();
- byte[] buffer6 = Table.Update(Enums.TableUpdate.Statue, 0UL);
- byte[] buffer7 = Table.Update(Enums.TableUpdate.PlayerCount, 0UL);
- foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
- {
- if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
- {
- GameClient gameClient = Kernel.GamePool[keyValuePair.Key];
- gameClient.Send(buffer6);
- gameClient.Send(buffer7);
- }
- }
- Table.Time = DateTime.Now.AddSeconds(10.0);
- break;
- default:
- Console.WriteLine("Unhandle Poker Table State: " + (object) Table.State);
- break;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement