2
0
Эх сурвалжийг харах

Adds a test level for various RPCs in client-server mode (#204)

Olex Lozitskiy 2 жил өмнө
parent
commit
b4ceaaa89a

+ 32 - 0
Gem/Code/Source/AutoGen/RpcTesterComponent.AutoComponent.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+
+<Component
+    Name="RpcTesterComponent"
+    Namespace="MultiplayerSample"
+    OverrideComponent="true"
+    OverrideController="true"
+    OverrideInclude="Source/Components/RpcTesterComponent.h"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<Include File="Atom/RPI.Reflect/Material/MaterialAsset.h"/>
+	<Include File="AzCore/Asset/AssetSerializer.h"/>
+	<ArchetypeProperty Type="AZ::Data::Asset&lt;AZ::RPI::MaterialAsset&gt;" Name="TestPassedMaterial"
+	                   ExposeToEditor="true" Description="Material to apply when a test passes" />
+	<ArchetypeProperty Type="AZ::Data::Asset&lt;AZ::RPI::MaterialAsset&gt;" Name="TestWaitingMaterial"
+	                   ExposeToEditor="true" Description="Material to apply when a test is in progress" />
+
+	<ArchetypeProperty Type="bool" Name="TestAutoToAuthorityRPC" Init="false"
+	                   ExposeToEditor="true" Description="If true, tests autonomous to authority RPC" />
+	<ArchetypeProperty Type="bool" Name="TestAuthorityToAutoRPC" Init="false"
+	                   ExposeToEditor="true" Description="If true, tests authority to autonomous RPC" />
+	<ArchetypeProperty Type="bool" Name="TestAuthorityToClientRPC" Init="false"
+	                   ExposeToEditor="true" Description="If true, tests authority to client RPC" />
+	<ArchetypeProperty Type="bool" Name="TestServerToAuthorityRPC" Init="false"
+	                   ExposeToEditor="true" Description="If true, tests server to authority RPC" />
+
+	<RemoteProcedure Name="RPC_TestPassed" InvokeFrom="Authority" HandleOn="Client" IsPublic="true" IsReliable="true" GenerateEventBindings="false" Description="Test passed" />
+
+    <RemoteProcedure Name="RPC_AutonomousToAuthority" InvokeFrom="Autonomous" HandleOn="Authority" IsPublic="true" IsReliable="true" GenerateEventBindings="false" Description="Auto to auth test" />
+	<RemoteProcedure Name="RPC_AuthorityToAutonomous" InvokeFrom="Authority" HandleOn="Autonomous" IsPublic="true" IsReliable="true" GenerateEventBindings="false" Description="Auth to auto test" />
+	<RemoteProcedure Name="RPC_ServerToAuthority" InvokeFrom="Server" HandleOn="Authority" IsPublic="true" IsReliable="true" GenerateEventBindings="false" Description="Server to auth test" />
+</Component>

+ 122 - 0
Gem/Code/Source/Components/RpcTesterComponent.cpp

@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution.
+ *
+ * SPDX-License-Identifier: Apache-2.0 OR MIT
+ *
+ */
+
+#include <AtomLyIntegration/CommonFeatures/Material/MaterialComponentBus.h>
+#include <DebugDraw/DebugDrawBus.h>
+#include <Source/Components/RpcTesterComponent.h>
+
+namespace MultiplayerSample
+{
+    void RpcTesterComponent::Reflect(AZ::ReflectContext* context)
+    {
+        AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
+        if (serializeContext)
+        {
+            serializeContext->Class<RpcTesterComponent, RpcTesterComponentBase>()
+                ->Version(1);
+        }
+        RpcTesterComponentBase::Reflect(context);
+    }
+
+    void RpcTesterComponent::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
+    {
+        AZStd::string testType;
+        if (GetTestAutoToAuthorityRPC())
+        {
+            testType = "Auto->Auth";
+        }
+        else if (GetTestServerToAuthorityRPC())
+        {
+            testType = "Server->Auth";
+        }
+        else if (GetTestAuthorityToAutoRPC())
+        {
+            testType = "Auth->Auto";
+        }
+        else if (GetTestAuthorityToClientRPC())
+        {
+            testType = "Auth->Client";
+        }
+
+        DebugDraw::DebugDrawRequestBus::Broadcast(&DebugDraw::DebugDrawRequestBus::Events::DrawTextOnEntity,
+            GetEntityId(), testType, AZ::Colors::White, -1.f);
+
+        if (AZ::Render::MaterialComponentRequests* material =
+            AZ::Render::MaterialComponentRequestBus::FindFirstHandler(GetEntityId()))
+        {
+            material->SetMaterialAssetIdOnDefaultSlot(GetTestWaitingMaterial().GetId());
+        }
+    }
+
+    void RpcTesterComponent::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
+    {
+        m_delayTestRun.RemoveFromQueue();
+    }
+
+    void RpcTesterComponent::HandleRPC_TestPassed([[maybe_unused]] AzNetworking::IConnection* invokingConnection)
+    {
+        if (AZ::Render::MaterialComponentRequests* material =
+            AZ::Render::MaterialComponentRequestBus::FindFirstHandler(GetEntityId()))
+        {
+            material->SetMaterialAssetIdOnDefaultSlot(GetTestPassedMaterial().GetId());
+        }
+    }
+
+    void RpcTesterComponent::RunTests()
+    {
+        if (GetController())
+        {
+            auto controller = static_cast<RpcTesterComponentController*>(GetController());
+            if (GetTestAutoToAuthorityRPC())
+            {
+                controller->RPC_AutonomousToAuthority();
+            }
+            else if (GetTestServerToAuthorityRPC())
+            {
+                RPC_ServerToAuthority();
+            }
+            else if (GetTestAuthorityToAutoRPC())
+            {
+                controller->RPC_AuthorityToAutonomous();
+            }
+            else if (GetTestAuthorityToClientRPC())
+            {
+                controller->RPC_TestPassed();
+            }
+        }
+    }
+
+
+    RpcTesterComponentController::RpcTesterComponentController(RpcTesterComponent& parent)
+        : RpcTesterComponentControllerBase(parent)
+    {
+    }
+
+    void RpcTesterComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
+    {
+        GetParent().m_delayTestRun.Enqueue(AZ::TimeMs{ 2000 }, false);
+    }
+
+    void RpcTesterComponentController::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
+    {
+    }
+
+    void RpcTesterComponentController::HandleRPC_AutonomousToAuthority([[maybe_unused]] AzNetworking::IConnection* invokingConnection)
+    {
+        RPC_TestPassed();
+    }
+
+    void RpcTesterComponentController::HandleRPC_AuthorityToAutonomous([[maybe_unused]] AzNetworking::IConnection* invokingConnection)
+    {
+        RPC_TestPassed();
+    }
+
+    void RpcTesterComponentController::HandleRPC_ServerToAuthority([[maybe_unused]] AzNetworking::IConnection* invokingConnection)
+    {
+        RPC_TestPassed();
+    }
+}

+ 56 - 0
Gem/Code/Source/Components/RpcTesterComponent.h

@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution.
+ *
+ * SPDX-License-Identifier: Apache-2.0 OR MIT
+ *
+ */
+
+#pragma once
+
+#include <Source/AutoGen/RpcTesterComponent.AutoComponent.h>
+
+namespace MultiplayerSample
+{
+    class RpcTesterComponent
+        : public RpcTesterComponentBase
+    {
+        friend class RpcTesterComponentController;
+    public:
+        AZ_MULTIPLAYER_COMPONENT(MultiplayerSample::RpcTesterComponent, s_rpcTesterComponentConcreteUuid, MultiplayerSample::RpcTesterComponentBase);
+
+        static void Reflect(AZ::ReflectContext* context);
+        
+        static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
+        {
+            required.push_back(AZ_CRC_CE("MaterialProviderService"));
+            RpcTesterComponentBase::GetRequiredServices(required);
+        }
+
+        void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
+        void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
+
+        void HandleRPC_TestPassed(AzNetworking::IConnection* invokingConnection) override;
+
+    private:
+        void RunTests();
+        AZ::ScheduledEvent m_delayTestRun{ [this]()
+        {
+            RunTests();
+        }, AZ::Name("RpcTesterComponent") };
+    };
+
+
+    class RpcTesterComponentController
+        : public RpcTesterComponentControllerBase
+    {
+    public:
+        explicit RpcTesterComponentController(RpcTesterComponent& parent);
+
+        void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
+        void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
+
+        void HandleRPC_AutonomousToAuthority(AzNetworking::IConnection* invokingConnection) override;
+        void HandleRPC_AuthorityToAutonomous(AzNetworking::IConnection* invokingConnection) override;
+        void HandleRPC_ServerToAuthority(AzNetworking::IConnection* invokingConnection) override;
+    };
+}

+ 3 - 0
Gem/Code/multiplayersample_files.cmake

@@ -19,6 +19,7 @@ set(FILES
     Source/AutoGen/NetworkTestSpawnerComponent.AutoComponent.xml
     Source/AutoGen/NetworkRandomImpulseComponent.AutoComponent.xml
     Source/AutoGen/NetworkRandomTranslateComponent.AutoComponent.xml
+    Source/AutoGen/RpcTesterComponent.AutoComponent.xml
     Source/Components/ExampleFilteredEntityComponent.h
     Source/Components/ExampleFilteredEntityComponent.cpp
     Source/Components/NetworkAiComponent.cpp
@@ -47,6 +48,8 @@ set(FILES
     Source/Components/NetworkStressTestComponent.h
     Source/Components/NetworkPlayerMovementComponent.cpp
     Source/Components/NetworkPlayerMovementComponent.h
+    Source/Components/RpcTesterComponent.cpp
+    Source/Components/RpcTesterComponent.h
     Source/Spawners/IPlayerSpawner.h
     Source/Spawners/RoundRobinSpawner.h
     Source/Spawners/RoundRobinSpawner.cpp

+ 739 - 0
Levels/ClientServerTest/ClientServerTest.prefab

@@ -0,0 +1,739 @@
+{
+    "ContainerEntity": {
+        "Id": "Entity_[1146574390643]",
+        "Name": "Level",
+        "Components": {
+            "Component_[10641544592923449938]": {
+                "$type": "EditorInspectorComponent",
+                "Id": 10641544592923449938
+            },
+            "Component_[12039882709170782873]": {
+                "$type": "EditorOnlyEntityComponent",
+                "Id": 12039882709170782873
+            },
+            "Component_[12265484671603697631]": {
+                "$type": "EditorPendingCompositionComponent",
+                "Id": 12265484671603697631
+            },
+            "Component_[12821485498403439344]": {
+                "$type": "LocalViewBookmarkComponent",
+                "Id": 12821485498403439344,
+                "LocalBookmarkFileName": "ClientServerTest_16648469292621809.setreg"
+            },
+            "Component_[14126657869720434043]": {
+                "$type": "EditorEntitySortComponent",
+                "Id": 14126657869720434043,
+                "Child Entity Order": [
+                    "Entity_[1176639161715]",
+                    "Entity_[408005295678]",
+                    "Entity_[1062387444588]",
+                    "Entity_[1066682411884]"
+                ]
+            },
+            "Component_[15230859088967841193]": {
+                "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                "Id": 15230859088967841193,
+                "Parent Entity": ""
+            },
+            "Component_[16239496886950819870]": {
+                "$type": "EditorDisabledCompositionComponent",
+                "Id": 16239496886950819870
+            },
+            "Component_[5688118765544765547]": {
+                "$type": "EditorEntityIconComponent",
+                "Id": 5688118765544765547
+            },
+            "Component_[7247035804068349658]": {
+                "$type": "EditorPrefabComponent",
+                "Id": 7247035804068349658
+            },
+            "Component_[9307224322037797205]": {
+                "$type": "EditorLockComponent",
+                "Id": 9307224322037797205
+            },
+            "Component_[9562516168917670048]": {
+                "$type": "EditorVisibilityComponent",
+                "Id": 9562516168917670048
+            }
+        }
+    },
+    "Entities": {
+        "Entity_[1060667833315]": {
+            "Id": "Entity_[1060667833315]",
+            "Name": "Camera",
+            "Components": {
+                "Component_[10859579604526705786]": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 10859579604526705786
+                },
+                "Component_[11453352996882157057]": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 11453352996882157057,
+                    "Parent Entity": "Entity_[1176639161715]",
+                    "Transform Data": {
+                        "Translate": [
+                            -0.7577851414680481,
+                            -9.006224632263184,
+                            7.407751083374023
+                        ],
+                        "Rotate": [
+                            -32.39400863647461,
+                            1.1433048248291016,
+                            -1.8012633323669434
+                        ]
+                    }
+                },
+                "Component_[11778480978837545581]": {
+                    "$type": "EditorLockComponent",
+                    "Id": 11778480978837545581
+                },
+                "Component_[14268229467784549712]": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 14268229467784549712
+                },
+                "Component_[16076920647383123163]": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 16076920647383123163
+                },
+                "Component_[172310603894503119]": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 172310603894503119
+                },
+                "Component_[2006077727564996405]": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 2006077727564996405
+                },
+                "Component_[2027758624139010345]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 2027758624139010345,
+                    "m_template": {
+                        "$type": "FlyCameraInputComponent"
+                    }
+                },
+                "Component_[5698841164045565830]": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 5698841164045565830
+                },
+                "Component_[7458460873006565841]": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 7458460873006565841
+                },
+                "Component_[9931934047902438172]": {
+                    "$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent",
+                    "Id": 9931934047902438172,
+                    "Controller": {
+                        "Configuration": {
+                            "Field of View": 60.000003814697266,
+                            "EditorEntityId": 14741217122036346754
+                        }
+                    }
+                }
+            }
+        },
+        "Entity_[1062387444588]": {
+            "Id": "Entity_[1062387444588]",
+            "Name": "Server To Authority RPC Test",
+            "Components": {
+                "Component_[10744387397337594556]": {
+                    "$type": "EditorMaterialComponent",
+                    "Id": 10744387397337594556
+                },
+                "Component_[10789351944715265527]": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 10789351944715265527
+                },
+                "Component_[12037033284781049225]": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 12037033284781049225
+                },
+                "Component_[12232237882705428432]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 12232237882705428432,
+                    "m_template": {
+                        "$type": "NetBindComponent"
+                    }
+                },
+                "Component_[1321979768562566798]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 1321979768562566798,
+                    "m_template": {
+                        "$type": "MultiplayerSample::RpcTesterComponent",
+                        "TestPassedMaterial": {
+                            "assetId": {
+                                "guid": "{F4DF12BC-C818-550C-AA95-F4BE4A457772}"
+                            },
+                            "assetHint": "materials/presets/macbeth/14_green_tex.azmaterial"
+                        },
+                        "TestWaitingMaterial": {
+                            "assetId": {
+                                "guid": "{82FD41F3-1BD4-5A4F-8EA2-DDEFC1B0F2CD}"
+                            },
+                            "assetHint": "materials/presets/macbeth/16_yellow_tex.azmaterial"
+                        },
+                        "TestServerToAuthorityRPC": true
+                    }
+                },
+                "Component_[13759153306105970079]": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 13759153306105970079
+                },
+                "Component_[14135560884830586279]": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 14135560884830586279,
+                    "ComponentOrderEntryArray": [
+                        {
+                            "ComponentId": 6472623349872972660
+                        },
+                        {
+                            "ComponentId": 12232237882705428432,
+                            "SortIndex": 1
+                        },
+                        {
+                            "ComponentId": 1321979768562566798,
+                            "SortIndex": 2
+                        },
+                        {
+                            "ComponentId": 1607425715691849949,
+                            "SortIndex": 3
+                        },
+                        {
+                            "ComponentId": 6495255223970673916,
+                            "SortIndex": 4
+                        }
+                    ]
+                },
+                "Component_[1607425715691849949]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 1607425715691849949,
+                    "m_template": {
+                        "$type": "Multiplayer::NetworkTransformComponent"
+                    }
+                },
+                "Component_[16247165675903986673]": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 16247165675903986673
+                },
+                "Component_[18082433625958885247]": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 18082433625958885247
+                },
+                "Component_[5027898274940599262]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 5027898274940599262,
+                    "m_template": {
+                        "$type": "Multiplayer::NetworkHierarchyChildComponent"
+                    }
+                },
+                "Component_[6472623349872972660]": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 6472623349872972660,
+                    "Parent Entity": "Entity_[1146574390643]",
+                    "Transform Data": {
+                        "Translate": [
+                            3.4594666957855225,
+                            -3.002549648284912,
+                            0.29508617520332336
+                        ],
+                        "Rotate": [
+                            0.0,
+                            0.10000000149011612,
+                            180.0
+                        ]
+                    }
+                },
+                "Component_[6495255223970673916]": {
+                    "$type": "AZ::Render::EditorMeshComponent",
+                    "Id": 6495255223970673916,
+                    "Controller": {
+                        "Configuration": {
+                            "ModelAsset": {
+                                "assetId": {
+                                    "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+                                    "subId": 281415304
+                                },
+                                "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+                            }
+                        }
+                    }
+                },
+                "Component_[8550141614185782969]": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 8550141614185782969
+                },
+                "Component_[9439770997198325425]": {
+                    "$type": "EditorLockComponent",
+                    "Id": 9439770997198325425
+                }
+            }
+        },
+        "Entity_[1066682411884]": {
+            "Id": "Entity_[1066682411884]",
+            "Name": "Authority to Client RPC Test",
+            "Components": {
+                "Component_[10744387397337594556]": {
+                    "$type": "EditorMaterialComponent",
+                    "Id": 10744387397337594556
+                },
+                "Component_[10789351944715265527]": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 10789351944715265527
+                },
+                "Component_[12037033284781049225]": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 12037033284781049225
+                },
+                "Component_[12232237882705428432]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 12232237882705428432,
+                    "m_template": {
+                        "$type": "NetBindComponent"
+                    }
+                },
+                "Component_[1321979768562566798]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 1321979768562566798,
+                    "m_template": {
+                        "$type": "MultiplayerSample::RpcTesterComponent",
+                        "TestPassedMaterial": {
+                            "assetId": {
+                                "guid": "{F4DF12BC-C818-550C-AA95-F4BE4A457772}"
+                            },
+                            "assetHint": "materials/presets/macbeth/14_green_tex.azmaterial"
+                        },
+                        "TestWaitingMaterial": {
+                            "assetId": {
+                                "guid": "{82FD41F3-1BD4-5A4F-8EA2-DDEFC1B0F2CD}"
+                            },
+                            "assetHint": "materials/presets/macbeth/16_yellow_tex.azmaterial"
+                        },
+                        "TestAuthorityToClientRPC": true
+                    }
+                },
+                "Component_[13759153306105970079]": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 13759153306105970079
+                },
+                "Component_[14135560884830586279]": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 14135560884830586279,
+                    "ComponentOrderEntryArray": [
+                        {
+                            "ComponentId": 6472623349872972660
+                        },
+                        {
+                            "ComponentId": 12232237882705428432,
+                            "SortIndex": 1
+                        },
+                        {
+                            "ComponentId": 1321979768562566798,
+                            "SortIndex": 2
+                        },
+                        {
+                            "ComponentId": 1607425715691849949,
+                            "SortIndex": 3
+                        },
+                        {
+                            "ComponentId": 6495255223970673916,
+                            "SortIndex": 4
+                        }
+                    ]
+                },
+                "Component_[1607425715691849949]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 1607425715691849949,
+                    "m_template": {
+                        "$type": "Multiplayer::NetworkTransformComponent"
+                    }
+                },
+                "Component_[16247165675903986673]": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 16247165675903986673
+                },
+                "Component_[18082433625958885247]": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 18082433625958885247
+                },
+                "Component_[5027898274940599262]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 5027898274940599262,
+                    "m_template": {
+                        "$type": "Multiplayer::NetworkHierarchyChildComponent"
+                    }
+                },
+                "Component_[6472623349872972660]": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 6472623349872972660,
+                    "Parent Entity": "Entity_[1146574390643]",
+                    "Transform Data": {
+                        "Translate": [
+                            6.706750869750977,
+                            -3.0100460052490234,
+                            0.28941860795021057
+                        ],
+                        "Rotate": [
+                            0.0,
+                            0.10000000149011612,
+                            180.0
+                        ]
+                    }
+                },
+                "Component_[6495255223970673916]": {
+                    "$type": "AZ::Render::EditorMeshComponent",
+                    "Id": 6495255223970673916,
+                    "Controller": {
+                        "Configuration": {
+                            "ModelAsset": {
+                                "assetId": {
+                                    "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+                                    "subId": 281415304
+                                },
+                                "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+                            }
+                        }
+                    }
+                },
+                "Component_[8550141614185782969]": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 8550141614185782969
+                },
+                "Component_[9439770997198325425]": {
+                    "$type": "EditorLockComponent",
+                    "Id": 9439770997198325425
+                }
+            }
+        },
+        "Entity_[1155164325235]": {
+            "Id": "Entity_[1155164325235]",
+            "Name": "Sun",
+            "Components": {
+                "Component_[13620450453324765907]": {
+                    "$type": "EditorLockComponent",
+                    "Id": 13620450453324765907
+                },
+                "Component_[2134313378593666258]": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 2134313378593666258
+                },
+                "Component_[234010807770404186]": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 234010807770404186
+                },
+                "Component_[2970359110423865725]": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 2970359110423865725
+                },
+                "Component_[3722854130373041803]": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 3722854130373041803
+                },
+                "Component_[5992533738676323195]": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 5992533738676323195
+                },
+                "Component_[7378860763541895402]": {
+                    "$type": "AZ::Render::EditorDirectionalLightComponent",
+                    "Id": 7378860763541895402,
+                    "Controller": {
+                        "Configuration": {
+                            "Intensity": 1.0,
+                            "CameraEntityId": "",
+                            "ShadowFilterMethod": 1
+                        }
+                    }
+                },
+                "Component_[7892834440890947578]": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 7892834440890947578,
+                    "Parent Entity": "Entity_[1176639161715]",
+                    "Transform Data": {
+                        "Translate": [
+                            0.0,
+                            0.0,
+                            13.487043380737305
+                        ],
+                        "Rotate": [
+                            -76.13099670410156,
+                            -0.847000002861023,
+                            -15.8100004196167
+                        ]
+                    }
+                },
+                "Component_[8599729549570828259]": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 8599729549570828259
+                },
+                "Component_[952797371922080273]": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 952797371922080273
+                }
+            }
+        },
+        "Entity_[1159459292531]": {
+            "Id": "Entity_[1159459292531]",
+            "Name": "Ground",
+            "Components": {
+                "Component_[12260880513256986252]": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 12260880513256986252
+                },
+                "Component_[13711420870643673468]": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 13711420870643673468
+                },
+                "Component_[138002849734991713]": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 138002849734991713
+                },
+                "Component_[16578565737331764849]": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 16578565737331764849,
+                    "Parent Entity": "Entity_[1176639161715]"
+                },
+                "Component_[16919232076966545697]": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 16919232076966545697
+                },
+                "Component_[5182430712893438093]": {
+                    "$type": "EditorMaterialComponent",
+                    "Id": 5182430712893438093
+                },
+                "Component_[5675108321710651991]": {
+                    "$type": "AZ::Render::EditorMeshComponent",
+                    "Id": 5675108321710651991,
+                    "Controller": {
+                        "Configuration": {
+                            "ModelAsset": {
+                                "assetId": {
+                                    "guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
+                                    "subId": 277889906
+                                },
+                                "assetHint": "objects/groudplane/groundplane_512x512m.azmodel"
+                            }
+                        }
+                    }
+                },
+                "Component_[5681893399601237518]": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 5681893399601237518
+                },
+                "Component_[592692962543397545]": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 592692962543397545
+                },
+                "Component_[7090012899106946164]": {
+                    "$type": "EditorLockComponent",
+                    "Id": 7090012899106946164
+                },
+                "Component_[9410832619875640998]": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 9410832619875640998
+                }
+            }
+        },
+        "Entity_[1176639161715]": {
+            "Id": "Entity_[1176639161715]",
+            "Name": "Atom Default Environment",
+            "Components": {
+                "Component_[10757302973393310045]": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 10757302973393310045,
+                    "Parent Entity": "Entity_[1146574390643]"
+                },
+                "Component_[14505817420424255464]": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 14505817420424255464,
+                    "ComponentOrderEntryArray": [
+                        {
+                            "ComponentId": 10757302973393310045
+                        }
+                    ]
+                },
+                "Component_[14988041764659020032]": {
+                    "$type": "EditorLockComponent",
+                    "Id": 14988041764659020032
+                },
+                "Component_[15900837685796817138]": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 15900837685796817138
+                },
+                "Component_[3298767348226484884]": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 3298767348226484884
+                },
+                "Component_[4076975109609220594]": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 4076975109609220594
+                },
+                "Component_[5679760548946028854]": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 5679760548946028854
+                },
+                "Component_[5855590796136709437]": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 5855590796136709437,
+                    "Child Entity Order": [
+                        "Entity_[1155164325235]",
+                        "Entity_[1180934129011]",
+                        "Entity_[1159459292531]",
+                        "Entity_[1060667833315]"
+                    ]
+                },
+                "Component_[9277695270015777859]": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 9277695270015777859
+                }
+            }
+        },
+        "Entity_[1180934129011]": {
+            "Id": "Entity_[1180934129011]",
+            "Name": "Global Sky",
+            "Components": {
+                "Component_[11231930600558681245]": {
+                    "$type": "AZ::Render::EditorHDRiSkyboxComponent",
+                    "Id": 11231930600558681245,
+                    "Controller": {
+                        "Configuration": {
+                            "CubemapAsset": {
+                                "assetId": {
+                                    "guid": "{215E47FD-D181-5832-B1AB-91673ABF6399}",
+                                    "subId": 1000
+                                },
+                                "assetHint": "lightingpresets/highcontrast/goegap_4k_skyboxcm.exr.streamingimage"
+                            }
+                        }
+                    }
+                },
+                "Component_[1428633914413949476]": {
+                    "$type": "EditorLockComponent",
+                    "Id": 1428633914413949476
+                },
+                "Component_[14936200426671614999]": {
+                    "$type": "AZ::Render::EditorImageBasedLightComponent",
+                    "Id": 14936200426671614999,
+                    "Controller": {
+                        "Configuration": {
+                            "diffuseImageAsset": {
+                                "assetId": {
+                                    "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+                                    "subId": 3000
+                                },
+                                "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_ibldiffuse.exr.streamingimage"
+                            },
+                            "specularImageAsset": {
+                                "assetId": {
+                                    "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+                                    "subId": 2000
+                                },
+                                "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_iblspecular.exr.streamingimage"
+                            }
+                        }
+                    }
+                },
+                "Component_[14994774102579326069]": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 14994774102579326069
+                },
+                "Component_[15417479889044493340]": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 15417479889044493340
+                },
+                "Component_[15826613364991382688]": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 15826613364991382688
+                },
+                "Component_[1665003113283562343]": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 1665003113283562343
+                },
+                "Component_[3704934735944502280]": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 3704934735944502280
+                },
+                "Component_[5698542331457326479]": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 5698542331457326479
+                },
+                "Component_[6644513399057217122]": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 6644513399057217122,
+                    "Parent Entity": "Entity_[1176639161715]"
+                },
+                "Component_[931091830724002070]": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 931091830724002070
+                }
+            }
+        },
+        "Entity_[408005295678]": {
+            "Id": "Entity_[408005295678]",
+            "Name": "Test Player Spawner",
+            "Components": {
+                "Component_[10262238844204620657]": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 10262238844204620657
+                },
+                "Component_[11974755574996131688]": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 11974755574996131688
+                },
+                "Component_[12419892715937384123]": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 12419892715937384123
+                },
+                "Component_[16142332006265718962]": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 16142332006265718962,
+                    "Parent Entity": "Entity_[1146574390643]",
+                    "Transform Data": {
+                        "Translate": [
+                            1.7229790687561035,
+                            1.2017154693603516,
+                            0.9387168884277344
+                        ]
+                    }
+                },
+                "Component_[2573667475129030481]": {
+                    "$type": "EditorLockComponent",
+                    "Id": 2573667475129030481
+                },
+                "Component_[287735088776915350]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 287735088776915350,
+                    "m_template": {
+                        "$type": "NetworkPlayerSpawnerComponent",
+                        "SpawnableAsset": {
+                            "assetId": {
+                                "guid": "{77D6202F-A96B-565F-9FA1-F8855B24930A}",
+                                "subId": 2976800808
+                            },
+                            "assetHint": "prefabs/test_player_with_tests.network.spawnable"
+                        }
+                    }
+                },
+                "Component_[3570910616290236488]": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 3570910616290236488
+                },
+                "Component_[4187805579088269744]": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 4187805579088269744
+                },
+                "Component_[4441669878931506875]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 4441669878931506875,
+                    "m_template": {
+                        "$type": "NetBindComponent"
+                    }
+                },
+                "Component_[4601104312603409121]": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 4601104312603409121
+                },
+                "Component_[5397173534047990285]": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 5397173534047990285
+                }
+            }
+        }
+    }
+}

