Ejemplo n.º 1
0
        internal static void Setup_Post(ref SkillsDialog __instance, Player player)
        {
            List <GameObject> elements = AccessTools.Field(typeof(SkillsDialog), "m_elements").GetValue(__instance) as List <GameObject>;

            foreach (GameObject gameObject in elements)
            {
                Dictionary <Skills.SkillType, Skills.Skill> skillData = AccessTools.Field(typeof(Skills), "m_skillData").GetValue(player.GetSkills()) as Dictionary <Skills.SkillType, Skills.Skill>;
                Skills.Skill skill = skillData
                                     .Where(sd => Utils.FindChild(gameObject.transform, "name").GetComponent <Text>().text.ToLower().Contains(SkillRequirement.GetSkillName(sd.Key).ToLower()))
                                     .Select(sd => sd.Value).FirstOrDefault();
                if (skill != null)
                {
                    string message = GetMessage(__instance, player, skill, gameObject);
                    var    tooltip = gameObject.GetComponentInChildren <UITooltip>();
                    tooltip.m_text += $"\n{message}";
                    Image img = tooltip.m_tooltipPrefab.GetComponentInChildren <Image>(true);
                    if (img && !string.IsNullOrEmpty(message))
                    {
                        img.gameObject.transform.localScale     = new Vector3(1f, 2.1f, 1f);
                        img.gameObject.transform.localPosition += new Vector3(0f, 15f);
                        Text text = tooltip.m_tooltipPrefab.GetComponentInChildren <Text>(true);
                        if (text)
                        {
                            text.gameObject.transform.localPosition += new Vector3(0f, 15f);
                        }
                    }
                }
            }
            AccessTools.Field(typeof(SkillsDialog), "m_elements").SetValue(__instance, elements);
        }
Ejemplo n.º 2
0
        public static void UpdateDialog(SkillsDialog dialog, Player player)
        {
            foreach (GameObject obj in dialog.m_elements)
            {
                UnityEngine.Object.Destroy(obj);
            }
            dialog.m_elements.Clear();
            List <Skills.Skill> skillList = player.GetSkills().GetSkillList();

            for (int i = 0; i < skillList.Count; i++)
            {
                Skills.Skill skill      = skillList[i];
                float        acc        = (float)Math.Round(skill.m_accumulator * 100f) / 100f;
                GameObject   gameObject = UnityEngine.Object.Instantiate <GameObject>(dialog.m_elementPrefab, Vector3.zero, Quaternion.identity, dialog.m_listRoot);

                gameObject.SetActive(true);
                (gameObject.transform as RectTransform).anchoredPosition = new Vector2(0f, (float)(-(float)i - paddingFix) * dialog.m_spacing);
                gameObject.GetComponentInChildren <UITooltip>().m_text   = skill.m_info.m_description;

                Utils.FindChild(gameObject.transform, "icon").GetComponent <Image>().sprite   = skill.m_info.m_icon;
                Utils.FindChild(gameObject.transform, "name").GetComponent <Text>().text      = Localization.instance.Localize("$skill_" + skill.m_info.m_skill.ToString().ToLower() + $"\n<size={Main.skillUITextSize.Value - 2}>Lvl: {(int)skill.m_level}</size>");
                Utils.FindChild(gameObject.transform, "name").GetComponent <Text>().fontSize  = Main.skillUITextSize.Value;
                Utils.FindChild(gameObject.transform, "leveltext").GetComponent <Text>().text = $"<size={Main.skillUITextSize.Value-4}>{acc} ({skill.GetLevelPercentage() * 100f:0.##}%)</size>";
                Utils.FindChild(gameObject.transform, "levelbar").GetComponent <GuiBar>().SetValue(skill.GetLevelPercentage());

                // Alter existing xpBar size to fill currentlevel area as well.
                RectTransform xpBar = (Utils.FindChild(gameObject.transform, "levelbar").GetComponent <GuiBar>().m_bar.parent as RectTransform);
                xpBar.sizeDelta        = new Vector2(xpBar.sizeDelta.x, xpBar.sizeDelta.y + 4f);
                xpBar.anchoredPosition = new Vector2(-4f, 0f);
                RectTransform txt = Utils.FindChild(gameObject.transform, "leveltext").GetComponent <Text>().rectTransform;
                txt.anchoredPosition = new Vector2(txt.anchoredPosition.x, txt.anchoredPosition.y + 2f);
                // Remove currentlevel bar
                UnityEngine.Object.Destroy(Utils.FindChild(gameObject.transform, "currentlevel").GetComponent <GuiBar>().gameObject);

                dialog.m_elements.Add(gameObject);
            }
            float size = Mathf.Max(dialog.m_baseListSize, ((float)skillList.Count + paddingFix) * dialog.m_spacing);

            dialog.m_listRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size);

            // Devs added this, but forgot to render it...

            /*
             * __instance.m_totalSkillText.text = string.Concat(new string[]
             * {
             *  "<color=orange>",
             *  player.GetSkills().GetTotalSkill().ToString("0"),
             *  "</color><color=white> / </color><color=orange>",
             *  player.GetSkills().GetTotalSkillCap().ToString("0"),
             *  "</color>"
             * });
             */
        }
