Пример #1
0
 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 { }
     }
 }
Пример #2
0
        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;
            }
        }
Пример #3
0
 public WalkerScript(NwWorldData data)
 {
     nwWorldData = data;
 }