Files
MxValheim/MxValheim/EventSystem/Experience.cs
2026-02-16 04:04:49 -05:00

70 lines
2.2 KiB
C#

using MxValheim.Patch.HUD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace MxValheim.EventSystem
{
internal class Experience
{
public static int GetRequiredExpByLevel(int level)
{
return (level * 100);
}
public static float CalculateExpMultiplier(int level, Heightmap.Biome biome)
{
Dictionary<int, float> biomeBase = new Dictionary<int, float>()
{
{ 1, 1.0f },
{ 2, 1.5f },
{ 8, 2.0f },
{ 4, 2.5f },
{ 16, 3.0f },
{ 256, 3.5f },
{ 32, 4.0f },
};
float rewardExpMulti = biomeBase[((int)biome)];
return rewardExpMulti;
}
public static void AddExperience(int amount)
{
ZRoutedRpc.instance.InvokeRoutedRPC(0, "RPC_RequestProfile", "Event");
int level = Profiles.serverLevel;
int exp = Profiles.serverExperience;
exp += amount;
ZRoutedRpc.instance.InvokeRoutedRPC(0, "RPC_ServerSetExperience", exp);
exp = Profiles.serverExperience;
int maxexp = GetRequiredExpByLevel(level);
UpdateProgressBar();
if (exp >= maxexp)
{
exp -= maxexp;
level++;
ZRoutedRpc.instance.InvokeRoutedRPC(0, "RPC_ServerSetLevel", level);
ZRoutedRpc.instance.InvokeRoutedRPC(0, "RPC_ServerSetExperience", exp);
UpdateProgressBar();
}
}
public static void UpdateProgressBar()
{
ZRoutedRpc.instance.InvokeRoutedRPC(0, "RPC_RequestProfile", "Event");
float expPercentage = ((float)Profiles.serverExperience / GetRequiredExpByLevel(Profiles.serverLevel));
if (Clock.m_barFill != null)
{
Clock.m_barFill.anchorMax = new Vector2(expPercentage, 1);
Clock.m_barFill.offsetMin = Vector2.zero;
Clock.m_barFill.offsetMax = Vector2.zero;
}
}
}
}