C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using ProtoBuf;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("RealSkills", "Frizen", "1.0.0")]
public class RealSkills : RustPlugin
{
#region Variables
// TODO: Fixex Gather Rate
private string[] _gatherHooks = {
"OnDispenserGather",
"OnDispenserBonus",
};
[PluginReference] private Plugin ImageLibrary = null;
public enum TypeSkills
{
Wood = 1,
Stone = 2,
Metal = 3,
Sulfur = 4,
Animal = 5,
Component = 6,
Damage = 7,
Health = 8,
Wounded = 9,
}
#endregion
#region Classes
public class Skills
{
[JsonProperty("Отображаемое имя навыка")]
public string DisplayName { get; set; }
[JsonProperty("Описание навыка")]
public string Description { get; set; }
[JsonProperty("Изображение навыка")]
public string Image { get; set; }
[JsonProperty("Список уровней")]
public List<Levels> LevelList { get; set; }
[JsonProperty("Тип скилла")]
public TypeSkills _TypeSkills;
public class Levels
{
[JsonProperty("Цена уровня")]
public double ExpCost { get; set; }
[JsonProperty("На сколько повышать рейт при повышении навыка")]
public float PercentBoost { get; set; }
}
}
#endregion
#region Config
private static Configuration _config;
private class Configuration
{
[JsonProperty("Список скиллов")]
public List<Skills> SkillsList = new List<Skills>();
[JsonProperty("Награда за убийство игрока")]
public float PlayerKillAward { get; set; }
[JsonProperty("Награда за убийство нпс")]
public float NpcKillAward { get; set; }
[JsonProperty("Награда за ящики/бочки")]
public float ContainerAward { get; set; }
[JsonProperty("Награда за фарм")]
public Dictionary<string, float> FarmAwards { get; set; }
public static Configuration DefaultConfig()
{
return new Configuration
{
SkillsList =
{
new Skills
{
_TypeSkills = TypeSkills.Damage,
DisplayName = "Навык КОМБАТЁР",
Description = "Увеличивает урон на {0}%",
Image = "https://i.imgur.com/dkcFkZz.png",
LevelList = new List<Skills.Levels>
{
new Skills.Levels
{
ExpCost = 0,
PercentBoost = 0,
},
new Skills.Levels
{
ExpCost = 1,
PercentBoost = 2,
},
new Skills.Levels
{
ExpCost = 2,
PercentBoost = 3,
},
new Skills.Levels
{
ExpCost = 3,
PercentBoost = 5,
},
new Skills.Levels
{
ExpCost = 4,
PercentBoost = 6,
},
new Skills.Levels
{
ExpCost = 5,
PercentBoost = 7,
},
}
},
new Skills
{
DisplayName = "Навык СУЛЬФЁР",
Description = "Повышает рейты на x{0}",
Image = "https://i.imgur.com/LizBIdY.png",
_TypeSkills = TypeSkills.Sulfur,
LevelList = new List<Skills.Levels>
{
new Skills.Levels
{
ExpCost = 0,
PercentBoost = 0,
},
new Skills.Levels
{
ExpCost = 1,
PercentBoost = 2,
},
new Skills.Levels
{
ExpCost = 2,
PercentBoost = 3,
},
new Skills.Levels
{
ExpCost = 3,
PercentBoost = 5,
},
new Skills.Levels
{
ExpCost = 4,
PercentBoost = 6,
},
new Skills.Levels
{
ExpCost = 5,
PercentBoost = 7,
},
}
},
new Skills
{
DisplayName = "Навык ЖЕЛЕЗНЯК",
Description = "Повышает рейты на x{0}",
Image = "https://i.imgur.com/h0KN9vC.png",
_TypeSkills = TypeSkills.Metal,
LevelList = new List<Skills.Levels>
{
new Skills.Levels
{
ExpCost = 0,
PercentBoost = 0,
},
new Skills.Levels
{
ExpCost = 1,
PercentBoost = 2,
},
new Skills.Levels
{
ExpCost = 2,
PercentBoost = 3,
},
new Skills.Levels
{
ExpCost = 3,
PercentBoost = 5,
},
new Skills.Levels
{
ExpCost = 4,
PercentBoost = 6,
},
new Skills.Levels
{
ExpCost = 5,
PercentBoost = 7,
},
}
},
new Skills
{
DisplayName = "Навык КАМЕНОЛОМ",
Description = "Повышает рейты на x{0}",
Image = "https://i.imgur.com/KjWT1Bx.png",
_TypeSkills = TypeSkills.Stone,
LevelList = new List<Skills.Levels>
{
new Skills.Levels
{
ExpCost = 0,
PercentBoost = 0,
},
new Skills.Levels
{
ExpCost = 1,
PercentBoost = 2,
},
new Skills.Levels
{
ExpCost = 2,
PercentBoost = 3,
},
new Skills.Levels
{
ExpCost = 3,
PercentBoost = 5,
},
new Skills.Levels
{
ExpCost = 4,
PercentBoost = 6,
},
new Skills.Levels
{
ExpCost = 5,
PercentBoost = 7,
},
}
},
new Skills
{
DisplayName = "Навык БРОНЯ",
Description = "Увеличивает ваше ХП на {0}%",
Image = "https://i.imgur.com/ZUJdi45.png",
_TypeSkills = TypeSkills.Health,
LevelList = new List<Skills.Levels>
{
new Skills.Levels
{
ExpCost = 0,
PercentBoost = 0,
},
new Skills.Levels
{
ExpCost = 1,
PercentBoost = 2,
},
new Skills.Levels
{
ExpCost = 2,
PercentBoost = 3,
},
new Skills.Levels
{
ExpCost = 3,
PercentBoost = 5,
},
new Skills.Levels
{
ExpCost = 4,
PercentBoost = 6,
},
new Skills.Levels
{
ExpCost = 5,
PercentBoost = 7,
},
}
},
new Skills
{
DisplayName = "Навык БОЧКИ",
Description = "Повышает рейты на x{0}",
Image = "https://i.imgur.com/STKuoO0.png",
_TypeSkills = TypeSkills.Component,
LevelList = new List<Skills.Levels>
{
new Skills.Levels
{
ExpCost = 0,
PercentBoost = 0,
},
new Skills.Levels
{
ExpCost = 1,
PercentBoost = 2,
},
new Skills.Levels
{
ExpCost = 2,
PercentBoost = 3,
},
new Skills.Levels
{
ExpCost = 3,
PercentBoost = 5,
},
new Skills.Levels
{
ExpCost = 4,
PercentBoost = 6,
},
new Skills.Levels
{
ExpCost = 5,
PercentBoost = 7,
},
}
},
new Skills
{
DisplayName = "Навык ОХОТНИК",
Description = "Повышает рейты на x{0}",
Image = "https://i.imgur.com/G4Sd4PO.png",
_TypeSkills = TypeSkills.Animal,
LevelList = new List<Skills.Levels>
{
new Skills.Levels
{
ExpCost = 0,
PercentBoost = 0,
},
new Skills.Levels
{
ExpCost = 1,
PercentBoost = 2,
},
new Skills.Levels
{
ExpCost = 2,
PercentBoost = 3,
},
new Skills.Levels
{
ExpCost = 3,
PercentBoost = 5,
},
new Skills.Levels
{
ExpCost = 4,
PercentBoost = 6,
},
new Skills.Levels
{
ExpCost = 5,
PercentBoost = 7,
},
}
},
new Skills
{
DisplayName = "Навык СМЕРТНИК",
Description = "Повышает шанс встать на {0}%",
Image = "https://i.imgur.com/nCE9Y7d.png",
_TypeSkills = TypeSkills.Wounded,
LevelList = new List<Skills.Levels>
{
new Skills.Levels
{
ExpCost = 0,
PercentBoost = 0,
},
new Skills.Levels
{
ExpCost = 1,
PercentBoost = 2,
},
new Skills.Levels
{
ExpCost = 2,
PercentBoost = 3,
},
new Skills.Levels
{
ExpCost = 3,
PercentBoost = 5,
},
new Skills.Levels
{
ExpCost = 4,
PercentBoost = 6,
},
new Skills.Levels
{
ExpCost = 5,
PercentBoost = 7,
},
}
}
},
PlayerKillAward = 20,
NpcKillAward = 20,
ContainerAward = 20,
FarmAwards = new Dictionary<string, float>()
{
["stones"] = 20,
["sulfur.ore"] = 15,
["metal.ore"] = 15,
["wood"] = 15
},
};
}
}
protected override void LoadConfig()
{
base.LoadConfig();
try
{
_config = Config.ReadObject<Configuration>();
if (_config == null) LoadDefaultConfig();
SaveConfig();
}
catch (Exception e)
{
Debug.LogException(e);
PrintWarning("Creating new config file.");
LoadDefaultConfig();
}
}
protected override void LoadDefaultConfig() => _config = Configuration.DefaultConfig();
protected override void SaveConfig() => Config.WriteObject(_config);
#endregion
#region Data
private void SaveData()
{
if (PlayerData != null)
Interface.Oxide.DataFileSystem.WriteObject($"{Name}/Skills", PlayerData);
}
public class PlayerDataClass
{
public Dictionary<TypeSkills, int> Progress = new Dictionary<TypeSkills, int>();
public double Exp { get; set; }
}
public Dictionary<ulong, PlayerDataClass> PlayerData = new Dictionary<ulong, PlayerDataClass> { };
private void LoadData()
{
if (Interface.Oxide.DataFileSystem.ExistsDatafile($"{Name}/Skills"))
{
PlayerData = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, PlayerDataClass>>($"{Name}/Skills");
}
else
{
SaveData();
}
}
#endregion
#region Hooks
private void OnServerInitialized()
{
ImageLibrary.Call("AddImage", "https://i.imgur.com/v4Ix05O.png", "Viniette");
LoadData();
foreach (var item in _config.SkillsList)
{
ImageLibrary.Call("AddImage", item.Image, item.Image);
}
ImageLibrary.Call("AddImage", "https://i.imgur.com/Jv4tRia.png", "Upgrade");
foreach (var item in BasePlayer.activePlayerList)
{
OnPlayerConnected(item);
}
}
private void OnPluginLoaded(Plugin plugin)
{
NextTick(() =>
{
foreach (string hook in _gatherHooks)
{
Unsubscribe(hook);
Subscribe(hook);
}
});
}
private void Unload()
{
SaveData();
}
void OnPlayerConnected(BasePlayer player)
{
if (PlayerData != null)
{
if (!PlayerData.ContainsKey(player.userID))
{
PlayerData.Add(player.userID, new PlayerDataClass()
{
Exp = 0
});
foreach (var item in _config.SkillsList)
{
PlayerData[player.userID].Progress.Add(item._TypeSkills, 0);
}
}
}
}
void OnPlayerRespawned(BasePlayer player)
{
var findConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == TypeSkills.Health);
if (findConfig == null) return;
var data = PlayerData[player.userID];
if (data == null) return;
if (!data.Progress.ContainsKey(findConfig._TypeSkills)) return;
var elementLevel = findConfig.LevelList.ElementAt(data.Progress[findConfig._TypeSkills]);
var setHeatlh = (100 + 100 * (elementLevel.PercentBoost / 100f));
player._maxHealth = setHeatlh;
player.SetHealth(player._maxHealth);
}
object OnPlayerAttack(BasePlayer attacker, HitInfo info)
{
if (attacker == null) return null;
if (info == null) return null;
var findConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == TypeSkills.Damage);
if (findConfig == null) return null;
var data = PlayerData[attacker.userID];
if (data == null) return null;
if (!data.Progress.ContainsKey(findConfig._TypeSkills)) return null;
var elementLevel = findConfig.LevelList.ElementAt(data.Progress[findConfig._TypeSkills]);
var setHeatlh = (1 + (elementLevel.PercentBoost / 100f));
info.damageTypes.ScaleAll(setHeatlh);
return null;
}
object OnPlayerDeath(BasePlayer player, HitInfo info)
{
if (player == null || info == null || info.InitiatorPlayer == null) return null;
if (info.InitiatorPlayer.userID != player.userID)
{
AddExp(info.InitiatorPlayer, _config.PlayerKillAward);
}
return null;
}
void OnDispenserBonus(ResourceDispenser dispenser, BasePlayer player, Item item)
{
if (player == null || item == null || dispenser == null) return;
if (_config.FarmAwards.ContainsKey(item.info.shortname))
{
AddExp(player, _config.FarmAwards[item.info.shortname]);
}
return;
}
const float defaultRate = 1.0f;
private void OnEntityDeath(LootContainer entity, HitInfo info)
{
if (entity == null) return;
if (info == null) return;
if (!entity.ShortPrefabName.Contains("barrel")) return;
if (info.InitiatorPlayer == null) return;
var player = info.InitiatorPlayer;
var findConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == TypeSkills.Component);
if (findConfig == null) return;
var data = PlayerData[player.userID];
if (data == null) return;
if (!data.Progress.ContainsKey(findConfig._TypeSkills)) return;
var elementLevel = findConfig.LevelList.ElementAt(data.Progress[findConfig._TypeSkills]);
if (elementLevel.PercentBoost <= 0)
{
AddExp(player, _config.ContainerAward);
return;
}
float rateSend = defaultRate + elementLevel.PercentBoost;
foreach (var item in entity.inventory.itemList)
{
if (item.skin > 0) continue;
if (item.info.category != ItemCategory.Component && item.info.shortname != "scrap") continue;
item.amount = (int)Math.Round(item.amount * rateSend);
}
AddExp(player, _config.ContainerAward);
}
private void OnLootEntityEnd(BasePlayer player, BaseCombatEntity entity)
{
if (player == null) return;
if (entity == null) return;
if (entity.OwnerID != 0) return;
if (entity.GetComponentInChildren<LootContainer>() == null) return;
if (entity.GetComponentInChildren<LootContainer>().inventory.IsEmpty())
{
AddExp(player, _config.ContainerAward);
}
}
void RateHandler(BasePlayer player, Item item, TypeSkills skills)
{
var boostConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == skills);
if (boostConfig == null) return;
var data = PlayerData[player.userID];
if (data == null) return;
if (!data.Progress.ContainsKey(boostConfig._TypeSkills)) return;
var elementLevel = boostConfig.LevelList.ElementAt(data.Progress[boostConfig._TypeSkills]);
if (elementLevel.PercentBoost <= 0) return;
item.amount = (int)Math.Round(item.amount * elementLevel.PercentBoost);
}
object OnPlayerWound(BasePlayer player, HitInfo info)
{
if (PlayerData.ContainsKey(player.userID))
{
var findConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == TypeSkills.Wounded);
if (findConfig == null) return null;
var data = PlayerData[player.userID];
if (data == null) return null;
if (!data.Progress.ContainsKey(findConfig._TypeSkills)) return null;
var elementLevel = findConfig.LevelList.ElementAt(data.Progress[findConfig._TypeSkills]);
var boost = elementLevel.PercentBoost;
if (boost > 0f)
{
float baseReviveChance = 0.5f;
double boostedReviveChance = baseReviveChance + (boost / 100f);
float randomValue = UnityEngine.Random.Range(0f, 1f);
if (randomValue <= boostedReviveChance)
{
player.StopWounded();
player.health += 10;
player.metabolism.bleeding.value = 0;
}
}
}
return null;
}
#endregion
#region API
private float GetSkillsRate(BasePlayer player, Item item)
{
TypeSkills? TypeSkill = null;
switch (item.info.shortname.ToLower())
{
case "sulfur.ore":
{
TypeSkill = TypeSkills.Sulfur;
break;
}
case "metal.ore":
{
TypeSkill = TypeSkills.Metal;
break;
}
case "stones":
{
TypeSkill = TypeSkills.Stone;
break;
}
}
if (TypeSkill == null) return 0f;
var boostConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == TypeSkill);
if (boostConfig == null) return 0f;
var data = PlayerData[player.userID];
if (data == null) return 0f;
if (!data.Progress.ContainsKey(boostConfig._TypeSkills)) return 0f;
var elementLevel = boostConfig.LevelList.ElementAt(data.Progress[boostConfig._TypeSkills]);
if (elementLevel.PercentBoost <= 0) return 0f;
return elementLevel.PercentBoost;
}
#endregion
#region Methods
private static string HexToRustFormat(string hex)
{
if (string.IsNullOrEmpty(hex)) hex = "#FFFFFFFF";
var str = hex.Trim('#');
if (str.Length == 6) str += "FF";
if (str.Length != 8)
{
throw new Exception(hex);
throw new InvalidOperationException("Cannot convert a wrong format.");
}
var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);
Color color = new Color32(r, g, b, a);
return string.Format("{0:F2} {1:F2} {2:F2} {3:F2}", color.r, color.g, color.b, color.a);
}
private void AddExp(BasePlayer player, float amount)
{
PlayerData[player.userID].Exp += amount;
player.Command("note.inv", new object[]
{
ItemManager.GetItemDefinitions().GetRandom().itemid,
1,
$"+{amount} EXP",
(int) BaseEntity.GiveItemReason.Generic
});
}
private bool CanUpgradeSkill(BasePlayer player, TypeSkills skills)
{
Skills skill = _config.SkillsList.FirstOrDefault(x => x._TypeSkills == skills);
if (skill == null)
{
return false;
}
if (PlayerData[player.userID].Progress.ContainsKey(skills))
{
int currentLevel = PlayerData[player.userID].Progress[skills];
if (currentLevel < skill.LevelList.Count - 1)
{
double expCost = skill.LevelList[currentLevel].ExpCost;
if(PlayerData[player.userID].Exp == 0)
{
return false;
}
if (expCost <= PlayerData[player.userID].Exp)
{
return true;
}
}
}
return false;
}
[ChatCommand("skills")]
private void ChatSkills(BasePlayer player)
{
if (player == null) return;
SkillsUI(player);
}
[ConsoleCommand("skill.handler")]
private void SkillHandler(ConsoleSystem.Arg args)
{
var player = args.Player();
if (player == null) return;
if (args.Args.Length < 1) return;
TypeSkills item;
if (Enum.TryParse(args.Args[0], out item))
{
var findConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == item);
if (findConfig == null) return;
if (!CanUpgradeSkill(player, findConfig._TypeSkills)) return;
var _levelcost = findConfig.LevelList.ElementAt(PlayerData[player.userID].Progress[findConfig._TypeSkills]).ExpCost;
if (PlayerData[player.userID].Progress[findConfig._TypeSkills] < 5)
{
PlayerData[player.userID].Progress[findConfig._TypeSkills]++;
PlayerData[player.userID].Exp -= _levelcost;
}
SkillsUI(player);
}
return;
}
private void SkillsUI(BasePlayer player)
{
var container = new CuiElementContainer();
var xp = PlayerData[player.userID].Exp == 0 ? 0.00 : PlayerData[player.userID].Exp;
var xptext = xp.ToString().Length > 5 ? xp.ToString().Substring(0, 5) : xp.ToString();
CuiHelper.DestroyUi(player, "Skills");
container.Add(new CuiPanel
{
CursorEnabled = true,
RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "0 0", OffsetMax = "0 0" },
Image = { Color = "0 0 0 0.5", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat" }
}, "Overlay", "Skills");
container.Add(new CuiElement
{
Parent = "Skills",
Name = "BG",
Components =
{
new CuiRawImageComponent{Color = "1 1 1 1", Png = ImageLibrary.Call<string>("GetImage", "Viniette")},
new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1" }
}
});
container.Add(new CuiButton
{
RectTransform =
{
AnchorMin = "0 0",
AnchorMax= "1 1"
},
Text =
{
Text = "",
},
Button =
{
Color = "0 0 0 0",
Close = "Skills",
}
}, "BG");
container.Add(new CuiPanel
{
CursorEnabled = false,
Image = { Color = "0.7137255 0.7137255 0.7137255 0" },
RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-234.281 -152.347", OffsetMax = "234.55 152.953" }
}, "BG", "Parent");
container.Add(new CuiPanel
{
CursorEnabled = false,
Image = { Color = $"{HexToRustFormat("#B6B6B63E")}" },
RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-234.414 118.945", OffsetMax = "234.416 152.649" }
}, "Parent", "TitlePanel");
container.Add(new CuiElement
{
Name = "TitleText",
Parent = "TitlePanel",
Components = {
new CuiTextComponent { Text = "Прокачка навыков", Font = "robotocondensed-bold.ttf", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "0.9098039 0.8862745 0.8509804 0.8" },
new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-234.414 -16.852", OffsetMax = "234.416 16.851" }
}
});
container.Add(new CuiPanel
{
CursorEnabled = false,
Image = { Color = $"{HexToRustFormat("#B6B6B63E")}" },
RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-234.413 -152.646", OffsetMax = "234.417 -120.751" }
}, "Parent", "ExpPanel");
container.Add(new CuiElement
{
Name = "ExpText",
Parent = "ExpPanel",
Components = {
new CuiTextComponent { Text = $"{xptext}XP", Font = "robotocondensed-bold.ttf", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "0.9098039 0.8862745 0.8509804 0.8" },
new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-234.416 -15.948", OffsetMax = "234.414 15.947" }
}
});
int z = 0;
double offsetminy = 60.298, offsetmaxy = 113.893, offsetminx = -234.41, offsetmaxx = -2.938, marginy = 58.695, startoffsetminy = 60.298, startoffsetmaxy = 113.893;
foreach (var skill in _config.SkillsList)
{
var _image = ImageLibrary.Call<string>("GetImage", skill.Image);
var _displayName = skill.DisplayName;
var _description = skill.Description;
var _percentBoost = _config.SkillsList.FirstOrDefault(x => x._TypeSkills == skill._TypeSkills).LevelList.ElementAt(PlayerData[player.userID].Progress[skill._TypeSkills]).PercentBoost;
var _levelcost = _config.SkillsList.FirstOrDefault(x => x._TypeSkills == skill._TypeSkills).LevelList.ElementAt(PlayerData[player.userID].Progress[skill._TypeSkills]).ExpCost;
if (z == 4)
{
offsetminy = startoffsetminy;
offsetmaxy = startoffsetmaxy;
offsetminx = 2.944;
offsetmaxx = 234.416;
}
container.Add(new CuiPanel
{
CursorEnabled = false,
Image = { Color = "1 1 1 0" },
RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"{offsetminx} {offsetminy}", OffsetMax = $"{offsetmaxx} {offsetmaxy}" }
}, "Parent", $"{skill.DisplayName}");
container.Add(new CuiElement
{
Name = "Icon",
Parent = $"{skill.DisplayName}",
Components = {
new CuiRawImageComponent { Color = "1 1 1 1", Png = _image },
new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-115.953 -26.797", OffsetMax = "-62.415 26.798" }
}
});
container.Add(new CuiPanel
{
CursorEnabled = false,
Image = { Color = $"{HexToRustFormat("#B6B6B63E")}" },
RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-58.923 -18.116", OffsetMax = "115.737 26.798" }
}, $"{skill.DisplayName}", "InfoPanel");
container.Add(new CuiElement
{
Name = "Name",
Parent = "InfoPanel",
Components = {
new CuiTextComponent { Text = _displayName, Font = "robotocondensed-bold.ttf", FontSize = 11, Align = TextAnchor.MiddleLeft, Color = "0.9098039 0.8862745 0.8509804 0.8" },
new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-80.539 -1.917", OffsetMax = "52.43 12.626" }
}
});
if (_percentBoost == 0)
{
_percentBoost = 1;
}
string messageSend = _description.Replace("{0}", _percentBoost.ToString());
container.Add(new CuiElement
{
Name = "Description",
Parent = "InfoPanel",
Components = {
new CuiTextComponent { Text = messageSend, Font = "robotocondensed-bold.ttf", FontSize = 9, Align = TextAnchor.MiddleLeft, Color = "0.9098039 0.8862745 0.8509804 0.8" },
new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-80.535 -14.542", OffsetMax = "52.43 0" }
}
});
container.Add(new CuiButton
{
RectTransform =
{
AnchorMin = "0.5 0.5",
AnchorMax = "0.5 0.5",
OffsetMin = "54.184 -11.729",
OffsetMax = "77.642 11.729"
},
Button =
{
Color = !CanUpgradeSkill(player, skill._TypeSkills) ? $"{HexToRustFormat("#B6B6B63E")}" : $"{HexToRustFormat("#C8D3825A")}",
Command = CanUpgradeSkill(player, skill._TypeSkills) ? $"skill.handler {skill._TypeSkills}" : "",
},
Text =
{
Text = !CanUpgradeSkill(player, skill._TypeSkills) ? $"{_levelcost}XP" : "",
Align = TextAnchor.MiddleCenter,
Color = $"{HexToRustFormat("#E8E2D9E5")}",
Font = "robotocondensed-bold.ttf",
FontSize = 10
}
}, $"InfoPanel", $"CostBTN");
if (CanUpgradeSkill(player, skill._TypeSkills))
{
container.Add(new CuiElement
{
Parent = $"CostBTN",
Name = $"Icon",
Components =
{
new CuiRawImageComponent{Color = "1 1 1 1", Png = ImageLibrary.Call<string>("GetImage", "Upgrade")},
new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-7.481 -7.481", OffsetMax = "7.481 7.481" }
}
});
}
double _offsetminx = -58.955, _offsetmaxx = -25.315, marginx = 35.355;
for (int i = 1; i < 6; i++)
{
container.Add(new CuiPanel
{
CursorEnabled = false,
Image = { Color = PlayerData[player.userID].Progress[skill._TypeSkills] < i ? $"{HexToRustFormat("#B6B6B63E")}" : $"{HexToRustFormat("#E4F56D7E")}" },
RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"{_offsetminx} -26.797", OffsetMax = $"{_offsetmaxx} -21.091" }
}, $"{skill.DisplayName}", $"{skill.DisplayName}" + i);
_offsetminx += marginx;
_offsetmaxx += marginx;
}
offsetminy -= marginy;
offsetmaxy -= marginy;
z++;
}
CuiHelper.AddUi(player, container);
}
#endregion
}
}