diff --git a/[ D3X ] dRandomSkills - SRC Files/src/dRandomSkills.cs b/[ D3X ] dRandomSkills - SRC Files/src/dRandomSkills.cs index 1dd6fec..eceb28b 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/dRandomSkills.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/dRandomSkills.cs @@ -12,7 +12,7 @@ namespace dRandomSkills public override string ModuleName => "[CS2] D3X - [ Random Skills ]"; public override string ModuleAuthor => "D3X"; public override string ModuleDescription => "Plugin dodaje na serwer losowe moce co runde na serwery CS2 by D3X"; - public override string ModuleVersion => "1.0.0"; + public override string ModuleVersion => "1.0.1"; public override void Load(bool hotReload) { @@ -74,35 +74,6 @@ namespace dRandomSkills public static class SkillData { - public static dSkill_SkillInfo[] Skills { get; } = new[] - { - new dSkill_SkillInfo("Paweł Jumper", "Otrzymujesz dodatkowy Skok", "#FFA500"), - new dSkill_SkillInfo("Duszek", "Jesteś całkowicie niewidzialny", "#FFFFFF"), - new dSkill_SkillInfo("BunnyHop", "Otrzymujesz auto BunnyHopa", "#EB4034"), - new dSkill_SkillInfo("Impostor", "Otrzymujesz na start rundy model postaci wroga", "#99140B"), - new dSkill_SkillInfo("Phoenix", "Masz 35% szans na odrodzenie się po śmierci", "#ff5C0A"), - new dSkill_SkillInfo("Muhammed", "Po śmierci wybucha i zabija graczy w obrębie", "#F5CB42"), - new dSkill_SkillInfo("Pilot", "Latanie na noclip przez dany czas", "#1466F5"), - new dSkill_SkillInfo("Rambo", "Otrzymujesz losową ilość zdrowia na start rundy", "#009905"), - new dSkill_SkillInfo("Bogacz", "Otrzymujesz losową ilość kasy na start rundy", "#D4AF37"), - new dSkill_SkillInfo("Flash", "Otrzymujesz losową ilość speed na start rundy", "#A31912"), - new dSkill_SkillInfo("Astronauta", "Otrzymujesz losową ilość grawitacji na start rundy", "#7E10AD"), - new dSkill_SkillInfo("Medyk", "Otrzymujesz losową ilość apteczek na start rundy", "#42FF5F"), - new dSkill_SkillInfo("Kurczak", "Otrzymujesz model kurczaka + jesteś o 10% szybszy", "#FF8B42"), - new dSkill_SkillInfo("One Shot", "Po trafieniu od razu zabija przeciwnika", "#ff5CD9"), - new dSkill_SkillInfo("Drakula", "Po trafieniu ofiary otrzymujesz zwrot zdrowia w postaci danego procentu zadanych obrażeń", "#FA050D"), - new dSkill_SkillInfo("Anty Flash", "Posiadasz odporność na flashe", "#D6E6FF"), - // new dSkill_SkillInfo("Mini Gun", "Strzelasz 50% szybciej z broni", "#2CF5BF"), - new dSkill_SkillInfo("Teleportator", "Zamieniasz się miejscami z trafionym wrogiem", "#8A2BE2"), - new dSkill_SkillInfo("Cień", "Teleportujesz się za plecy losowego wroga", "#18171A"), - new dSkill_SkillInfo("Katapulta", "Masz 25% szans na podrzucenie wroga", "#FF4500"), - new dSkill_SkillInfo("Nieskończone Ammo", "Otrzymujesz nieskończoną ilość ammo do wszystkich swoich broni", "#0000FF"), - new dSkill_SkillInfo("Żelazna Głowa", "Nie otrzymujesz obrażeń w głowę", "#8B4513"), - new dSkill_SkillInfo("Eliminator", "Możesz szybciej podłożyć bombe oraz ją zdefować", "#8A2BE2"), - // new dSkill_SkillInfo("Redukcja Obrażeń", "Redukujesz daną ilość obrażeń, które otrzymujesz", "#696969"), - // new dSkill_SkillInfo("Mnożnik Obrażeń", "Zadajesz pomnożoną ilość obrażeń", "#FF0000"), - new dSkill_SkillInfo("Obrót Wroga", "Masz 25% szans na obrócenie wroga o 180 stopni po trafieniu", "#00FF00"), - new dSkill_SkillInfo("Rozbrojenie", "Masz 25% szans na wyrzucenie broni wroga po trafieniu", "#FF4500") - }; + public static List Skills { get; } = new List(); } } \ No newline at end of file diff --git a/[ D3X ] dRandomSkills - SRC Files/src/menu/Menu.cs b/[ D3X ] dRandomSkills - SRC Files/src/menu/Menu.cs index 05d3b88..9d4ca2a 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/menu/Menu.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/menu/Menu.cs @@ -13,7 +13,7 @@ namespace dRandomSkills { CenterHtmlMenu menu = new($"[ ★ Lista Super Mocy ★ ]"); - for (int i = 0; i < SkillData.Skills.Length; i++) + for (int i = 0; i < SkillData.Skills.Count; i++) { var skill = SkillData.Skills[i]; string skillName = $"{skill.Name}"; diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerEvents.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerEvents.cs index 5a71faf..8e0ed30 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerEvents.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerEvents.cs @@ -70,7 +70,7 @@ namespace dRandomSkills { skillPlayer.IsDrawing = false; - var randomSkill = SkillData.Skills[Instance.Random.Next(SkillData.Skills.Length)]; + var randomSkill = SkillData.Skills[Instance.Random.Next(SkillData.Skills.Count)]; skillPlayer.Skill = randomSkill.Name; Utils.PrintToChat(player, $"{ChatColors.DarkRed}{randomSkill.Name}{ChatColors.Lime}: {randomSkill.Description}", false); @@ -90,8 +90,8 @@ namespace dRandomSkills if (!string.IsNullOrEmpty(teammateSkills)) { - player.PrintToChat($" {ChatColors.Lime}Supermoce twoich sojuszników:"); - player.PrintToChat(teammateSkills.TrimEnd('\n')); + Utils.PrintToChat(player, $" {ChatColors.Lime}Supermoce twoich sojuszników:", false); + Utils.PrintToChat(player, teammateSkills.TrimEnd('\n'), false); } }); } @@ -106,19 +106,18 @@ namespace dRandomSkills var victim = @event.Userid; var attacker = @event.Attacker; + if (victim == null || attacker == null || victim == attacker) return HookResult.Continue; + if(Config.config.Settings.KillerSkillInfo) { - if (victim != null && victim?.IsValid == true && attacker != null && attacker?.IsValid == true && victim != attacker) + var attackerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID); + if (attackerInfo != null) { - var attackerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID); - if (attackerInfo != null) - { - var skillData = SkillData.Skills.FirstOrDefault(s => s.Name == attackerInfo.Skill); - string skillDesc = skillData?.Description ?? "Brak opisu"; + var skillData = SkillData.Skills.FirstOrDefault(s => s.Name == attackerInfo.Skill); + string skillDesc = skillData?.Description ?? "Brak opisu"; - victim.PrintToChat($"{ChatColors.Lime}Supermoc przeciwnika który cię zabił:"); - Utils.PrintToChat(victim, $"{ChatColors.DarkRed}{attacker.PlayerName}{ChatColors.Lime} posiada mocy: {ChatColors.DarkRed}{attackerInfo.Skill}{ChatColors.Lime} - {skillDesc}", false); - } + Utils.PrintToChat(victim, $"Supermoc przeciwnika {ChatColors.DarkRed}{attacker.PlayerName}{ChatColors.Lime}:", false); + Utils.PrintToChat(victim, $"{ChatColors.DarkRed}{attackerInfo.Skill}{ChatColors.Lime} - {skillDesc}", false); } } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerOnTick.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerOnTick.cs index bc8efdb..e92133e 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerOnTick.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerOnTick.cs @@ -1,4 +1,3 @@ -using System.Diagnostics; using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using static CounterStrikeSharp.API.Core.Listeners; @@ -8,13 +7,8 @@ namespace dRandomSkills { public static class PlayerOnTick { - private static readonly Stopwatch DrawStopwatch = new Stopwatch(); - private static readonly float DrawUpdateInterval = 0.5f; - public static void Load() { - DrawStopwatch.Start(); - Instance.RegisterListener(() => { foreach (var player in Utilities.GetPlayers()) @@ -37,12 +31,11 @@ namespace dRandomSkills string infoLine = ""; string skillLine = ""; - if (skillPlayer.IsDrawing && DrawStopwatch.Elapsed.TotalSeconds >= DrawUpdateInterval) + if (skillPlayer.IsDrawing) { - var randomSkill = SkillData.Skills[Instance.Random.Next(SkillData.Skills.Length)]; + var randomSkill = SkillData.Skills[Instance.Random.Next(SkillData.Skills.Count)]; infoLine = $"Losowanie mocy:
"; skillLine = $"{randomSkill.Name}
"; - DrawStopwatch.Restart(); } else if (!skillPlayer.IsDrawing) { diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/AntyFlash.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/AntyFlash.cs index d006c05..2dee199 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/AntyFlash.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/AntyFlash.cs @@ -7,6 +7,8 @@ namespace dRandomSkills { public static void LoadAntyFlash() { + Utils.RegisterSkill("Anty Flash", "Posiadasz odporność na flashe", "#D6E6FF"); + Instance.RegisterEventHandler((@event, info) => { var player = @event.Userid; diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Astronauta.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Astronauta.cs index 32202a7..93858b4 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Astronauta.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Astronauta.cs @@ -8,6 +8,8 @@ namespace dRandomSkills { public static void LoadAstronauta() { + Utils.RegisterSkill("Astronauta", "Otrzymujesz losową ilość grawitacji na start rundy", "#7E10AD"); + Instance.RegisterEventHandler((@event, info) => { Instance.AddTimer(0.1f, () => diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Bogacz.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Bogacz.cs index 4bbc528..ea58c4b 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Bogacz.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Bogacz.cs @@ -8,6 +8,8 @@ namespace dRandomSkills { public static void LoadBogacz() { + Utils.RegisterSkill("Bogacz", "Otrzymujesz losową ilość kasy na start rundy", "#D4AF37"); + Instance.RegisterEventHandler((@event, info) => { Instance.AddTimer(0.1f, () => diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/BunnyHop.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/BunnyHop.cs index b3dea3e..7775a99 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/BunnyHop.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/BunnyHop.cs @@ -13,6 +13,8 @@ namespace dRandomSkills public static void LoadBunnyHop() { + Utils.RegisterSkill("BunnyHop", "Otrzymujesz auto BunnyHopa", "#EB4034"); + Instance.RegisterListener(OnTick); } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Cien.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Cien.cs index 73a421d..753591f 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Cien.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Cien.cs @@ -10,6 +10,8 @@ namespace dRandomSkills public static void LoadCien() { + Utils.RegisterSkill("Cień", "Teleportujesz się za plecy losowego wroga", "#18171A"); + Instance.RegisterEventHandler((@event, info) => { var attacker = @event.Attacker; diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Drakula.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Drakula.cs index a4134b9..23c20c9 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Drakula.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Drakula.cs @@ -10,6 +10,8 @@ namespace dRandomSkills public static void LoadDrakula() { + Utils.RegisterSkill("Drakula", "Po trafieniu ofiary otrzymujesz zwrot zdrowia w postaci danego procentu zadanych obrażeń", "#FA050D"); + Instance.RegisterEventHandler((@event, info) => { var attacker = @event.Attacker; @@ -19,7 +21,7 @@ namespace dRandomSkills var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID); - if (playerInfo?.Skill == "Drakula" && attacker.PawnIsAlive) + if (playerInfo?.Skill == "Drakula" && victim.PawnIsAlive) { HealAttacker(attacker, @event.DmgHealth); } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Duszek.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Duszek.cs index d97ddb5..ac2047f 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Duszek.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Duszek.cs @@ -9,6 +9,8 @@ namespace dRandomSkills { public static void LoadDuszek() { + Utils.RegisterSkill("Duszek", "Jesteś całkowicie niewidzialny", "#FFFFFF"); + Instance.RegisterEventHandler((@event, info) => { Instance.AddTimer(0.1f, () => diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Eliminator.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Eliminator.cs index 2ad47e8..e8e050b 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Eliminator.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Eliminator.cs @@ -8,11 +8,13 @@ namespace dRandomSkills { public static void LoadEliminator() { + Utils.RegisterSkill("Eliminator", "Możesz szybciej podłożyć bombę oraz ją zdefować", "#8A2BE2"); + Instance.RegisterEventHandler((@event, info) => { foreach (var player in Utilities.GetPlayers()) { - if (!IsPlayerValid(player)) continue; + if (!IsPlayerValid(player)) return HookResult.Continue; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); if (playerInfo?.Skill == "Eliminator") diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Flash.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Flash.cs index 88299cf..e341321 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Flash.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Flash.cs @@ -8,16 +8,18 @@ namespace dRandomSkills { public static void LoadFlash() { + Utils.RegisterSkill("Flash", "Otrzymujesz losową ilość speed na start rundy", "#A31912"); + Instance.RegisterEventHandler((@event, info) => { Instance.AddTimer(0.1f, () => { foreach (var player in Utilities.GetPlayers()) { - if (!IsPlayerValid(player)) continue; + if (!IsPlayerValid(player)) return; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Flash") continue; + if (playerInfo?.Skill != "Flash") return; var playerPawn = player.PlayerPawn?.Value; diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Impostor.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Impostor.cs index 6a6ba7c..07091a0 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Impostor.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Impostor.cs @@ -8,28 +8,149 @@ namespace dRandomSkills { public static class Impostor { + private static readonly List CTModels = new List + { + // SWAT + "characters/models/ctm_swat/ctm_swat_variante.vmdl", + "characters/models/ctm_swat/ctm_swat_variantf.vmdl", + "characters/models/ctm_swat/ctm_swat_varianth.vmdl", + "characters/models/ctm_swat/ctm_swat_varianti.vmdl", + "characters/models/ctm_swat/ctm_swat_variantj.vmdl", + "characters/models/ctm_swat/ctm_swat_variantk.vmdl", + + // ST6 + "characters/models/ctm_st6/ctm_st6_variante.vmdl", + "characters/models/ctm_st6/ctm_st6_variantg.vmdl", + "characters/models/ctm_st6/ctm_st6_varianti.vmdl", + "characters/models/ctm_st6/ctm_st6_variantj.vmdl", + "characters/models/ctm_st6/ctm_st6_variantk.vmdl", + "characters/models/ctm_st6/ctm_st6_variantl.vmdl", + "characters/models/ctm_st6/ctm_st6_variantm.vmdl", + "characters/models/ctm_st6/ctm_st6_variantn.vmdl", + + // SAS + "characters/models/ctm_sas/ctm_sas.vmdl", + "characters/models/ctm_sas/ctm_sas_variantf.vmdl", + "characters/models/ctm_sas/ctm_sas_variantg.vmdl", + + // CTM_HEAVY + "characters/models/ctm_heavy/ctm_heavy.vmdl", + + // GENDARMERIE + "characters/models/ctm_gendarmerie/ctm_gendarmerie_varianta.vmdl", + "characters/models/ctm_gendarmerie/ctm_gendarmerie_variantb.vmdl", + "characters/models/ctm_gendarmerie/ctm_gendarmerie_variantc.vmdl", + "characters/models/ctm_gendarmerie/ctm_gendarmerie_variantd.vmdl", + "characters/models/ctm_gendarmerie/ctm_gendarmerie_variante.vmdl", + + // FBI + "characters/models/ctm_fbi/ctm_fbi.vmdl", + "characters/models/ctm_fbi/ctm_fbi_varianta.vmdl", + "characters/models/ctm_fbi/ctm_fbi_variantb.vmdl", + "characters/models/ctm_fbi/ctm_fbi_variantc.vmdl", + "characters/models/ctm_fbi/ctm_fbi_variantd.vmdl", + "characters/models/ctm_fbi/ctm_fbi_variante.vmdl", + "characters/models/ctm_fbi/ctm_fbi_variantf.vmdl", + "characters/models/ctm_fbi/ctm_fbi_variantg.vmdl", + "characters/models/ctm_fbi/ctm_fbi_varianth.vmdl", + + // DIVER + "characters/models/ctm_diver/ctm_diver_varianta.vmdl", + "characters/models/ctm_diver/ctm_diver_variantb.vmdl", + "characters/models/ctm_diver/ctm_diver_variantc.vmdl", + }; + + + private static readonly List TModels = new List + { + // BALKAN + "characters/models/tm_balkan/tm_balkan_variantf.vmdl", + "characters/models/tm_balkan/tm_balkan_variantg.vmdl", + "characters/models/tm_balkan/tm_balkan_varianth.vmdl", + "characters/models/tm_balkan/tm_balkan_varianti.vmdl", + "characters/models/tm_balkan/tm_balkan_variantj.vmdl", + "characters/models/tm_balkan/tm_balkan_variantk.vmdl", + "characters/models/tm_balkan/tm_balkan_variantl.vmdl", + + // JUMPSUIT + "characters/models/tm_jumpsuit/tm_jumpsuit_varianta.vmdl", + "characters/models/tm_jumpsuit/tm_jumpsuit_variantb.vmdl", + "characters/models/tm_jumpsuit/tm_jumpsuit_variantc.vmdl", + + // JUNGLERAIDER + "characters/models/tm_jungle_raider/tm_jungle_raider_varianta.vmdl", + "characters/models/tm_jungle_raider/tm_jungle_raider_variantb.vmdl", + "characters/models/tm_jungle_raider/tm_jungle_raider_variantb2.vmdl", + "characters/models/tm_jungle_raider/tm_jungle_raider_variantc.vmdl", + "characters/models/tm_jungle_raider/tm_jungle_raider_variantd.vmdl", + "characters/models/tm_jungle_raider/tm_jungle_raider_variante.vmdl", + "characters/models/tm_jungle_raider/tm_jungle_raider_variantf.vmdl", + "characters/models/tm_jungle_raider/tm_jungle_raider_variantf2.vmdl", + + // LEET + "characters/models/tm_leet/tm_leet_varianta.vmdl", + "characters/models/tm_leet/tm_leet_variantb.vmdl", + "characters/models/tm_leet/tm_leet_variantc.vmdl", + "characters/models/tm_leet/tm_leet_variantd.vmdl", + "characters/models/tm_leet/tm_leet_variante.vmdl", + "characters/models/tm_leet/tm_leet_variantf.vmdl", + "characters/models/tm_leet/tm_leet_variantg.vmdl", + "characters/models/tm_leet/tm_leet_varianth.vmdl", + "characters/models/tm_leet/tm_leet_varianti.vmdl", + "characters/models/tm_leet/tm_leet_variantj.vmdl", + "characters/models/tm_leet/tm_leet_variantk.vmdl", + + // PHOENIX + "characters/models/tm_phoenix/tm_phoenix.vmdl", + "characters/models/tm_phoenix/tm_phoenix_varianta.vmdl", + "characters/models/tm_phoenix/tm_phoenix_variantb.vmdl", + "characters/models/tm_phoenix/tm_phoenix_variantc.vmdl", + "characters/models/tm_phoenix/tm_phoenix_variantd.vmdl", + "characters/models/tm_phoenix/tm_phoenix_variantf.vmdl", + "characters/models/tm_phoenix/tm_phoenix_variantg.vmdl", + "characters/models/tm_phoenix/tm_phoenix_varianth.vmdl", + "characters/models/tm_phoenix/tm_phoenix_varianti.vmdl", + + // PHOENIX HEAVY + "characters/models/tm_phoenix_heavy/tm_phoenix_heavy.vmdl", + + // PROFESSIONAL + "characters/models/tm_professional/tm_professional_varf.vmdl", + "characters/models/tm_professional/tm_professional_varf1.vmdl", + "characters/models/tm_professional/tm_professional_varf2.vmdl", + "characters/models/tm_professional/tm_professional_varf3.vmdl", + "characters/models/tm_professional/tm_professional_varf4.vmdl", + "characters/models/tm_professional/tm_professional_varf5.vmdl", + "characters/models/tm_professional/tm_professional_varg.vmdl", + "characters/models/tm_professional/tm_professional_varh.vmdl", + "characters/models/tm_professional/tm_professional_vari.vmdl", + "characters/models/tm_professional/tm_professional_varj.vmdl", + }; + + public static void LoadImpostor() { + Utils.RegisterSkill("Impostor", "Otrzymujesz na start rundy model postaci wroga", "#99140B"); + Instance.RegisterEventHandler((@event, info) => { Instance.AddTimer(0.1f, () => { foreach (var player in Utilities.GetPlayers()) { - if (!IsPlayerValid(player)) continue; - var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Impostor") continue; - - string model = player.Team == CsTeam.Terrorist - ? "characters/models/ctm_fbi/ctm_fbi_variantb.vmdl" - : player.Team == CsTeam.CounterTerrorist - ? "characters/models/tm_phoenix/tm_phoenix_varianta.vmdl" - : null; - - if (model != null) + if (playerInfo?.Skill == "Impostor") { - SetPlayerModel(player, model); + string model = player.Team == CsTeam.Terrorist + ? GetRandomModel(CTModels) + : player.Team == CsTeam.CounterTerrorist + ? GetRandomModel(TModels) + : null; + + if (model != null) + { + SetPlayerModel(player, model); + } } } }); @@ -38,6 +159,14 @@ namespace dRandomSkills }); } + private static string GetRandomModel(List models) + { + if (models == null || models.Count == 0) return null; + var random = new Random(); + int index = random.Next(models.Count); + return models[index]; + } + private static void SetPlayerModel(CCSPlayerController player, string model) { var pawn = player.PlayerPawn?.Value; @@ -51,10 +180,5 @@ namespace dRandomSkills pawn.Render = Color.FromArgb(255, originalRender.R, originalRender.G, originalRender.B); }); } - - private static bool IsPlayerValid(CCSPlayerController player) - { - return player != null && player.IsValid && player.PlayerPawn?.Value != null; - } } } \ No newline at end of file diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Katapulta.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Katapulta.cs index 6fab490..08216a2 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Katapulta.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Katapulta.cs @@ -8,6 +8,8 @@ namespace dRandomSkills public static void LoadKatapulta() { + Utils.RegisterSkill("Katapulta", "Masz 25% szans na podrzucenie wroga", "#FF4500"); + Instance.RegisterEventHandler((@event, info) => { var attacker = @event.Attacker; @@ -19,7 +21,7 @@ namespace dRandomSkills var attackerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID); - if (attackerInfo?.Skill == "Katapulta" && attacker.PawnIsAlive) + if (attackerInfo?.Skill == "Katapulta" && victim.PawnIsAlive) { if (Instance.Random.NextDouble() <= 0.25) { diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Kurczak.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Kurczak.cs index 0efcbec..2ef5f30 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Kurczak.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Kurczak.cs @@ -9,16 +9,18 @@ namespace dRandomSkills { public static void LoadKurczak() { + Utils.RegisterSkill("Kurczak", "Otrzymujesz model kurczaka + jesteś o 10% szybszy", "#FF8B42"); + Instance.RegisterEventHandler((@event, info) => { Instance.AddTimer(0.1f, () => { foreach (var player in Utilities.GetPlayers()) { - if (!IsPlayerValid(player)) continue; + if (!IsPlayerValid(player)) return; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Kurczak") continue; + if (playerInfo?.Skill != "Kurczak") return; var playerPawn = player.PlayerPawn?.Value; if (playerPawn != null) diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Medyk.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Medyk.cs index b7d9baa..4b14d26 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Medyk.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Medyk.cs @@ -8,15 +8,17 @@ namespace dRandomSkills { public static void LoadMedyk() { + Utils.RegisterSkill("Medyk", "Otrzymujesz losową ilość apteczek na start rundy", "#42FF5F"); + Instance.RegisterEventHandler((@event, info) => { Instance.AddTimer(0.1f, () => { foreach (var player in Utilities.GetPlayers()) { - if (!IsPlayerValid(player)) continue; + if (!IsPlayerValid(player)) return; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Medyk") continue; + if (playerInfo?.Skill != "Medyk") return; int healthshot = Instance.Random.Next(1, 10); for (int i = 0; i < healthshot; i++) @@ -33,10 +35,10 @@ namespace dRandomSkills { foreach (var player in Utilities.GetPlayers()) { - if (!IsPlayerValid(player)) continue; + if (!IsPlayerValid(player)) return HookResult.Continue; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Medyk") continue; + if (playerInfo?.Skill != "Medyk") return HookResult.Continue; player.RemoveItemByDesignerName("weapon_healthshot"); } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Muhammed.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Muhammed.cs index a5d3abd..9700b2f 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Muhammed.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Muhammed.cs @@ -12,6 +12,8 @@ namespace dRandomSkills public static void LoadMuhammed() { + Utils.RegisterSkill("Muhammed", "Po śmierci wybucha i zabija graczy w obrębie", "#F5CB42"); + Instance.RegisterEventHandler((@event, info) => { CCSPlayerController player = @event.Userid; @@ -19,9 +21,10 @@ namespace dRandomSkills if (!IsPlayerValid(player)) return HookResult.Continue; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Muhammed") return HookResult.Continue; - - SpawnExplosion(player); + if (playerInfo?.Skill == "Muhammed") + { + SpawnExplosion(player); + } return HookResult.Continue; }); diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/NieskonczoneAmmo.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/NieskonczoneAmmo.cs index 25baf40..4ab7bfe 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/NieskonczoneAmmo.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/NieskonczoneAmmo.cs @@ -5,9 +5,10 @@ namespace dRandomSkills { public static class NieskonczoneAmmo { - public static void LoadNieskonczoneAmmo() { + Utils.RegisterSkill("Nieskończone Ammo", "Otrzymujesz nieskończoną ilość ammo do wszystkich swoich broni", "#0000FF"); + Instance.RegisterEventHandler((@event, info) => { var player = @event.Userid; diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ObrotWroga.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ObrotWroga.cs index 95526ed..b8678e6 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ObrotWroga.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ObrotWroga.cs @@ -6,9 +6,10 @@ namespace dRandomSkills { public static class ObrotWroga { - public static void LoadObrotWroga() { + Utils.RegisterSkill("Obrót Wroga", "Masz 25% szans na obrócenie wroga o 180 stopni po trafieniu", "#00FF00"); + Instance.RegisterEventHandler((@event, info) => { var attacker = @event.Attacker; @@ -19,7 +20,7 @@ namespace dRandomSkills var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID); - if (playerInfo?.Skill == "Obrót Wroga" && attacker.PawnIsAlive) + if (playerInfo?.Skill == "Obrót Wroga" && victim.PawnIsAlive) { if (Instance.Random.NextDouble() <= 0.25) { diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/OneShot.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/OneShot.cs index 5a79e70..3a11c27 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/OneShot.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/OneShot.cs @@ -9,27 +9,34 @@ namespace dRandomSkills { public static void LoadOneShot() { + Utils.RegisterSkill("One Shot", "Po trafieniu od razu zabija przeciwnika", "#ff5CD9"); + VirtualFunctions.CBaseEntity_TakeDamageOldFunc.Hook(OnTakeDamage, HookMode.Pre); } private static HookResult OnTakeDamage(DynamicHook h) { - CTakeDamageInfo param = h.GetParam(1); + CEntityInstance param = h.GetParam(0); + CTakeDamageInfo param2 = h.GetParam(1); - if (param == null || param?.Attacker == null || !param.Attacker.Value.IsValid) return HookResult.Continue; + if (param == null || param2 == null || param2.Attacker == null) + return HookResult.Continue; - CCSPlayerPawn attackerPawn = new CCSPlayerPawn(param.Attacker.Value.Handle); - if (attackerPawn == null || attackerPawn.Controller == null || !attackerPawn.Controller.Value.IsValid) return HookResult.Continue; + CCSPlayerPawn attackerPawn = new CCSPlayerPawn(param2.Attacker.Value.Handle); + CCSPlayerPawn victimPawn = new CCSPlayerPawn(param.Handle); + + if (attackerPawn == null || attackerPawn.Controller?.Value == null || victimPawn == null || victimPawn.Controller?.Value == null) + return HookResult.Continue; CCSPlayerController attacker = attackerPawn.Controller.Value.As(); - if (attacker == null) return HookResult.Continue; + CCSPlayerController victim = victimPawn.Controller.Value.As(); var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID); if (playerInfo == null) return HookResult.Continue; if (playerInfo.Skill == "One Shot" && attacker.PawnIsAlive) { - param.Damage = 1000f; + param2.Damage = 1000f; } return HookResult.Continue; diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/PawelJumper.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/PawelJumper.cs index 6f6fac9..a440127 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/PawelJumper.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/PawelJumper.cs @@ -14,11 +14,13 @@ namespace dRandomSkills public static void LoadPawelJumper() { + Utils.RegisterSkill("Paweł Jumper", "Otrzymujesz dodatkowy Skok", "#FFA500"); + Instance.RegisterListener(() => { foreach (var player in Utilities.GetPlayers()) { - if (!IsPlayerValid(player)) continue; + if (!IsPlayerValid(player)) return; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); if (playerInfo?.Skill == "Paweł Jumper") { diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Phoenix.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Phoenix.cs index 78a79f0..5367df5 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Phoenix.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Phoenix.cs @@ -10,6 +10,8 @@ namespace dRandomSkills public static void LoadPhoenix() { + Utils.RegisterSkill("Phoenix", "Masz 35% szans na odrodzenie się po śmierci", "#ff5C0A"); + Instance.RegisterEventHandler((@event, info) => { var player = @event.Userid; @@ -17,11 +19,13 @@ namespace dRandomSkills if (!IsValidPlayer(player)) return HookResult.Continue; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Phoenix") return HookResult.Continue; - - if (Instance.Random.NextDouble() <= ReviveChance) + if (playerInfo?.Skill == "Phoenix") { - RevivePlayer(player); + if (Instance.Random.NextDouble() <= ReviveChance) + { + player.Respawn(); + Utils.PrintToChat(player, $"Zostałeś odrodzony z popiołów dzięki mocy: {ChatColors.DarkRed}Phoenix", false); + } } return HookResult.Continue; @@ -32,12 +36,5 @@ namespace dRandomSkills { return player != null && player.IsValid; } - - private static void RevivePlayer(CCSPlayerController player) - { - player.Respawn(); - - Utils.PrintToChat(player, $"Zostałeś odrodzony z popiołów dzięki mocy: {ChatColors.DarkRed}Phoenix", false); - } } } \ No newline at end of file diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Pilot.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Pilot.cs index 24c6a1b..3f00b1c 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Pilot.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Pilot.cs @@ -12,6 +12,8 @@ namespace dRandomSkills public static void LoadPilot() { + Utils.RegisterSkill("Pilot", "Latanie na noclip przez dany czas", "#1466F5"); + Instance.RegisterEventHandler((@event, info) => { Instance.AddTimer(0.1f, () => @@ -38,9 +40,14 @@ namespace dRandomSkills Instance.RegisterEventHandler((@event, info) => { var player = @event.Userid; - if (PlayerPilotInfo.ContainsKey(player.SteamID)) + + var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + if (playerInfo?.Skill == "Pilot") { - PlayerPilotInfo.Remove(player.SteamID); + if (PlayerPilotInfo.ContainsKey(player.SteamID)) + { + PlayerPilotInfo.Remove(player.SteamID); + } } return HookResult.Continue; diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rambo.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rambo.cs index fee9b2c..96878df 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rambo.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rambo.cs @@ -8,6 +8,8 @@ namespace dRandomSkills { public static void LoadRambo() { + Utils.RegisterSkill("Rambo", "Otrzymujesz losową ilość zdrowia na start rundy", "#009905"); + Instance.RegisterEventHandler((@event, info) => { Instance.AddTimer(0.1f, () => diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rozbrojenie.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rozbrojenie.cs index 6e648c2..abd0d95 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rozbrojenie.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rozbrojenie.cs @@ -8,6 +8,8 @@ namespace dRandomSkills public static void LoadRozbrojenie() { + Utils.RegisterSkill("Rozbrojenie", "Masz 25% szans na wyrzucenie broni wroga po trafieniu", "#FF4500"); + Instance.RegisterEventHandler((@event, info) => { var attacker = @event.Attacker; @@ -19,7 +21,7 @@ namespace dRandomSkills var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID); - if (playerInfo?.Skill == "Rozbrojenie" && attacker.PawnIsAlive) + if (playerInfo?.Skill == "Rozbrojenie" && victim.PawnIsAlive) { if (Instance.Random.NextDouble() <= 0.25) { diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Teleporter.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Teleporter.cs index 3dc4751..6efb7bd 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Teleporter.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Teleporter.cs @@ -7,6 +7,8 @@ namespace dRandomSkills { public static void LoadTeleporter() { + Utils.RegisterSkill("Teleportator", "Zamieniasz się miejscami z trafionym wrogiem", "#8A2BE2"); + Instance.RegisterEventHandler((@event, info) => { var victim = @event.Userid; diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ZelaznaGlowa.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ZelaznaGlowa.cs index c8f5640..f31611e 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ZelaznaGlowa.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ZelaznaGlowa.cs @@ -8,6 +8,8 @@ namespace dRandomSkills public static void LoadZelaznaGlowa() { + Utils.RegisterSkill("Żelazna Głowa", "Nie otrzymujesz obrażeń w głowę", "#8B4513"); + Instance.RegisterEventHandler((@event, info) => { var attacker = @event.Attacker; diff --git a/[ D3X ] dRandomSkills - SRC Files/src/utils/Utils.cs b/[ D3X ] dRandomSkills - SRC Files/src/utils/Utils.cs index 654099d..f2cf2bc 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/utils/Utils.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/utils/Utils.cs @@ -10,5 +10,13 @@ namespace dRandomSkills string checkIcon = isError ? $"{ChatColors.DarkRed}✖{ChatColors.LightRed}" : $"{ChatColors.Green}✔{ChatColors.Lime}"; player.PrintToChat($" {ChatColors.DarkRed}► {ChatColors.Green}[{ChatColors.DarkRed} LOSOWE MOCE {ChatColors.Green}] {checkIcon} {msg}"); } + + public static void RegisterSkill(string name, string description, string color) + { + if (!SkillData.Skills.Any(skill => skill.Name == name)) + { + SkillData.Skills.Add(new dSkill_SkillInfo(name, description, color)); + } + } } } \ No newline at end of file diff --git a/[ D3X ] dRandomSkills - Server Files/plugins/dRandomSkills/dRandomSkills.dll b/[ D3X ] dRandomSkills - Server Files/plugins/dRandomSkills/dRandomSkills.dll index 3b45bb9..4338e36 100644 Binary files a/[ D3X ] dRandomSkills - Server Files/plugins/dRandomSkills/dRandomSkills.dll and b/[ D3X ] dRandomSkills - Server Files/plugins/dRandomSkills/dRandomSkills.dll differ