public WorldResources(NwWorldData data) { foreach (var w in data.Worlds) { var world = AssetConverter.FromNwWorld(w); Worlds.Add(w.Hash, world); } foreach (var ch in data.Characters) { var c = AssetConverter.FromNwCharacter(ch); Characters.Add(ch.Hash, c); } foreach (var obj in data.Objects) { var o = AssetConverter.FromNwObject(obj); Objects.Add(obj.Hash, o); } foreach (var o in data.Objects) { if (o.Scripts == null) { continue; } foreach (var s in o.Scripts) { try { var asm = Assembly.Load(s.Assembly); GameObjectScripts.Add(s.Hash, asm); } catch { } } } foreach (var scr in data.GameObjectScripts) { try { var asm = Assembly.Load(scr.Assembly); GameObjectScripts.Add(scr.Hash, asm); } catch { } } }
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; } }
public WalkerScript(NwWorldData data) { nwWorldData = data; }