Esempio n. 1
0
        public void CommitResearch(string playerID, string key, ResearchProgression itemProgression)
        {
            var progression = GetProgression(playerID);

            progression[key] = itemProgression;

            _progressions[playerID] = progression;
        }
        private void SendItemResearchMessage(Item item, ResearchProgression progression)
        {
            var itemResearchedMessage = new ItemResearchedMessage
            {
                Key         = Helpers.GetItemUniqueKey(item),
                Progression = progression
            };

            _helper.Multiplayer.SendMessage(itemResearchedMessage, MessageKeys.PROGRESSION_ITEM_RESEARCHED,
                                            new[] { _modManifest.UniqueID });
        }
        private ResearchProgression TryInitAndReturnProgressionItem(Item item)
        {
            var key = Helpers.GetItemUniqueKey(item);

            ResearchProgression progressionItem;

            if (_progression.ContainsKey(key))
            {
                progressionItem = _progression[key];
            }
            else
            {
                progressionItem   = new ResearchProgression();
                _progression[key] = new ResearchProgression();
            }

            return(progressionItem);
        }
        private ItemProgressionRaw GetItemProgressionRaw(Item item,
                                                         out ResearchProgression progressionItem, bool itemActive = false)
        {
            var spawnableItem = ModManager.Instance.GetSpawnableItem(item, out _);

            if (spawnableItem == null)
            {
                progressionItem = null;

                return(new ItemProgressionRaw
                {
                    current = -1,
                    max = -1
                });
            }

            var itemQuality = (ItemQuality)((item as Object)?.Quality ?? 0);

            return(GetItemProgressionRaw(spawnableItem, out progressionItem, itemQuality, itemActive));
        }
        private ItemProgressionRaw GetItemProgressionRaw(SpawnableItem item,
                                                         out ResearchProgression progressionItem, ItemQuality quality = ItemQuality.Normal, bool itemActive = false)
        {
            var category =
                ModManager.Instance.AvailableCategories.FirstOrDefault(c =>
                                                                       I18n.GetByKey(c.Label).ToString().Equals(item.Category));

            // if (itemActive)
            // {
            //     _monitor.Log($"Current item - name: {item.Name}, ID: {item.ID}, category: {item.Category}",
            //         LogLevel.Alert);
            //     _monitor.Log($"Unique key: {Helpers.GetItemUniqueKey(item.Item)}",
            //         LogLevel.Alert);
            // }

            var maxProgression = ModManager.Instance.ModMode switch
            {
                ModMode.Buy => 1,
                _ => category?.ResearchCount ?? 1
            };

            progressionItem = TryInitAndReturnProgressionItem(item.Item);

            var itemProgression = quality switch
            {
                ItemQuality.Silver => progressionItem.ResearchCountSilver,
                ItemQuality.Gold => progressionItem.ResearchCountGold,
                ItemQuality.Iridium => progressionItem.ResearchCountIridium,
                _ => progressionItem.ResearchCount
            };

            itemProgression = (int)MathHelper.Clamp(itemProgression, 0, maxProgression);

            return(new ItemProgressionRaw
            {
                current = itemProgression,
                max = maxProgression
            });
        }