SHARE
TWEET

Everybody Edits - Save as minimap

capasha Nov 13th, 2016 (edited) 30 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. using System.Drawing;
  7. using System.IO;
  8. namespace MinimapGenerator
  9. {
  10.     class Program
  11.     {
  12.         public static Bitmap foreground = new Bitmap(1, 1);
  13.         public static Bitmap background = new Bitmap(1, 1);
  14.         public static Bitmap holder = new Bitmap(1, 1);
  15.         public static Connection con;
  16.         public static Dictionary<int, Color> colors = new Dictionary<int, Color>();
  17.         static void Main(string[] args)
  18.         {
  19.             if (File.Exists(Directory.GetCurrentDirectory() + @"\colors.txt"))
  20.             {
  21.                 using (StreamReader sr = new StreamReader("colors.txt"))
  22.                 {
  23.                     string line;
  24.                     while ((line = sr.ReadLine()) != null)
  25.                     {
  26.  
  27.                         string[] split = line.Split(' ');
  28.  
  29.                         if (split.Length == 2)
  30.                         {
  31.                             if (!colors.ContainsKey(Convert.ToInt32(split[0]))) colors.Add(Convert.ToInt32(split[0]), UIntToColor(Convert.ToUInt32(split[1])));
  32.  
  33.                         }
  34.                     }
  35.                 }
  36.             }
  37.  
  38.             connect();
  39.             Console.ReadKey();
  40.         }
  41.         public static void connect()
  42.         {
  43.             PlayerIO.QuickConnect.SimpleConnect("everybody-edits-su9rn58o40itdbnw69plyw", "guest", "guest", null,
  44.             delegate (Client client)
  45.             {
  46.                 con = client.Multiplayer.CreateJoinRoom("PW01", "Everybodyedits" + client.BigDB.Load("config", "config")["version"], false, null, null);
  47.  
  48.                 con.Send("init");
  49.                 con.OnMessage += Con_OnMessage;
  50.             },
  51.             delegate (PlayerIOError error)
  52.             {
  53.  
  54.             });
  55.         }
  56.         private static void Con_OnMessage(object sender, Message m)
  57.         {
  58.             switch (m.Type)
  59.             {
  60.                 case "init":
  61.  
  62.                     var chunks = InitParse.Parse(m);
  63.                     holder = new Bitmap(m.GetInt(18), m.GetInt(19));
  64.                     foreground = new Bitmap(m.GetInt(18), m.GetInt(19));
  65.                     background = new Bitmap(m.GetInt(18), m.GetInt(19));
  66.                     Graphics gr = Graphics.FromImage(holder);
  67.                     gr.Clear(Color.Black);
  68.                     foreach (var chunk in chunks)
  69.                     {
  70.                         foreach (var pos in chunk.Locations)
  71.                         {
  72.                             int bid = Convert.ToInt32(chunk.Type);
  73.                             if (chunk.Layer == 1)
  74.                             {
  75.                                 if (colors.ContainsKey(bid))
  76.                                 {
  77.                                     background.SetPixel(pos.X, pos.Y, colors[bid]);
  78.                                 }
  79.                             }
  80.                             else
  81.                             {
  82.                                 if (bid == 33 || bid == 243 || bid == 44 || bid == 50)
  83.                                 {
  84.                                     foreground.SetPixel(pos.X, pos.Y, bid == 50 ? Color.Transparent : Color.Black);
  85.                                 }
  86.                                 else
  87.                                 {
  88.                                     if (colors.ContainsKey(bid))
  89.                                     {
  90.                                         if (ColorToUInt(colors[bid]) != 4278190080 && ColorToUInt(colors[bid]) != 0 && ColorToUInt(colors[bid]) != 16777216)
  91.                                         {
  92.                                             foreground.SetPixel(pos.X, pos.Y, colors[bid]);
  93.                                         }
  94.  
  95.                                     }
  96.  
  97.                                 }
  98.                             }
  99.  
  100.                         }
  101.                     }
  102.                     gr.DrawImage(background, 0, 0);
  103.                     gr.DrawImage(foreground, 0, 0);
  104.                     gr.Save();
  105.                     holder.Save("test.png");
  106.                     con.Disconnect();
  107.                     break;
  108.             }
  109.         }
  110.         public static Color UIntToColor(uint color)
  111.         {
  112.             byte a = (byte)(color >> 24);
  113.             byte r = (byte)(color >> 16);
  114.             byte g = (byte)(color >> 8);
  115.             byte b = (byte)(color >> 0);
  116.             return Color.FromArgb(a, r, g, b);
  117.         }
  118.         public static uint ColorToUInt(Color color)
  119.         {
  120.             return (uint)((color.A << 24) | (color.R << 16) | (color.G << 8) | (color.B << 0));
  121.         }
  122.     }
  123.         public static class InitParse
  124.         {
  125.             public static DataChunk[] Parse(Message m)
  126.             {
  127.                 if (m == null) throw new ArgumentNullException("m");
  128.                 if (m.Type != "init" && m.Type != "reset") throw new ArgumentException("Invalid message type.", "m");
  129.  
  130.                 // Get world data
  131.                 var p = 0u;
  132.                 var data = new Stack<object>();
  133.                 while (m[p++] as string != "ws") { }
  134.                 while (m[p] as string != "we") { data.Push(m[p++]); }
  135.  
  136.                 // Parse world data
  137.                 var chunks = new List<DataChunk>();
  138.                 while (data.Count > 0)
  139.                 {
  140.                     var args = new Stack<object>();
  141.                     while (!(data.Peek() is byte[]))
  142.                         args.Push(data.Pop());
  143.  
  144.                     var ys = (byte[])data.Pop();
  145.                     var xs = (byte[])data.Pop();
  146.                     var layer = (int)data.Pop();
  147.                     var type = (uint)data.Pop();
  148.  
  149.                     chunks.Add(new DataChunk(layer, type, xs, ys, args.ToArray()));
  150.                 }
  151.  
  152.                 return chunks.ToArray();
  153.             }
  154.         }
  155.  
  156.         public class DataChunk
  157.         {
  158.             public int Layer { get; set; }
  159.             public uint Type { get; set; }
  160.             public Point[] Locations { get; set; }
  161.             public object[] Args { get; set; }
  162.  
  163.             public DataChunk(int layer, uint type, byte[] xs, byte[] ys, object[] args)
  164.             {
  165.                 this.Layer = layer;
  166.                 this.Type = type;
  167.                 this.Args = args;
  168.                 this.Locations = GetLocations(xs, ys);
  169.             }
  170.  
  171.             private static Point[] GetLocations(byte[] xs, byte[] ys)
  172.             {
  173.                 var points = new List<Point>();
  174.                 for (var i = 0; i < xs.Length; i += 2)
  175.                     points.Add(new Point(
  176.                         (xs[i] << 8) | xs[i + 1],
  177.                         (ys[i] << 8) | ys[i + 1]));
  178.                 return points.ToArray();
  179.             }
  180.         }
  181. }
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
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top