Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: #1278 - only call initial state SyncVar hooks on clients if the SyncVar value is different from the default one. #1414

Merged
merged 20 commits into from Jan 8, 2020

Conversation

miwarnec
Copy link
Collaborator

@miwarnec miwarnec commented Jan 8, 2020

Weaver generated code before: (see OnDeserialize initialState case!)

public class Test : NetworkBehaviour
{
    [SyncVar(hook = "OnSetA")]
    public int a;

    [SyncVar(hook = "OnSetC")]
    public int c;

    [SyncVar(hook = "OnSetQ")]
    public GameObject q;

    [SyncVar(hook = "OnSetR")]
    public GameObject r;

    private uint ___qNetId;

    private uint ___rNetId;

    public int Networka
    {
        get
        {
            return a;
        }
        [param: In]
        set
        {
            if (!SyncVarEqual(value, ref a))
            {
                if (NetworkServer.localClientActive && !getSyncVarHookGuard(1uL))
                {
                    setSyncVarHookGuard(1uL, value: true);
                    OnSetA(value);
                    setSyncVarHookGuard(1uL, value: false);
                }
                SetSyncVar(value, ref a, 1uL);
            }
        }
    }

    public int Networkc
    {
        get
        {
            return c;
        }
        [param: In]
        set
        {
            if (!SyncVarEqual(value, ref c))
            {
                if (NetworkServer.localClientActive && !getSyncVarHookGuard(2uL))
                {
                    setSyncVarHookGuard(2uL, value: true);
                    OnSetC(value);
                    setSyncVarHookGuard(2uL, value: false);
                }
                SetSyncVar(value, ref c, 2uL);
            }
        }
    }

    public GameObject Networkq
    {
        get
        {
            return GetSyncVarGameObject(___qNetId, ref q);
        }
        [param: In]
        set
        {
            if (!SyncVarGameObjectEqual(value, ___qNetId))
            {
                if (NetworkServer.localClientActive && !getSyncVarHookGuard(4uL))
                {
                    setSyncVarHookGuard(4uL, value: true);
                    OnSetQ(value);
                    setSyncVarHookGuard(4uL, value: false);
                }
                SetSyncVarGameObject(value, ref q, 4uL, ref ___qNetId);
            }
        }
    }

    public GameObject Networkr
    {
        get
        {
            return GetSyncVarGameObject(___rNetId, ref r);
        }
        [param: In]
        set
        {
            if (!SyncVarGameObjectEqual(value, ___rNetId))
            {
                if (NetworkServer.localClientActive && !getSyncVarHookGuard(8uL))
                {
                    setSyncVarHookGuard(8uL, value: true);
                    OnSetR(value);
                    setSyncVarHookGuard(8uL, value: false);
                }
                SetSyncVarGameObject(value, ref r, 8uL, ref ___rNetId);
            }
        }
    }

    private void OnSetA(int newValue)
    {
        Debug.LogWarning((object)$"OnSetA {newValue}");
    }

    private void OnSetC(int newValue)
    {
        Debug.LogWarning((object)$"OnSetC {newValue}");
    }

    private void OnSetQ(GameObject newValue)
    {
        Debug.LogWarning((object)$"OnSetQ {newValue}");
    }

    private void OnSetR(GameObject newValue)
    {
        Debug.LogWarning((object)$"OnSetR {newValue}");
    }

    public override void OnStartServer()
    {
        Networkc = 2;
        Networkr = ((Component)this).get_gameObject();
    }

    private void MirrorProcessed()
    {
    }

    public override bool OnSerialize(NetworkWriter writer, bool forceAll)
    {
        bool result = base.OnSerialize(writer, forceAll);
        if (forceAll)
        {
            writer.WritePackedInt32(a);
            writer.WritePackedInt32(c);
            writer.WriteGameObject(Networkq);
            writer.WriteGameObject(Networkr);
            return true;
        }
        writer.WritePackedUInt64(base.syncVarDirtyBits);
        if ((base.syncVarDirtyBits & 1L) != 0L)
        {
            writer.WritePackedInt32(a);
            result = true;
        }
        if ((base.syncVarDirtyBits & 2L) != 0L)
        {
            writer.WritePackedInt32(c);
            result = true;
        }
        if ((base.syncVarDirtyBits & 4L) != 0L)
        {
            writer.WriteGameObject(Networkq);
            result = true;
        }
        if ((base.syncVarDirtyBits & 8L) != 0L)
        {
            writer.WriteGameObject(Networkr);
            result = true;
        }
        return result;
    }

    public override void OnDeserialize(NetworkReader reader, bool initialState)
    {
        base.OnDeserialize(reader, initialState);
        if (initialState)
        {
            int num = reader.ReadPackedInt32();
            OnSetA(num);
            Networka = num;

            int num2 = reader.ReadPackedInt32();
            OnSetC(num2);
            Networkc = num2;

            uint num3 = reader.ReadPackedUInt32();
            OnSetQ(GetSyncVarGameObject(num3, ref q));
            ___qNetId = num3;

            uint num4 = reader.ReadPackedUInt32();
            OnSetR(GetSyncVarGameObject(num4, ref r));
            ___rNetId = num4;

            return;
        }
        long num5 = (long)reader.ReadPackedUInt64();
        if ((num5 & 1L) != 0L)
        {
            int num6 = reader.ReadPackedInt32();
            OnSetA(num6);
            Networka = num6;
        }
        if ((num5 & 2L) != 0L)
        {
            int num7 = reader.ReadPackedInt32();
            OnSetC(num7);
            Networkc = num7;
        }
        if ((num5 & 4L) != 0L)
        {
            uint num8 = reader.ReadPackedUInt32();
            OnSetQ(GetSyncVarGameObject(num8, ref q));
            ___qNetId = num8;
        }
        if ((num5 & 8L) != 0L)
        {
            uint num9 = reader.ReadPackedUInt32();
            OnSetR(GetSyncVarGameObject(num9, ref r));
            ___rNetId = num9;
        }
    }
}

After:

// Test
using Mirror;
using System.Runtime.InteropServices;
using UnityEngine;

public class Test : NetworkBehaviour
{
    [SyncVar(hook = "OnSetA")]
    public int a;

    [SyncVar(hook = "OnSetC")]
    public int c;

    [SyncVar(hook = "OnSetQ")]
    public GameObject q;

    [SyncVar(hook = "OnSetR")]
    public GameObject r;

    private uint ___qNetId;

    private uint ___rNetId;

    public int Networka
    {
        get
        {
            return a;
        }
        [param: In]
        set
        {
            if (!SyncVarEqual(value, ref a))
            {
                if (NetworkServer.localClientActive && !getSyncVarHookGuard(1uL))
                {
                    setSyncVarHookGuard(1uL, value: true);
                    OnSetA(value);
                    setSyncVarHookGuard(1uL, value: false);
                }
                SetSyncVar(value, ref a, 1uL);
            }
        }
    }

    public int Networkc
    {
        get
        {
            return c;
        }
        [param: In]
        set
        {
            if (!SyncVarEqual(value, ref c))
            {
                if (NetworkServer.localClientActive && !getSyncVarHookGuard(2uL))
                {
                    setSyncVarHookGuard(2uL, value: true);
                    OnSetC(value);
                    setSyncVarHookGuard(2uL, value: false);
                }
                SetSyncVar(value, ref c, 2uL);
            }
        }
    }

    public GameObject Networkq
    {
        get
        {
            return GetSyncVarGameObject(___qNetId, ref q);
        }
        [param: In]
        set
        {
            if (!SyncVarGameObjectEqual(value, ___qNetId))
            {
                if (NetworkServer.localClientActive && !getSyncVarHookGuard(4uL))
                {
                    setSyncVarHookGuard(4uL, value: true);
                    OnSetQ(value);
                    setSyncVarHookGuard(4uL, value: false);
                }
                SetSyncVarGameObject(value, ref q, 4uL, ref ___qNetId);
            }
        }
    }

    public GameObject Networkr
    {
        get
        {
            return GetSyncVarGameObject(___rNetId, ref r);
        }
        [param: In]
        set
        {
            if (!SyncVarGameObjectEqual(value, ___rNetId))
            {
                if (NetworkServer.localClientActive && !getSyncVarHookGuard(8uL))
                {
                    setSyncVarHookGuard(8uL, value: true);
                    OnSetR(value);
                    setSyncVarHookGuard(8uL, value: false);
                }
                SetSyncVarGameObject(value, ref r, 8uL, ref ___rNetId);
            }
        }
    }

    private void OnSetA(int newValue)
    {
        Debug.LogWarning((object)$"OnSetA {newValue}");
    }

    private void OnSetC(int newValue)
    {
        Debug.LogWarning((object)$"OnSetC {newValue}");
    }

    private void OnSetQ(GameObject newValue)
    {
        Debug.LogWarning((object)$"OnSetQ {newValue}");
    }

    private void OnSetR(GameObject newValue)
    {
        Debug.LogWarning((object)$"OnSetR {newValue}");
    }

    public override void OnStartServer()
    {
        Networkc = 2;
        Networkr = ((Component)this).get_gameObject();
    }

    private void MirrorProcessed()
    {
    }

    public override bool OnSerialize(NetworkWriter writer, bool forceAll)
    {
        bool result = base.OnSerialize(writer, forceAll);
        if (forceAll)
        {
            writer.WritePackedInt32(a);
            writer.WritePackedInt32(c);
            writer.WriteGameObject(Networkq);
            writer.WriteGameObject(Networkr);
            return true;
        }
        writer.WritePackedUInt64(base.syncVarDirtyBits);
        if ((base.syncVarDirtyBits & 1L) != 0L)
        {
            writer.WritePackedInt32(a);
            result = true;
        }
        if ((base.syncVarDirtyBits & 2L) != 0L)
        {
            writer.WritePackedInt32(c);
            result = true;
        }
        if ((base.syncVarDirtyBits & 4L) != 0L)
        {
            writer.WriteGameObject(Networkq);
            result = true;
        }
        if ((base.syncVarDirtyBits & 8L) != 0L)
        {
            writer.WriteGameObject(Networkr);
            result = true;
        }
        return result;
    }

    public override void OnDeserialize(NetworkReader reader, bool initialState)
    {
        base.OnDeserialize(reader, initialState);
        if (initialState)
        {
            int num = reader.ReadPackedInt32();
            if (!SyncVarEqual(num, ref a))
            {
                OnSetA(num);
            }
            Networka = num;
            int num2 = reader.ReadPackedInt32();
            if (!SyncVarEqual(num2, ref c))
            {
                OnSetC(num2);
            }
            Networkc = num2;
            uint num3 = reader.ReadPackedUInt32();
            if (!SyncVarEqual(num3, ref ___qNetId))
            {
                OnSetQ(GetSyncVarGameObject(num3, ref q));
            }
            ___qNetId = num3;
            uint num4 = reader.ReadPackedUInt32();
            if (!SyncVarEqual(num4, ref ___rNetId))
            {
                OnSetR(GetSyncVarGameObject(num4, ref r));
            }
            ___rNetId = num4;
            return;
        }
        long num5 = (long)reader.ReadPackedUInt64();
        if ((num5 & 1L) != 0L)
        {
            int num6 = reader.ReadPackedInt32();
            if (!SyncVarEqual(num6, ref a))
            {
                OnSetA(num6);
            }
            Networka = num6;
        }
        if ((num5 & 2L) != 0L)
        {
            int num7 = reader.ReadPackedInt32();
            if (!SyncVarEqual(num7, ref c))
            {
                OnSetC(num7);
            }
            Networkc = num7;
        }
        if ((num5 & 4L) != 0L)
        {
            uint num8 = reader.ReadPackedUInt32();
            if (!SyncVarEqual(num8, ref ___qNetId))
            {
                OnSetQ(GetSyncVarGameObject(num8, ref q));
            }
            ___qNetId = num8;
        }
        if ((num5 & 8L) != 0L)
        {
            uint num9 = reader.ReadPackedUInt32();
            if (!SyncVarEqual(num9, ref ___rNetId))
            {
                OnSetR(GetSyncVarGameObject(num9, ref r));
            }
            ___rNetId = num9;
        }
    }
}

@miwarnec miwarnec merged commit a3ffd12 into master Jan 8, 2020
github-actions bot referenced this pull request in MirageNet/Mirage Jan 9, 2020
## [1.1.2](1.1.1-master...1.1.2-master) (2020-01-09)

