This is my entire code;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StatsHandler : MonoBehaviour {
EventManager eventManager = new EventManager();
public bool gameStarted = false;
public int[] currentStats;
public int[] totalStats;
void Awake() {
currentStats = new int[skills.Count];
totalStats = new int[skills.Count];
if (!gameStarted) {
for (int i = 0; i < skills.Count; i++) {
currentStats[i] = skills[(SkillTypes)i].currentLevel;
totalStats[i] = skills[(SkillTypes)i].totalLevel;
}
}
}
void Start() {
if (!gameStarted) {
skills[SkillTypes.Health].currentLevel = skills[SkillTypes.Health].totalLevel;
gameStarted = true;
//StartCoroutine(UpdateStats());
}
}
void Update() {
if(Input.GetKeyDown(KeyCode.P)) {
ExpIncreased(SkillTypes.Magic, 173857000);
}
}
private void StatsToUpdate() {
for (int i = 0; i < skills.Count; i++) {
currentStats[i] = skills[(SkillTypes)i].currentLevel;
totalStats[i] = skills[(SkillTypes)i].totalLevel;
}
print("Updated stats!");
}
/*IEnumerator UpdateStats() {
statsUpdateRunning = true;
while (gameStarted) {
StatsToUpdate();
yield return new WaitForSeconds(60f);
}
statsUpdateRunning = false;
}*/
public void ExpIncreased(SkillTypes stat, int exp) {
skills[stat].currentExp += exp;
skills[stat].expRemaining = skills[stat].nextLevelAt - skills[stat].currentExp;
if (skills[stat].expRemaining < 0) {
skills[stat].expRemaining = 0;
}
if (skills[stat].totalLevel < 100) {
while (skills[stat].currentExp > skills[stat].nextLevelAt) {
if(skills[stat].totalLevel < 100) {
skills[stat].totalLevel += 1; print("Total level: " + skills[stat].totalLevel);
//print("Next level at: " + stat + ": " + skills[stat].nextLevelAt); print("Current exp: " + stat + ": " + skills[stat].currentExp); print("Exp remaining: " + stat + ": " + skills[stat].expRemaining);
//skills[stat].nextLevelAt += ((skills[stat].totalLevel * 50 * skills[stat].totalLevel * skills[stat].totalLevel) / 4); print("Exp to level: " + skills[stat].nextLevelAt);
}
if (skills[stat].currentLevel < 100) {
skills[stat].currentLevel += 1; print("Current level: " + skills[stat].currentLevel);
}
skills[stat].nextLevelAt += ((skills[stat].totalLevel * 50 * skills[stat].totalLevel * skills[stat].totalLevel) / 4); print("Exp to level: " + skills[stat].nextLevelAt);
}
}
if (skills[stat].totalLevel > 100) {
skills[stat].totalLevel = 100;
print("Real total level: " + stat + ": " + skills[stat].totalLevel);
}
}
public enum SkillTypes {
//Combat Skills
Health, Melee, Range, Magic, Defence, Prayer, Slayer,
//Gathering Skills
Mining, Fishing, Woodcutting, Hunting, Farming, Thieving,
//Production Skills
Cooking, Smithing, Fletching, Firemaking, Herblore, Crafting, Construction
}
public class Skill {
public int currentLevel = 1;
public int totalLevel = 1;
public int currentExp = 0;
public int nextLevelAt = 10000;
public int expRemaining;
}
public Dictionary<SkillTypes, Skill> skills = new Dictionary<SkillTypes, Skill>() {
//Combat Skills
{ SkillTypes.Health, new Skill() }, { SkillTypes.Melee, new Skill() }, { SkillTypes.Range, new Skill() }, { SkillTypes.Magic, new Skill() },
{ SkillTypes.Defence, new Skill() }, { SkillTypes.Prayer, new Skill() }, { SkillTypes.Slayer, new Skill() },
//Gathering Skills
{ SkillTypes.Mining, new Skill() }, { SkillTypes.Fishing, new Skill() }, { SkillTypes.Woodcutting, new Skill() },
{ SkillTypes.Hunting, new Skill() }, { SkillTypes.Farming, new Skill() }, { SkillTypes.Thieving, new Skill() },
//Production Skills
{ SkillTypes.Cooking, new Skill() }, { SkillTypes.Smithing, new Skill() }, { SkillTypes.Fletching, new Skill() }, { SkillTypes.Firemaking, new Skill() },
{ SkillTypes.Herblore, new Skill() }, { SkillTypes.Crafting, new Skill() }, { SkillTypes.Construction, new Skill() }
};
}
-
Yeah, itâs a dictionary, and what do you mean I keep looking it up?
-
I realized that too when the level goes over 100 the exp doesnât increase so the while loop just keeps going until the crash.
-
What would I need to do so I wouldnât have to loop it? I thought I needed the loop there so that if you get a large amount of exp that should level you up 3 times, it would only do it once without a loop, any suggestions?
Thanks for the help!