예제 #1
0
        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.");
        }
예제 #2
0
        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);
                }
            }
        }
예제 #3
0
        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>());
            }
        }
예제 #4
0
        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);
                        }
                    }
                }
            }
        }
예제 #6
0
        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.");
        }
예제 #7
0
        // 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);
                }
            }
        }