70 lines
2.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|