### Bug Fixes

* [#1241](https://github.com/MirrorNG/MirrorNG/issues/1241) - Telepathy updated to latest version. All tests are passing again. Thread.Interrupt was replaced by Abort+Join. ([228b32e](228b32e))
* [#1278](https://github.com/MirrorNG/MirrorNG/issues/1278) - only call initial state SyncVar hooks on clients if the SyncVar value is different from the default one. ([#1414](https://github.com/MirrorNG/MirrorNG/issues/1414)) ([a3ffd12](a3ffd12))
* [#1380](https://github.com/MirrorNG/MirrorNG/issues/1380) - NetworkConnection.clientOwnedObjects changed from uint HashSet to NetworkIdentity HashSet for ease of use and to fix a bug where DestroyOwnedObjects wouldn't find a netId anymore in some cases. ([a71ecdb](a71ecdb))
* FinishLoadSceneHost calls FinishStart host which now calls StartHostClient AFTER server online scene was loaded. Previously there was a race condition where StartHostClient was called immediately in StartHost, before the scene change even finished. This was still from UNET. ([df9c29a](df9c29a))
github-actions bot referenced this pull request in MirageNet/Mirage Jan 9, 2020
…SyncVar value is different from the default one. (#1414)

* move comment

* add comment

* fix: #1278 - only call initial state SyncVar hooks on clients if the SyncVar value is different from the default one.

* initialState test for an if

* !initialstate

* getting there

* closer

* works but incompatible stack heights message

* better comments

* better

* not needed

* syntax

* rename

* incompatible stack height fixed

* update comment

* remove first todo

* SAVE PROGRESS

* compare go/ni too

* whitespace

* update comments
github-actions bot referenced this pull request in MirageNet/Mirage Jan 9, 2020
## [1.1.2](1.1.1-master...1.1.2-master) (2020-01-09)

### Bug Fixes

* [#1241](https://github.com/MirrorNG/MirrorNG/issues/1241) - Telepathy updated to latest version. All tests are passing again. Thread.Interrupt was replaced by Abort+Join. ([228b32e](228b32e))
* [#1278](https://github.com/MirrorNG/MirrorNG/issues/1278) - only call initial state SyncVar hooks on clients if the SyncVar value is different from the default one. ([#1414](https://github.com/MirrorNG/MirrorNG/issues/1414)) ([a3ffd12](a3ffd12))
* [#1380](https://github.com/MirrorNG/MirrorNG/issues/1380) - NetworkConnection.clientOwnedObjects changed from uint HashSet to NetworkIdentity HashSet for ease of use and to fix a bug where DestroyOwnedObjects wouldn't find a netId anymore in some cases. ([a71ecdb](a71ecdb))
* FinishLoadSceneHost calls FinishStart host which now calls StartHostClient AFTER server online scene was loaded. Previously there was a race condition where StartHostClient was called immediately in StartHost, before the scene change even finished. This was still from UNET. ([df9c29a](df9c29a))
github-actions bot referenced this pull request in MirageNet/Mirage Jan 12, 2020
…SyncVar value is different from the default one. (#1414)

* move comment

* add comment

* fix: #1278 - only call initial state SyncVar hooks on clients if the SyncVar value is different from the default one.

* initialState test for an if

* !initialstate

* getting there

* closer

* works but incompatible stack heights message

* better comments

* better

* not needed

* syntax

* rename

* incompatible stack height fixed

* update comment

* remove first todo

* SAVE PROGRESS

* compare go/ni too

* whitespace

* update comments
github-actions bot referenced this pull request in MirageNet/Mirage Jan 12, 2020
## [1.1.2](1.1.1-master...1.1.2-master) (2020-01-09)

### Bug Fixes

* [#1241](https://github.com/MirrorNG/MirrorNG/issues/1241) - Telepathy updated to latest version. All tests are passing again. Thread.Interrupt was replaced by Abort+Join. ([228b32e](228b32e))
* [#1278](https://github.com/MirrorNG/MirrorNG/issues/1278) - only call initial state SyncVar hooks on clients if the SyncVar value is different from the default one. ([#1414](https://github.com/MirrorNG/MirrorNG/issues/1414)) ([a3ffd12](a3ffd12))
* [#1380](https://github.com/MirrorNG/MirrorNG/issues/1380) - NetworkConnection.clientOwnedObjects changed from uint HashSet to NetworkIdentity HashSet for ease of use and to fix a bug where DestroyOwnedObjects wouldn't find a netId anymore in some cases. ([a71ecdb](a71ecdb))
* FinishLoadSceneHost calls FinishStart host which now calls StartHostClient AFTER server online scene was loaded. Previously there was a race condition where StartHostClient was called immediately in StartHost, before the scene change even finished. This was still from UNET. ([df9c29a](df9c29a))
@MrGadget1024 MrGadget1024 deleted the fix_1278 branch January 13, 2020 16:16
github-actions bot referenced this pull request in MirageNet/Mirage Aug 23, 2020
# 1.0.0 (2020-08-23)

### breaking

* AsyncFallbackTransport -> FallbackTransport ([f8f643a](https://github.com/MirrorNG/MirrorNG/commit/f8f643a6245777279de31dc8997a7ea84328533e))
* AsyncMultiplexTransport -> MultiplexTransport ([832b7f9](https://github.com/MirrorNG/MirrorNG/commit/832b7f9528595e45769790c4be4fd94e873c96f4))
* remove redundant scene ready value ([#325](https://github.com/MirrorNG/MirrorNG/issues/325)) ([6cc8f62](https://github.com/MirrorNG/MirrorNG/commit/6cc8f6212413ccdf2a95da7ea2ef93b86fc837bf))
* Remove TargetRPC & use ClientRPC option instead ([#293](https://github.com/MirrorNG/MirrorNG/issues/293)) ([4ace144](https://github.com/MirrorNG/MirrorNG/commit/4ace14477d024d0ef763c0860cdb2abfde8022fd))
* Removed websocket transport ([f26159b](https://github.com/MirrorNG/MirrorNG/commit/f26159b7b4d31d643a1dc2a28b1797bd2ad28f68))
* Rename [Command] to [ServerRpc] ([#271](https://github.com/MirrorNG/MirrorNG/issues/271)) ([fff7459](https://github.com/MirrorNG/MirrorNG/commit/fff7459801fc637c641757c516f85b4d685e0ad1))
* rename AsyncWsTransport -> WsTransport ([9c394bc](https://github.com/MirrorNG/MirrorNG/commit/9c394bc96192a50ad273371b66c9289d75402dc6))
* Transports can now provide their Uri ([#1454](https://github.com/MirrorNG/MirrorNG/issues/1454)) ([b916064](https://github.com/MirrorNG/MirrorNG/commit/b916064856cf78f1c257f0de0ffe8c9c1ab28ce7)), closes [#38](https://github.com/MirrorNG/MirrorNG/issues/38)

### Bug Fixes

* (again) Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([46eddc0](https://github.com/MirrorNG/MirrorNG/commit/46eddc01ec104f98701e5552a66728ae48d0720f))
* [#1241](https://github.com/MirrorNG/MirrorNG/issues/1241) - Telepathy updated to latest version. All tests are passing again. Thread.Interrupt was replaced by Abort+Join. ([228b32e](https://github.com/MirrorNG/MirrorNG/commit/228b32e1da8e407e1d63044beca0fd179f0835b4))
* [#1278](https://github.com/MirrorNG/MirrorNG/issues/1278) - only call initial state SyncVar hooks on clients if the SyncVar value is different from the default one. ([#1414](https://github.com/MirrorNG/MirrorNG/issues/1414)) ([a3ffd12](https://github.com/MirrorNG/MirrorNG/commit/a3ffd1264c2ed2780e6e86ce83077fa756c01154))
* [#1359](https://github.com/MirrorNG/MirrorNG/issues/1359). Revert "Destroy objects owned by this connection when disconnecting ([#1179](https://github.com/MirrorNG/MirrorNG/issues/1179))" ([4cc4279](https://github.com/MirrorNG/MirrorNG/commit/4cc4279d7ddeaf61fe300b3dc420143e63942f1f))
* [#1380](https://github.com/MirrorNG/MirrorNG/issues/1380) - NetworkConnection.clientOwnedObjects changed from uint HashSet to NetworkIdentity HashSet for ease of use and to fix a bug where DestroyOwnedObjects wouldn't find a netId anymore in some cases. ([a71ecdb](https://github.com/MirrorNG/MirrorNG/commit/a71ecdba4a020f9f4648b8275ec9d17b19aff55f))
* [#1515](https://github.com/MirrorNG/MirrorNG/issues/1515) - StopHost now invokes OnServerDisconnected for the host client too ([#1601](https://github.com/MirrorNG/MirrorNG/issues/1601)) ([678ac68](https://github.com/MirrorNG/MirrorNG/commit/678ac68b58798816658d29be649bdaf18ad70794))
* [#1593](https://github.com/MirrorNG/MirrorNG/issues/1593) - NetworkRoomManager.ServerChangeScene doesn't destroy the world player before replacing the connection. otherwise ReplacePlayerForConnection removes authority form a destroyed object, causing all kidns of errors. The call wasn't actually needed. ([#1594](https://github.com/MirrorNG/MirrorNG/issues/1594)) ([347cb53](https://github.com/MirrorNG/MirrorNG/commit/347cb5374d0cba72762e893645f076d3161aa0c5))
* [#1599](https://github.com/MirrorNG/MirrorNG/issues/1599) - NetworkManager HUD calls StopHost/Server/Client depending on state. It does not call StopHost in all cases. ([#1600](https://github.com/MirrorNG/MirrorNG/issues/1600)) ([8c6ae0f](https://github.com/MirrorNG/MirrorNG/commit/8c6ae0f8b4fdafbc3abd194c081c75ee75fcfe51))
* [#1659](https://github.com/MirrorNG/MirrorNG/issues/1659) Telepathy LateUpdate processes a limited amount of messages per tick to avoid deadlocks ([#1830](https://github.com/MirrorNG/MirrorNG/issues/1830)) ([d3dccd7](https://github.com/MirrorNG/MirrorNG/commit/d3dccd7a25e4b9171ac04e43a05954b56caefd4b))
* [#718](https://github.com/MirrorNG/MirrorNG/issues/718) remove Tests folder from unitypackage ([#827](https://github.com/MirrorNG/MirrorNG/issues/827)) ([7e487af](https://github.com/MirrorNG/MirrorNG/commit/7e487afe512de9dc8a0d699693884cbfc9c7be7e))
* [#840](https://github.com/MirrorNG/MirrorNG/issues/840) by allowing Mirror to respect the forceHidden flag ([#893](https://github.com/MirrorNG/MirrorNG/issues/893)) ([3ec3d02](https://github.com/MirrorNG/MirrorNG/commit/3ec3d023621e121aed302222fdb6e35ed5ca92b2))
* ArraySegment<byte> work in Messages ([#919](https://github.com/MirrorNG/MirrorNG/issues/919)) ([981ba7c](https://github.com/MirrorNG/MirrorNG/commit/981ba7c2b3a64ebd9e1405e5182daa030886d792))
* code generation works with il2cpp again ([#1056](https://github.com/MirrorNG/MirrorNG/issues/1056)) ([8738562](https://github.com/MirrorNG/MirrorNG/commit/87385628f0836109fb009b1f912575c5c8145005))
* do not accumulate changes if there are no observers fixes [#963](https://github.com/MirrorNG/MirrorNG/issues/963) ([#964](https://github.com/MirrorNG/MirrorNG/issues/964)) ([64a0468](https://github.com/MirrorNG/MirrorNG/commit/64a046803ada79f7602f6e6fda21d821909fbc98))
* don't convert null arrays to empty array ([#913](https://github.com/MirrorNG/MirrorNG/issues/913)) ([dd758ca](https://github.com/MirrorNG/MirrorNG/commit/dd758cac0578629e351bf60d25733d788bd0f668))
* Don't increment counter in Awake ([#971](https://github.com/MirrorNG/MirrorNG/issues/971)) ([45b7118](https://github.com/MirrorNG/MirrorNG/commit/45b711804b1159e390910227796f312f74351025))
* don't use obsolete method ([12437ba](https://github.com/MirrorNG/MirrorNG/commit/12437ba9c2ccc72998f2dd895b888d8eaa66e7a6))
* error with missing assemblies ([#1052](https://github.com/MirrorNG/MirrorNG/issues/1052)) ([00eb23a](https://github.com/MirrorNG/MirrorNG/commit/00eb23aa01210860b9c8ab253929563f695714d7)), closes [#1051](https://github.com/MirrorNG/MirrorNG/issues/1051)
* Fix error scene error message in host mode ([838d4f0](https://github.com/MirrorNG/MirrorNG/commit/838d4f019f60e202b3795a01e4297c2d3efe6bca))
* hooks in host mode can call each other ([#1017](https://github.com/MirrorNG/MirrorNG/issues/1017)) ([f27fd0b](https://github.com/MirrorNG/MirrorNG/commit/f27fd0bdc570ec3ceeef433eb4991beb487d2ddb))
* invalid scene id in 2019.1 by ignoring prefabs in NetworkScenePostProcess ([203a823](https://github.com/MirrorNG/MirrorNG/commit/203a823b19b6e31a50cd193a7bd58c33a73960f2))
* ListServer Ping not found in WebGL ([6c4b34b](https://github.com/MirrorNG/MirrorNG/commit/6c4b34ba065429b57ccfed71ac0adc325de19809))
* maintain Unity's copyright notice ([#961](https://github.com/MirrorNG/MirrorNG/issues/961)) ([7718955](https://github.com/MirrorNG/MirrorNG/commit/771895509a358286377ea3d391ca45f8c0a3b48d))
* missed ushort reader/writer ([74faf2a](https://github.com/MirrorNG/MirrorNG/commit/74faf2a95b5a3e551e7ae344d5772e10ee198318))
* Mono.CecilX namespace to work around Unity 2019 Cecil namespace collision ([#832](https://github.com/MirrorNG/MirrorNG/issues/832)) ([5262592](https://github.com/MirrorNG/MirrorNG/commit/52625923b2d408018f61506ef93b15487764d095))
* NetworkManager OnValidate wouldn't properly save the automatically added Transport before because Undo.RecordObject is needed for that now. ([524abfc](https://github.com/MirrorNG/MirrorNG/commit/524abfc5e8c881d2088a7f9f8bbf07c0371785cf))
* pack works if message is boxed ([55c9bb6](https://github.com/MirrorNG/MirrorNG/commit/55c9bb625aa06ab83c2350b483eaca09b463db0a))
* properly stop client and server in OnApplicationQuit so that clients still get a chance to send then 'quit' packet instead of just timing out. Also fixes a bug where OnStopServer/OnStopClient were not called when stopping the Editor. ([#936](https://github.com/MirrorNG/MirrorNG/issues/936)) ([d6389e6](https://github.com/MirrorNG/MirrorNG/commit/d6389e68be3a951f3ddb9aa51c57a0e3c788e5f6))
* Rebuild observers when we switch scenes, fixes [#978](https://github.com/MirrorNG/MirrorNG/issues/978) ([#1016](https://github.com/MirrorNG/MirrorNG/issues/1016)) ([6dd1350](https://github.com/MirrorNG/MirrorNG/commit/6dd135088bd0b3858dabf5d195d14d85879ead6d))
* Respect Player Prefab Position & Rotation ([#825](https://github.com/MirrorNG/MirrorNG/issues/825)) ([8ebda0f](https://github.com/MirrorNG/MirrorNG/commit/8ebda0fa21b430ce1394eba8e7eeafa56d9290f3))
* Revert "NetworkIdentity.observers dictionary is always created, but always empty on clients. Gets rid of all null checks." to fix server-only bug not allowing movement on client, e.g. in uMMORPG ([f56507f](https://github.com/MirrorNG/MirrorNG/commit/f56507f2fc9f36ca9f8e1df9a7a437a97b416d54))
* Revert "refactor:  consolidate prefab and spawn handlers ([#817](https://github.com/MirrorNG/MirrorNG/issues/817))" to fix a bug where if editor=host, build=client, we receive scene object not found when walking out of and back into an observer's range ([1f07af0](https://github.com/MirrorNG/MirrorNG/commit/1f07af0cae7b41cd52df621f1b5cfcefc77efdfa))
* SceneId was not set to 0 for prefab variants ([#976](https://github.com/MirrorNG/MirrorNG/issues/976)) ([#977](https://github.com/MirrorNG/MirrorNG/issues/977)) ([2ca2c48](https://github.com/MirrorNG/MirrorNG/commit/2ca2c488acc3966ef7dc67cb530c5db9eaa8b0ea))
* suppress warning on standalone build [#1053](https://github.com/MirrorNG/MirrorNG/issues/1053) ([4ef680a](https://github.com/MirrorNG/MirrorNG/commit/4ef680a47483890d6576784ca880f2b3536b6b7f))
* Sync full netAnimator for new clients, fix [#980](https://github.com/MirrorNG/MirrorNG/issues/980) ([#1110](https://github.com/MirrorNG/MirrorNG/issues/1110)) ([db8310f](https://github.com/MirrorNG/MirrorNG/commit/db8310f8385ec45c28356e59d1ba4ef8f4c9ab47))
* Telepathy already supports IPv6, but can no also connect to IPv4-only servers again (e.g. Mirror Booster) ([488446a](https://github.com/MirrorNG/MirrorNG/commit/488446ae040246a631f8921a4cd5bdbb6a6e54d1))
* Telepathy fix a bug where calling Disconnect while connecting to a dead end would freeze Unity because .Join would wait forever. Interrupt fixes it. ([3831cbd](https://github.com/MirrorNG/MirrorNG/commit/3831cbddbea7d98fe8a871133a0ba2bf14f22df0))
* **weaver:** fix [#796](https://github.com/MirrorNG/MirrorNG/issues/796), reload assemblies after initial import ([#1106](https://github.com/MirrorNG/MirrorNG/issues/1106)) ([d91b387](https://github.com/MirrorNG/MirrorNG/commit/d91b387bb29bdba06a62a718533db5c0fe52f642))
* [#573](https://github.com/MirrorNG/MirrorNG/issues/573) (part 1) NetworkScenePostProcess handles NetworkIdentities of all scenes except DontDestroyOnLoad. this way it works for additively loaded scenes too. ([c1af84e](https://github.com/MirrorNG/MirrorNG/commit/c1af84e6bf61ff919607c66affc4a1bd0dc3fb26))
* [#573](https://github.com/MirrorNG/MirrorNG/issues/573) (part 2) NetworkManager detects additive scene loads and respawns objects on server/client again ([e521a20](https://github.com/MirrorNG/MirrorNG/commit/e521a200523b25a874a3cbc743d2a9d98a88b238))
* [#573](https://github.com/MirrorNG/MirrorNG/issues/573) NullReferenceException because destroyed NetworkIdentities were never removed from sceneIds dict ([a2d6317](https://github.com/MirrorNG/MirrorNG/commit/a2d6317642a24571a63bbeade5fe8898f56c1c3e))
* [#609](https://github.com/MirrorNG/MirrorNG/issues/609) by spawning observers in NetworkServer.AddPlayerForConnection after setting the controller. There is no point in trying to spawn with a null controller in SetReady, because by definition no one can observer something that is null. ([#623](https://github.com/MirrorNG/MirrorNG/issues/623)) ([5c00577](https://github.com/MirrorNG/MirrorNG/commit/5c00577746f83eadd948383dd478360e96634ea4))
* [#640](https://github.com/MirrorNG/MirrorNG/issues/640) InternalReplacePlayerForConnection calls SpawnObserversForConnection now too ([bdf12c8](https://github.com/MirrorNG/MirrorNG/commit/bdf12c85d01b20f2a0edc0767454401a6c5a1aad))
* [#651](https://github.com/MirrorNG/MirrorNG/issues/651) GetSceneAt assumes default scene ([#654](https://github.com/MirrorNG/MirrorNG/issues/654)) ([65eaba1](https://github.com/MirrorNG/MirrorNG/commit/65eaba1fe059db159b5fdb1427dc8b783f5720e0))
* [#652](https://github.com/MirrorNG/MirrorNG/issues/652) OnPostProcessScene includes disabled NetworkIdentities in scene ([ee2ace8](https://github.com/MirrorNG/MirrorNG/commit/ee2ace8e428d67309dc219109be5853b1a9b67df))
* [#679](https://github.com/MirrorNG/MirrorNG/issues/679) package for unity ([4a6a4df](https://github.com/MirrorNG/MirrorNG/commit/4a6a4df61bc65c2065cb1150cd05e15528db6b66))
* [#679](https://github.com/MirrorNG/MirrorNG/issues/679) unity package ([9895647](https://github.com/MirrorNG/MirrorNG/commit/98956472969ba8ae1c66d255f1094140aeb275f0))
* [#692](https://github.com/MirrorNG/MirrorNG/issues/692) by always adding connectionToClient when rebuilding observers ([ab44ac8](https://github.com/MirrorNG/MirrorNG/commit/ab44ac8f8bad4749e300ba8c2db4593fcff5474f))
* [#723](https://github.com/MirrorNG/MirrorNG/issues/723) - NetworkTransform teleport works properly now ([fd7dc5e](https://github.com/MirrorNG/MirrorNG/commit/fd7dc5e226a76b27250fb503a98f23eb579387f8))
* [#791](https://github.com/MirrorNG/MirrorNG/issues/791) corrected assembly paths passed to weaver ([#803](https://github.com/MirrorNG/MirrorNG/issues/803)) ([3ba546e](https://github.com/MirrorNG/MirrorNG/commit/3ba546e133dae6dd2762d7c4f719f61e90554473))
* [#791](https://github.com/MirrorNG/MirrorNG/issues/791) stack overflow in the weaver ([#792](https://github.com/MirrorNG/MirrorNG/issues/792)) ([7b57830](https://github.com/MirrorNG/MirrorNG/commit/7b57830e6c8e3b9abf470cf1029eb2e4aba914ee))
* add Changelog metadata fix [#31](https://github.com/MirrorNG/MirrorNG/issues/31) ([c67de22](https://github.com/MirrorNG/MirrorNG/commit/c67de2216aa331de10bba2e09ea3f77e6b1caa3c))
* add client only test for FinishLoadScene ([#262](https://github.com/MirrorNG/MirrorNG/issues/262)) ([50e7fa6](https://github.com/MirrorNG/MirrorNG/commit/50e7fa6e287fee09afbe36a51575f41c4bd50736))
* Add missing channelId to NetworkConnectionToClient.Send calls ([#1509](https://github.com/MirrorNG/MirrorNG/issues/1509)) ([b8bcd9a](https://github.com/MirrorNG/MirrorNG/commit/b8bcd9ad25895eee940a3daaf6fe7ed82eaf76ac))
* add NetworkManager.StartClientUri test ([#2095](https://github.com/MirrorNG/MirrorNG/issues/2095)) ([12827f6](https://github.com/MirrorNG/MirrorNG/commit/12827f65a906232da55ca226129423a5bd806d23))
* add NRE short circuit for scene change ([#335](https://github.com/MirrorNG/MirrorNG/issues/335)) ([7afbe57](https://github.com/MirrorNG/MirrorNG/commit/7afbe57ff3779ba33d225ab604f1477a883badd7))
* add tests for NetworkTransform and NetworkRigidbody ([#273](https://github.com/MirrorNG/MirrorNG/issues/273)) ([e9621dd](https://github.com/MirrorNG/MirrorNG/commit/e9621ddebd50637680fad8fe743c7c99afea3f84))
* Add the transport first so NetworkManager doesn't add Telepathy in OnValidate ([bdec276](https://github.com/MirrorNG/MirrorNG/commit/bdec2762821dc657e8450b576422fcf1f0f69cdf))
* Added ClientOnly check ([fb927f8](https://github.com/MirrorNG/MirrorNG/commit/fb927f814110327867821dac8b0d69ca4251d4f6))
* Added LogFilter.Debug check in a few places ([#1575](https://github.com/MirrorNG/MirrorNG/issues/1575)) ([3156504](https://github.com/MirrorNG/MirrorNG/commit/31565042708ec768fcaafe9986968d095a3a1419))
* added new read/write symbol params ([#806](https://github.com/MirrorNG/MirrorNG/issues/806)) ([3a50ca6](https://github.com/MirrorNG/MirrorNG/commit/3a50ca6352761b47464d0bc7721aa6556d664661))
* Added WriteBytesAndSize tests, and fixed the function to be pedantic. ([#773](https://github.com/MirrorNG/MirrorNG/issues/773)) ([72e4e55](https://github.com/MirrorNG/MirrorNG/commit/72e4e55778edc0acc4ef3546f69c984f0f392867))
* Adding warning when adding handler with RegisterSpawnHandler if assetid already exists ([#1819](https://github.com/MirrorNG/MirrorNG/issues/1819)) ([7f26329](https://github.com/MirrorNG/MirrorNG/commit/7f26329e2db9d00da04bed40399af053436218bd))
* Adding warning when adding prefab with RegisterPrefab if assetid already exists ([#1828](https://github.com/MirrorNG/MirrorNG/issues/1828)) ([9f59e0c](https://github.com/MirrorNG/MirrorNG/commit/9f59e0c439707d66409a617b8f209187856eaf5f))
* addingNetwork rigidbody icon and AddComponentMenu attribute ([#2051](https://github.com/MirrorNG/MirrorNG/issues/2051)) ([ab1b92f](https://github.com/MirrorNG/MirrorNG/commit/ab1b92f74b56787feb7c6fde87c0b9838b8d9d0f))
* Additive scene can respawn objects safely ([#1270](https://github.com/MirrorNG/MirrorNG/issues/1270)) ([8899d20](https://github.com/MirrorNG/MirrorNG/commit/8899d207127be86a01cb859d0539c7927ebc2f67))
* additive scene example ([9fa0169](https://github.com/MirrorNG/MirrorNG/commit/9fa016957f487526ab44d443aabfe58fcc69518a))
* Additive Scene Example was missing Player Auth on movement. ([#234](https://github.com/MirrorNG/MirrorNG/issues/234)) ([09bbd68](https://github.com/MirrorNG/MirrorNG/commit/09bbd686e6c294f24412b35785cfa7a5aa47b5f2))
* additive scene player movement is client authoritative ([e683a92](https://github.com/MirrorNG/MirrorNG/commit/e683a92b081c989314c11e48fb21ee0096465797))
* AdditiveSceneExample missing comp and assignments ([#267](https://github.com/MirrorNG/MirrorNG/issues/267)) ([ab394b8](https://github.com/MirrorNG/MirrorNG/commit/ab394b8f7e823b8c3882de35eaa54c05fbd9316e))
* Allow sync objects to be re-used ([#1744](https://github.com/MirrorNG/MirrorNG/issues/1744)) ([58c89a3](https://github.com/MirrorNG/MirrorNG/commit/58c89a3d32daedc9b6670ed0b5eb1f8753c902e2)), closes [#1714](https://github.com/MirrorNG/MirrorNG/issues/1714)
* Allowing overrides for virtual commands to call base method ([#1944](https://github.com/MirrorNG/MirrorNG/issues/1944)) ([b92da91](https://github.com/MirrorNG/MirrorNG/commit/b92da91d7a04f41098615ff2e2a35cf7ff479201))
* assign spawn locations and fix null refs in example ([#242](https://github.com/MirrorNG/MirrorNG/issues/242)) ([3adf343](https://github.com/MirrorNG/MirrorNG/commit/3adf3438578ff304f1216022aae8e043c52cd71d))
* AsyncTcp now exits normally when client disconnects ([#141](https://github.com/MirrorNG/MirrorNG/issues/141)) ([8896c4a](https://github.com/MirrorNG/MirrorNG/commit/8896c4afa2f937839a54dc71fbe578b9c636f393))
* attributes causing a NRE ([#69](https://github.com/MirrorNG/MirrorNG/issues/69)) ([fc99c67](https://github.com/MirrorNG/MirrorNG/commit/fc99c67712564e2d983674b37858591903294f1a))
* auto reference mirrorng assembly ([93f8688](https://github.com/MirrorNG/MirrorNG/commit/93f8688b39822bb30ed595ca36f44a8a556bec85))
* Avoid FindObjectOfType when not needed ([#66](https://github.com/MirrorNG/MirrorNG/issues/66)) ([e2a4afd](https://github.com/MirrorNG/MirrorNG/commit/e2a4afd0b9ca8dea720acb9c558efca210bd8e71))
* benchmark examples ([b221b74](https://github.com/MirrorNG/MirrorNG/commit/b221b74beae2ee56f6fe536963b17d0aff10c5d8))
* better error for Command, ClientRpc and TargetRpc marked as abstract ([#1947](https://github.com/MirrorNG/MirrorNG/issues/1947)) ([62257d8](https://github.com/MirrorNG/MirrorNG/commit/62257d8c4fc307ba3e23fbd01dcc950515c31e79))
* Better errors when trying to replace existing assetid ([#1827](https://github.com/MirrorNG/MirrorNG/issues/1827)) ([822b041](https://github.com/MirrorNG/MirrorNG/commit/822b04155def9859b24900c6e55a4253f85ebb3f))
* build in IL2CPP ([#1524](https://github.com/MirrorNG/MirrorNG/issues/1524)) ([59faa81](https://github.com/MirrorNG/MirrorNG/commit/59faa819262a166024b16d854e410c7e51763e6a)), closes [#1519](https://github.com/MirrorNG/MirrorNG/issues/1519) [#1520](https://github.com/MirrorNG/MirrorNG/issues/1520)
* call callback after update dictionary in host ([#1476](https://github.com/MirrorNG/MirrorNG/issues/1476)) ([1736bb0](https://github.com/MirrorNG/MirrorNG/commit/1736bb0c42c0d2ad341e31a645658722de3bfe07))
* Call hooks when initializing objects OnStartServer on host ([#1249](https://github.com/MirrorNG/MirrorNG/issues/1249)) ([7aa7815](https://github.com/MirrorNG/MirrorNG/commit/7aa7815754bb3be1071884d6583076badc7cae59))
* call Obsoleted OnStartClient ([#681](https://github.com/MirrorNG/MirrorNG/issues/681)) ([8dea50e](https://github.com/MirrorNG/MirrorNG/commit/8dea50ed18ca45e72cc5e5addf1cc28c7ab08746))
* call OnStartClient only once in room ([#1264](https://github.com/MirrorNG/MirrorNG/issues/1264)) ([4d373c5](https://github.com/MirrorNG/MirrorNG/commit/4d373c5071c45201146333f40d3fbc5d1fa8ec26))
* call the virtual OnRoomServerDisconnect before the base ([e6881ef](https://github.com/MirrorNG/MirrorNG/commit/e6881ef007f199efca3c326ead258f0c350ffb47))
* calling base method when the first base class did not have the virtual method ([#2014](https://github.com/MirrorNG/MirrorNG/issues/2014)) ([4af72c3](https://github.com/MirrorNG/MirrorNG/commit/4af72c3a63e72dac6b3bab193dc58bfa3c44a975))
* calling Connect and Authenticate handler twice ([#102](https://github.com/MirrorNG/MirrorNG/issues/102)) ([515f5a1](https://github.com/MirrorNG/MirrorNG/commit/515f5a15cd5be984f8cb4f94d3be0a0ac919eb63))
* calling syncvar hook when not connected yet ([#77](https://github.com/MirrorNG/MirrorNG/issues/77)) ([e64727b](https://github.com/MirrorNG/MirrorNG/commit/e64727b74bcbb1adfcd8f5efbf96066443254dff))
* cap spawned to match client ([#301](https://github.com/MirrorNG/MirrorNG/issues/301)) ([7d1571a](https://github.com/MirrorNG/MirrorNG/commit/7d1571ab5a9eaf31cd64bff2bc47158c0e1e6ff6))
* changing namespace to match folder name ([#2037](https://github.com/MirrorNG/MirrorNG/issues/2037)) ([e36449c](https://github.com/MirrorNG/MirrorNG/commit/e36449cb22d8a2dede0133cf229bc12885c36bdb))
* chat example ([e6e10a7](https://github.com/MirrorNG/MirrorNG/commit/e6e10a7108bc01e3bd0c208734c97c945003ff86))
* chat example works ([0609d50](https://github.com/MirrorNG/MirrorNG/commit/0609d50d9b93afd3b42d97ddcd00d32e8aaa0db5))
* check event prefix ([7417b68](https://github.com/MirrorNG/MirrorNG/commit/7417b6867175f0a54db56efc4387d2d24b0b37dd))
* Check SceneManager GetSceneByName and GetSceneByPath ([#1684](https://github.com/MirrorNG/MirrorNG/issues/1684)) ([e7cfd5a](https://github.com/MirrorNG/MirrorNG/commit/e7cfd5a498c7359636cd109fe586fce1771bada2))
* Clean up roomSlots on clients in NetworkRoomPlayer ([5032ceb](https://github.com/MirrorNG/MirrorNG/commit/5032ceb00035679e0b80f59e91131cdfa8e0b1bb))
* Cleaning up network objects when server stops ([#1864](https://github.com/MirrorNG/MirrorNG/issues/1864)) ([4c25122](https://github.com/MirrorNG/MirrorNG/commit/4c25122958978557173ec37ca400c47b2d8e834f))
* cleanup the server even after error ([#255](https://github.com/MirrorNG/MirrorNG/issues/255)) ([7bd015e](https://github.com/MirrorNG/MirrorNG/commit/7bd015eac1b77f0ad5974abb5c4c87a5d3da7b6d))
* clear all message handlers on Shutdown ([#1829](https://github.com/MirrorNG/MirrorNG/issues/1829)) ([a6ab352](https://github.com/MirrorNG/MirrorNG/commit/a6ab3527acb9af8f6a68f0151e5231e4ee1a98e9))
* client being disconnected twice ([#132](https://github.com/MirrorNG/MirrorNG/issues/132)) ([36bb3a2](https://github.com/MirrorNG/MirrorNG/commit/36bb3a2418bcf41fd63d1fc79e8a5173e4b0bc51))
* client disconnected on server event never raised ([#133](https://github.com/MirrorNG/MirrorNG/issues/133)) ([9d9efa0](https://github.com/MirrorNG/MirrorNG/commit/9d9efa0e31cbea4d90d7408ae6b3742151b49a21))
* ClientRpc methods now work accross assemblies ([#1129](https://github.com/MirrorNG/MirrorNG/issues/1129)) ([13dbcb9](https://github.com/MirrorNG/MirrorNG/commit/13dbcb9f35d64285258e748ca1fd5c4daac97a16)), closes [#1128](https://github.com/MirrorNG/MirrorNG/issues/1128)
* ClientRPC should skip first arg only if set as Connection ([#315](https://github.com/MirrorNG/MirrorNG/issues/315)) ([168e622](https://github.com/MirrorNG/MirrorNG/commit/168e6222e759016b588e994b76d2f134c9224b0b))
* ClientSceneManager should be responsible for its own cleanup ([#298](https://github.com/MirrorNG/MirrorNG/issues/298)) ([92ab3ff](https://github.com/MirrorNG/MirrorNG/commit/92ab3ffe265e72b3c012dc44075f6e9752323984))
* Cmds can be called from child classes in other assemblies ([d8a98d8](https://github.com/MirrorNG/MirrorNG/commit/d8a98d8d996aeded693223b00b90f2eea5084c11)), closes [#1108](https://github.com/MirrorNG/MirrorNG/issues/1108)
* code smell rename Ready ([#256](https://github.com/MirrorNG/MirrorNG/issues/256)) ([6d92d14](https://github.com/MirrorNG/MirrorNG/commit/6d92d1482cdd31fa663f7475f103476c65b7d875))
* Command and Rpc debugging information ([#1551](https://github.com/MirrorNG/MirrorNG/issues/1551)) ([658847b](https://github.com/MirrorNG/MirrorNG/commit/658847b096571eb7cf14e824ea76359576121e63)), closes [#1550](https://github.com/MirrorNG/MirrorNG/issues/1550)
* comment punctuation ([4d827cd](https://github.com/MirrorNG/MirrorNG/commit/4d827cd9f60e4fb7cd6524d78ca26ea1d88a1eff))
* compilation error ([df7baa4](https://github.com/MirrorNG/MirrorNG/commit/df7baa4db0d347ee69c17bad9f9e56ccefb54fab))
* compilation error ([dc74256](https://github.com/MirrorNG/MirrorNG/commit/dc74256fc380974ad6df59b5d1dee3884b879bd7))
* compilation error on standalone build ([bb70bf9](https://github.com/MirrorNG/MirrorNG/commit/bb70bf963459be02a79c2c40cb7dfb8f10d2b92d))
* compilation issue after merge from mirror ([daf07be](https://github.com/MirrorNG/MirrorNG/commit/daf07bea83c9925bd780e23de53dd50604e8a999))
* compilation issues ([22bf925](https://github.com/MirrorNG/MirrorNG/commit/22bf925f1ebf018b9ea33df22294fb9205574fa5))
* comply with MIT license in upm package ([b879bef](https://github.com/MirrorNG/MirrorNG/commit/b879bef4295e48c19d96a1d45536a11ea47380f3))
* Decouple ChatWindow from player ([#1429](https://github.com/MirrorNG/MirrorNG/issues/1429)) ([42a2f9b](https://github.com/MirrorNG/MirrorNG/commit/42a2f9b853667ef9485a1d4a31979fcf1153c0d7))
* Default port is 7777 ([960c39d](https://github.com/MirrorNG/MirrorNG/commit/960c39da90db156cb58d4765695664f0c084b39a))
* destroy owned objects ([#1352](https://github.com/MirrorNG/MirrorNG/issues/1352)) ([d7a58d2](https://github.com/MirrorNG/MirrorNG/commit/d7a58d25d4aa79d31dfc3fadfa4f68a5fdb895e6)), closes [#1346](https://github.com/MirrorNG/MirrorNG/issues/1346) [#1206](https://github.com/MirrorNG/MirrorNG/issues/1206) [#1351](https://github.com/MirrorNG/MirrorNG/issues/1351)
* Destroyed NetMan due to singleton collision must not continue. ([#1636](https://github.com/MirrorNG/MirrorNG/issues/1636)) ([d2a58a4](https://github.com/MirrorNG/MirrorNG/commit/d2a58a4c251c97cdb38c88c9a381496b3078adf8))
* disconnect even if there is an exception ([#152](https://github.com/MirrorNG/MirrorNG/issues/152)) ([2eb9de6](https://github.com/MirrorNG/MirrorNG/commit/2eb9de6b470579b6de75853ba161b3e7a36de698))
* disconnect properly from the server ([c89bb51](https://github.com/MirrorNG/MirrorNG/commit/c89bb513e536f256e55862b723487bb21281572e))
* disconnect transport without domain reload ([20785b7](https://github.com/MirrorNG/MirrorNG/commit/20785b740e21fb22834cd01d7d628e127df6b80d))
* Do not call InternalAddPlayer twice ([#1246](https://github.com/MirrorNG/MirrorNG/issues/1246)) ([7119dd1](https://github.com/MirrorNG/MirrorNG/commit/7119dd15f8e90e6d6bc929a9e4633082615d0023))
* don't call hook in host if no change,  fixes [#1142](https://github.com/MirrorNG/MirrorNG/issues/1142) ([#1143](https://github.com/MirrorNG/MirrorNG/issues/1143)) ([d8ce80f](https://github.com/MirrorNG/MirrorNG/commit/d8ce80fe0edb243a71d35bdae657805b18a8a85e))
* don't call OnStartLocalPlayer twice ([#1263](https://github.com/MirrorNG/MirrorNG/issues/1263)) ([c753089](https://github.com/MirrorNG/MirrorNG/commit/c7530894788bb843b0f424e8f25029efce72d8ca))
* Don't call RegisterClientMessages every scene change ([#1865](https://github.com/MirrorNG/MirrorNG/issues/1865)) ([05c119f](https://github.com/MirrorNG/MirrorNG/commit/05c119f505390094c8f33e11568d40117360c49e))
* Don't call RegisterClientMessages twice ([#1842](https://github.com/MirrorNG/MirrorNG/issues/1842)) ([2a08aac](https://github.com/MirrorNG/MirrorNG/commit/2a08aac7cb8887934eb7eb8c232ce07976defe35))
* don't crash when stopping the client ([f584388](https://github.com/MirrorNG/MirrorNG/commit/f584388a16e746ac5c3000123a02a5c77387765e))
* Don't destroy the player twice ([#1709](https://github.com/MirrorNG/MirrorNG/issues/1709)) ([cbc2a47](https://github.com/MirrorNG/MirrorNG/commit/cbc2a4772921e01db17033075fa9f7d8cb7e6faf))
* Don't disconnect host ([#608](https://github.com/MirrorNG/MirrorNG/issues/608)) ([c1707e5](https://github.com/MirrorNG/MirrorNG/commit/c1707e5917c4058a9641376d028f5feff51128cc))
* Don't give host player authority by default ([#1158](https://github.com/MirrorNG/MirrorNG/issues/1158)) ([1fc1ed2](https://github.com/MirrorNG/MirrorNG/commit/1fc1ed27081413e48a7898fc185cb238ed0074dc))
* don't report error when stopping the server ([c965d4b](https://github.com/MirrorNG/MirrorNG/commit/c965d4b0ff32288ebe4e5c63a43e32559203deb1))
* Don't set asset id for scene objects ([7e40232](https://github.com/MirrorNG/MirrorNG/commit/7e4023246bc2e6a11909a7c3730ae05ee56d1369))
* Don't set framerate in host mode ([4644bc4](https://github.com/MirrorNG/MirrorNG/commit/4644bc4b7730d4aefae833fb59264230026bb4d0))
* Don't throw exception getting address ([7df3ce3](https://github.com/MirrorNG/MirrorNG/commit/7df3ce37d1a23b8137119015276436a741b7cd9d))
* Dont allow null connections ([#323](https://github.com/MirrorNG/MirrorNG/issues/323)) ([44fef7e](https://github.com/MirrorNG/MirrorNG/commit/44fef7ec7bd6ae0772414ff28bb78bf42a6b4c92))
* dont allow set of networkSceneName directly ([#2100](https://github.com/MirrorNG/MirrorNG/issues/2100)) ([df16a7d](https://github.com/MirrorNG/MirrorNG/commit/df16a7d3ccfddcf3aa1a68fe0965757d91363e16))
* dont directly set NetworkSceneName ([#297](https://github.com/MirrorNG/MirrorNG/issues/297)) ([bd043a3](https://github.com/MirrorNG/MirrorNG/commit/bd043a3001775fe32da558e17566b61c5694ee7c))
* dont register client scene handlers while host ([#296](https://github.com/MirrorNG/MirrorNG/issues/296)) ([37c8ddd](https://github.com/MirrorNG/MirrorNG/commit/37c8ddd87595143149af942dc7e5654de3eef424))
* Draw SyncVar label for Unity objects inline  ([#1291](https://github.com/MirrorNG/MirrorNG/issues/1291)) ([a0425e4](https://github.com/MirrorNG/MirrorNG/commit/a0425e4e84cb08c3fd8d7e7fe07a230579d0c0c7))
* Dummy file for SyncListStructProcessor.cs ([#798](https://github.com/MirrorNG/MirrorNG/issues/798)) ([75e4f15](https://github.com/MirrorNG/MirrorNG/commit/75e4f159e516f8f3b04b6f1a2c77898de8c7c7b5))
* Eliminate NetworkAnimator SetTrigger double firing on Host ([#1723](https://github.com/MirrorNG/MirrorNG/issues/1723)) ([e5b728f](https://github.com/MirrorNG/MirrorNG/commit/e5b728fed515ab679ad1e4581035d32f6c187a98))
* empty scene name isn't considered as empty ([ec3a939](https://github.com/MirrorNG/MirrorNG/commit/ec3a93945b5b52a77fd745b39e1e821db721768d))
* error when there are no network behaviors ([#1303](https://github.com/MirrorNG/MirrorNG/issues/1303)) ([dbe0643](https://github.com/MirrorNG/MirrorNG/commit/dbe064393a6573bcb213b628ec53b547d04891cc))
* examples now work with prefabs in NC ([df4149b](https://github.com/MirrorNG/MirrorNG/commit/df4149b8fea9f174742d20f600ef5261058e5300))
* examples run in background ([#233](https://github.com/MirrorNG/MirrorNG/issues/233)) ([4755650](https://github.com/MirrorNG/MirrorNG/commit/47556500eed7c0e2719e41c0e996925ddf1799bb))
* Fallback and Multiplex now disable their transports when they are disabled  ([#2048](https://github.com/MirrorNG/MirrorNG/issues/2048)) ([61d44b2](https://github.com/MirrorNG/MirrorNG/commit/61d44b2d80c9616f784e855131ba6d1ee8a30136))
* FinishLoadSceneHost calls FinishStart host which now calls StartHostClient AFTER server online scene was loaded. Previously there was a race condition where StartHostClient was called immediately in StartHost, before the scene change even finished. This was still from UNET. ([df9c29a](https://github.com/MirrorNG/MirrorNG/commit/df9c29a6b3f9d0c8adbaff5a500e54abddb303b3))
* first connection id = 1 ([#60](https://github.com/MirrorNG/MirrorNG/issues/60)) ([891dab9](https://github.com/MirrorNG/MirrorNG/commit/891dab92d065821ca46b47ef2d3eb27124058d74))
* fix adding and saving Components ([2de7ecd](https://github.com/MirrorNG/MirrorNG/commit/2de7ecd93029bf5fd2fbb04ad4e47936cbb802cc))
* fix release pipeline ([2a3db0b](https://github.com/MirrorNG/MirrorNG/commit/2a3db0b398cd641c3e1ba65a32b34822e9c9169f))
* Fix Room Slots for clients ([#1439](https://github.com/MirrorNG/MirrorNG/issues/1439)) ([268753c](https://github.com/MirrorNG/MirrorNG/commit/268753c3bd0a9c0695d8d4510a129685be364a11))
* Fixed Capitalization ([c45deb8](https://github.com/MirrorNG/MirrorNG/commit/c45deb808e8e01a7b697e703be783aea2799d4d1))
* Fixed ClienRpc typos ([e946c79](https://github.com/MirrorNG/MirrorNG/commit/e946c79194dd9618992a4136daed4b79f60671a2))
* Fixed NetworkRoomManager Template ([1662c5a](https://github.com/MirrorNG/MirrorNG/commit/1662c5a139363dbe61784bb90ae6544ec74478c3))
* Fixed toc link ([3a0c7fb](https://github.com/MirrorNG/MirrorNG/commit/3a0c7fb1ecd9d8715e797a7665ab9a6a7cb19e2a))
* Fixing ClientScene UnregisterPrefab ([#1815](https://github.com/MirrorNG/MirrorNG/issues/1815)) ([9270765](https://github.com/MirrorNG/MirrorNG/commit/9270765bebf45c34a466694473b43c6d802b99d9))
* fixing cloud scripts not pinging api ([#2097](https://github.com/MirrorNG/MirrorNG/issues/2097)) ([8e545ac](https://github.com/MirrorNG/MirrorNG/commit/8e545ac46863e4fbe874c70bf9559c9b12de83d4))
* Fixing SyncVars not serializing when OnSerialize is overridden ([#1671](https://github.com/MirrorNG/MirrorNG/issues/1671)) ([c66c5a6](https://github.com/MirrorNG/MirrorNG/commit/c66c5a6dcc6837c840e6a51435b88fde10322297))
* folders for meta files no longer in the codebase ([#237](https://github.com/MirrorNG/MirrorNG/issues/237)) ([192fd16](https://github.com/MirrorNG/MirrorNG/commit/192fd1645986c515a804a01e0707c78241882676))
* hasAuthority is now visible in all overrides ([#1251](https://github.com/MirrorNG/MirrorNG/issues/1251)) ([2f19c7c](https://github.com/MirrorNG/MirrorNG/commit/2f19c7ca8961e9d99794e6053abfa88263dea89d)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* headless build ([7864e8d](https://github.com/MirrorNG/MirrorNG/commit/7864e8d6f4a0952ef3114daac11842e4ee0a7a58))
* headless build ([ab47a45](https://github.com/MirrorNG/MirrorNG/commit/ab47a45d08f4e9a82a5cd26f913f4871d46dd484))
* Host Player Ready Race Condition ([#1498](https://github.com/MirrorNG/MirrorNG/issues/1498)) ([4c4a52b](https://github.com/MirrorNG/MirrorNG/commit/4c4a52bff95e7c56f065409b1399955813f3e145))
* If socket is undefined it will return false. See [#1486](https://github.com/MirrorNG/MirrorNG/issues/1486) ([#2017](https://github.com/MirrorNG/MirrorNG/issues/2017)) ([4ffff19](https://github.com/MirrorNG/MirrorNG/commit/4ffff192a69108b993cf963cfdece47b14ffdbf2))
* Improved error checking for ClientScene.RegisterPrefab ([#1823](https://github.com/MirrorNG/MirrorNG/issues/1823)) ([a0aa4f9](https://github.com/MirrorNG/MirrorNG/commit/a0aa4f9c1425d4eca3fe08cd2d87361f092ded6f))
* Improved error checking for ClientScene.RegisterPrefab with handler ([#1841](https://github.com/MirrorNG/MirrorNG/issues/1841)) ([54071da](https://github.com/MirrorNG/MirrorNG/commit/54071da3afb18d6289de5d0e41dc248e21088641))
* Invoke server.Disconnected before identity is removed for its conn ([#165](https://github.com/MirrorNG/MirrorNG/issues/165)) ([b749c4b](https://github.com/MirrorNG/MirrorNG/commit/b749c4ba126266a1799059f7fb407b6bcaa2bbd9))
* isClient now reports true onStartServer in host mode ([#1252](https://github.com/MirrorNG/MirrorNG/issues/1252)) ([d00c95b](https://github.com/MirrorNG/MirrorNG/commit/d00c95bb55eedceb4f0811de54604c960c9352fe))
* isLocalPlayer is true during OnStartClient for Player ([#1255](https://github.com/MirrorNG/MirrorNG/issues/1255)) ([fb26d00](https://github.com/MirrorNG/MirrorNG/commit/fb26d0023f2ecfcec710d365f23a19036e3f87b2)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* isLocalPlayer works in host mode onStartServer ([#1253](https://github.com/MirrorNG/MirrorNG/issues/1253)) ([9acde20](https://github.com/MirrorNG/MirrorNG/commit/9acde20b0a4237936fc028747551204208ac9677)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* it is not safe to modify this outside this class ([bc7a961](https://github.com/MirrorNG/MirrorNG/commit/bc7a961e4db0b269e36cd15f1492410932ff7f5b))
* list server logs properly when disconnected ([f02d317](https://github.com/MirrorNG/MirrorNG/commit/f02d3174db39498749a6663984dcb4bea8ac342e))
* Lobby Remove button not showing for P1 when Server Only ([377c47c](https://github.com/MirrorNG/MirrorNG/commit/377c47ce74808dc7d2871eac80c4cd040894821b))
* Make assembly definition 2018.4 compatible ([99ecc9e](https://github.com/MirrorNG/MirrorNG/commit/99ecc9ec770aa89d5087e5b95821ff3e2e444085))
* make build pass ([08df6d0](https://github.com/MirrorNG/MirrorNG/commit/08df6d0694b10475301b21915214cbbfbbec2826))
* Make SendToReady non-ambiguous ([#1578](https://github.com/MirrorNG/MirrorNG/issues/1578)) ([b627779](https://github.com/MirrorNG/MirrorNG/commit/b627779acd68b2acfcaf5eefc0d3864dcce57fc7))
* making weaver include public fields in base classes in auto generated Read/Write ([#1977](https://github.com/MirrorNG/MirrorNG/issues/1977)) ([3db57e5](https://github.com/MirrorNG/MirrorNG/commit/3db57e5f61ac0748d3a6296d8ea44c202830796f))
* Mark weaver as failed if serializing invalid type ([03c767d](https://github.com/MirrorNG/MirrorNG/commit/03c767db6aea583bb00e56b1ac74bf29e8169a91))
* Message base class not being Serialized if processed in the wrong order ([#2023](https://github.com/MirrorNG/MirrorNG/issues/2023)) ([3418fa2](https://github.com/MirrorNG/MirrorNG/commit/3418fa210602cf1a9b9331b198ac47d8a3cabe69))
* MirrorNG works with 2019.2 ([9f35d6b](https://github.com/MirrorNG/MirrorNG/commit/9f35d6be427843aa7dd140cde32dd843c62147ce))
* Misc code smells ([#2094](https://github.com/MirrorNG/MirrorNG/issues/2094)) ([e4cc85c](https://github.com/MirrorNG/MirrorNG/commit/e4cc85c413eed01950bf9dddf0bdac2afd8ab479))
* Misc Code Smells ([#257](https://github.com/MirrorNG/MirrorNG/issues/257)) ([278a127](https://github.com/MirrorNG/MirrorNG/commit/278a1279dabefe04b0829015841de68b41e60a7b))
* Misc code smells ([#269](https://github.com/MirrorNG/MirrorNG/issues/269)) ([23dcca6](https://github.com/MirrorNG/MirrorNG/commit/23dcca61ff7c41e8b9f61579605fd56ee82c70e0))
* missing meta ([87ace4d](https://github.com/MirrorNG/MirrorNG/commit/87ace4dda09331968cc9d0185ce1de655f5dfb15))
* move listserver classes into package ([2668b17](https://github.com/MirrorNG/MirrorNG/commit/2668b17162e5a9fbdce2cfc776f80044f9f4d0d9))
* move NetworkStreamExtension in a namespace ([12de543](https://github.com/MirrorNG/MirrorNG/commit/12de543aa4da49edf3c14c69388f739ad315c84d))
* moved SpawnObjects call for hostmode to after LocalClient Connected ([#317](https://github.com/MirrorNG/MirrorNG/issues/317)) ([1423a6d](https://github.com/MirrorNG/MirrorNG/commit/1423a6d0160c5d14a0ee6bad84973df73956fc05))
* movement in room demo ([49f7904](https://github.com/MirrorNG/MirrorNG/commit/49f7904b4a83fc5318031d273cb10a4b87af2172))
* MultiplexTransport GetMaxMessageSize NullReferenceException when called on server. And fixes potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes. ([#1332](https://github.com/MirrorNG/MirrorNG/issues/1332)) ([b3127be](https://github.com/MirrorNG/MirrorNG/commit/b3127beb89c20447bf8044fd3bae71ae04f553e7))
* Network rigidbody fixes ([#2050](https://github.com/MirrorNG/MirrorNG/issues/2050)) ([0c30d33](https://github.com/MirrorNG/MirrorNG/commit/0c30d3398aaabcbf094a88a9c9c77ab4d5062acf))
* NetworkBehaviour.SyncVarGameObjectEqual made protected again so that Weaver finds it again ([165a1dd](https://github.com/MirrorNG/MirrorNG/commit/165a1dd94cd1a7bebc3365c4f40f968f500043a5))
* NetworkBehaviour.SyncVarNetworkIdentityEqual made protected again so that Weaver finds it again ([20a2d09](https://github.com/MirrorNG/MirrorNG/commit/20a2d09d07ab2c47a204e5d583b538a92f72231e))
* NetworkBehaviourInspector wouldn't show SyncMode if syncvars / syncobjects were only private ([ed572da](https://github.com/MirrorNG/MirrorNG/commit/ed572da6a07791a243715796304c0f7695792225))
* NetworkClient.Shutdown calls ClientScene.Shutdown again to properly clean up client scene. ClientScene only cleans up itself without touching transport or NetworkIdentities (fixes the bug where the player object wouldn't be destroyed after calling StopClient) ([fb716df](https://github.com/MirrorNG/MirrorNG/commit/fb716df12997417ce41a063508937d68a75991bf))
* NetworkConnectionEvent should be serialized in editor ([0e756ce](https://github.com/MirrorNG/MirrorNG/commit/0e756cec06c5fda9eb4b5c8aa9de093c32b0315c))
* NetworkIdentity.OnStartLocalPlayer catches exceptions now too. fixes a potential bug where an exception in PlayerInventory.OnStartLocalPlayer would cause PlayerEquipment.OnStartLocalPlayer to not be called ([5ed5f84](https://github.com/MirrorNG/MirrorNG/commit/5ed5f844090442e16e78f466f7a785881283fbd4))
* NetworkIdentity.RebuildObservers: added missing null check for observers coming from components that implement OnRebuildObservers. Previously this caused a NullReferenceException. ([a5f495a](https://github.com/MirrorNG/MirrorNG/commit/a5f495a77485b972cf39f8a42bae6d7d852be38c))
* NetworkIdentity.SetClientOwner: overwriting the owner was still possible even though it shouldn't be. all caller functions double check and return early if it already has an owner, so we should do the same here. ([548db52](https://github.com/MirrorNG/MirrorNG/commit/548db52fdf224f06ba9d8b2d75460d31181b7066))
* NetworkRoomManager.minPlayers is now protected so it's available for derived classes. ([3179f08](https://github.com/MirrorNG/MirrorNG/commit/3179f08e3dc11340227a57da0104b1c8d1d7b45d))
* NetworkServer.SpawnObjects: return false if server isn't running ([d4d524d](https://github.com/MirrorNG/MirrorNG/commit/d4d524dad2a0a9d89538e6212dceda6bea71d2b7))
* NetworkTransform clientAuthority works again via clientAuthority option that is configurable in inspector. this had to be fixed after we removed local authority. ([d712cd0](https://github.com/MirrorNG/MirrorNG/commit/d712cd03039aea92083b1be97197f6272b2296b5))
* NinjaWS code smells ([#272](https://github.com/MirrorNG/MirrorNG/issues/272)) ([71d9428](https://github.com/MirrorNG/MirrorNG/commit/71d942804c0d404f287dc51b7bcdd1fcc39bcee8))
* no longer requires hook to be the first overload in a class ([#1913](https://github.com/MirrorNG/MirrorNG/issues/1913)) ([0348699](https://github.com/MirrorNG/MirrorNG/commit/03486997fb0abb91d14f233658d375f21afbc3e3))
* non ready connections should not observe objects ([1352334](https://github.com/MirrorNG/MirrorNG/commit/135233474752373b473b6094fe52bcb3ab3c4eae))
* not removing server if id is empty ([#2078](https://github.com/MirrorNG/MirrorNG/issues/2078)) ([f717945](https://github.com/MirrorNG/MirrorNG/commit/f7179455256bb7341ffa9e6921fe0de50498150a))
* NRE on gamemanager in scene ([#268](https://github.com/MirrorNG/MirrorNG/issues/268)) ([58a124a](https://github.com/MirrorNG/MirrorNG/commit/58a124a99c267091142f00adc7f8898160a9dd97))
* NRE when destroying all objects ([#85](https://github.com/MirrorNG/MirrorNG/issues/85)) ([71e78a7](https://github.com/MirrorNG/MirrorNG/commit/71e78a7f5e15f99af89cd15c1ddd8a975e463916))
* NS call SpawnObjects. No NetMan dependency for spawning objects ([#300](https://github.com/MirrorNG/MirrorNG/issues/300)) ([e1bb8de](https://github.com/MirrorNG/MirrorNG/commit/e1bb8deba81713c8998cf47b1ec4b8b870fc55eb))
* null reference exception ([7ce95c5](https://github.com/MirrorNG/MirrorNG/commit/7ce95c5cea58446549d9a282b48c2e8b3f7c8323))
* OnClientEnterRoom should only fire on clients ([d9b7bb7](https://github.com/MirrorNG/MirrorNG/commit/d9b7bb735729e68ae399e1175d6c485a873b379e))
* OnClientReady is called and passed the appropriate ready state value in NetworkLobbyPlayer ([#618](https://github.com/MirrorNG/MirrorNG/issues/618)) ([c9eac57](https://github.com/MirrorNG/MirrorNG/commit/c9eac57ce858d5977a03979e7514f9833a958d3c))
* OnSetHostVisibility can now check if it has authority ([888e46c](https://github.com/MirrorNG/MirrorNG/commit/888e46c6850c9d32c6428f72d0dddf5f7e8a8564))
* Optional Server or Client for PlayerSpawner ([#231](https://github.com/MirrorNG/MirrorNG/issues/231)) ([3fa5f89](https://github.com/MirrorNG/MirrorNG/commit/3fa5f89d8c934b233330efe52b42e59198a920cb))
* overriden hooks are invoked (fixes [#1581](https://github.com/MirrorNG/MirrorNG/issues/1581)) ([#1584](https://github.com/MirrorNG/MirrorNG/issues/1584)) ([cf55333](https://github.com/MirrorNG/MirrorNG/commit/cf55333a072c0ffe36a2972ca0a5122a48d708d0))
* pass the correct connection to TargetRpcs ([#146](https://github.com/MirrorNG/MirrorNG/issues/146)) ([9df2f79](https://github.com/MirrorNG/MirrorNG/commit/9df2f798953f78de113ef6fa9fea111b03a52cd0))
* Pass the name of the invoking class and desired command when an object has no authority. ([#1216](https://github.com/MirrorNG/MirrorNG/issues/1216)) ([701f4f4](https://github.com/MirrorNG/MirrorNG/commit/701f4f41838a01d9268335d16380f871abaf8cf5))
* port network discovery ([d6a1154](https://github.com/MirrorNG/MirrorNG/commit/d6a1154e98c52e7873411ce9d7b87f7b294dc436))
* Potential DOS attack by sending invalid UTF8 byte sequences  ([#727](https://github.com/MirrorNG/MirrorNG/issues/727)) ([3cee3ab](https://github.com/MirrorNG/MirrorNG/commit/3cee3abc48fa58ab2bdb6affc8cbd4ae8b4fa815))
* Potential DOS attack on server by sending packed ulongs when packed uints are expected. ([#730](https://github.com/MirrorNG/MirrorNG/issues/730)) ([015d0d5](https://github.com/MirrorNG/MirrorNG/commit/015d0d508e193a694b254c182dcb0a906fe1f3bc))
* potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes when using FallbackTransport. ([#1331](https://github.com/MirrorNG/MirrorNG/issues/1331)) ([5449840](https://github.com/MirrorNG/MirrorNG/commit/54498403a540db62b3ac1994494ff071327330c9))
* potential null reference exception with debug logging ([33493a0](https://github.com/MirrorNG/MirrorNG/commit/33493a0137a899754c433c428b13e6f6c621300b))
* Prevent Compiler Paradox ([#1145](https://github.com/MirrorNG/MirrorNG/issues/1145)) ([fd43c67](https://github.com/MirrorNG/MirrorNG/commit/fd43c67d6866ede681024d3753b17ab5427e16f4))
* Prevent Double Call of NetworkServer.Destroy ([#1554](https://github.com/MirrorNG/MirrorNG/issues/1554)) ([2d1b142](https://github.com/MirrorNG/MirrorNG/commit/2d1b142276193be1e93a3a3f6ce482c87a134a2c))
* Prevent host client redundantly changing to offline scene ([b4511a0](https://github.com/MirrorNG/MirrorNG/commit/b4511a0637958f10f4a482364c654d1d9add5ef2))
* prevent NRE when operating as a separated client and server ([#283](https://github.com/MirrorNG/MirrorNG/issues/283)) ([e10e198](https://github.com/MirrorNG/MirrorNG/commit/e10e198b4865fc8c941244c3e368eebc6cf73179))
* properly detect NT rotation ([#1516](https://github.com/MirrorNG/MirrorNG/issues/1516)) ([f0a993c](https://github.com/MirrorNG/MirrorNG/commit/f0a993c1064384e0b3bd690d4d66be38875ed50e))
* race condition closing tcp connections ([717f1f5](https://github.com/MirrorNG/MirrorNG/commit/717f1f5ad783e13a6d55920e454cb91f380cd621))
* Re-enable transport if aborting additive load/unload ([#1683](https://github.com/MirrorNG/MirrorNG/issues/1683)) ([bc37497](https://github.com/MirrorNG/MirrorNG/commit/bc37497ac963bb0f2820b103591afd05177d078d))
* register prefab error with same guid ([#2092](https://github.com/MirrorNG/MirrorNG/issues/2092)) ([984eb73](https://github.com/MirrorNG/MirrorNG/commit/984eb73ea495cf876446a21775fde5c33119695b))
* release job requires node 10 ([3f50e63](https://github.com/MirrorNG/MirrorNG/commit/3f50e63bc32f4942e1c130c681dabd34ae81b117))
* release unitypackage ([#1355](https://github.com/MirrorNG/MirrorNG/issues/1355)) ([d0cc669](https://github.com/MirrorNG/MirrorNG/commit/d0cc6690178df0af02be7bfd1fa9aacd037c57be))
* remove customHandling as its no longer used ([#265](https://github.com/MirrorNG/MirrorNG/issues/265)) ([dbd9d84](https://github.com/MirrorNG/MirrorNG/commit/dbd9d84ee46ac90a8d78daba0c23fc9be71ca77d))
* Remove leftover AddPlayer methods now that extraData is gone ([#1751](https://github.com/MirrorNG/MirrorNG/issues/1751)) ([2d006fe](https://github.com/MirrorNG/MirrorNG/commit/2d006fe7301eb8a0194af9ce9244988a6877f8f0))
* remove pause network comment and log ([#238](https://github.com/MirrorNG/MirrorNG/issues/238)) ([1a8c09d](https://github.com/MirrorNG/MirrorNG/commit/1a8c09d8a5a8cf70508d4e42e4912e3989478ff1))
* Remove RoomPlayer from roomSlots on Disconnect ([2a2f76c](https://github.com/MirrorNG/MirrorNG/commit/2a2f76c263093c342f307856e400aeabbedc58df))
* remove samples from upm package ([#25](https://github.com/MirrorNG/MirrorNG/issues/25)) ([a71e21f](https://github.com/MirrorNG/MirrorNG/commit/a71e21fe6953f6edf54fed3499801e271e2447f3))
* remove scriptableobject error Tests ([479b78b](https://github.com/MirrorNG/MirrorNG/commit/479b78bf3cabe93938bf61b7f8fd63ba46da0f4a))
* remove tests from npm package ([#32](https://github.com/MirrorNG/MirrorNG/issues/32)) ([5ed9b4f](https://github.com/MirrorNG/MirrorNG/commit/5ed9b4f1235d5d1dc54c3f50bb1aeefd5dbe3038))
* remove Tests from UPM ([#33](https://github.com/MirrorNG/MirrorNG/issues/33)) ([8f42af0](https://github.com/MirrorNG/MirrorNG/commit/8f42af0a3992cfa549eb404ad9f9693101895ce9))
* remove Tests from upm package ([#34](https://github.com/MirrorNG/MirrorNG/issues/34)) ([8d8ea0f](https://github.com/MirrorNG/MirrorNG/commit/8d8ea0f10743044e4a9a3d6c5b9f9973cf48e28b))
* remove unused code ([#308](https://github.com/MirrorNG/MirrorNG/issues/308)) ([554d2c5](https://github.com/MirrorNG/MirrorNG/commit/554d2c5030a9ff1ebcd9ca17ed7d673865709a1c))
* remove unused events ([#334](https://github.com/MirrorNG/MirrorNG/issues/334)) ([c20f6de](https://github.com/MirrorNG/MirrorNG/commit/c20f6de07ff97960a8cf9972fbb4d4d13b507b3b))
* Removed NetworkClient.Update because NetworkManager does it in LateUpdate ([984945e](https://github.com/MirrorNG/MirrorNG/commit/984945e482529bfc03bf735562f3eff297a1bad4))
* Removed NetworkServer.Listen because HostSetup does that ([cf6823a](https://github.com/MirrorNG/MirrorNG/commit/cf6823acb5151d5bc9beca2b0911a99dfbcd4472))
* Removed unnecessary registration of player prefab in NetworkRoomManager ([b2f52d7](https://github.com/MirrorNG/MirrorNG/commit/b2f52d78921ff0136c74bbed0980e3aaf5e2b379))
* Removed unused variable ([ae3dc04](https://github.com/MirrorNG/MirrorNG/commit/ae3dc04fb999c3b7133589ab631c1d23f1a8bdde))
* renaming call/invoke prefix for SyncEvent ([#2089](https://github.com/MirrorNG/MirrorNG/issues/2089)) ([18d6957](https://github.com/MirrorNG/MirrorNG/commit/18d695744f7c253d749792e4f9f8759ef16fcbab)), closes [#2088](https://github.com/MirrorNG/MirrorNG/issues/2088)
* replace player (remove authority by default) ([#1261](https://github.com/MirrorNG/MirrorNG/issues/1261)) ([ad724fe](https://github.com/MirrorNG/MirrorNG/commit/ad724fe23c4776855ee1a2a22b53ae59ddac8992)), closes [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257)
* Replaced Icosphere with centered pivot ([1dc0d98](https://github.com/MirrorNG/MirrorNG/commit/1dc0d9837458c0403916476805f58442ff87e364))
* ReplacePlayer now calls OnStartLocalPlayer ([#1280](https://github.com/MirrorNG/MirrorNG/issues/1280)) ([0e1bc81](https://github.com/MirrorNG/MirrorNG/commit/0e1bc8110fb3cc4e162464a2e080eac6c70ab95e)), closes [#962](https://github.com/MirrorNG/MirrorNG/issues/962)
* Replacing ClearDelegates with RemoveDelegates for test ([#1971](https://github.com/MirrorNG/MirrorNG/issues/1971)) ([927c4de](https://github.com/MirrorNG/MirrorNG/commit/927c4dede5930b320537150466e05112ebe70c3e))
* Report correct channel to profiler in SendToObservers ([0b84d4c](https://github.com/MirrorNG/MirrorNG/commit/0b84d4c5e1b8455e32eeb4d4c00b60bbc1301436))
* reset buffer every time ([a8a62a6](https://github.com/MirrorNG/MirrorNG/commit/a8a62a64b6fa67223505505c1225269d3a047a92))
* return & continue on separate line ([#1504](https://github.com/MirrorNG/MirrorNG/issues/1504)) ([61fdd89](https://github.com/MirrorNG/MirrorNG/commit/61fdd892d9e6882e1e51094a2ceddfadc8fd1ebc))
* Revert "NetworkClient.Shutdown: call ClientScene.Shutdown, otherwise it's never called" - caused client's player to not be removed from scene after disconnecting ([13bb748](https://github.com/MirrorNG/MirrorNG/commit/13bb7486034b72e899365f1b0aed3707a3ac0cb1))
* Room example to use new override ([e1d1d41](https://github.com/MirrorNG/MirrorNG/commit/e1d1d41ed69f192b5fb91f92dcdeae1ee057d38f))
* rooms demo ([44598e5](https://github.com/MirrorNG/MirrorNG/commit/44598e58325c877bd6b53ee5a77dd95e421ec404))
* Round Robin Spawning by Hierarchy Order ([#790](https://github.com/MirrorNG/MirrorNG/issues/790)) ([531e202](https://github.com/MirrorNG/MirrorNG/commit/531e202bbec43d855b0ba24e445588fda2f08102)), closes [#724](https://github.com/MirrorNG/MirrorNG/issues/724)
* SceneManager Exceptions and Tests ([#287](https://github.com/MirrorNG/MirrorNG/issues/287)) ([388d218](https://github.com/MirrorNG/MirrorNG/commit/388d21872bb8b4c7f9d3742ecfa9b857ee734dfa))
* SendToAll sends to that exact connection if it is detected as local connection, instead of falling back to the .localConnection field which might be something completely different. ([4b90aaf](https://github.com/MirrorNG/MirrorNG/commit/4b90aafe12970e00949ee43b07b9edd5213745da))
* SendToObservers missing result variable ([9c09c26](https://github.com/MirrorNG/MirrorNG/commit/9c09c26a5cd28cadae4049fea71cddc38c00cf79))
* SendToObservers sends to that exact connection if it is detected as local connection, instead of falling back to the .localConnection field which might be something completely different. ([4267983](https://github.com/MirrorNG/MirrorNG/commit/426798313920d23548048aa1c678167fd9b45cbd))
* SendToReady sends to that exact connection if it is detected as local connection, instead of falling back to the .localConnection field which might be something completely different. ([4596b19](https://github.com/MirrorNG/MirrorNG/commit/4596b19dd959722d5dc659552206fe90c015fb01))
* set authority when replacing the player ([2195fee](https://github.com/MirrorNG/MirrorNG/commit/2195fee81c455ac6c2ea7cca28290fbda6f30260))
* Set syncvar variables after calling the hook ([#659](https://github.com/MirrorNG/MirrorNG/issues/659)) ([2d63ee1](https://github.com/MirrorNG/MirrorNG/commit/2d63ee13180a54d06ce68b641f35ee2a7702cffa))
* set version number ([#1338](https://github.com/MirrorNG/MirrorNG/issues/1338)) ([0d1d7b5](https://github.com/MirrorNG/MirrorNG/commit/0d1d7b5a1c0e6d94c5749a94aa7b75f2c9a2ca0d))
* show private serializable fields in network behavior inspector ([#1557](https://github.com/MirrorNG/MirrorNG/issues/1557)) ([b8c87d9](https://github.com/MirrorNG/MirrorNG/commit/b8c87d9053e7fd7c3b69bcf1d4179e6e4c9bc4a6))
* smell cleanup left if bug. repaired with parenthesis. ([#275](https://github.com/MirrorNG/MirrorNG/issues/275)) ([dd52be3](https://github.com/MirrorNG/MirrorNG/commit/dd52be3bb9406de7b2527c72fce90c9ed6c9d5bf))
* Spawn Handler Order ([#223](https://github.com/MirrorNG/MirrorNG/issues/223)) ([8674274](https://github.com/MirrorNG/MirrorNG/commit/86742740ef2707f420d5cb6aeeb257bf07511f0b)), closes [#222](https://github.com/MirrorNG/MirrorNG/issues/222)
* spawnwithauthority works again in host mode ([5b04836](https://github.com/MirrorNG/MirrorNG/commit/5b04836bb220b8fc0a8c3d0a3636966af3c538f2))
* stack overflow getting logger ([55e075c](https://github.com/MirrorNG/MirrorNG/commit/55e075c872a076f524ec62f44d81df17819e81ba))
* Telepathy forgot to set socket options for accepted clients on the server ([22931fc](https://github.com/MirrorNG/MirrorNG/commit/22931fcd84e402a60b74f5261313c830913754fc))
* Telepathy updated to latest version (IPv6 fix again) ([535b4d4](https://github.com/MirrorNG/MirrorNG/commit/535b4d40fa50cec9abfac37c61aaf207ecbb43b9))
* Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([98d3fb0](https://github.com/MirrorNG/MirrorNG/commit/98d3fb0c31b7ac8bd27ec176ebdf7fb19908d472))
* Telepathy updated to latest version: Correctly support IPv4 and IPv6 sockets ([2761ff2](https://github.com/MirrorNG/MirrorNG/commit/2761ff23f459b5647a5700c9b9b29abdcff13f97))
* Telepathy updated to latest version. connectionId counter is properly reset after stopping server. ([abf06df](https://github.com/MirrorNG/MirrorNG/commit/abf06df25d932d3cfb016e2da0bb5e4ee72d259d))
* TelepathyTransport.ToString UWP exception ([8a190bf](https://github.com/MirrorNG/MirrorNG/commit/8a190bfd176f043322097e64bd041e80e38cc6d2))
* update NetworkIdentityEditor FindProperty to renamed variables ([a2cc14b](https://github.com/MirrorNG/MirrorNG/commit/a2cc14bd202311aa36e61804183c983c6df8c7b4))
* Updated Telepathy to latest version to fix IPAddress.Parse error for "localhost" ([cc6e4f6](https://github.com/MirrorNG/MirrorNG/commit/cc6e4f696dbc462c3880a2c9fc73163d88351b5a))
* workaround for [#791](https://github.com/MirrorNG/MirrorNG/issues/791) ([5c850aa](https://github.com/MirrorNG/MirrorNG/commit/5c850aa9ca5b480449c453aa14191aeb9998e6cb))
* **serialization:** Added NetworkWriter tests, found and fixed a bug in Write(Ray). ([#769](https://github.com/MirrorNG/MirrorNG/issues/769)) ([99c8f5c](https://github.com/MirrorNG/MirrorNG/commit/99c8f5c356d2e3bd298fbd3508a3ed2abcb04351))
* **tests:** Added missing SyncListByteValid test file ([#634](https://github.com/MirrorNG/MirrorNG/issues/634)) ([b0af876](https://github.com/MirrorNG/MirrorNG/commit/b0af87622159ceca9aebf4d939a3b7ad733fbe4f))
* **weaver:** [#696](https://github.com/MirrorNG/MirrorNG/issues/696) detect .mystruct = new MyStruct() changes with syncvars ([#702](https://github.com/MirrorNG/MirrorNG/issues/702)) ([053949b](https://github.com/MirrorNG/MirrorNG/commit/053949b7d2e1e3178025a75cddb6e47b83cdbd48))
* **weaver:** fix [#706](https://github.com/MirrorNG/MirrorNG/issues/706) find system dlls ([#729](https://github.com/MirrorNG/MirrorNG/issues/729)) ([53be9b6](https://github.com/MirrorNG/MirrorNG/commit/53be9b6d9949645d5334690961ff31f90065a93a))
* **websocket:** [#829](https://github.com/MirrorNG/MirrorNG/issues/829) fix InvalidOperationException with wss:// ([#830](https://github.com/MirrorNG/MirrorNG/issues/830)) ([2d682b5](https://github.com/MirrorNG/MirrorNG/commit/2d682b5fad2811d3838e8d61ccaea381cc218bb2))
* **websocket:** Remove send queues (they never worked) and SSL (temporarily) ([#879](https://github.com/MirrorNG/MirrorNG/issues/879)) ([3c60b08](https://github.com/MirrorNG/MirrorNG/commit/3c60b087627175833c616619941722927aa9cd5d))
* **websocket:** Use a buffer for most WS messages in WebGL client resulting in 0 alloc for most messages ([#848](https://github.com/MirrorNG/MirrorNG/issues/848)) ([8967a20](https://github.com/MirrorNG/MirrorNG/commit/8967a20244a2e16e3861d60c1d13c9e808248607))
* Stop calling ClientDisconnect on host ([#597](https://github.com/MirrorNG/MirrorNG/issues/597)) ([b67b3e4](https://github.com/MirrorNG/MirrorNG/commit/b67b3e43049405808fe123276b3637c625b0ca9b))
* StopHost with offline scene calls scene change twice ([#1409](https://github.com/MirrorNG/MirrorNG/issues/1409)) ([a0c96f8](https://github.com/MirrorNG/MirrorNG/commit/a0c96f85189bfc9b5a936a8a33ebda34b460f17f))
* Suppress warning ([fffd462](https://github.com/MirrorNG/MirrorNG/commit/fffd462df8cc1c0265890cdfa4ceb3e24606b1c1))
* Suspend server transport while changing scenes ([#1169](https://github.com/MirrorNG/MirrorNG/issues/1169)) ([e8fac8a](https://github.com/MirrorNG/MirrorNG/commit/e8fac8aba5c570edfb3346c1f68ad9e5fd3b1176))
* sync events can not have the same name if they are in different classes ([#2054](https://github.com/MirrorNG/MirrorNG/issues/2054)) ([c91308f](https://github.com/MirrorNG/MirrorNG/commit/c91308fb0461e54292940ce6fa42bb6cd9800d89))
* syncvars in commands work again ([#1131](https://github.com/MirrorNG/MirrorNG/issues/1131)) ([c24a73f](https://github.com/MirrorNG/MirrorNG/commit/c24a73f6c9bbe25e98a6708f05b89a63dfc54b74))
* syntax error in release job ([2eeaea4](https://github.com/MirrorNG/MirrorNG/commit/2eeaea41bc81cfe0c191b39da912adc565e11ec7))
* TargetRpc now works accross assemblies ([#1130](https://github.com/MirrorNG/MirrorNG/issues/1130)) ([5ecd646](https://github.com/MirrorNG/MirrorNG/commit/5ecd646134791c80d8b53759de0d8aafddc31aeb)), closes [#1128](https://github.com/MirrorNG/MirrorNG/issues/1128)
* tcp server Tests ([3b95477](https://github.com/MirrorNG/MirrorNG/commit/3b954777f16a41469d953e3744c5d68554e3d200))
* Telepathy reverted to older version to fix freezes when calling Client.Disconnect on some platforms like Windows 10 ([d0d77b6](https://github.com/MirrorNG/MirrorNG/commit/d0d77b661cd07e25887f0e2f4c2d72b4f65240a2))
* Telepathy updated to latest version: protect against allocation attacks via MaxMessageSize. Can be configured in the TelepathyTransport component now. ([67d715f](https://github.com/MirrorNG/MirrorNG/commit/67d715fe7416e790bcddcd4e23bb2cb8fbbc54e8))
* Telepathy updated to latest version. Threads are closed properly now. ([4007423](https://github.com/MirrorNG/MirrorNG/commit/4007423db28f7044f6aa97b108a6bfbe3f2d46a9))
* Telepathy works on .net core again ([cb3d9f0](https://github.com/MirrorNG/MirrorNG/commit/cb3d9f0d08a961b345ce533d1ce64602f7041e1c))
* the Room scene references other scenes ([9b60871](https://github.com/MirrorNG/MirrorNG/commit/9b60871e2ea1a2912c0af3d95796660fc04dc569))
* there is no lobby example ([b1e05ef](https://github.com/MirrorNG/MirrorNG/commit/b1e05efb19984ce615d20a16a6c4b09a8897da6a))
* ui bug where additive button is not reset ([#311](https://github.com/MirrorNG/MirrorNG/issues/311)) ([5effce9](https://github.com/MirrorNG/MirrorNG/commit/5effce9abcea0274412cb97100e1f06e4ae01028))
* update interfaces for recent changes that were missed ([#309](https://github.com/MirrorNG/MirrorNG/issues/309)) ([a17e760](https://github.com/MirrorNG/MirrorNG/commit/a17e760e36d581ba964120af11678b66a1248ecc))
* Updated NetworkRoomPlayer inspector and doc and image ([a4ffcbe](https://github.com/MirrorNG/MirrorNG/commit/a4ffcbe280e2e2318d7cd2988379af74f0d32021))
* Use big endian for packet size ([1ddcbec](https://github.com/MirrorNG/MirrorNG/commit/1ddcbec93509e14169bddbb2a38a7cf0d53776e4))
* Use path instead of name in Room Example ([5d4bc47](https://github.com/MirrorNG/MirrorNG/commit/5d4bc47d46098f920f9e3468d0f276e336488e42))
* Use ReplaceHandler instead of RegisterHandler in NetworkManager ([ffc276c](https://github.com/MirrorNG/MirrorNG/commit/ffc276cb79c4202964275642097451b78a817c8a))
* version file ([#1337](https://github.com/MirrorNG/MirrorNG/issues/1337)) ([ed7e509](https://github.com/MirrorNG/MirrorNG/commit/ed7e509ed6f77f2e694966a1c21130e3488f443d))
* weaver Cmd/Rpc/Target prefix check is no longer trash ([#707](https://github.com/MirrorNG/MirrorNG/issues/707)) ([699a261](https://github.com/MirrorNG/MirrorNG/commit/699a261e91078b65f3fb1a51a5838b05be2c87d6))
* weaver now processes multiple SyncEvent per class ([#2055](https://github.com/MirrorNG/MirrorNG/issues/2055)) ([b316b35](https://github.com/MirrorNG/MirrorNG/commit/b316b35d46868a7e11c7b2005570efeec843efe1))
* weaver support array of custom types ([#1470](https://github.com/MirrorNG/MirrorNG/issues/1470)) ([d0b0bc9](https://github.com/MirrorNG/MirrorNG/commit/d0b0bc92bc33ff34491102a2f9e1855f2a5ed476))
* weaver syncLists now checks for SerializeItem in base class ([#1768](https://github.com/MirrorNG/MirrorNG/issues/1768)) ([1af5b4e](https://github.com/MirrorNG/MirrorNG/commit/1af5b4ed2f81b4450881fb11fa9b4b7e198274cb))
* webgl build fix [#1136](https://github.com/MirrorNG/MirrorNG/issues/1136) ([#1137](https://github.com/MirrorNG/MirrorNG/issues/1137)) ([c85d0df](https://github.com/MirrorNG/MirrorNG/commit/c85d0df5332c63c0e0107e6c99cea5de37c087fc))
* Websockets Transport now handles being disabled for scene changes ([#1994](https://github.com/MirrorNG/MirrorNG/issues/1994)) ([5480a58](https://github.com/MirrorNG/MirrorNG/commit/5480a583e13b9183a3670450af639f4e766cc358))
* WebSockets: Force KeepAliveInterval to Zero ([9a42fe3](https://github.com/MirrorNG/MirrorNG/commit/9a42fe334251852ab12e721db72cb12e98de82e8))
* when modifying a prefab, Unity calls OnValidate for all scene objects based on that prefab, which caused Mirror to reset the sceneId because we only checked if a prefab is currently edited, not if THIS prefab is currently edited ([db99dd7](https://github.com/MirrorNG/MirrorNG/commit/db99dd7b3d4c93969c02c5fa7b3e3a1a2948cd7e))
* Wrong method names in ClientSceneTests ([ab3f353](https://github.com/MirrorNG/MirrorNG/commit/ab3f353b33b3068a6ac1649613a28b0977a72685)…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant