Advertisement
Guest User

PokerHandler.cs

a guest
Dec 16th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 44.39 KB | None | 0 0
  1.  
  2. // Type: COServer.PokerHandler
  3.  
  4.  
  5.  
  6.  
  7. using COServer.Client;
  8. using Poker;
  9. using Poker.Packets;
  10. using Poker.Structures;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Threading;
  15. using System.Timers;
  16.  
  17. namespace COServer
  18. {
  19.   public class PokerHandler
  20.   {
  21.     public static void Shutdown(GameClient client)
  22.     {
  23.       object tableSyncRoot;
  24.       if (Database.Tables != null)
  25.       {
  26.         foreach (PokerTable pokerTable in Database.Tables.Values)
  27.         {
  28.           bool lockTaken = false;
  29.           try
  30.           {
  31.             Monitor.Enter(tableSyncRoot = pokerTable.TableSyncRoot, ref lockTaken);
  32.             if (pokerTable.OnScreen != null)
  33.             {
  34.               if (client.Account != null && pokerTable.OnScreen.ContainsKey(client.Account.EntityID))
  35.                 pokerTable.OnScreen.Remove(client.Account.EntityID);
  36.             }
  37.           }
  38.           finally
  39.           {
  40.             if (lockTaken)
  41.               Monitor.Exit(tableSyncRoot);
  42.           }
  43.         }
  44.       }
  45.       if (client.PokerPlayer == null)
  46.         return;
  47.       bool lockTaken1 = false;
  48.       try
  49.       {
  50.         Monitor.Enter(tableSyncRoot = client.PokerPlayer.Table.TableSyncRoot, ref lockTaken1);
  51.         PokerHandler.HandlePacket(new MsgShowHandExit((byte[]) null)
  52.         {
  53.           Action = (byte) 1,
  54.           PlayerUid = client.Entity.UID,
  55.           TableNumber = client.PokerPlayer.Table.Number
  56.         }.ToArray(), client);
  57.       }
  58.       finally
  59.       {
  60.         if (lockTaken1)
  61.           Monitor.Exit(tableSyncRoot);
  62.       }
  63.     }
  64.  
  65.     public static void HandlePacket(byte[] packet, GameClient client)
  66.     {
  67.       ushort uint16 = BitConverter.ToUInt16(packet, 2);
  68.       PokerTable Table = (PokerTable) null;
  69.       if (client.PokerPlayer != null)
  70.         Table = client.PokerPlayer.Table;
  71.       if ((int) uint16 == 2171)
  72.       {
  73.         MsgTexasInteractive texasInteractive = new MsgTexasInteractive(packet);
  74.         Table = Database.Tables[texasInteractive.TableId];
  75.       }
  76.       if (Table == null)
  77.         return;
  78.       lock (Table.TableSyncRoot)
  79.       {
  80.         ushort num1 = uint16;
  81.         if ((uint) num1 <= 2093U)
  82.         {
  83.           switch (num1)
  84.           {
  85.             case 2088:
  86.               byte num2 = packet[4];
  87.               uint uint32 = System.BitConverter.ToUInt32(packet, 9);
  88.               switch (num2)
  89.               {
  90.                 case 0:
  91.                   if (client.PokerPlayer != null && (!Table.InGame() && Table.CanInterface(client.Entity.UID) && Table.Time > DateTime.Now && Table.Kick == null))
  92.                   {
  93.                     Table.Kick = new PokerStructs.Kick();
  94.                     Table.Kick.Starter = client.Entity.UID;
  95.                     Table.Kick.Target = uint32;
  96.                     Table.Kick.Accept = new List<uint>();
  97.                     Table.Kick.Refuse = new List<uint>();
  98.                     Table.Kick.Refuse.AddRange((IEnumerable<uint>) Table.Players.Keys.ToList<uint>());
  99.                     Table.Kick.Total = (byte) Table.Players.Count;
  100.                     if (Table.Kick.Refuse.Remove(client.Entity.UID))
  101.                     {
  102.                       Table.Kick.Accept.Add(client.Entity.UID);
  103.                       TimeSpan timeSpan = Table.Time - DateTime.Now;
  104.                       timeSpan = new TimeSpan(timeSpan.Ticks);
  105.                       uint totalSeconds = (uint) timeSpan.TotalSeconds;
  106.                       Table.Kick.Time = DateTime.Now.AddSeconds((double) totalSeconds);
  107.                       foreach (PokerStructs.Player player in Table.PlayersOnTable())
  108.                         Kernel.GamePool[player.Uid].Send(General.Kick(Table.Kick, (byte) 1, totalSeconds, 0U));
  109.                     }
  110.                     break;
  111.                   }
  112.                   break;
  113.                 case 2:
  114.                   if (client.PokerPlayer != null)
  115.                   {
  116.                     byte num3 = packet[17];
  117.                     if (!Table.InGame() && Table.CanInterface(client.Entity.UID) && client.PokerPlayer.PlayerType == Enums.PlayerType.Player && Table.Kick != null && Table.Kick.Time > DateTime.Now)
  118.                     {
  119.                       if ((int) num3 == 1)
  120.                       {
  121.                         if (Table.Kick.Refuse.Remove(client.Entity.UID))
  122.                         {
  123.                           Table.Kick.Accept.Add(client.Entity.UID);
  124.                           foreach (PokerStructs.Player player in Table.PlayersOnTable())
  125.                             Kernel.GamePool[player.Uid].Send(General.Kick(Table.Kick, (byte) 2, client.Entity.UID, 1U));
  126.                         }
  127.                         if (Table.Kick.Accept.Count > Table.Kick.Refuse.Count)
  128.                         {
  129.                           foreach (PokerStructs.Player player in Table.PlayersOnTable())
  130.                             Kernel.GamePool[player.Uid].Send(General.Kick(Table.Kick, (byte) 3, 0U, 1U));
  131.                           GameClient client1 = Kernel.GamePool[Table.Kick.Target];
  132.                           if (client1 != null && client1.PokerPlayer != null)
  133.                             PokerHandler.HandlePacket(new MsgShowHandExit((byte[]) null)
  134.                             {
  135.                               Action = (byte) 1,
  136.                               PlayerUid = client1.Entity.UID,
  137.                               TableNumber = client1.PokerPlayer.Table.Number
  138.                             }.ToArray(), client1);
  139.                           Table.Kick = (PokerStructs.Kick) null;
  140.                         }
  141.                       }
  142.                       else
  143.                       {
  144.                         foreach (PokerStructs.Player player in Table.PlayersOnTable())
  145.                           Kernel.GamePool[player.Uid].Send(General.Kick(Table.Kick, (byte) 2, client.Entity.UID, 0U));
  146.                       }
  147.                     }
  148.                     break;
  149.                   }
  150.                   break;
  151.               }
  152.             case 2090:
  153.               MsgShowHandEnter msgShowHandEnter = new MsgShowHandEnter(packet);
  154.               if ((int) msgShowHandEnter.Action == 0)
  155.               {
  156.                 if (client.PokerPlayer != null && client.CanPlayPoker() && (client.PokerPlayer.PlayerType == Enums.PlayerType.Watcher && (int) client.PokerPlayer.Table.Number == (int) msgShowHandEnter.TableNumber))
  157.                 {
  158.                   ulong money = 0;
  159.                   if (!client.PokerPlayer.Table.IsCPs)
  160.                     money = client.Entity.Money;
  161.                   else if (client.PokerPlayer.Table.IsCPs)
  162.                     money = (ulong) client.Entity.ConquerPoints;
  163.                   client.PokerPlayer.Create(Enums.PlayerType.Player, (byte) msgShowHandEnter.Seat, client.PokerPlayer.Table, money);
  164.                   if (client.PokerPlayer.Table.AddPlayer(client.PokerPlayer))
  165.                   {
  166.                     client.SendScreen(new MsgTexasInteractive((byte[]) null).ToArray(Enums.TableInteractiveType.Join, client.PokerPlayer), true);
  167.                     client.Send(msgShowHandEnter.ToArray((byte) 1, client.PokerPlayer));
  168.                     foreach (PokerStructs.Player player in client.PokerPlayer.Table.PlayersOnTable())
  169.                     {
  170.                       client.Send(msgShowHandEnter.ToArray((byte) 1, player));
  171.                       if ((int) player.Uid != (int) client.Entity.UID)
  172.                         Kernel.GamePool[player.Uid].Send(msgShowHandEnter.ToArray((byte) 1, client.PokerPlayer));
  173.                     }
  174.                     byte[] buffer = client.PokerPlayer.Table.Update(Enums.TableUpdate.PlayerCount, 0UL);
  175.                     foreach (uint key in client.PokerPlayer.Table.OnScreen.Keys)
  176.                       Kernel.GamePool[key].Send(buffer);
  177.                     client.Entity.PokerTableID = client.PokerPlayer.Table.Id;
  178.                     client.Entity.PokerSeat = (uint) client.PokerPlayer.Seat;
  179.                   }
  180.                   break;
  181.                 }
  182.                 break;
  183.               }
  184.               Console.WriteLine("Unhandle Action MsgShowHandEnter " + (object) msgShowHandEnter.Action);
  185.               break;
  186.             case 2093:
  187.               MsgShowHandCallAction showHandCallAction = new MsgShowHandCallAction(packet);
  188.               if (client.PokerPlayer == null)
  189.                 break;
  190.               showHandCallAction.Uid = client.PokerPlayer.Uid;
  191.               if (!Table.Players.ContainsKey(client.Entity.UID) || (int) Table.CurrentPlayer != (int) client.Entity.UID)
  192.                 break;
  193.               ushort action = showHandCallAction.Action;
  194.               if ((uint) action <= 8U)
  195.               {
  196.                 switch (action)
  197.                 {
  198.                   case 1:
  199.                     if (!Table.UnLimited)
  200.                     {
  201.                       if ((int) Table.NumberOfRaise == 0)
  202.                       {
  203.                         int num3 = Table.State == Enums.TableState.Pocket ? 0 : (Table.State != Enums.TableState.Flop ? 1 : 0);
  204.                         showHandCallAction.RoundPot = num3 != 0 ? (ulong) (Table.MinBet * 2U) : (ulong) Table.MinBet;
  205.                       }
  206.                       else
  207.                         showHandCallAction.RoundPot = Table.State != Enums.TableState.Pocket ? (ulong) (Table.MinBet * 2U) : (ulong) Table.MinBet;
  208.                     }
  209.                     if ((Table.IsCPs ? ((ulong) client.Entity.ConquerPoints >= showHandCallAction.RoundPot ? 1 : 0) : (client.Entity.Money >= showHandCallAction.RoundPot ? 1 : 0)) != 0)
  210.                     {
  211.                       if (Table.IsCPs)
  212.                         client.Entity.ConquerPoints -= (uint) showHandCallAction.RoundPot;
  213.                       else
  214.                         client.Entity.Money -= showHandCallAction.RoundPot;
  215.                       client.PokerPlayer.Decrement(showHandCallAction.RoundPot);
  216.                       client.PokerPlayer.PotinThisRound = true;
  217.                       byte[] array = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
  218.                       foreach (PokerStructs.Player player in Table.PlayersOnTable())
  219.                         Kernel.GamePool[player.Uid].Send(array);
  220.                       byte[] buffer1 = Table.Update(Enums.TableUpdate.Chips, 0UL);
  221.                       foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  222.                         Kernel.GamePool[keyValuePair.Key].Send(buffer1);
  223.                       if (Table.Next(true))
  224.                       {
  225.                         byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
  226.                         foreach (PokerStructs.Player player in Table.PlayersOnTable())
  227.                           Kernel.GamePool[player.Uid].Send(buffer2);
  228.                         Table.Time = DateTime.Now.AddSeconds(10.0);
  229.                       }
  230.                       break;
  231.                     }
  232.                     break;
  233.                   case 2:
  234.                     if ((Table.IsCPs ? ((ulong) client.Entity.ConquerPoints >= Table.RequiredPot ? 1 : 0) : (client.Entity.Money >= Table.RequiredPot ? 1 : 0)) != 0)
  235.                     {
  236.                       if (Table.IsCPs)
  237.                         client.Entity.ConquerPoints -= (uint) Table.RequiredPot;
  238.                       else
  239.                         client.Entity.Money -= Table.RequiredPot;
  240.                       System.Timers.Timer myTimer = new System.Timers.Timer();
  241.                       client.PokerPlayer.Decrement(Table.RequiredPot);
  242.                       client.PokerPlayer.PotinThisRound = true;
  243.                       byte[] array = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
  244.                       foreach (PokerStructs.Player player in Table.PlayersOnTable())
  245.                         Kernel.GamePool[player.Uid].Send(array);
  246.                       byte[] buffer = Table.Update(Enums.TableUpdate.Chips, 0UL);
  247.                       foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  248.                         Kernel.GamePool[keyValuePair.Key].Send(buffer);
  249.                       if (Table.Next(true))
  250.                       {
  251.                         byte[] P3 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
  252.                         if ((long) Table.RoundPot != 0L)
  253.                         {
  254.                           foreach (PokerStructs.Player player in Table.PlayersOnTable())
  255.                             Kernel.GamePool[player.Uid].Send(P3);
  256.                         }
  257.                         Table.Time = DateTime.Now.AddSeconds(10.0);
  258.                         myTimer.Elapsed += (ElapsedEventHandler) ((o, ea) =>
  259.                         {
  260.                           foreach (PokerStructs.Player player in Table.PlayersOnTable())
  261.                             Kernel.GamePool[player.Uid].Send(P3);
  262.                           Table.Time = DateTime.Now.AddSeconds(10.0);
  263.                           myTimer.Stop();
  264.                         });
  265.                         if ((long) Table.RoundPot == 0L)
  266.                         {
  267.                           myTimer.Interval = 2000.0;
  268.                           myTimer.Start();
  269.                         }
  270.                       }
  271.                       break;
  272.                     }
  273.                     break;
  274.                   case 4:
  275.                     if ((int) Table.SmallBlind == (int) client.Entity.UID)
  276.                       Table.SmallBlind = Table.NextSeat(client.PokerPlayer.Seat);
  277.                     client.PokerPlayer.PotinThisRound = true;
  278.                     client.PokerPlayer.Fold = true;
  279.                     client.PokerPlayer.RoundPot = 0UL;
  280.                     byte[] array1 = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
  281.                     foreach (PokerStructs.Player player in Table.PlayersOnTable())
  282.                       Kernel.GamePool[player.Uid].Send(array1);
  283.                     byte[] buffer3 = Table.Update(Enums.TableUpdate.Chips, 0UL);
  284.                     foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  285.                       Kernel.GamePool[keyValuePair.Key].Send(buffer3);
  286.                     if (Table.Next(false))
  287.                     {
  288.                       byte[] buffer1 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
  289.                       foreach (PokerStructs.Player player in Table.PlayersOnTable())
  290.                         Kernel.GamePool[player.Uid].Send(buffer1);
  291.                       Table.Time = DateTime.Now.AddSeconds(10.0);
  292.                       break;
  293.                     }
  294.                     break;
  295.                   case 8:
  296.                     client.PokerPlayer.PotinThisRound = true;
  297.                     byte[] array2 = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
  298.                     foreach (PokerStructs.Player player in Table.PlayersOnTable())
  299.                       Kernel.GamePool[player.Uid].Send(array2);
  300.                     byte[] buffer4 = Table.Update(Enums.TableUpdate.Chips, 0UL);
  301.                     foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  302.                       Kernel.GamePool[keyValuePair.Key].Send(buffer4);
  303.                     System.Timers.Timer myTimer1 = new System.Timers.Timer();
  304.                     if (Table.Next(true))
  305.                     {
  306.                       byte[] P3 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
  307.                       Table.Time = DateTime.Now.AddSeconds(10.0);
  308.                       myTimer1.Elapsed += (ElapsedEventHandler) ((o, ea) =>
  309.                       {
  310.                         foreach (PokerStructs.Player player in Table.PlayersOnTable())
  311.                           Kernel.GamePool[player.Uid].Send(P3);
  312.                         Table.Time = DateTime.Now.AddSeconds(10.0);
  313.                         myTimer.Stop();
  314.                       });
  315.                       myTimer1.Interval = 750.0;
  316.                       myTimer1.Start();
  317.                       break;
  318.                     }
  319.                     break;
  320.                 }
  321.               }
  322.               else
  323.               {
  324.                 if ((int) action != 16)
  325.                 {
  326.                   if ((int) action == 32)
  327.                   {
  328.                     if (Table.IsCPs)
  329.                     {
  330.                       showHandCallAction.RoundPot = (ulong) client.Entity.ConquerPoints;
  331.                       client.Entity.ConquerPoints = 0U;
  332.                     }
  333.                     else
  334.                     {
  335.                       showHandCallAction.RoundPot = client.Entity.Money;
  336.                       client.Entity.Money = 0UL;
  337.                     }
  338.                     if ((int) Table.SmallBlind == (int) client.Entity.UID)
  339.                       Table.SmallBlind = Table.NextSeat(client.PokerPlayer.Seat);
  340.                     client.PokerPlayer.Decrement(showHandCallAction.RoundPot);
  341.                     client.PokerPlayer.PotinThisRound = true;
  342.                     client.PokerPlayer.IsPotAllin = true;
  343.                     byte[] array3 = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
  344.                     foreach (PokerStructs.Player player in Table.PlayersOnTable())
  345.                       Kernel.GamePool[player.Uid].Send(array3);
  346.                     byte[] buffer1 = Table.Update(Enums.TableUpdate.Chips, 0UL);
  347.                     foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  348.                       Kernel.GamePool[keyValuePair.Key].Send(buffer1);
  349.                     if (!Table.HighestBet(client.PokerPlayer.Uid, client.PokerPlayer.RoundPot) ? Table.Next(false) : Table.Next(true))
  350.                     {
  351.                       byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
  352.                       foreach (PokerStructs.Player player in Table.PlayersOnTable())
  353.                         Kernel.GamePool[player.Uid].Send(buffer2);
  354.                       Table.Time = DateTime.Now.AddSeconds(10.0);
  355.                       break;
  356.                     }
  357.                     break;
  358.                   }
  359.                   break;
  360.                 }
  361.                 if (!Table.UnLimited)
  362.                 {
  363.                   showHandCallAction.RoundPot = (ulong) Table.MinBet;
  364.                   if ((int) Table.NumberOfRaise == 3)
  365.                     break;
  366.                 }
  367.                 if ((Table.IsCPs ? ((ulong) client.Entity.ConquerPoints >= Table.RequiredPot + showHandCallAction.RoundPot ? 1 : 0) : (client.Entity.Money >= Table.RequiredPot + showHandCallAction.RoundPot ? 1 : 0)) != 0)
  368.                 {
  369.                   if (!Table.UnLimited)
  370.                     ++Table.NumberOfRaise;
  371.                   if (Table.IsCPs)
  372.                     client.Entity.ConquerPoints -= (uint) (Table.RequiredPot + showHandCallAction.RoundPot);
  373.                   else
  374.                     client.Entity.Money -= Table.RequiredPot + showHandCallAction.RoundPot;
  375.                   client.PokerPlayer.Decrement(Table.RequiredPot + showHandCallAction.RoundPot);
  376.                   client.PokerPlayer.PotinThisRound = true;
  377.                   byte[] array3 = showHandCallAction.ToArray(client.PokerPlayer.RoundPot, client.PokerPlayer.TotalPot);
  378.                   foreach (PokerStructs.Player player in Table.PlayersOnTable())
  379.                     Kernel.GamePool[player.Uid].Send(array3);
  380.                   byte[] buffer1 = Table.Update(Enums.TableUpdate.Chips, 0UL);
  381.                   foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  382.                     Kernel.GamePool[keyValuePair.Key].Send(buffer1);
  383.                   if (Table.Next(true))
  384.                   {
  385.                     byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
  386.                     foreach (PokerStructs.Player player in Table.PlayersOnTable())
  387.                       Kernel.GamePool[player.Uid].Send(buffer2);
  388.                     Table.Time = DateTime.Now.AddSeconds(10.0);
  389.                   }
  390.                   break;
  391.                 }
  392.                 break;
  393.               }
  394.           }
  395.         }
  396.         else if ((int) num1 != 2096)
  397.         {
  398.           if ((int) num1 == 2171)
  399.           {
  400.             MsgTexasInteractive texasInteractive = new MsgTexasInteractive(packet);
  401.             switch (texasInteractive.InteractiveType)
  402.             {
  403.               case Enums.TableInteractiveType.Join:
  404.                 if (!client.CanPlayPoker() || (int) texasInteractive.PlayerUid != (int) client.Entity.UID || client.PokerPlayer != null)
  405.                   break;
  406.                 if (Table.OnScreen != null && !Table.OnScreen.ContainsKey(client.Entity.UID))
  407.                   Table.OnScreen.Add(client.Entity.UID, client.Entity.UID);
  408.                 if (Table != null && Table.CanInterface(client.Entity.UID))
  409.                 {
  410.                   ulong money = 0;
  411.                   if (!Table.IsCPs)
  412.                     money = client.Entity.Money;
  413.                   else if (Table.IsCPs)
  414.                     money = (ulong) client.Entity.ConquerPoints;
  415.                   client.PokerPlayer = new PokerStructs.Player(client.Entity.Name, client.Entity.UID);
  416.                   client.PokerPlayer.Create(Enums.PlayerType.Player, texasInteractive.Seat, Table, money);
  417.                   if (Table.AddPlayer(client.PokerPlayer))
  418.                   {
  419.                     client.SendScreen(texasInteractive.ToArray(), true);
  420.                     byte[] array3 = new MsgShowHandEnter((byte[]) null).ToArray((byte) 1, client.PokerPlayer);
  421.                     client.Send(array3);
  422.                     foreach (PokerStructs.Player player in Table.PlayersOnTable())
  423.                     {
  424.                       client.Send(new MsgShowHandEnter((byte[]) null).ToArray((byte) 1, player));
  425.                       if ((int) player.Uid != (int) client.Entity.UID)
  426.                         Kernel.GamePool[player.Uid].Send(array3);
  427.                     }
  428.                     byte[] buffer1 = Table.Update(Enums.TableUpdate.PlayerCount, 0UL);
  429.                     foreach (uint key in Table.OnScreen.Keys)
  430.                       Kernel.GamePool[key].Send(buffer1);
  431.                     if (Table.InGame())
  432.                     {
  433.                       client.Send(Table.Update(Enums.TableUpdate.Chips, 0UL));
  434.                       client.Send(General.MsgShowHandState(Table));
  435.                     }
  436.                     client.Entity.PokerTableID = client.PokerPlayer.Table.Id;
  437.                     client.Entity.PokerSeat = (uint) client.PokerPlayer.Seat;
  438.                   }
  439.                   else
  440.                   {
  441.                     client.Entity.PokerTableID = 0U;
  442.                     client.Entity.PokerSeat = 0U;
  443.                     client.PokerPlayer = (PokerStructs.Player) null;
  444.                   }
  445.                 }
  446.                 break;
  447.               case Enums.TableInteractiveType.Watch:
  448.                 if ((int) texasInteractive.PlayerUid == (int) client.Entity.UID && client.PokerPlayer == null)
  449.                 {
  450.                   if (Table.OnScreen != null && !Table.OnScreen.ContainsKey(client.Entity.UID))
  451.                     Table.OnScreen.Add(client.Entity.UID, client.Entity.UID);
  452.                   if (Table != null && Table.CanInterface(client.Entity.UID))
  453.                   {
  454.                     ulong money = 0;
  455.                     if (!Table.IsCPs)
  456.                       money = client.Entity.Money;
  457.                     else if (Table.IsCPs)
  458.                       money = (ulong) client.Entity.ConquerPoints;
  459.                     client.PokerPlayer = new PokerStructs.Player(client.Entity.Name, client.Entity.UID);
  460.                     client.PokerPlayer.Create(Enums.PlayerType.Watcher, texasInteractive.Seat, Table, money);
  461.                     if (Table.AddWatcher(client.PokerPlayer))
  462.                     {
  463.                       byte[] array3 = new MsgShowHandEnter((byte[]) null).ToArray((byte) 1, client.PokerPlayer);
  464.                       client.Send(array3);
  465.                       foreach (PokerStructs.Player player in Table.PlayersOnTable())
  466.                       {
  467.                         client.Send(new MsgShowHandEnter((byte[]) null).ToArray((byte) 1, player));
  468.                         if ((int) player.Uid != (int) client.Entity.UID)
  469.                           Kernel.GamePool[player.Uid].Send(array3);
  470.                       }
  471.                       if (Table.InGame())
  472.                       {
  473.                         client.Send(Table.Update(Enums.TableUpdate.Chips, 0UL));
  474.                         client.Send(General.MsgShowHandState(Table));
  475.                       }
  476.                     }
  477.                     else
  478.                       client.PokerPlayer = (PokerStructs.Player) null;
  479.                   }
  480.                   break;
  481.                 }
  482.                 break;
  483.               default:
  484.                 Console.WriteLine("Unhandle Action MsgTexasInteractive " + (object) texasInteractive.InteractiveType);
  485.                 break;
  486.             }
  487.           }
  488.         }
  489.         else
  490.         {
  491.           MsgShowHandExit msgShowHandExit = new MsgShowHandExit(packet);
  492.           if ((int) msgShowHandExit.Action == 1)
  493.           {
  494.             if (client.PokerPlayer != null && Table != null)
  495.             {
  496.               if (client.PokerPlayer.PlayerType == Enums.PlayerType.Player)
  497.               {
  498.                 if (!Table.Players.ContainsKey(client.Entity.UID) || !Table.PlayerLeave(client.PokerPlayer))
  499.                   return;
  500.                 if ((int) Table.SmallBlind == (int) client.Entity.UID)
  501.                   Table.SmallBlind = Table.NextSeat(client.PokerPlayer.Seat);
  502.                 byte[] array3 = msgShowHandExit.ToArray((byte) 1, client.PokerPlayer);
  503.                 client.Send(array3);
  504.                 client.SendScreen(new MsgTexasInteractive((byte[]) null).ToArray(Enums.TableInteractiveType.Leave, client.PokerPlayer), true);
  505.                 foreach (PokerStructs.Player player in Table.PlayersOnTable())
  506.                   Kernel.GamePool[player.Uid].Send(array3);
  507.                 byte[] buffer1 = Table.Update(Enums.TableUpdate.PlayerCount, 0UL);
  508.                 foreach (uint key in Table.OnScreen.Keys)
  509.                   Kernel.GamePool[key].Send(buffer1);
  510.                 if (Table.InGame())
  511.                 {
  512.                   if ((int) Table.CurrentPlayer == (int) client.Entity.UID)
  513.                   {
  514.                     if (client.PokerPlayer.Table.Next(false))
  515.                     {
  516.                       byte[] buffer2 = General.MsgShowHandActivePlayer(client.PokerPlayer.Table, (ushort) 10, client.PokerPlayer.Table.CurrentPlayer);
  517.                       foreach (PokerStructs.Player player in client.PokerPlayer.Table.PlayersOnTable())
  518.                         Kernel.GamePool[player.Uid].Send(buffer2);
  519.                       client.PokerPlayer.Table.Time = DateTime.Now.AddSeconds(10.0);
  520.                     }
  521.                   }
  522.                   else
  523.                     Table.NextRound();
  524.                 }
  525.                 client.PokerPlayer = (PokerStructs.Player) null;
  526.                 client.Entity.PokerTableID = 0U;
  527.                 client.Entity.PokerSeat = 0U;
  528.               }
  529.               else if (client.PokerPlayer.PlayerType == Enums.PlayerType.Watcher && Table.Watchers.ContainsKey(client.Entity.UID) && Table.WatcherLeave(client.PokerPlayer))
  530.               {
  531.                 byte[] array3 = msgShowHandExit.ToArray((byte) 1, client.PokerPlayer);
  532.                 client.Send(array3);
  533.                 foreach (PokerStructs.Player player in Table.PlayersOnTable())
  534.                   Kernel.GamePool[player.Uid].Send(array3);
  535.                 client.PokerPlayer = (PokerStructs.Player) null;
  536.               }
  537.             }
  538.           }
  539.           else
  540.             Console.WriteLine("Unhandle Action MsgShowHandExit " + (object) msgShowHandExit.Action);
  541.         }
  542.       }
  543.     }
  544.  
  545.     public static void PokerTablesCallback(PokerTable Table, int time)
  546.     {
  547.       Table.ThreadTime = DateTime.Now;
  548.       lock (Table.TableSyncRoot)
  549.       {
  550.         if (Table.TableType != Enums.TableType.TexasHoldem)
  551.           return;
  552.         switch (Table.State)
  553.         {
  554.           case Enums.TableState.Unopened:
  555.             if (Table.Time < Table.ThreadTime)
  556.             {
  557.               if (Table.Kick != null)
  558.               {
  559.                 try
  560.                 {
  561.                   if (Table.Kick.Accept.Count > Table.Kick.Refuse.Count)
  562.                   {
  563.                     byte[] buffer = General.Kick(Table.Kick, (byte) 3, 0U, 2U);
  564.                     foreach (PokerStructs.Player player in Table.PlayersOnTable())
  565.                     {
  566.                       if (Kernel.GamePool.ContainsKey(player.Uid))
  567.                         Kernel.GamePool[player.Uid].Send(buffer);
  568.                     }
  569.                     GameClient client = Kernel.GamePool[Table.Kick.Target];
  570.                     if (Table.Players.ContainsKey(Table.Kick.Target) && client != null && client.PokerPlayer != null)
  571.                       PokerHandler.HandlePacket(new MsgShowHandExit((byte[]) null)
  572.                       {
  573.                         Action = (byte) 1,
  574.                         PlayerUid = client.Entity.UID,
  575.                         TableNumber = client.PokerPlayer.Table.Number
  576.                       }.ToArray(), client);
  577.                   }
  578.                   else
  579.                   {
  580.                     byte[] buffer = General.Kick(Table.Kick, (byte) 4, 0U, 2U);
  581.                     foreach (PokerStructs.Player player in Table.PlayersOnTable())
  582.                       Kernel.GamePool[player.Uid].Send(buffer);
  583.                   }
  584.                   Table.Kick = (PokerStructs.Kick) null;
  585.                 }
  586.                 catch
  587.                 {
  588.                   Table.Kick = (PokerStructs.Kick) null;
  589.                 }
  590.               }
  591.             }
  592.             if ((int) Table.PlayerCount <= 1 || !(Table.Time < Table.ThreadTime))
  593.               break;
  594.             Table.StartNewRound();
  595.             foreach (PokerStructs.Player player in Table.Players.Values.Where<PokerStructs.Player>((Func<PokerStructs.Player, bool>) (p => p.IsPlaying)))
  596.             {
  597.               if (Kernel.GamePool.ContainsKey(player.Uid))
  598.               {
  599.                 GameClient gameClient = Kernel.GamePool[player.Uid];
  600.                 if (Table.IsCPs)
  601.                 {
  602.                   gameClient.Entity.ConquerPoints -= Table.MinBet / 2U;
  603.                   if ((int) gameClient.Entity.UID == (int) Table.BigBlind)
  604.                     gameClient.Entity.ConquerPoints -= Table.MinBet;
  605.                   if ((int) gameClient.Entity.UID == (int) Table.SmallBlind)
  606.                     gameClient.Entity.ConquerPoints -= Table.MinBet / 2U;
  607.                 }
  608.                 else
  609.                 {
  610.                   gameClient.Entity.Money -= (ulong) (Table.MinBet / 2U);
  611.                   if ((int) gameClient.Entity.UID == (int) Table.BigBlind)
  612.                     gameClient.Entity.Money -= (ulong) Table.MinBet;
  613.                   if ((int) gameClient.Entity.UID == (int) Table.SmallBlind)
  614.                     gameClient.Entity.Money -= (ulong) (Table.MinBet / 2U);
  615.                 }
  616.               }
  617.             }
  618.             byte[] buffer1 = Table.Update(Enums.TableUpdate.Chips, 0UL);
  619.             foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  620.             {
  621.               if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
  622.                 Kernel.GamePool[keyValuePair.Key].Send(buffer1);
  623.             }
  624.             if (Table.TableIsChange)
  625.             {
  626.               byte[] buffer2 = General.TimerTick(7);
  627.               byte[] buffer3 = General.MsgShowHandDealtCard(Table, (ushort) 7, General.HandDealtCard.OneCardDraw, 0U);
  628.               foreach (PokerStructs.Player player in Table.PlayersOnTable())
  629.               {
  630.                 if (Kernel.GamePool.ContainsKey(player.Uid))
  631.                 {
  632.                   GameClient gameClient = Kernel.GamePool[player.Uid];
  633.                   gameClient.Send(buffer2);
  634.                   gameClient.Send(buffer3);
  635.                 }
  636.               }
  637.               Table.TableIsChange = false;
  638.               Table.Time = DateTime.Now.AddSeconds(7.0);
  639.             }
  640.             Table.RoundState = (byte) 0;
  641.             Table.StartPocket();
  642.             break;
  643.           case Enums.TableState.Pocket:
  644.             if ((int) Table.PlayerCount <= 1 || !(Table.Time < Table.ThreadTime))
  645.               break;
  646.             if ((int) Table.RoundState == 0)
  647.             {
  648.               byte[] buffer2 = Table.Update(Enums.TableUpdate.Statue, 0UL);
  649.               foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  650.               {
  651.                 if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
  652.                   Kernel.GamePool[keyValuePair.Key].Send(buffer2);
  653.               }
  654.               foreach (PokerStructs.Player player in Table.PlayersOnTable())
  655.               {
  656.                 if (Kernel.GamePool.ContainsKey(player.Uid))
  657.                   Kernel.GamePool[player.Uid].Send(General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.TwoCardDraw, player.Uid));
  658.               }
  659.               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);
  660.               Table.RoundState = (byte) 1;
  661.             }
  662.             else if ((int) Table.RoundState == 1)
  663.             {
  664.               byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
  665.               foreach (PokerStructs.Player player in Table.PlayersOnTable())
  666.               {
  667.                 if (Kernel.GamePool.ContainsKey(player.Uid))
  668.                   Kernel.GamePool[player.Uid].Send(buffer2);
  669.               }
  670.               Table.RoundState = (byte) 2;
  671.               Table.Time = DateTime.Now.AddSeconds(10.0);
  672.             }
  673.             else if ((int) Table.RoundState == 2)
  674.             {
  675.               PokerStructs.Player player1 = Table.Players[Table.CurrentPlayer];
  676.               MsgShowHandCallAction showHandCallAction = new MsgShowHandCallAction((byte[]) null);
  677.               showHandCallAction.Uid = player1.Uid;
  678.               showHandCallAction.Action = (ushort) 4;
  679.               player1.PotinThisRound = true;
  680.               player1.Fold = true;
  681.               player1.RoundPot = 0UL;
  682.               if ((int) Table.SmallBlind == (int) player1.Uid)
  683.                 Table.SmallBlind = Table.NextSeat(player1.Seat);
  684.               byte[] array = showHandCallAction.ToArray(player1.RoundPot, player1.TotalPot);
  685.               foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
  686.               {
  687.                 if (Kernel.GamePool.ContainsKey(player2.Uid))
  688.                   Kernel.GamePool[player2.Uid].Send(array);
  689.               }
  690.               if (Table.Next(false))
  691.               {
  692.                 byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
  693.                 foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
  694.                 {
  695.                   if (Kernel.GamePool.ContainsKey(player2.Uid))
  696.                     Kernel.GamePool[player2.Uid].Send(buffer2);
  697.                 }
  698.                 Table.Time = DateTime.Now.AddSeconds(10.0);
  699.               }
  700.             }
  701.             break;
  702.           case Enums.TableState.Flop:
  703.           case Enums.TableState.Turn:
  704.           case Enums.TableState.River:
  705.             if ((int) Table.PlayerCount <= 1)
  706.               break;
  707.             if ((int) Table.RoundState == 0)
  708.             {
  709.               byte[] buffer2 = Table.Update(Enums.TableUpdate.Statue, 0UL);
  710.               foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  711.               {
  712.                 if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
  713.                   Kernel.GamePool[keyValuePair.Key].Send(buffer2);
  714.               }
  715.               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)));
  716.               foreach (PokerStructs.Player player in Table.PlayersOnTable())
  717.               {
  718.                 if (Kernel.GamePool.ContainsKey(player.Uid))
  719.                   Kernel.GamePool[player.Uid].Send(buffer3);
  720.               }
  721.               Table.RoundState = (byte) 1;
  722.             }
  723.             if (Table.Time < Table.ThreadTime && (int) Table.RoundState == 1)
  724.             {
  725.               PokerStructs.Player player1 = Table.Players[Table.CurrentPlayer];
  726.               MsgShowHandCallAction showHandCallAction = new MsgShowHandCallAction((byte[]) null);
  727.               showHandCallAction.Uid = player1.Uid;
  728.               showHandCallAction.Action = (ushort) 4;
  729.               player1.PotinThisRound = true;
  730.               player1.Fold = true;
  731.               player1.RoundPot = 0UL;
  732.               if ((int) Table.SmallBlind == (int) player1.Uid)
  733.                 Table.SmallBlind = Table.NextSeat(player1.Seat);
  734.               byte[] array = showHandCallAction.ToArray(player1.RoundPot, player1.TotalPot);
  735.               foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
  736.               {
  737.                 if (Kernel.GamePool.ContainsKey(player2.Uid))
  738.                   Kernel.GamePool[player2.Uid].Send(array);
  739.               }
  740.               if (Table.Next(false))
  741.               {
  742.                 byte[] buffer2 = General.MsgShowHandActivePlayer(Table, (ushort) 10, Table.CurrentPlayer);
  743.                 foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
  744.                 {
  745.                   if (Kernel.GamePool.ContainsKey(player2.Uid))
  746.                     Kernel.GamePool[player2.Uid].Send(buffer2);
  747.                 }
  748.                 Table.Time = DateTime.Now.AddSeconds(10.0);
  749.               }
  750.             }
  751.             break;
  752.           case Enums.TableState.ShowDown:
  753.             if ((int) Table.RoundState == 0)
  754.             {
  755.               byte[] buffer2 = Table.Update(Enums.TableUpdate.Statue, 0UL);
  756.               foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  757.               {
  758.                 if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
  759.                   Kernel.GamePool[keyValuePair.Key].Send(buffer2);
  760.               }
  761.               if (Table.PreviousState > Enums.TableState.Unopened)
  762.               {
  763.                 byte[] buffer3 = General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.ThreeCardDraw, 0U);
  764.                 byte[] buffer4 = General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.FourCardDraw, 0U);
  765.                 byte[] buffer5 = General.MsgShowHandDealtCard(Table, (ushort) 0, General.HandDealtCard.FiveCardDraw, 0U);
  766.                 foreach (PokerStructs.Player player in Table.PlayersOnTable())
  767.                 {
  768.                   if (Kernel.GamePool.ContainsKey(player.Uid))
  769.                   {
  770.                     GameClient gameClient = Kernel.GamePool[player.Uid];
  771.                     if (Table.PreviousState < Enums.TableState.Flop)
  772.                     {
  773.                       gameClient.Send(buffer3);
  774.                       gameClient.Send(buffer4);
  775.                       gameClient.Send(buffer5);
  776.                     }
  777.                     if (Table.PreviousState == Enums.TableState.Flop)
  778.                     {
  779.                       gameClient.Send(buffer4);
  780.                       gameClient.Send(buffer5);
  781.                     }
  782.                     if (Table.PreviousState == Enums.TableState.Turn)
  783.                       gameClient.Send(buffer5);
  784.                   }
  785.                 }
  786.               }
  787.               Table.RoundState = (byte) 1;
  788.             }
  789.             if ((int) Table.RoundState == 1)
  790.             {
  791.               try
  792.               {
  793.                 Table.GetWinners();
  794.                 Table.RoundState = (byte) 2;
  795.                 byte[] buffer2 = General.MsgShowHandGameResult(Table);
  796.                 byte[] buffer3 = General.MsgShowHandLayCard(Table);
  797.                 Table.TotalPot = 0UL;
  798.                 byte[] buffer4 = Table.Update(Enums.TableUpdate.Chips, 0UL);
  799.                 foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  800.                 {
  801.                   if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
  802.                     Kernel.GamePool[keyValuePair.Key].Send(buffer4);
  803.                 }
  804.                 foreach (PokerStructs.Player player1 in Table.PlayersOnTable())
  805.                 {
  806.                   if (Kernel.GamePool.ContainsKey(player1.Uid))
  807.                   {
  808.                     GameClient gameClient = Kernel.GamePool[player1.Uid];
  809.                     gameClient.Send(buffer3);
  810.                     gameClient.Send(buffer2);
  811.                     if (gameClient.PokerPlayer.PlayerType == Enums.PlayerType.Player)
  812.                     {
  813.                       if (Table.IsCPs)
  814.                       {
  815.                         gameClient.Entity.ConquerPoints = (uint) player1.CurrentMoney;
  816.                         if (gameClient.Entity.ConquerPoints < Table.MinBet * 10U && Table.PlayerLeave(gameClient.PokerPlayer))
  817.                         {
  818.                           byte[] array = new MsgTexasInteractive((byte[]) null).ToArray(Enums.TableInteractiveType.Leave, gameClient.PokerPlayer);
  819.                           foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
  820.                           {
  821.                             if (Kernel.GamePool.ContainsKey(player2.Uid))
  822.                               Kernel.GamePool[player2.Uid].Send(array);
  823.                           }
  824.                           gameClient.SendScreen(array, true);
  825.                           gameClient.PokerPlayer.Create(Enums.PlayerType.Watcher, gameClient.PokerPlayer.Seat, Table, gameClient.PokerPlayer.CurrentMoney);
  826.                           Table.AddWatcher(gameClient.PokerPlayer);
  827.                           gameClient.Entity.PokerTableID = 0U;
  828.                           gameClient.Entity.PokerSeat = 0U;
  829.                         }
  830.                       }
  831.                       else
  832.                       {
  833.                         gameClient.Entity.Money = player1.CurrentMoney;
  834.                         if (gameClient.Entity.Money < (ulong) (Table.MinBet * 10U) && Table.PlayerLeave(gameClient.PokerPlayer))
  835.                         {
  836.                           byte[] array = new MsgTexasInteractive((byte[]) null).ToArray(Enums.TableInteractiveType.Leave, gameClient.PokerPlayer);
  837.                           foreach (PokerStructs.Player player2 in Table.PlayersOnTable())
  838.                           {
  839.                             if (Kernel.GamePool.ContainsKey(player2.Uid))
  840.                               Kernel.GamePool[player2.Uid].Send(array);
  841.                           }
  842.                           gameClient.SendScreen(array, true);
  843.                           gameClient.PokerPlayer.Create(Enums.PlayerType.Watcher, gameClient.PokerPlayer.Seat, Table, gameClient.PokerPlayer.CurrentMoney);
  844.                           Table.AddWatcher(gameClient.PokerPlayer);
  845.                           gameClient.Entity.PokerTableID = 0U;
  846.                           gameClient.Entity.PokerSeat = 0U;
  847.                         }
  848.                       }
  849.                     }
  850.                   }
  851.                 }
  852.               }
  853.               catch
  854.               {
  855.                 Table.RoundState = (byte) 2;
  856.               }
  857.             }
  858.             if ((int) Table.RoundState != 2)
  859.               break;
  860.             Table.State = Enums.TableState.Unopened;
  861.             Table.RoundState = (byte) 0;
  862.             Table.Clear();
  863.             byte[] buffer6 = Table.Update(Enums.TableUpdate.Statue, 0UL);
  864.             byte[] buffer7 = Table.Update(Enums.TableUpdate.PlayerCount, 0UL);
  865.             foreach (KeyValuePair<uint, uint> keyValuePair in Table.OnScreen)
  866.             {
  867.               if (Kernel.GamePool.ContainsKey(keyValuePair.Key))
  868.               {
  869.                 GameClient gameClient = Kernel.GamePool[keyValuePair.Key];
  870.                 gameClient.Send(buffer6);
  871.                 gameClient.Send(buffer7);
  872.               }
  873.             }
  874.             Table.Time = DateTime.Now.AddSeconds(10.0);
  875.             break;
  876.           default:
  877.             Console.WriteLine("Unhandle Poker Table State: " + (object) Table.State);
  878.             break;
  879.         }
  880.       }
  881.     }
  882.   }
  883. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement