private void Load_LoadCompleted(object sender, object e) { MMW.DestroyGameObjects(g => g.Name == "Background" || g.Name == "Title"); var load = MMW.FindGameComponent <LoadingScript>(); load.LoadCompleted -= Load_LoadCompleted; }
public override void OnTcpReceived(int dataType, byte[] dt) { if (dataType != DataType.LoginResult) { return; } var res = -1; Buffer.Read(dt, br => { res = br.ReadInt32(); if (res >= 0) { Server.SessionID = res; } }); if (res >= 0) { var ls = MMW.FindGameComponent <LoadingScript>(); ls.StartLoading((mes) => { MMW.DestroyGameObjects(o => o.Tags.Contains("title")); mes.mes = "Download Data..."; var desc = Server.RequestJson <NwWorldDataDesc>(Walker.DataType.RequestDataDesc, null, Walker.DataType.ResponseDataDesc, 8000); if (desc == null) { return(null); } var data = new NwWorldData(); data.Worlds = new NwWorld[desc.Worlds.Length]; for (var i = 0; i < desc.Worlds.Length; i++) { mes.mes = $"Download World...({i + 1}/{desc.Worlds.Length})"; var world = Server.RequestCompJson <NwWorld>(Walker.DataType.RequestWorld, new NwRequest(desc.Worlds[i].Hash), Walker.DataType.ResponseWorld, 10 * 60 * 1000); if (world == null) { return(null); } world.Hash = desc.Worlds[i].Hash; data.Worlds[i] = world; } data.Characters = new NwCharacter[desc.Characters.Length]; for (var i = 0; i < desc.Characters.Length; i++) { mes.mes = $"Download Character...({i + 1}/{desc.Characters.Length})"; var ch = Server.RequestCompJson <NwCharacter>(Walker.DataType.RequestCharacter, new NwRequest(desc.Characters[i].Hash), Walker.DataType.ResponseCharacter, 3 * 60 * 1000); if (ch == null) { return(null); } ch.Hash = desc.Characters[i].Hash; data.Characters[i] = ch; } data.Objects = new NwObject[desc.Objects.Length]; for (var i = 0; i < desc.Objects.Length; i++) { mes.mes = $"Download Object...({i + 1}/{desc.Objects.Length})"; var obj = Server.RequestCompJson <NwObject>(Walker.DataType.RequestObject, new NwRequest(desc.Objects[i].Hash), Walker.DataType.ResponseObject, 3 * 60 * 1000); if (obj == null) { return(null); } obj.Hash = desc.Objects[i].Hash; data.Objects[i] = obj; } data.GameObjectScripts = new NwGameObjectScript[desc.GameObjectScripts.Length]; for (var i = 0; i < desc.GameObjectScripts.Length; i++) { mes.mes = $"Download Scripts...({i + 1}/{desc.GameObjectScripts.Length})"; var bytes = Server.Request(Walker.DataType.RequestGameObjectScript, new NwRequest(desc.GameObjectScripts[i].Hash), Walker.DataType.ResponseGameObjectScript, 60 * 1000); if (bytes == null) { return(null); } data.GameObjectScripts[i] = new NwGameObjectScript() { Assembly = bytes, Hash = desc.GameObjectScripts[i].Hash, }; } // ゲームオブジェクトを取得 var objects = Server.RequestJson <NwGameObjects>(Walker.DataType.RequestGameObjects, new byte[0], Walker.DataType.ResponseGameObjects, 3 * 60 * 1000); data.GameObjects = objects.GameObjects; mes.mes = "Creating a world..."; Thread.Sleep(10); return(data); }, (arg) => { if (arg == null) { } MMW.RegistAsset(Server); var go = new GameObject("Walker"); go.Tags.Add("walker"); go.Tags.Add("system"); go.AddComponent <WalkerScript>((NwWorldData)arg); MMW.RegistGameObject(go); return(true); }); } else { AcceptInput = true; labelInfo.Text = "Login Failed"; labelInfo.Brush = Brushes.Red; } }