Exemple #1
0
        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();
                }
            }
        }
Exemple #2
0
        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;
        }