Ejemplo n.º 3
0
        private static void ChangeGUI(ref SkillsDialog __instance, ref Player player)
        {
            __instance.gameObject.SetActive(true);
            if (Main.showCharacterXP.Value)
            {
                Utils.FindChild(__instance.transform, "topic").GetComponent <Text>().text = $"LV. {Patches.XP.level:0}";
            }
            if (!Main.customSkillUI.Value)
            {
                return;
            }

            Patches.SkillUI.UpdateDialog(__instance, player);
        }
Ejemplo n.º 4
0
        private static string GetMessage(SkillsDialog __instance, Player player, Skills.Skill skill, GameObject gameObject)
        {
            Dictionary <Skills.SkillType, Skills.Skill> m_skillData = (Dictionary <Skills.SkillType, Skills.Skill>)AccessTools.Field(typeof(Skills), "m_skillData").GetValue(player.GetSkills());

            Skills.SkillType skillType = m_skillData.Where(x => x.Value.Equals(skill)).Select(x => x.Key).FirstOrDefault();
            var currentLevel           = skill.m_level;

            if (m_skillData.ContainsValue(skill))
            {
                KeyValuePair <string, SkillRequirement> skillRequirement = SkillRequirement.skillRequirements
                                                                           .Where(x => x.Value.m_skill.ToString().ToLower().Equals(skillType.ToString().ToLower()))
                                                                           .Where(x => x.Value.m_requiredLevel > currentLevel)
                                                                           .OrderBy(x => x.Value.m_requiredLevel)
                                                                           .FirstOrDefault();
                if (!string.IsNullOrEmpty(skillRequirement.Key))
                {
                    Recipe recipe            = ObjectDB.instance.m_recipes.Find(x => x.name.Equals(skillRequirement.Key));
                    string localisedItemName = Localization.instance.Localize(recipe.m_item.m_itemData.m_shared.m_name);
                    return($"Next unlock at level {skillRequirement.Value.m_requiredLevel}:\n{localisedItemName}");
                }
            }
            return("");
        }
Ejemplo n.º 5
0
        private void SkillsDialog_Setup(On.SkillsDialog.orig_Setup orig, SkillsDialog self, Player player)
        {
            orig(self, player);

            // Update skill names to allow for negative m_skill IDs
            List <Skills.Skill> skillList = player.GetSkills().GetSkillList();

            for (int i = 0; i < skillList.Count; i++)
            {
                var skill = skillList[i];
                var elem  = self.m_elements[i];

                // Ignore vanilla skills
                if (!Skills.ContainsKey(skill.m_info.m_skill))
                {
                    continue;
                }

                var skillConfig = Skills[skill.m_info.m_skill];
                var name        = skillConfig.Name.StartsWith("$") ? Localization.instance.Localize(skillConfig.Name) : skillConfig.Name;
                Logger.LogInfo($"Updated skill: {skillConfig.Name} -> {name}");
                global::Utils.FindChild(elem.transform, "name").GetComponent <Text>().text = name;
            }
        }
Ejemplo n.º 6
0
 protected void ShowSkillSummary()
 {
     SkillsDialog.Show(SkillsData);
 }