Пример #1
0
    // Token: 0x060007D0 RID: 2000 RVA: 0x0003D640 File Offset: 0x0003B840
    private void HandleDestroyedZDO(ZDOID uid)
    {
        if (uid.userID == this.m_myid && uid.id >= this.m_nextUid)
        {
            this.m_nextUid = uid.id + 1U;
        }
        ZDO zdo = this.GetZDO(uid);

        if (zdo == null)
        {
            return;
        }
        if (this.m_onZDODestroyed != null)
        {
            this.m_onZDODestroyed(zdo);
        }
        this.RemoveFromSector(zdo, zdo.GetSector());
        this.m_objectsByID.Remove(zdo.m_uid);
        ZDOPool.Release(zdo);
        foreach (ZDOMan.ZDOPeer zdopeer in this.m_peers)
        {
            zdopeer.m_zdos.Remove(uid);
        }
        if (ZNet.instance.IsServer())
        {
            long ticks = ZNet.instance.GetTime().Ticks;
            this.m_deadZDOs[uid] = ticks;
        }
    }
Пример #2
0
    // Token: 0x060007B9 RID: 1977 RVA: 0x0003CB88 File Offset: 0x0003AD88
    public void Load(BinaryReader reader, int version)
    {
        reader.ReadInt64();
        uint num  = reader.ReadUInt32();
        int  num2 = reader.ReadInt32();

        ZDOPool.Release(this.m_objectsByID);
        this.m_objectsByID.Clear();
        this.ResetSectorArray();
        ZLog.Log(string.Concat(new object[]
        {
            "Loading ",
            num2,
            " zdos , my id ",
            this.m_myid,
            " data version:",
            version
        }));
        ZPackage zpackage = new ZPackage();

        for (int i = 0; i < num2; i++)
        {
            ZDO zdo = ZDOPool.Create(this);
            zdo.m_uid = new ZDOID(reader);
            int    count = reader.ReadInt32();
            byte[] data  = reader.ReadBytes(count);
            zpackage.Load(data);
            zdo.Load(zpackage, version);
            zdo.SetOwner(0L);
            this.m_objectsByID.Add(zdo.m_uid, zdo);
            this.AddToSector(zdo, zdo.GetSector());
            if (zdo.m_uid.userID == this.m_myid && zdo.m_uid.id >= num)
            {
                num = zdo.m_uid.id + 1U;
            }
        }
        this.m_deadZDOs.Clear();
        int num3 = reader.ReadInt32();

        for (int j = 0; j < num3; j++)
        {
            ZDOID key   = new ZDOID(reader.ReadInt64(), reader.ReadUInt32());
            long  value = reader.ReadInt64();
            this.m_deadZDOs.Add(key, value);
            if (key.userID == this.m_myid && key.id >= num)
            {
                num = key.id + 1U;
            }
        }
        this.CapDeadZDOList();
        ZLog.Log("Loaded " + this.m_deadZDOs.Count + " dead zdos");
        this.RemoveOldGeneratedZDOS();
        this.m_nextUid = num;
    }
Пример #3
0
        public static void Postfix(ZDOMan __instance)
        {
            // proof of concept persistence, don't want to include or test it now
            return;

            var fileName     = ZNet.m_world.m_name + ".armorstands.db";
            var fullFilePath = World.GetWorldSavePath() + "/" + fileName;

            Plugin.Logger.LogInfo($"Trying to load save file at {fullFilePath}");
            if (!File.Exists(fullFilePath))
            {
                return;
            }

            try {
                using (BinaryReader reader = new BinaryReader(File.Open(fullFilePath, FileMode.Open))) {
                    var worldVersion = reader.ReadInt32();
                    Plugin.Logger.LogInfo($"World version: ${worldVersion}");
                    var zdoCount = reader.ReadInt32();
                    Plugin.Logger.LogInfo($"{zdoCount} zdos in file");

                    for (var i = 0; i < zdoCount; i++)
                    {
                        var zdo = new ZDO();
                        zdo.m_uid = new ZDOID(reader);

                        var packageSize = reader.ReadInt32();
                        var zpkg        = new ZPackage(reader.ReadBytes(packageSize));
                        zdo.Load(zpkg, worldVersion);

                        Plugin.Logger.LogInfo($"Loaded zdo {zdo.m_uid}.");
                        if (__instance.GetZDO(zdo.m_uid) == null)
                        {
                            Plugin.Logger.LogInfo("zdo not found, adding to database.");
                            __instance.m_objectsByID.Add(zdo.m_uid, zdo);
                            __instance.AddToSector(zdo, zdo.GetSector());
                        }
                        else
                        {
                            Plugin.Logger.LogInfo("zdo found in database, skipping.");
                        }
                    }
                }
            }catch (Exception exc) {
                Plugin.Logger.LogInfo(exc);
            }
        }
Пример #4
0
 // Token: 0x06001151 RID: 4433 RVA: 0x000785E8 File Offset: 0x000767E8
 public void ZDOSectorInvalidated(ZDO zdo)
 {
     if (zdo.m_owner == this.m_peer.m_uid)
     {
         return;
     }
     if (this.m_zdos.ContainsKey(zdo.m_uid) && !ZNetScene.instance.InActiveArea(zdo.GetSector(), this.m_peer.GetRefPos()))
     {
         this.m_invalidSector.Add(zdo.m_uid);
         this.m_zdos.Remove(zdo.m_uid);
     }
 }