Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/SkillsManager.cs
2026-02-21 16:45:37 +08:00

218 lines
3.9 KiB
C#

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<Skill> skills = new List<Skill>();
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();
}
}