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 static void ParseAllMerchants() { foreach (Merchant m in Resources.FindObjectsOfTypeAll <Merchant>().Where(x => x.gameObject.scene != null && x.ShopName != "Merchant")) { var merchantHolder = ParseMerchant(m); if (merchantHolder == null) { continue; } var summary = ListManager.SceneSummaries[ListManager.GetSceneSummaryKey(m.transform.position)]; var key = merchantHolder.Name + " (" + merchantHolder.UID + ")"; if (!summary.Merchants.Contains(key)) { summary.Merchants.Add(key); } } }
internal void Awake() { Instance = this; var allTags = TagSourceManager.Instance.DbTags; for (int i = 0; i < 1000; i++) { if (i >= allTags.Count) { break; } var tag = allTags[i]; //if (tag == Tag.None) // continue; TagSources.Add(tag.ToString(), new List <string>()); } }
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); } } } } }
private IEnumerator ParseCoroutine() { foreach (string sceneName in SceneHelper.SceneBuildNames.Keys) { /* Load Scene */ if (SceneManagerHelper.ActiveSceneName != sceneName) { SL.Log("--- Loading " + sceneName + " ---"); NetworkLevelLoader.Instance.RequestSwitchArea(sceneName, 0, 1.5f); yield return(new WaitForSeconds(5f)); while (NetworkLevelLoader.Instance.IsGameplayPaused || NetworkLevelLoader.Instance.InLoading) { NetworkLevelLoader loader = NetworkLevelLoader.Instance; At.SetField(loader, "m_continueAfterLoading", true); yield return(new WaitForSeconds(1f)); } yield return(new WaitForSeconds(2f)); MenuManager.Instance.HideMasterLoadingScreen(); } SL.Log("Parsing scene " + sceneName + "..."); /* Parse Scene */ //// Disable the TreeBehaviour Managers while we do stuff with enemies //DisableCanvases(); // Parse Enemies SL.Log("Parsing enemies"); DM_Enemy.ParseAllEnemies(); // Parse Merchants SL.Log("Parsing merchants"); DM_Merchant.ParseAllMerchants(); // Parse Loot (+ item sources) SL.Log("Parsing loot"); ParseAllLoot(); // check if New Sirocco if (SceneManagerHelper.ActiveSceneName == "NewSirocco") { SL.LogWarning("NEW SIROCCO: Dumping all buildings..."); StartCoroutine(DatamineBuildings()); while (!s_doneBuildings) { yield return(null); } ClearScene(); yield return(new WaitForSeconds(1f)); } SL.Log("--- Finished Scene: " + SceneManagerHelper.ActiveSceneName + " ---"); } SL.Log("___________ Finished Scenes Parse ___________"); SL.Log("[Dataminer] Saving lists..."); ListManager.SaveLists(); SL.Log("[Dataminer] Finished."); }
// Parse Loot public static void ParseAllLoot() { var allitems = Resources.FindObjectsOfTypeAll(typeof(Item)) as Item[]; foreach (Item item in allitems.Where(x => IsValidLoot(x))) { var summary = ListManager.SceneSummaries[ListManager.GetSceneSummaryKey(item.transform.position)]; if (item is SelfFilledItemContainer) { if (item is TreasureChest) { var lootContainer = DM_LootContainer.ParseLootContainer(item as TreasureChest); AddQuantity(lootContainer.Name, summary.Loot_Containers); ListManager.AddContainerSummary( lootContainer.Name, ListManager.GetSceneSummaryKey(item.transform.position), lootContainer.DropTables, Instance.GetCurrentLocation(item.transform.position) ); if (!summary.UniqueContainerList.Contains(lootContainer.Name + "_" + lootContainer.UID)) { summary.UniqueContainerList.Add(lootContainer.Name + "_" + lootContainer.UID); } } else if (item is Gatherable) { var gatherableHolder = DM_Gatherable.ParseGatherable(item as Gatherable); AddQuantity(gatherableHolder.Name, summary.Gatherables); ListManager.AddContainerSummary( gatherableHolder.Name, ListManager.GetSceneSummaryKey(item.transform.position), gatherableHolder.DropTables, Instance.GetCurrentLocation(item.transform.position) ); } else { SL.LogWarning("[ParseLoot] Unsupported ItemContainer: " + item.Name + ", typeof: " + item.GetType()); } } else { // item spawn bool newHolder = true; foreach (DM_ItemSpawn holder in summary.Item_Spawns) { if (holder.Item_ID == item.ItemID) { newHolder = false; holder.Quantity++; holder.positions.Add(item.transform.position); break; } } if (newHolder) { summary.Item_Spawns.Add(new DM_ItemSpawn { Name = item.Name?.Trim(), Item_ID = item.ItemID, Quantity = 1, positions = new List <Vector3> { item.transform.position } }); } //AddItemSpawnSource(item.ItemID, item.Name, item.transform.position); } } }