public static void Dump() { SL.LogWarning("[Dataminer] Starting full dump!"); // setup tags for (int i = 1; i < 500; i++) { if (TagSourceManager.Instance.GetTag(i.ToString()) is Tag tag) { ListManager.AddTagSource(tag, null); } } DM_Item.ParseAllItems(); DM_StatusEffect.ParseAllEffects(); DM_Recipe.ParseAllRecipes(); DM_EnchantmentRecipe.ParseAllRecipes(); SL.LogWarning("Saving early lists..."); ListManager.SaveEarlyLists(); SL.LogWarning("Finished prefab dumping."); }
public virtual void SerializeItem(Item item, DM_Item holder) { holder.gameObjectName = item.gameObject.name; holder.ItemID = item.ItemID; holder.Name = item.Name; holder.Description = item.Description; holder.LegacyItemID = item.LegacyItemID; holder.CastLocomotionEnabled = item.CastLocomotionEnabled; holder.CastModifier = item.CastModifier; holder.CastSheatheRequired = item.CastSheathRequired; holder.GroupItemInDisplay = item.GroupItemInDisplay; holder.HasPhysicsWhenWorld = item.HasPhysicsWhenWorld; holder.IsPickable = item.IsPickable; holder.IsUsable = item.IsUsable; holder.QtyRemovedOnUse = item.QtyRemovedOnUse; holder.MobileCastMovementMult = item.MobileCastMovementMult; holder.RepairedInRest = item.RepairedInRest; holder.BehaviorOnNoDurability = item.BehaviorOnNoDurability; holder.OverrideSellModifier = (float)At.GetField(item, "m_overrideSellModifier"); if (item.GetComponent <Perishable>() is Perishable perish) { float perishRate = perish.DepletionRate * 0.03333333f; float perishModifier = 1 / perishRate; var remainingTicks = item.MaxDurability * perishModifier; // each tick is 2 in-game minutes (~5 seconds irl) var minutes = remainingTicks * 2; TimeSpan t = TimeSpan.FromMinutes(minutes); holder.PerishTime = $"{t.Days} Days, {t.Hours} Hours, {t.Minutes} Minutes, {t.Seconds} Seconds"; } holder.CastType = (Character.SpellCastType)At.GetField(item, "m_activateEffectAnimType"); if (item.GetComponent <ItemStats>() is ItemStats stats) { holder.StatsHolder = DM_ItemStats.ParseItemStats(stats); } if (item.Tags != null) { foreach (Tag tag in item.Tags) { holder.Tags.Add(tag.TagName); ListManager.AddTagSource(tag, Serializer.SafeName(item.Name)); } } foreach (Transform child in item.transform) { var effectsChild = DM_EffectTransform.ParseTransform(child); if (effectsChild.ChildEffects.Count > 0 || effectsChild.Effects.Count > 0 || effectsChild.EffectConditions.Count > 0) { holder.EffectTransforms.Add(effectsChild); } } }
public virtual void SerializeStatusEffect(StatusEffect status, EffectPreset preset) { PresetID = preset?.PresetID ?? -1; Identifier = status.IdentifierName?.Trim(); IgnoreBuildupIfApplied = status.IgnoreBuildUpIfApplied; BuildupRecoverySpeed = status.BuildUpRecoverSpeed; DisplayedInHUD = status.DisplayInHud; IsHidden = status.IsHidden; Lifespan = status.StatusData.LifeSpan; RefreshRate = status.RefreshRate; LengthType = status.LengthType.ToString(); ComplicationStatusIdentifier = status.ComplicationStatus?.IdentifierName; RequiredStatusIdentifier = status.RequiredStatus?.IdentifierName; RemoveRequiredStatus = status.RemoveRequiredStatus; NormalizeDamageDisplay = status.NormalizeDamageDisplay; IgnoreBarrier = status.IgnoreBarrier; GetStatusLocalization(status, out Name, out Description); Tags = new List <string>(); status.InitTags(); var tags = (TagSource)At.GetField(status, "m_tagSource"); foreach (var tag in tags.Tags) { Tags.Add(tag.TagName); ListManager.AddTagSource(tag, Name); } // For existing StatusEffects, the StatusData contains the real values, so we need to SetValue to each Effect. var statusData = status.StatusData.EffectsData; var components = status.GetComponentsInChildren <Effect>(); for (int i = 0; i < components.Length; i++) { var comp = components[i]; if (comp && comp.Signature.Length > 0) { comp.SetValue(statusData[i].Data); } } Effects = new List <DM_EffectTransform>(); if (status.transform.childCount > 0) { var signature = status.transform.GetChild(0); if (signature) { foreach (Transform child in signature.transform) { var effectsChild = DM_EffectTransform.ParseTransform(child); if (effectsChild.ChildEffects.Count > 0 || effectsChild.Effects.Count > 0 || effectsChild.EffectConditions.Count > 0) { Effects.Add(effectsChild); } } } } }