SHARE
TWEET

Reading krocks init reader

capasha Nov 20th, 2016 119 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using PlayerIOClient;
  6. namespace Parser
  7. {
  8.     class Program
  9.     {
  10.         static int[,] foreground = new int[1, 1];
  11.         static int[,] background = new int[1, 1];
  12.         static void Main(string[] args)
  13.         {
  14.             PlayerIO.QuickConnect.SimpleConnect("everybody-edits-su9rn58o40itdbnw69plyw", "guest", "guest", null,
  15.                 delegate (Client client)
  16.                 {
  17.                     Console.WriteLine("Logged in");
  18.                     client.Multiplayer.CreateJoinRoom("PW01", "Everybodyedits" + client.BigDB.Load("config", "config")["version"], false, null, null,
  19.                         delegate (Connection con)
  20.                         {
  21.                             con.Send("init");
  22.                             con.OnMessage += delegate (object sender, PlayerIOClient.Message m)
  23.                             {
  24.                                 switch (m.Type)
  25.                                 {
  26.                                     case "init":
  27.                                         Console.WriteLine("Connected to the world");
  28.                                         foreground = new int[m.GetInt(18), m.GetInt(19)];
  29.                                         background = new int[m.GetInt(18), m.GetInt(19)];
  30.                                         readData(m, 39);
  31.                                         Console.WriteLine("Foreground: " + foreground[0, 0]);
  32.  
  33.                                         break;
  34.                                     case "loadlevel":
  35.                                     case "reset":
  36.                                         readData(m, 0);
  37.                                         break;
  38.                                 }
  39.                             };
  40.                         },
  41.                         delegate (PlayerIOError error)
  42.                         {
  43.                             Console.WriteLine("Error: " + error.Message);
  44.                         });
  45.  
  46.                 },
  47.                 delegate (PlayerIOError error)
  48.                 {
  49.                     Console.WriteLine("Error: " + error.Message);
  50.                 });
  51.             Console.ReadKey();
  52.         }
  53.         public static void readData(PlayerIOClient.Message m, uint c)
  54.         {
  55.             /* A dynamic World Deserializer
  56.             Created by Krock
  57.             License: BSD 3-Clause
  58.  
  59.             First, define the variables "c" and "m".
  60.  
  61.             Variable "m" is a PlayerIOClient.Message
  62.             For the "init" message:
  63.                 uint c = 20; // EE
  64.                 uint c = 13; // EE CM
  65.             For the "reset"/loadlevel message:
  66.                 uint c = 0;
  67.             */
  68.             while (c < m.Count)
  69.             {
  70.                 if (m[c].ToString() == "we")
  71.                     break;
  72.  
  73.                 int b = m.GetInt(c),
  74.                     l = m.GetInt(c + 1);
  75.                 byte[] pX = m.GetByteArray(c + 2),
  76.                     pY = m.GetByteArray(c + 3);
  77.  
  78.                 dynamic arg3 = null;
  79.                 if (b == 9) arg3 = m.GetInt(c + 4);
  80.                 // Get additional information about the current block
  81.                 // if (b == 43) {
  82.                 //  arg3 = m.GetInt(c + 4)
  83.                 // }
  84.  
  85.                 for (int n = 0; n < pX.Length; n += 2)
  86.                 {
  87.                     int x = pX[n] << 8 | pX[n + 1];
  88.                     int y = pY[n] << 8 | pY[n + 1];
  89.  
  90.                     if (l == 0) foreground[x, y] = b;
  91.                     else background[x, y] = b;
  92.  
  93.                     // Add the blocks to your block array here
  94.                     // Variables l, b, x and y are defined
  95.                 }
  96.  
  97.                 ushort argC = 4;
  98.                 for (uint i = c + 4; i < m.Count; i++)
  99.                 {
  100.                     if (m[i] is byte[])
  101.                     {
  102.                         argC -= 2;
  103.                         break;
  104.                     }
  105.                     else if (m[i].ToString() != "we")
  106.                     {
  107.                         argC++;
  108.                     }
  109.                     else break;
  110.                 }
  111.                 c += argC;
  112.             }
  113.         }
  114.     }
  115. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top