private static void RPC_ShareExploration(long sender, ZPackage z) { Plugin.logger.LogDebug($"{nameof(RPC_ShareExploration)}: Received map data from {sender}"); if (Settings.OthersRevealMap.Value) { var explored = z.GetArray(); var m_explored = Minimap.instance.GetPrivateField <bool[]>("m_explored"); var bits = MapCompression.Decompress(explored); if (bits.Length != m_explored.Length) { Plugin.logger.LogError("mismatched lengths"); return; } var changed = false; for (int i = 0; i < bits.Length && i < Minimap.instance.m_textureSize * Minimap.instance.m_textureSize; i++) { if (bits[i] && !m_explored[i]) { Minimap_Patch.Explore(Minimap.instance, i % Minimap.instance.m_textureSize, i / Minimap.instance.m_textureSize); changed = true; } } if (changed) { Minimap.instance.GetPrivateField <Texture2D>("m_fogTexture").Apply(); } } }
public static void ShareMap() { if (busy) { AddString("Can't share map just yet!"); return; } busy = true; var m_explored = Minimap.instance.GetPrivateField <bool[]>("m_explored"); var compressed = MapCompression.Compress(m_explored); ZPackage z = new ZPackage(compressed); ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "ShareExploration", z); AddString("Finished sharing map!"); busy = false; }