218 lines
3.9 KiB
C#
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();
|
|
}
|
|
}
|