diff --git a/WASDMenuAPI - SRC Files/Classes/WasdManager.cs b/WASDMenuAPI - SRC Files/Classes/WasdManager.cs index 96d067a..9f62692 100644 --- a/WASDMenuAPI - SRC Files/Classes/WasdManager.cs +++ b/WASDMenuAPI - SRC Files/Classes/WasdManager.cs @@ -8,36 +8,36 @@ public class WasdManager : IWasdMenuManager public void OpenMainMenu(CCSPlayerController? player, IWasdMenu? menu) { if(!TryGetPlayer(player, out var menuPlayer)) return; - menuPlayer.OpenMainMenu((WasdMenu?)menu); + menuPlayer?.OpenMainMenu((WasdMenu?)menu); } public void CloseMenu(CCSPlayerController? player) { if (!TryGetPlayer(player, out var menuPlayer)) return; - menuPlayer.OpenMainMenu(null); + menuPlayer?.OpenMainMenu(null); } public void CloseSubMenu(CCSPlayerController? player) { if (!TryGetPlayer(player, out var menuPlayer)) return; - menuPlayer.CloseSubMenu(); + menuPlayer?.CloseSubMenu(); } public void CloseAllSubMenus(CCSPlayerController? player) { if (!TryGetPlayer(player, out var menuPlayer)) return; - menuPlayer.CloseAllSubMenus(); + menuPlayer?.CloseAllSubMenus(); } public void OpenSubMenu(CCSPlayerController? player, IWasdMenu? menu) { if (!TryGetPlayer(player, out var menuPlayer)) return; - menuPlayer.OpenSubMenu(menu); + menuPlayer?.OpenSubMenu(menu); } public IWasdMenu CreateMenu(string title = "", string controlText = "") { - WasdMenu menu = new WasdMenu + WasdMenu menu = new() { Title = title, ControlText = controlText @@ -53,10 +53,10 @@ public class WasdManager : IWasdMenuManager public void UpdateActiveMenu(CCSPlayerController? player, Dictionary> list) { if (!TryGetPlayer(player, out var menuPlayer)) return; - menuPlayer.UpdateActiveMenu(list); + menuPlayer?.UpdateActiveMenu(list); } - private bool TryGetPlayer(CCSPlayerController? player, out WasdMenuPlayer menuPlayer) + private static bool TryGetPlayer(CCSPlayerController? player, out WasdMenuPlayer? menuPlayer) { menuPlayer = null!; if (player == null || !player.IsValid || player.IsBot || player.SteamID == 0) return false; diff --git a/WASDMenuAPI - SRC Files/Classes/WasdMenu.cs b/WASDMenuAPI - SRC Files/Classes/WasdMenu.cs index b84d9be..8a3f49e 100644 --- a/WASDMenuAPI - SRC Files/Classes/WasdMenu.cs +++ b/WASDMenuAPI - SRC Files/Classes/WasdMenu.cs @@ -11,9 +11,8 @@ public class WasdMenu : IWasdMenu public LinkedListNode? Prev { get; set; } = null; public LinkedListNode Add(string display, Action onChoice) { - if (Options == null) - Options = new(); - WasdMenuOption newOption = new WasdMenuOption + Options ??= new(); + WasdMenuOption newOption = new() { OptionDisplay = display, OnChoose = onChoice, diff --git a/WASDMenuAPI - SRC Files/Classes/WasdMenuPlayer.cs b/WASDMenuAPI - SRC Files/Classes/WasdMenuPlayer.cs index 6056ba9..b559be8 100644 --- a/WASDMenuAPI - SRC Files/Classes/WasdMenuPlayer.cs +++ b/WASDMenuAPI - SRC Files/Classes/WasdMenuPlayer.cs @@ -8,7 +8,7 @@ namespace WASDMenuAPI; public class WasdMenuPlayer { - public CCSPlayerController player { get; set; } + public required CCSPlayerController Player { get; set; } public WasdMenu? MainMenu = null; public LinkedListNode? CurrentChoice = null; public LinkedListNode? MenuStart = null; @@ -87,7 +87,7 @@ public class WasdMenuPlayer public void Choose() { - CurrentChoice?.Value.OnChoose?.Invoke(player, CurrentChoice.Value); + CurrentChoice?.Value.OnChoose?.Invoke(Player, CurrentChoice.Value); } public void ScrollDown() @@ -126,10 +126,10 @@ public class WasdMenuPlayer string endControl = ""; LinkedListNode? option = MenuStart; - if (option?.Value?.Parent?.Title != "") + if (!string.IsNullOrEmpty(option?.Value?.Parent?.Title)) builder.AppendLine($"{option.Value.Parent?.Title}
"); - if (option?.Value?.Parent?.ControlText != "") + if (!string.IsNullOrEmpty(option?.Value?.Parent?.ControlText)) endControl = option?.Value?.Parent?.ControlText ?? ""; int shown = 0; @@ -143,29 +143,43 @@ public class WasdMenuPlayer $"
"); break; }*/ - string text = option.Value.OptionDisplay!; + + string input = option.Value.OptionDisplay ?? string.Empty; + string color = string.Empty; + string text = input; + + if (input.Contains('|')) + { + string[] parts = input.Split("|", 2); + color = parts[0].StartsWith("#") && parts[0].Length == 7 ? parts[0] : string.Empty; + text = parts.Length > 1 ? parts[1] : ""; + } + if (option == CurrentChoice) { if (text.Length > maxLength) { - if (scrollIndex >= text.Length - maxLength) + int remaining = text.Length - scrollIndex; + if (remaining <= maxLength) { - text = text.Substring(scrollIndex); + text = SafeSubstring(text, scrollIndex, remaining); if (Server.TickCount % 32 == 0) scrollIndex = 0; } else { - text = text.Substring(scrollIndex, maxLength); + text = SafeSubstring(text, scrollIndex, maxLength); if (Server.TickCount % 32 == 0) scrollIndex += scrollJump; } } + else + text = SafeSubstring(text, 0, maxLength); builder.AppendLine($"
[ {text} ]
"); } else - builder.AppendLine($"{text.Substring(0, maxLength)}
"); + builder.AppendLine($"{SafeSubstring(text, 0, maxLength)}
"); option = option.Next; shown++; @@ -194,7 +208,7 @@ public class WasdMenuPlayer foreach (var item in list) { - WasdMenuOption newOption = new WasdMenuOption + WasdMenuOption newOption = new() { OptionDisplay = item.Key, OnChoose = item.Value, @@ -226,4 +240,14 @@ public class WasdMenuPlayer UpdateCenterHtml(); } + + private static string SafeSubstring(string text, int start, int length) + { + if (string.IsNullOrEmpty(text)) return ""; + if (start < 0) start = 0; + if (start >= text.Length) return ""; + if (start + length > text.Length) + length = text.Length - start; + return text.Substring(start, length); + } } \ No newline at end of file diff --git a/WASDMenuAPI - SRC Files/WASDMenuAPI.cs b/WASDMenuAPI - SRC Files/WASDMenuAPI.cs index 0f1897c..74cf980 100644 --- a/WASDMenuAPI - SRC Files/WASDMenuAPI.cs +++ b/WASDMenuAPI - SRC Files/WASDMenuAPI.cs @@ -6,9 +6,9 @@ namespace WASDMenuAPI; public class WASDMenuAPI { - public string ModuleName => "WASDMenuAPI"; - public string ModuleVersion => "1.0.2"; - public string ModuleAuthor => "Interesting"; + public static string ModuleName => "WASDMenuAPI"; + public static string ModuleVersion => "1.0.2"; + public static string ModuleAuthor => "Interesting"; public static readonly Dictionary Players = []; @@ -20,7 +20,7 @@ public class WASDMenuAPI if (@event.Userid != null) Players[@event.Userid.SteamID] = new WasdMenuPlayer { - player = @event.Userid, + Player = @event.Userid, Buttons = 0 }; return HookResult.Continue; @@ -38,7 +38,7 @@ public class WASDMenuAPI { Players[pl.SteamID] = new WasdMenuPlayer { - player = pl, + Player = pl, Buttons = pl.Buttons }; } @@ -48,23 +48,23 @@ public class WASDMenuAPI { foreach (var player in Players.Values.Where(p => p.MainMenu != null)) { - if ((player.Buttons & PlayerButtons.Forward) == 0 && (player.player.Buttons & PlayerButtons.Forward) != 0) + if ((player.Buttons & PlayerButtons.Forward) == 0 && (player.Player.Buttons & PlayerButtons.Forward) != 0) { player.ScrollUp(); } - else if((player.Buttons & PlayerButtons.Back) == 0 && (player.player.Buttons & PlayerButtons.Back) != 0) + else if((player.Buttons & PlayerButtons.Back) == 0 && (player.Player.Buttons & PlayerButtons.Back) != 0) { player.ScrollDown(); } - else if((player.Buttons & PlayerButtons.Use) == 0 && (player.player.Buttons & PlayerButtons.Use) != 0) + else if((player.Buttons & PlayerButtons.Use) == 0 && (player.Player.Buttons & PlayerButtons.Use) != 0) { player.Choose(); } - player.Buttons = player.player.Buttons; + player.Buttons = player.Player.Buttons; if(player.CenterHtml != "") Server.NextFrame(() => - player.player.PrintToCenterHtml(player.CenterHtml) + player.Player.PrintToCenterHtml(player.CenterHtml) ); } } diff --git a/jRandomSkills - SRC Files/src/lang/en.json b/jRandomSkills - SRC Files/src/lang/en.json index c9938d1..14edce5 100644 --- a/jRandomSkills - SRC Files/src/lang/en.json +++ b/jRandomSkills - SRC Files/src/lang/en.json @@ -132,7 +132,7 @@ "gambler": "Gambler", "gambler_desc": "Select a skill from the list provided.", "gambler_select_info": "Select your skill:", - "gambler_more": "Refresh for $100", + "gambler_more": "#00FF00|Refresh for ${0}", "ghost": "Ghost", "ghost_desc": "You are completely invisible", diff --git a/jRandomSkills - SRC Files/src/lang/pl.json b/jRandomSkills - SRC Files/src/lang/pl.json index cbe52c8..3541787 100644 --- a/jRandomSkills - SRC Files/src/lang/pl.json +++ b/jRandomSkills - SRC Files/src/lang/pl.json @@ -132,7 +132,7 @@ "gambler": "Hazardzista", "gambler_desc": "Wybierz umiejętność z podanej listy.", "gambler_select_info": "Wybierz umiejętność:", - "gambler_more": "Odśwież za $100", + "gambler_more": "#00FF00|Odśwież za ${0}", "ghost": "Duszek", "ghost_desc": "Jesteś całkowicie niewidzialny", diff --git a/jRandomSkills - SRC Files/src/lang/pt-br.json b/jRandomSkills - SRC Files/src/lang/pt-br.json index cfe3369..8a0425e 100644 --- a/jRandomSkills - SRC Files/src/lang/pt-br.json +++ b/jRandomSkills - SRC Files/src/lang/pt-br.json @@ -132,7 +132,7 @@ "gambler": "Apostador", "gambler_desc": "Selecione uma habilidade da lista.", "gambler_select_info": "Escolha sua habilidade:", - "gambler_more": "Atualizar por $100", + "gambler_more": "#00FF00|Atualizar por ${0}", "ghost": "Fantasma", "ghost_desc": "Você é completamente invisível", diff --git a/jRandomSkills - SRC Files/src/lang/zh.json b/jRandomSkills - SRC Files/src/lang/zh.json index a4aed64..a53a57c 100644 --- a/jRandomSkills - SRC Files/src/lang/zh.json +++ b/jRandomSkills - SRC Files/src/lang/zh.json @@ -132,7 +132,7 @@ "gambler": "赌徒", "gambler_desc": "从提供的列表中选择一个技能。", "gambler_select_info": "选择你的技能:", - "gambler_more": "刷新 $100", + "gambler_more": "#00FF00|刷新 ${0}", "ghost": "幽灵", "ghost_desc": "你完全隐形", diff --git a/jRandomSkills - SRC Files/src/player/skills/Gambler.cs b/jRandomSkills - SRC Files/src/player/skills/Gambler.cs index e803fec..b75ccab 100644 --- a/jRandomSkills - SRC Files/src/player/skills/Gambler.cs +++ b/jRandomSkills - SRC Files/src/player/skills/Gambler.cs @@ -47,6 +47,8 @@ namespace jRandomSkills Instance.AddTimer(.1f, () => { playerInfo.Skill = skill.Skill; + if (skill.Skill != skillName) + playerInfo.SpecialSkill = skillName; playerInfo.SkillChance = 1; Instance.SkillAction(skill.Skill.ToString(), "EnableSkill", [player]); }); @@ -73,7 +75,7 @@ namespace jRandomSkills HashSet<(string, string)> menuItems = [(firstSkill.Name, firstSkill.Skill.ToString()), (secondSkill.Name, secondSkill.Skill.ToString()), - (Localization.GetTranslation("gambler_more"), skillName.ToString())]; + (Localization.GetTranslation("gambler_more", refreshPrice), skillName.ToString())]; SkillUtils.CreateMenu(player, menuItems); } diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll index b7744d5..cd9a908 100644 Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll differ diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll index 4eb2d04..359755d 100644 Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll differ diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/lang/en.json b/jRandomSkills - Server Files/plugins/jRandomSkills/lang/en.json index c9938d1..14edce5 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/lang/en.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/lang/en.json @@ -132,7 +132,7 @@ "gambler": "Gambler", "gambler_desc": "Select a skill from the list provided.", "gambler_select_info": "Select your skill:", - "gambler_more": "Refresh for $100", + "gambler_more": "#00FF00|Refresh for ${0}", "ghost": "Ghost", "ghost_desc": "You are completely invisible", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/lang/pl.json b/jRandomSkills - Server Files/plugins/jRandomSkills/lang/pl.json index cbe52c8..3541787 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/lang/pl.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/lang/pl.json @@ -132,7 +132,7 @@ "gambler": "Hazardzista", "gambler_desc": "Wybierz umiejętność z podanej listy.", "gambler_select_info": "Wybierz umiejętność:", - "gambler_more": "Odśwież za $100", + "gambler_more": "#00FF00|Odśwież za ${0}", "ghost": "Duszek", "ghost_desc": "Jesteś całkowicie niewidzialny", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/lang/pt-br.json b/jRandomSkills - Server Files/plugins/jRandomSkills/lang/pt-br.json index cfe3369..8a0425e 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/lang/pt-br.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/lang/pt-br.json @@ -132,7 +132,7 @@ "gambler": "Apostador", "gambler_desc": "Selecione uma habilidade da lista.", "gambler_select_info": "Escolha sua habilidade:", - "gambler_more": "Atualizar por $100", + "gambler_more": "#00FF00|Atualizar por ${0}", "ghost": "Fantasma", "ghost_desc": "Você é completamente invisível", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/lang/zh.json b/jRandomSkills - Server Files/plugins/jRandomSkills/lang/zh.json index a4aed64..a53a57c 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/lang/zh.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/lang/zh.json @@ -132,7 +132,7 @@ "gambler": "赌徒", "gambler_desc": "从提供的列表中选择一个技能。", "gambler_select_info": "选择你的技能:", - "gambler_more": "刷新 $100", + "gambler_more": "#00FF00|刷新 ${0}", "ghost": "幽灵", "ghost_desc": "你完全隐形",