示例#1
0
        public bool Apply <TKey, TValue>(Dictionary <TKey, TValue> target, IEnumerable <ManagedPatch> patches, string targetName)
        {
            if (patches.Count() < 1)
            {
                return(false);
            }

            string contentPackName;

            foreach (var patch in patches)
            {
                contentPackName = patch.Owner.Pack.Manifest.Name;

                if (patch.Change.Action == "Replace")
                {
                    if (target.Count > 0)
                    {
                        this.Monitor.Log(
                            $"Content pack `{contentPackName}` patch `{patch.Change.LogName}` replaces all contents for `{targetName}`.",
                            this.paranoid ? LogLevel.Alert : LogLevel.Trace);
                    }
                    target.Clear(); // Load replaces all content
                }

                var isLocalized = !string.IsNullOrEmpty(patch.Change.Locale);
                var patchData   = patch.LoadData <TKey, TValue>();

                AssetPatchHelper.ApplyPatch(target, patchData);
                this.Monitor.Log($"Content pack `{contentPackName}` applied{(isLocalized ? $" `{patch.Change.Locale}` translation" : "")} patch `{patch.Change.LogName}` ({patch.Change.Action} type) for `{targetName}`");
            }

            return(true);
        }
        public bool Apply <TKey, TValue>(Dictionary <TKey, TValue> target, string path)
        {
            var patches         = new List <ManagedPatch>();
            var contentPackName = this.Managed.Pack.Manifest.Name;

            patches.AddRange(this.GetPatchesForAsset(path, "Replace"));
            patches.AddRange(this.GetPatchesForAsset(path, "Patch"));
            patches.AddRange(this.GetTranslationPatches(path, this.Managed.Pack.Translation.Locale?.ToLower()));

            if (patches.Count() < 1)
            {
                return(false);
            }

            foreach (var patch in patches)
            {
                if (patch.Change.Action == "Replace")
                {
                    if (target.Count > 0)
                    {
                        this.Monitor.Log(
                            $"Content pack `{contentPackName}` patch `{patch.Change.LogName}` replaces all contents for `{path}`.",
                            this.paranoid ? LogLevel.Alert : LogLevel.Trace);
                    }
                    target.Clear(); // Load replaces all content
                }

                var isLocalized = !string.IsNullOrEmpty(patch.Change.Locale);
                var patchData   = patch.LoadData <TKey, TValue>();

                AssetPatchHelper.ApplyPatch(target, patchData);
                this.Monitor.Log($"Content pack `{contentPackName}` applied{(isLocalized ? $" `{patch.Change.Locale}` translation" : "")} patch `{patch.Change.LogName}` for `{path}`");
            }

            return(true);
        }