using System.Diagnostics.CodeAnalysis; using CommandSystem; using LabApi.Events.Handlers; using LabApi.Features; using LabApi.Features.Wrappers; using LabApi.Loader.Features.Plugins; using PlayerRoles; using PlayerStatsSystem; using UnityEngine; using Logger = LabApi.Features.Console.Logger; namespace TrollTK; public class TrollDB { public string[] Teamkillers { get; set; } = []; } // ReSharper disable once InconsistentNaming public class TrollTK : Plugin { public override string Name => "TrollTK"; public override string Author => "Code002Lover"; public override Version Version { get; } = new(1, 0, 0); public override string Description => "Trolls teamkillers - reflecting damage :troll:"; public override Version RequiredApiVersion { get; } = new(LabApiProperties.CompiledVersion); public static TrollTK Singleton { get; private set; } private const string Message = "PAf4jcb1UobNURH4USLKhBQtgR/GTRD1isf6h9DvUSGmFMbdh9b/isrtgBKmGpa4HMbAhAX4gRf0Cez4h9L6UR/qh9DsUSCyCAfyhcb4gRjujBGmisQ5USD8URK0"; public override void Enable() { const string customAlphabet = "abcdefABCDEFGHIJKLMNPQRSTUghijklmnopqrstuvwxyz0123456789+/=VWXYZ"; const string standardAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var standardized = ""; foreach (var c in Message) { var index = customAlphabet.IndexOf(c); standardized += index >= 0 ? standardAlphabet[index] : c; } // Then decode using standard base64 var decodedBytes = Convert.FromBase64String(standardized); var decodedMessage = System.Text.Encoding.UTF8.GetString(decodedBytes); Logger.Info(decodedMessage); PlayerEvents.Hurting += ev => { if (ev.Attacker == null) return; if (ev.Attacker == ev.Player) return; // ReSharper disable once InconsistentNaming var isFF = ev.Player.Team == ev.Attacker.Team || (ev.Player.Team == Team.ChaosInsurgency && ev.Attacker.Team == Team.ClassD) || (ev.Player.Team == Team.ClassD && ev.Attacker.Team == Team.ChaosInsurgency) || (ev.Player.Team == Team.Scientists && ev.Attacker.Team == Team.FoundationForces) || (ev.Player.Team == Team.FoundationForces && ev.Attacker.Team == Team.Scientists); if(!isFF) return; if (Config!.Teamkillers.All(x => x != ev.Attacker.UserId)) return; ev.IsAllowed = false; if (ev.DamageHandler is FirearmDamageHandler firearmDamageHandler) { ev.Attacker.Damage(firearmDamageHandler.Damage, ev.Player, new Vector3(10,1,10), 69); } }; Singleton = this; } public override void Disable() { Singleton = null; } } [CommandHandler(typeof(RemoteAdminCommandHandler))] // ReSharper disable once InconsistentNaming public class AddTKCommand : ICommand { public string Command => "addtk"; public string[] Aliases => []; public string Description => "Adds a player to the known Teamkiller list"; public bool Execute(ArraySegment arguments, ICommandSender sender, [UnscopedRef] out string response) { var targetPlayerName = string.Join(" ", arguments); if (targetPlayerName.Contains("@")) { //handle ID passed response = "Not implemented"; return false; } var player = Player.List.FirstOrDefault(x => x.Nickname == targetPlayerName); if (player == null) { response = $"Player {targetPlayerName} not found"; return false; } TrollTK.Singleton.Config!.Teamkillers = TrollTK.Singleton.Config!.Teamkillers.Append(player.UserId).ToArray(); response = $"Added {targetPlayerName} to the known Teamkiller list"; return true; } }