using System; using System.Collections.Generic; using BitStrap; using CodeStage.AntiCheat.ObscuredTypes; using UnityEngine; public class SkillsManager : MonoBehaviour { public enum SkillType { FILLET_1 = 0, FRY_1 = 1, CRAFT_HOOKS_1 = 2, HUNTER_VISION_1 = 3, HUNTER_VISION_2 = 4, HUNTER_VISION_3 = 5, USE_BOATS_1 = 6, USE_DRILLER_1 = 7, MORE_MONEY_1 = 8, MORE_MONEY_2 = 9, MORE_MONEY_3 = 10, MORE_EXP_1 = 11, MORE_EXP_2 = 12, MORE_EXP_3 = 13, STRENGTH_1 = 14, STRENGTH_2 = 15, STRENGTH_3 = 16 } [Serializable] public class Skill { public SkillType skillType; public ObscuredBool isUnlocked = false; public bool isInDemo; public bool isAvailable = true; public bool onlyCheats; public bool onlyBeta; public int requiredLevel = 1; [Space(10f)] public string skillName = "SKILL_NAME"; public string skillDescription = "SKILL_DESCRIPTION"; public Sprite icon; [Space(10f)] public float param_1; } public List skills = new List(); public ObscuredInt skillPoints = 0; public int availableSkills; public int unlockedSkills; private void Start() { } public void UnlockSkill(SkillType type) { foreach (Skill skill in skills) { if (skill.skillType == type) { skill.isUnlocked = true; --skillPoints; if ((int)skillPoints < 0) { skillPoints = 0; Debug.LogError("skillPoints < 0"); } Save(); return; } } Debug.LogError("Skill not found: " + type); } public Skill GetSkill(SkillType type) { foreach (Skill skill in skills) { if (skill.skillType == type) { return skill; } } Debug.LogError("Skill not found: " + type); return null; } [Button] public void UnlockAllSkills() { foreach (Skill skill in skills) { skill.isUnlocked = true; } Save(); } [Button] public void LockAllSkills() { foreach (Skill skill in skills) { skill.isUnlocked = false; } Save(); } public void AddSkillPoints(int amount) { skillPoints = (int)skillPoints + amount; Save(); } public void CalculateSkillsAmount() { unlockedSkills = 0; availableSkills = 0; foreach (Skill skill in skills) { if (skill.isAvailable) { availableSkills++; } if ((bool)skill.isUnlocked) { unlockedSkills++; } } if (GlobalSettings.Instance.playerSettings.difficulty == PlayerSettingsMy.Difficulty.SIMULATOR) { availableSkills -= 3; } } public int GetAvailableSkillPoints() { int num = (int)skillPoints + unlockedSkills - availableSkills; if (num > 0) { return (int)skillPoints - num; } return skillPoints; } public bool TooManySkillPoints() { return unlockedSkills >= availableSkills; } public void Save() { string currentProfilePrefix = GlobalSettings.Instance.saveManager.GetCurrentProfilePrefix(); using (ES2Writer eS2Writer = ES2Writer.Create(currentProfilePrefix)) { eS2Writer.Write((int)skillPoints, "skillPoints"); foreach (Skill skill in skills) { eS2Writer.Write((bool)skill.isUnlocked, "skill_unlocked_" + skill.skillType); } try { eS2Writer.Save(); } catch (Exception exception) { Debug.LogException(exception, this); } Debug.Log("Save SkillsManager"); } } public void Load() { string currentProfilePrefix = GlobalSettings.Instance.saveManager.GetCurrentProfilePrefix(); using (ES2Reader reader = ES2Reader.Create(currentProfilePrefix)) { skillPoints = SaveManager.Read(reader, "skillPoints", 0); foreach (Skill skill in skills) { skill.isUnlocked = SaveManager.Read(reader, "skill_unlocked_" + skill.skillType, false); if (GlobalSettings.Instance.isDemo) { skill.isUnlocked = skill.isInDemo; } } } } public void Reset() { if (GlobalSettings.Instance.currentPlatform == GlobalSettings.Platform.ARCADE) { return; } skillPoints = 0; foreach (Skill skill in skills) { skill.isUnlocked = false; } Save(); } }