示例#1
0
        public void Deploy()
        {
            Console.WriteLine("");
            Console.WriteLine("Deploying JSON");

            Console.WriteLine("Loading Module directory " + sModulePath + "...");
            DirectoryResourceRepository directoryResourceRepository = new DirectoryResourceRepository(sModulePath);

            ContentManager contentManager = new ContentManager(sClientPath, sServerPath);
            NWN2ResourceManager manager = new NWN2ResourceManager();

            contentManager.ServerContentItemScanning += (name, status, bBegin) =>
            {
                if (!bBegin)
                    Console.Write(" -> Staging (" + status.ToString() + ")");
                else
                    Console.Write("\nScanning: " + name);
            };

            contentManager.InitializeModule(directoryResourceRepository);
            contentManager.ResetAllResourcesToDefaultServer();
            contentManager.ResetScanResults();

            checked
            {
                manager.AddRepository(directoryResourceRepository);

                string sModuleName = Path.GetFileNameWithoutExtension(sModulePath);
                string sTlkPath = "";

                foreach (DownloadableResource d in contentManager.GetDownloadableResources())
                {
                    switch (d.Type)
                    {
                        case DownloadableResource.FileType.Hak:
                            string hakPath = sHomePath + "\\hak\\" + d.Name;
                            Console.WriteLine("Adding Hak: " + d.Name);
                            if (File.Exists(hakPath))
                                manager.AddRepository(new ERFResourceRepository(hakPath));
                            else
                                Console.WriteLine("ERROR - Hak file not found in " + hakPath);
                            break;

                        case DownloadableResource.FileType.Tlk:
                            sTlkPath = sHomePath + "\\tlk\\" + d.Name;
                            if (File.Exists(sTlkPath))
                                Console.WriteLine("Found TLK: " + d.Name);
                            else
                                Console.WriteLine("ERROR - Tlk not found in " + sTlkPath);
                            break;
                    }
                }

                KeyValuePair<String, ushort>[] resourceTypes = { new KeyValuePair<String, ushort>("creature", ResUTC),
                                                               new KeyValuePair<String, ushort>("door", ResUTD),
                                                               new KeyValuePair<String, ushort>("encounter", ResUTE),
                                                               new KeyValuePair<String, ushort>("item", ResUTI),
                                                               new KeyValuePair<String, ushort>("store", ResUTM),
                                                               new KeyValuePair<String, ushort>("placeable", ResUTP),
                                                               new KeyValuePair<String, ushort>("tree", ResUTR),
                                                               new KeyValuePair<String, ushort>("sound", ResUTS),
                                                               new KeyValuePair<String, ushort>("trigger", ResUTT),
                                                               new KeyValuePair<String, ushort>("waypoint", ResUTW),
                                                               new KeyValuePair<String, ushort>("light", ResULT),
                                                               new KeyValuePair<String, ushort>("prefab", ResPFB) };

                //ushort[] resourceTypes = { ResUTC, ResUTD, ResUTE, ResUTI, ResUTM, ResUTP, ResUTR, ResUTS, ResUTT, ResUTW, ResULT, ResPFB };

                var json = new Newtonsoft.Json.Linq.JObject();

                foreach (KeyValuePair<String, ushort> rType in resourceTypes)
                {
                    var jsonArray = new Newtonsoft.Json.Linq.JArray();

                    foreach (IResourceEntry resource in manager.FindEntriesByType(rType.Value))
                    {
                        Console.WriteLine(rType.Key + ": " + resource.FullName);

                        var gff = new OEIShared.IO.GFF.GFFFile(resource.GetStream(false));

                        if (gff != null)
                        {
                            Newtonsoft.Json.Linq.JObject jsonData = null;

                            jsonData = new Newtonsoft.Json.Linq.JObject(parseGFF(gff));
                            //Console.WriteLine(jsonData);
                            /*
                            switch (rType.Value)
                            {
                                case ResUTC:
                                    var creature = new NWN2Toolset.NWN2.Data.Blueprints.NWN2CreatureBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(creature);
                                    break;
                                case ResUTD:
                                    var door = new NWN2Toolset.NWN2.Data.Blueprints.NWN2DoorBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(door);
                                    break;
                                case ResUTE:
                                    var encounter = new NWN2Toolset.NWN2.Data.Blueprints.NWN2EncounterBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(encounter);
                                    break;
                                case ResUTI:
                                    var item = new NWN2Toolset.NWN2.Data.Blueprints.NWN2ItemBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(item);
                                    break;
                                case ResUTM:
                                    var store = new NWN2Toolset.NWN2.Data.Blueprints.NWN2StoreBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(store);
                                    break;
                                case ResUTP:
                                    var placeable = new NWN2Toolset.NWN2.Data.Blueprints.NWN2PlaceableBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(placeable);
                                    break;
                                case ResUTR:
                                    var tree = new NWN2Toolset.NWN2.Data.Blueprints.NWN2TreeBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(tree);
                                    break;
                                case ResUTS:
                                    var sound = new NWN2Toolset.NWN2.Data.Blueprints.NWN2SoundBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(sound);
                                    break;
                                case ResUTT:
                                    var trigger = new NWN2Toolset.NWN2.Data.Blueprints.NWN2TriggerBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(trigger);
                                    break;
                                case ResUTW:
                                    var waypoint = new NWN2Toolset.NWN2.Data.Blueprints.NWN2WaypointBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(waypoint);
                                    break;
                                case ResULT:
                                    var light = new NWN2Toolset.NWN2.Data.Blueprints.NWN2LightBlueprint(gff.TopLevelStruct);
                                    jsonData = new Newtonsoft.Json.Linq.JObject(light);
                                    break;
                                case ResPFB:
                                    //blueprint = new NWN2Toolset.NWN2.Data.Blueprints.NWN2BlueprintSet(gff.TopLevelStruct);
                                    break;
                                default:
                                    break;
                            }
                            */
                            if (jsonData != null) jsonArray.Add(jsonData);
                        }
                    }

                    if (jsonArray.Count > 0) json.Add(rType.Key,jsonArray);
                }

                Console.WriteLine("");
                Console.WriteLine("Staging JSON Complete.");
                Console.WriteLine("");
                Console.WriteLine(json);

                System.IO.File.WriteAllText(@".\nwn2.json", json.ToString());
            }
        }
        private bool DeployServer(bool bSkipHaks)
        {
            Console.WriteLine("");
            Console.WriteLine("Deploying Server");

            Console.WriteLine("Loading Module directory " + sModulePath + "...");
            DirectoryResourceRepository directoryResourceRepository = new DirectoryResourceRepository(sModulePath);

            ContentManager contentManager = new ContentManager(sClientPath, sServerPath);
            NWN2ResourceManager manager = new NWN2ResourceManager();

            contentManager.ServerContentItemScanning += (name, status, bBegin) => {
                if (!bBegin)
                    Console.Write(" -> Staging (" + status.ToString() + ")");
                else
                    Console.Write("\nScanning: " + name);
            };

            contentManager.InitializeModule(directoryResourceRepository);
            contentManager.ResetAllResourcesToDefaultServer();
            contentManager.ResetScanResults();

            checked
            {
                manager.AddRepository(directoryResourceRepository);

                string sModuleName = Path.GetFileNameWithoutExtension(sModulePath);
                string sCampaignName = "";
                string sTlkPath = "";

                foreach (DownloadableResource d in contentManager.GetDownloadableResources())
                {
                    switch (d.Type)
                    {
                        case DownloadableResource.FileType.Hak:
                            if (!bSkipHaks)
                            {
                                string hakPath = sHomePath + "\\hak\\" + d.Name;
                                Console.WriteLine("Adding Hak: " + d.Name);
                                if (File.Exists(hakPath))
                                    manager.AddRepository(new ERFResourceRepository(hakPath));
                                else
                                    Console.WriteLine("ERROR - Hak file not found in " + hakPath);
                            }
                            break;

                        case DownloadableResource.FileType.Tlk:
                            sTlkPath = sHomePath + "\\tlk\\" + d.Name;
                            if (File.Exists(sTlkPath))
                                Console.WriteLine("Found TLK: " + d.Name);
                            else
                                Console.WriteLine("ERROR - Tlk not found in " + sTlkPath);
                            break;
                    }
                }

                Console.WriteLine("");
                Console.WriteLine("Module Name -> " + sModuleName + "\nModule Path -> " + sModulePath + "\nTlk Path -> " + sTlkPath + "\nSkip Haks -> " + bSkipHaks.ToString());

                Console.WriteLine("");
                Console.WriteLine("Staging Server Content...");

                contentManager.StageServerRequiredResources(manager, sCampaignName, sModuleName, sModulePath, sTlkPath, bSkipHaks);
                contentManager.SaveModuleList(directoryResourceRepository, true);

                Console.WriteLine("");
                Console.WriteLine("Staging Server Complete.");
            }
            return true;
        }