+ 1 - 1
Levels/SampleBase/SampleBase.prefab

@@ -1766,7 +1766,7 @@
                     "Id": 7092071161962745685,
                     "Controller": {
                         "Configuration": {
-                            "EditorEntityId": 9888856721517959420
+                            "EditorEntityId": 6083481197924942768
                         }
                     }
                 },

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 209 - 488
Prefabs/4x4x4BoxGrid.prefab


+ 327 - 0
Prefabs/Test_Player_With_Tests.prefab

@@ -0,0 +1,327 @@
+{
+    "ContainerEntity": {
+        "Id": "ContainerEntity",
+        "Name": "Test_Player_With_Tests",
+        "Components": {
+            "Component_[12188975750614178281]": {
+                "$type": "EditorPrefabComponent",
+                "Id": 12188975750614178281
+            },
+            "Component_[13414286119274750353]": {
+                "$type": "EditorEntityIconComponent",
+                "Id": 13414286119274750353
+            },
+            "Component_[16283217686706281026]": {
+                "$type": "EditorDisabledCompositionComponent",
+                "Id": 16283217686706281026
+            },
+            "Component_[16805572936300398907]": {
+                "$type": "EditorInspectorComponent",
+                "Id": 16805572936300398907
+            },
+            "Component_[1827488309280630686]": {
+                "$type": "EditorOnlyEntityComponent",
+                "Id": 1827488309280630686,
+                "IsEditorOnly": true
+            },
+            "Component_[2444545988303771488]": {
+                "$type": "EditorLockComponent",
+                "Id": 2444545988303771488
+            },
+            "Component_[4448114726605810932]": {
+                "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                "Id": 4448114726605810932,
+                "Parent Entity": "",
+                "Transform Data": {
+                    "Translate": [
+                        -4.194057941436768,
+                        4.21962833404541,
+                        0.325775146484375
+                    ]
+                }
+            },
+            "Component_[4928987988757542409]": {
+                "$type": "EditorEntitySortComponent",
+                "Id": 4928987988757542409,
+                "Child Entity Order": [
+                    "Entity_[804032297965]"
+                ]
+            },
+            "Component_[8225389275811179083]": {
+                "$type": "EditorPendingCompositionComponent",
+                "Id": 8225389275811179083
+            },
+            "Component_[829445097981696313]": {
+                "$type": "EditorVisibilityComponent",
+                "Id": 829445097981696313
+            }
+        }
+    },
+    "Entities": {
+        "Entity_[456797055852]": {
+            "Id": "Entity_[456797055852]",
+            "Name": "Authority to Autonomous RPC Test",
+            "Components": {
+                "Component_[10744387397337594556]": {
+                    "$type": "EditorMaterialComponent",
+                    "Id": 10744387397337594556
+                },
+                "Component_[10789351944715265527]": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 10789351944715265527
+                },
+                "Component_[12037033284781049225]": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 12037033284781049225
+                },
+                "Component_[12232237882705428432]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 12232237882705428432,
+                    "m_template": {
+                        "$type": "NetBindComponent"
+                    }
+                },
+                "Component_[1321979768562566798]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 1321979768562566798,
+                    "m_template": {
+                        "$type": "MultiplayerSample::RpcTesterComponent",
+                        "TestPassedMaterial": {
+                            "assetId": {
+                                "guid": "{F4DF12BC-C818-550C-AA95-F4BE4A457772}"
+                            },
+                            "assetHint": "materials/presets/macbeth/14_green_tex.azmaterial"
+                        },
+                        "TestWaitingMaterial": {
+                            "assetId": {
+                                "guid": "{82FD41F3-1BD4-5A4F-8EA2-DDEFC1B0F2CD}"
+                            },
+                            "assetHint": "materials/presets/macbeth/16_yellow_tex.azmaterial"
+                        },
+                        "TestAuthorityToAutoRPC": true
+                    }
+                },
+                "Component_[13759153306105970079]": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 13759153306105970079
+                },
+                "Component_[14135560884830586279]": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 14135560884830586279,
+                    "ComponentOrderEntryArray": [
+                        {
+                            "ComponentId": 6472623349872972660
+                        },
+                        {
+                            "ComponentId": 12232237882705428432,
+                            "SortIndex": 1
+                        },
+                        {
+                            "ComponentId": 1321979768562566798,
+                            "SortIndex": 2
+                        },
+                        {
+                            "ComponentId": 1607425715691849949,
+                            "SortIndex": 3
+                        },
+                        {
+                            "ComponentId": 6495255223970673916,
+                            "SortIndex": 4
+                        }
+                    ]
+                },
+                "Component_[1607425715691849949]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 1607425715691849949,
+                    "m_template": {
+                        "$type": "Multiplayer::NetworkTransformComponent"
+                    }
+                },
+                "Component_[16247165675903986673]": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 16247165675903986673
+                },
+                "Component_[18082433625958885247]": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 18082433625958885247
+                },
+                "Component_[6472623349872972660]": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 6472623349872972660,
+                    "Parent Entity": "Entity_[804032297965]",
+                    "Transform Data": {
+                        "Translate": [
+                            -4.730445384979248,
+                            0.0,
+                            -1.4901161193847656e-7
+                        ]
+                    }
+                },
+                "Component_[6495255223970673916]": {
+                    "$type": "AZ::Render::EditorMeshComponent",
+                    "Id": 6495255223970673916,
+                    "Controller": {
+                        "Configuration": {
+                            "ModelAsset": {
+                                "assetId": {
+                                    "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+                                    "subId": 281415304
+                                },
+                                "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+                            }
+                        }
+                    }
+                },
+                "Component_[7787617315491038227]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 7787617315491038227,
+                    "m_template": {
+                        "$type": "Multiplayer::NetworkHierarchyChildComponent"
+                    }
+                },
+                "Component_[8550141614185782969]": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 8550141614185782969
+                },
+                "Component_[9439770997198325425]": {
+                    "$type": "EditorLockComponent",
+                    "Id": 9439770997198325425
+                }
+            }
+        },
+        "Entity_[804032297965]": {
+            "Id": "Entity_[804032297965]",
+            "Name": "Autonomous To Authority RPC Test",
+            "Components": {
+                "Component_[10744387397337594556]": {
+                    "$type": "EditorMaterialComponent",
+                    "Id": 10744387397337594556
+                },
+                "Component_[10789351944715265527]": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 10789351944715265527
+                },
+                "Component_[10939385882839513179]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 10939385882839513179,
+                    "m_template": {
+                        "$type": "Multiplayer::LocalPredictionPlayerInputComponent"
+                    }
+                },
+                "Component_[12037033284781049225]": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 12037033284781049225,
+                    "Child Entity Order": [
+                        "Entity_[456797055852]"
+                    ]
+                },
+                "Component_[12232237882705428432]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 12232237882705428432,
+                    "m_template": {
+                        "$type": "NetBindComponent"
+                    }
+                },
+                "Component_[1321979768562566798]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 1321979768562566798,
+                    "m_template": {
+                        "$type": "MultiplayerSample::RpcTesterComponent",
+                        "TestPassedMaterial": {
+                            "assetId": {
+                                "guid": "{F4DF12BC-C818-550C-AA95-F4BE4A457772}"
+                            },
+                            "assetHint": "materials/presets/macbeth/14_green_tex.azmaterial"
+                        },
+                        "TestWaitingMaterial": {
+                            "assetId": {
+                                "guid": "{82FD41F3-1BD4-5A4F-8EA2-DDEFC1B0F2CD}"
+                            },
+                            "assetHint": "materials/presets/macbeth/16_yellow_tex.azmaterial"
+                        },
+                        "TestAutoToAuthorityRPC": true
+                    }
+                },
+                "Component_[13759153306105970079]": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 13759153306105970079
+                },
+                "Component_[14135560884830586279]": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 14135560884830586279,
+                    "ComponentOrderEntryArray": [
+                        {
+                            "ComponentId": 6472623349872972660
+                        },
+                        {
+                            "ComponentId": 12232237882705428432,
+                            "SortIndex": 1
+                        },
+                        {
+                            "ComponentId": 1321979768562566798,
+                            "SortIndex": 2
+                        },
+                        {
+                            "ComponentId": 1607425715691849949,
+                            "SortIndex": 3
+                        },
+                        {
+                            "ComponentId": 6495255223970673916,
+                            "SortIndex": 4
+                        }
+                    ]
+                },
+                "Component_[1607425715691849949]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 1607425715691849949,
+                    "m_template": {
+                        "$type": "Multiplayer::NetworkTransformComponent"
+                    }
+                },
+                "Component_[16247165675903986673]": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 16247165675903986673
+                },
+                "Component_[18082433625958885247]": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 18082433625958885247
+                },
+                "Component_[6472623349872972660]": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 6472623349872972660,
+                    "Parent Entity": "ContainerEntity",
+                    "Transform Data": {
+                        "Rotate": [
+                            0.0,
+                            0.10000000149011612,
+                            180.0
+                        ]
+                    }
+                },
+                "Component_[6495255223970673916]": {
+                    "$type": "AZ::Render::EditorMeshComponent",
+                    "Id": 6495255223970673916,
+                    "Controller": {
+                        "Configuration": {
+                            "ModelAsset": {
+                                "assetId": {
+                                    "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+                                    "subId": 281415304
+                                },
+                                "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+                            }
+                        }
+                    }
+                },
+                "Component_[8550141614185782969]": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 8550141614185782969
+                },
+                "Component_[9439770997198325425]": {
+                    "$type": "EditorLockComponent",
+                    "Id": 9439770997198325425
+                }
+            }
+        }
+    }
+}

+ 1 - 2
default.blastconfiguration

@@ -1,6 +1,5 @@
 <ObjectStream version="3">
-	<Class name="BlastGlobalConfiguration" version="1" type="{0B9DB6DD-0008-4EF6-9D75-141061144353}">
-		<Class name="Asset" field="BlastMaterialLibrary" value="id={00000000-0000-0000-0000-000000000000}:0,type={55F38C86-0767-4E7F-830A-A4BF624BE4DA},hint={},loadBehavior=2" version="2" type="{77A19D40-8731-4D3C-9041-1B43047366A4}"/>
+	<Class name="BlastGlobalConfiguration" version="2" type="{0B9DB6DD-0008-4EF6-9D75-141061144353}">
 		<Class name="unsigned int" field="StressSolverIterations" value="180" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
 	</Class>
 </ObjectStream>

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно