From 68776c33829738072978476be16509bdaeef7c5e Mon Sep 17 00:00:00 2001 From: Juzlus Date: Fri, 14 Feb 2025 01:39:32 +0100 Subject: [PATCH] 1.0.2 --- .../Properties/Resources.Designer.cs | 63 +++++++ .../Properties/Resources.resx | 101 +++++++++++ .../Properties/launchSettings.json | 8 + .../dRandomSkills.csproj | 17 +- .../dRandomSkills.sln | 25 +++ .../src/dRandomSkills.cs | 45 +++-- .../src/player/PlayerEvents.cs | 4 +- .../src/player/skills/AntyFlash.cs | 7 +- .../src/player/skills/Astronauta.cs | 13 +- .../src/player/skills/Cien.cs | 2 +- .../src/player/skills/Drakula.cs | 9 +- .../src/player/skills/Duszek.cs | 79 +++++++-- .../src/player/skills/Flash.cs | 15 +- .../src/player/skills/Katapulta.cs | 35 +++- .../src/player/skills/Kurczak.cs | 44 ++++- .../src/player/skills/Medyk.cs | 11 +- .../src/player/skills/MiniMajk.cs | 58 +++++++ .../src/player/skills/NieskonczoneAmmo.cs | 15 ++ .../src/player/skills/ObrotWroga.cs | 30 +++- .../src/player/skills/Phoenix.cs | 35 +++- .../src/player/skills/Pilot.cs | 2 +- .../src/player/skills/Rambo.cs | 14 +- .../src/player/skills/Rozbrojenie.cs | 48 +++-- .../src/player/skills/Saper.cs | 68 ++++++++ .../src/player/skills/Teleporter.cs | 18 +- .../src/player/skills/ZamianaMiejsc.cs | 164 ++++++++++++++++++ .../src/utils/Utils.cs | 5 +- .../plugins/dRandomSkills/dRandomSkills.dll | Bin 72192 -> 87552 bytes 28 files changed, 819 insertions(+), 116 deletions(-) create mode 100644 [ D3X ] dRandomSkills - SRC Files/Properties/Resources.Designer.cs create mode 100644 [ D3X ] dRandomSkills - SRC Files/Properties/Resources.resx create mode 100644 [ D3X ] dRandomSkills - SRC Files/Properties/launchSettings.json create mode 100644 [ D3X ] dRandomSkills - SRC Files/dRandomSkills.sln create mode 100644 [ D3X ] dRandomSkills - SRC Files/src/player/skills/MiniMajk.cs create mode 100644 [ D3X ] dRandomSkills - SRC Files/src/player/skills/Saper.cs create mode 100644 [ D3X ] dRandomSkills - SRC Files/src/player/skills/ZamianaMiejsc.cs diff --git a/[ D3X ] dRandomSkills - SRC Files/Properties/Resources.Designer.cs b/[ D3X ] dRandomSkills - SRC Files/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3631cab --- /dev/null +++ b/[ D3X ] dRandomSkills - SRC Files/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// Ten kod został wygenerowany przez narzędzie. +// Wersja wykonawcza:4.0.30319.42000 +// +// Zmiany w tym pliku mogą spowodować nieprawidłowe zachowanie i zostaną utracone, jeśli +// kod zostanie ponownie wygenerowany. +// +//------------------------------------------------------------------------------ + +namespace dRandomSkills.Properties { + using System; + + + /// + /// Klasa zasobu wymagająca zdefiniowania typu do wyszukiwania zlokalizowanych ciągów itd. + /// + // Ta klasa została automatycznie wygenerowana za pomocą klasy StronglyTypedResourceBuilder + // przez narzędzie, takie jak ResGen lub Visual Studio. + // Aby dodać lub usunąć składową, edytuj plik ResX, a następnie ponownie uruchom narzędzie ResGen + // z opcją /str lub ponownie utwórz projekt VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Zwraca buforowane wystąpienie ResourceManager używane przez tę klasę. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("dRandomSkills.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Przesłania właściwość CurrentUICulture bieżącego wątku dla wszystkich + /// przypadków przeszukiwania zasobów za pomocą tej klasy zasobów wymagającej zdefiniowania typu. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/[ D3X ] dRandomSkills - SRC Files/Properties/Resources.resx b/[ D3X ] dRandomSkills - SRC Files/Properties/Resources.resx new file mode 100644 index 0000000..4fdb1b6 --- /dev/null +++ b/[ D3X ] dRandomSkills - SRC Files/Properties/Resources.resx @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/[ D3X ] dRandomSkills - SRC Files/Properties/launchSettings.json b/[ D3X ] dRandomSkills - SRC Files/Properties/launchSettings.json new file mode 100644 index 0000000..a7c25d0 --- /dev/null +++ b/[ D3X ] dRandomSkills - SRC Files/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "dRandomSkills": { + "commandName": "Project", + "nativeDebugging": true + } + } +} \ No newline at end of file diff --git a/[ D3X ] dRandomSkills - SRC Files/dRandomSkills.csproj b/[ D3X ] dRandomSkills - SRC Files/dRandomSkills.csproj index c30d68e..22d8ee0 100644 --- a/[ D3X ] dRandomSkills - SRC Files/dRandomSkills.csproj +++ b/[ D3X ] dRandomSkills - SRC Files/dRandomSkills.csproj @@ -7,8 +7,23 @@ - + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + diff --git a/[ D3X ] dRandomSkills - SRC Files/dRandomSkills.sln b/[ D3X ] dRandomSkills - SRC Files/dRandomSkills.sln new file mode 100644 index 0000000..92c07f8 --- /dev/null +++ b/[ D3X ] dRandomSkills - SRC Files/dRandomSkills.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34728.123 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dRandomSkills", "dRandomSkills.csproj", "{1412DD25-558C-425A-A7F6-347C970136E5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1412DD25-558C-425A-A7F6-347C970136E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1412DD25-558C-425A-A7F6-347C970136E5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1412DD25-558C-425A-A7F6-347C970136E5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1412DD25-558C-425A-A7F6-347C970136E5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A00F62BC-56A4-45B7-8843-2B0292BA710D} + EndGlobalSection +EndGlobal diff --git a/[ D3X ] dRandomSkills - SRC Files/src/dRandomSkills.cs b/[ D3X ] dRandomSkills - SRC Files/src/dRandomSkills.cs index eceb28b..1fb31c4 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.1"; + public override string ModuleVersion => "1.0.2"; public override void Load(bool hotReload) { @@ -23,30 +23,35 @@ namespace dRandomSkills PlayerOnTick.Load(); Command.Load(); + // ==== NOWE ==== + MiniMajk.LoadMiniMajk(); + ZamianaMiejsc.LoadZamianaMiejsc(); + + // ==== POPRAWIONE/NAPRAWIONE ==== + Flash.LoadFlash(); PawelJumper.LoadPawelJumper(); - Duszek.LoadDuszek(); BunnyHop.LoadBunnyHop(); Impostor.LoadImpostor(); - Phoenix.LoadPhoenix(); - Muhammed.LoadMuhammed(); - Pilot.LoadPilot(); - Rambo.LoadRambo(); - Bogacz.LoadBogacz(); - Flash.LoadFlash(); - Astronauta.LoadAstronauta(); - Medyk.LoadMedyk(); - Kurczak.LoadKurczak(); OneShot.LoadOneShot(); - Drakula.LoadDrakula(); - AntyFlash.LoadAntyFlash(); + Muhammed.LoadMuhammed(); + Bogacz.LoadBogacz(); + Rambo.LoadRambo(); + Medyk.LoadMedyk(); + Duszek.LoadDuszek(); + Kurczak.LoadKurczak(); + Astronauta.LoadAstronauta(); Rozbrojenie.LoadRozbrojenie(); - ZelaznaGlowa.LoadZelaznaGlowa(); + AntyFlash.LoadAntyFlash(); + ObrotWroga.LoadObrotWroga(); NieskonczoneAmmo.LoadNieskonczoneAmmo(); Katapulta.LoadKatapulta(); - ObrotWroga.LoadObrotWroga(); - Cien.LoadCien(); + Drakula.LoadDrakula(); Teleporter.LoadTeleporter(); - Eliminator.LoadEliminator(); + Saper.LoadEliminator(); + Phoenix.LoadPhoenix(); + Pilot.LoadPilot(); + Cien.LoadCien(); + ZelaznaGlowa.LoadZelaznaGlowa(); } } @@ -55,6 +60,7 @@ namespace dRandomSkills public required ulong SteamID { get; set; } public required string PlayerName { get; set; } public string? Skill { get; set; } + public float? SkillChance { get; set; } public bool IsDrawing { get; set; } } @@ -64,11 +70,14 @@ namespace dRandomSkills public string Description { get; } public string Color { get; } - public dSkill_SkillInfo(string name, string description, string color) + public bool Display { get; } + + public dSkill_SkillInfo(string name, string description, string color, bool display) { Name = name; Description = description; Color = color; + Display = display; } } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerEvents.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerEvents.cs index 8e0ed30..b4e2773 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerEvents.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/PlayerEvents.cs @@ -21,6 +21,7 @@ namespace dRandomSkills PlayerName = player.PlayerName, Skill = "", IsDrawing = false, + SkillChance = 1, }); return HookResult.Continue; @@ -73,7 +74,8 @@ namespace dRandomSkills 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); + if (randomSkill.Display) + Utils.PrintToChat(player, $"{ChatColors.DarkRed}{randomSkill.Name}{ChatColors.Lime}: {randomSkill.Description}", false); if(Config.config.Settings.TeamMateSkillInfo) { diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/AntyFlash.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/AntyFlash.cs index 2dee199..c4dfd0b 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/AntyFlash.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/AntyFlash.cs @@ -7,7 +7,7 @@ namespace dRandomSkills { public static void LoadAntyFlash() { - Utils.RegisterSkill("Anty Flash", "Posiadasz odporność na flashe", "#D6E6FF"); + Utils.RegisterSkill("Anty Flash", "Posiadasz odporność na flashe i 7 sekund trwają twoje flash'e", "#D6E6FF"); Instance.RegisterEventHandler((@event, info) => { @@ -19,12 +19,11 @@ namespace dRandomSkills if (!IsPlayerValid(player)) return HookResult.Continue; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - var sameTeam = attacker.Team == player.Team; if (playerInfo?.Skill == "Anty Flash") - { playerPawn.FlashDuration = 0.0f; - } + else if (Instance.skillPlayer.Any(s => s.Skill == "Anty Flash")) + playerPawn.FlashDuration = 7.0f; return HookResult.Continue; }); diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Astronauta.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Astronauta.cs index 93858b4..b02c1ec 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Astronauta.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Astronauta.cs @@ -1,5 +1,7 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Entities; +using CounterStrikeSharp.API.Modules.Utils; using static dRandomSkills.dRandomSkills; namespace dRandomSkills @@ -8,7 +10,7 @@ namespace dRandomSkills { public static void LoadAstronauta() { - Utils.RegisterSkill("Astronauta", "Otrzymujesz losową ilość grawitacji na start rundy", "#7E10AD"); + Utils.RegisterSkill("Astronauta", "Otrzymujesz losową ilość grawitacji na start rundy", "#7E10AD", false); Instance.RegisterEventHandler((@event, info) => { @@ -21,7 +23,7 @@ namespace dRandomSkills if (playerInfo?.Skill == "Astronauta" && playerPawn != null) { - ApplyGravityModifier(playerPawn); + ApplyGravityModifier(player); } } }); @@ -29,10 +31,11 @@ namespace dRandomSkills }); } - private static void ApplyGravityModifier(CCSPlayerPawn playerPawn) + private static void ApplyGravityModifier(CCSPlayerController player) { - float gravityModifier = (float)Math.Round(Instance.Random.NextDouble() * (0.7f - 0.2f) + 0.2f, 1); - playerPawn.GravityScale = gravityModifier; + float gravityModifier = (float)Math.Round(Instance.Random.NextDouble() * (0.7f - 0.1f) + 0.1f, 1); + Utils.PrintToChat(player, $"{ChatColors.DarkRed}\"Astronauta\"{ChatColors.Lime}: Twoja losowa grawitacja wynosi: {gravityModifier}x", false); + player.Pawn.Value.GravityScale = gravityModifier; } } } \ No newline at end of file diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Cien.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Cien.cs index 753591f..6cdd898 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Cien.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Cien.cs @@ -10,7 +10,7 @@ namespace dRandomSkills public static void LoadCien() { - Utils.RegisterSkill("Cień", "Teleportujesz się za plecy losowego wroga", "#18171A"); + Utils.RegisterSkill("Cień", "Teleportujesz się za plecy trafionego wroga", "#18171A"); Instance.RegisterEventHandler((@event, info) => { diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Drakula.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Drakula.cs index 23c20c9..793b07b 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Drakula.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Drakula.cs @@ -6,8 +6,6 @@ namespace dRandomSkills { public static class Drakula { - const float VampirePercentage = 0.3f; - public static void LoadDrakula() { Utils.RegisterSkill("Drakula", "Po trafieniu ofiary otrzymujesz zwrot zdrowia w postaci danego procentu zadanych obrażeń", "#FA050D"); @@ -34,11 +32,12 @@ namespace dRandomSkills var attackerPawn = attacker.PlayerPawn.Value; if (attackerPawn == null) return; - int healing = (int)(damage * VampirePercentage); - int newHealth = Math.Min(attackerPawn.Health + healing, attackerPawn.MaxHealth); + int newHealth = (int)(attackerPawn.Health + (damage * 0.3)); + + attackerPawn.MaxHealth = Math.Max(newHealth, 100); + Utilities.SetStateChanged(attackerPawn, "CBaseEntity", "m_iMaxHealth"); attackerPawn.Health = newHealth; - Utilities.SetStateChanged(attackerPawn, "CBaseEntity", "m_iHealth"); } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Duszek.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Duszek.cs index ac2047f..af9e2ee 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Duszek.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Duszek.cs @@ -1,6 +1,7 @@ using System.Drawing; using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; +using static CounterStrikeSharp.API.Core.Listeners; using static dRandomSkills.dRandomSkills; namespace dRandomSkills @@ -36,13 +37,42 @@ namespace dRandomSkills if (!IsValidPlayer(player)) continue; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); if (playerInfo?.Skill == "Duszek") - { SetPlayerVisibility(player, true); - } } return HookResult.Continue; }); + + Instance.RegisterEventHandler((@event, info) => + { + var player = @event.Userid; + if (!IsValidPlayer(player)) return HookResult.Continue; + var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + + if (playerInfo?.Skill != "Duszek") return HookResult.Continue; + SetWeaponVisibility(player, false); + return HookResult.Continue; + }); + + Instance.RegisterListener(OnTick); + } + + private static void OnTick() + { + foreach (var player in Utilities.GetPlayers()) + { + var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + + if (playerInfo?.Skill == "Duszek") + { + var activeWeapon = player.Pawn.Value.WeaponServices?.ActiveWeapon.Value; + if (activeWeapon != null && activeWeapon.IsValid && activeWeapon.Clip1 != 0) + { + activeWeapon.Clip1 = 0; + activeWeapon.Clip2 = 0; + } + } + } } private static bool IsValidPlayer(CCSPlayerController player) @@ -62,26 +92,37 @@ namespace dRandomSkills playerPawn.ShadowStrength = shadowStrength; Utilities.SetStateChanged(playerPawn, "CBaseModelEntity", "m_clrRender"); - var activeWeapon = playerPawn.WeaponServices?.ActiveWeapon.Value; - if (activeWeapon != null && activeWeapon.IsValid) - { - activeWeapon.Render = color; - activeWeapon.ShadowStrength = shadowStrength; - Utilities.SetStateChanged(activeWeapon, "CBaseModelEntity", "m_clrRender"); - } + SetWeaponVisibility(player, visible); + } + } - var myWeapons = playerPawn.WeaponServices?.MyWeapons; - if (myWeapons != null) + private static void SetWeaponVisibility(CCSPlayerController player, bool visible) + { + if (!IsValidPlayer(player)) return; + var playerPawn = player.PlayerPawn.Value; + + var color = visible ? Color.FromArgb(255, 255, 255, 255) : Color.FromArgb(0, 255, 255, 255); + var shadowStrength = visible ? 1.0f : 0.0f; + + var activeWeapon = playerPawn.WeaponServices?.ActiveWeapon.Value; + if (activeWeapon != null && activeWeapon.IsValid) + { + activeWeapon.Render = color; + activeWeapon.ShadowStrength = shadowStrength; + Utilities.SetStateChanged(activeWeapon, "CBaseModelEntity", "m_clrRender"); + } + + var myWeapons = playerPawn.WeaponServices?.MyWeapons; + if (myWeapons != null) + { + foreach (var gun in myWeapons) { - foreach (var gun in myWeapons) + var weapon = gun.Value; + if (weapon != null) { - var weapon = gun.Value; - if (weapon != null) - { - weapon.Render = color; - weapon.ShadowStrength = shadowStrength; - Utilities.SetStateChanged(weapon, "CBaseModelEntity", "m_clrRender"); - } + weapon.Render = color; + weapon.ShadowStrength = shadowStrength; + Utilities.SetStateChanged(weapon, "CBaseModelEntity", "m_clrRender"); } } } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Flash.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Flash.cs index e341321..9234ca9 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Flash.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Flash.cs @@ -1,5 +1,6 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; using static dRandomSkills.dRandomSkills; namespace dRandomSkills @@ -8,7 +9,7 @@ namespace dRandomSkills { public static void LoadFlash() { - Utils.RegisterSkill("Flash", "Otrzymujesz losową ilość speed na start rundy", "#A31912"); + Utils.RegisterSkill("Flash", "Losowa prędkośc postaci na początku rundy", "#A31912", false); Instance.RegisterEventHandler((@event, info) => { @@ -16,18 +17,20 @@ namespace dRandomSkills { foreach (var player in Utilities.GetPlayers()) { - if (!IsPlayerValid(player)) return; + if (!IsPlayerValid(player)) continue; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Flash") return; + if (playerInfo?.Skill != "Flash") continue; var playerPawn = player.PlayerPawn?.Value; if (playerPawn != null) { - float velocityModifier = (float)Instance.Random.NextDouble() * (2.5f - 1.2f) + 1.2f; - playerPawn.VelocityModifier = velocityModifier; - Utilities.SetStateChanged(player, "CCSPlayerPawn", "m_flVelocityModifier"); + float newSpeed = (float)Instance.Random.NextDouble() * (3.0f - 1.2f) + 1.2f; + newSpeed = (float)Math.Round(newSpeed, 2); + playerPawn.VelocityModifier = newSpeed; + Utilities.SetStateChanged(playerPawn, "CCSPlayerPawn", "m_flVelocityModifier"); + Utils.PrintToChat(player, $"{ChatColors.DarkRed}\"Flash\"{ChatColors.Lime}: Twój mnożnik prędkości to {newSpeed}x", false); } } }); diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Katapulta.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Katapulta.cs index 08216a2..c974ed1 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Katapulta.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Katapulta.cs @@ -1,4 +1,6 @@ +using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; using static dRandomSkills.dRandomSkills; namespace dRandomSkills @@ -8,8 +10,31 @@ namespace dRandomSkills public static void LoadKatapulta() { - Utils.RegisterSkill("Katapulta", "Masz 25% szans na podrzucenie wroga", "#FF4500"); - + Utils.RegisterSkill("Katapulta", "Masz losow¹ szanse na podrzucenie wroga", "#FF4500"); + + 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 != "Katapulta") continue; + + float newChance = (float)Instance.Random.NextDouble() * (.40f - .20f) + .20f; + playerInfo.SkillChance = newChance; + newChance = (float)Math.Round(newChance, 2) * 100; + newChance = (float)Math.Round(newChance); + + Utils.PrintToChat(player, $"{ChatColors.DarkRed}\"Katapulta\"{ChatColors.Lime}: Twoje szanse na podrzucenie wroga po trafieniu to: {newChance}%", false); + } + }); + + return HookResult.Continue; + }); + Instance.RegisterEventHandler((@event, info) => { var attacker = @event.Attacker; @@ -23,7 +48,7 @@ namespace dRandomSkills if (attackerInfo?.Skill == "Katapulta" && victim.PawnIsAlive) { - if (Instance.Random.NextDouble() <= 0.25) + if (Instance.Random.NextDouble() <= attackerInfo.SkillChance) { var victimPawn = victim.PlayerPawn?.Value; if (victimPawn != null) @@ -36,5 +61,9 @@ namespace dRandomSkills return HookResult.Continue; }); } + 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/Kurczak.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Kurczak.cs index 2ef5f30..771810f 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Kurczak.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Kurczak.cs @@ -1,15 +1,30 @@ using System.Drawing; using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; +using static CounterStrikeSharp.API.Core.Listeners; using static dRandomSkills.dRandomSkills; namespace dRandomSkills { public static class Kurczak { + private static string[] pistols = + { + "weapon_deagle", + "weapon_revolver", + "weapon_glock", + "weapon_usp_silencer", + "weapon_cz75a", + "weapon_fiveseven", + "weapon_p250", + "weapon_tec9", + "weapon_elite", + "weapon_hkp2000" + }; + public static void LoadKurczak() { - Utils.RegisterSkill("Kurczak", "Otrzymujesz model kurczaka + jesteś o 10% szybszy", "#FF8B42"); + Utils.RegisterSkill("Kurczak", "Otrzymujesz model kurczaka + jesteś o 10% szybszy - 50hp", "#FF8B42"); Instance.RegisterEventHandler((@event, info) => { @@ -17,10 +32,10 @@ namespace dRandomSkills { foreach (var player in Utilities.GetPlayers()) { - if (!IsPlayerValid(player)) return; + if (!IsPlayerValid(player)) continue; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Kurczak") return; + if (playerInfo?.Skill != "Kurczak") continue; var playerPawn = player.PlayerPawn?.Value; if (playerPawn != null) @@ -29,12 +44,35 @@ namespace dRandomSkills playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().MaterialGroup.Value = (uint)Instance.Random.Next(1, 4); playerPawn.VelocityModifier = 1.1f; Utilities.SetStateChanged(player, "CCSPlayerPawn", "m_flVelocityModifier"); + + playerPawn.Health = 50; + Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth"); } } }); return HookResult.Continue; }); + + Instance.RegisterListener(OnTick); + } + + private static void OnTick() + { + foreach (var player in Utilities.GetPlayers()) + { + var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + + if (playerInfo?.Skill == "Kurczak") + { + var activeWeapon = player.Pawn.Value.WeaponServices?.ActiveWeapon.Value; + if (activeWeapon != null && activeWeapon.IsValid && activeWeapon.Clip1 != 0 && !pistols.Contains(activeWeapon?.DesignerName)) + { + activeWeapon.Clip1 = 0; + activeWeapon.Clip2 = 0; + } + } + } } public static void SetPlayerModel(CCSPlayerController player, string model) diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Medyk.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Medyk.cs index 4b14d26..8c037d3 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Medyk.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Medyk.cs @@ -16,15 +16,14 @@ namespace dRandomSkills { foreach (var player in Utilities.GetPlayers()) { - if (!IsPlayerValid(player)) return; + if (!IsPlayerValid(player)) continue; + player.RemoveItemByDesignerName("weapon_healthshot"); var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Medyk") return; + if (playerInfo?.Skill != "Medyk") continue; int healthshot = Instance.Random.Next(1, 10); for (int i = 0; i < healthshot; i++) - { player.GiveNamedItem("weapon_healthshot"); - } } }); @@ -36,10 +35,6 @@ namespace dRandomSkills foreach (var player in Utilities.GetPlayers()) { if (!IsPlayerValid(player)) return HookResult.Continue; - - var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != "Medyk") return HookResult.Continue; - player.RemoveItemByDesignerName("weapon_healthshot"); } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/MiniMajk.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/MiniMajk.cs new file mode 100644 index 0000000..3462b0e --- /dev/null +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/MiniMajk.cs @@ -0,0 +1,58 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using static dRandomSkills.dRandomSkills; + +namespace dRandomSkills +{ + public static class MiniMajk + { + public static void LoadMiniMajk() + { + string defaultCT = "characters/models/ctm_sas/ctm_sas.vmdl"; + string defaultTT = "characters/models/tm_phoenix/tm_phoenix.vmdl"; + Utils.RegisterSkill("MiniMajk", "Losowa wielkość postaci na początku rundy", "#ffff00", false); + + 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 != "MiniMajk") continue; + + var playerPawn = player.PlayerPawn?.Value; + + if (playerPawn != null) + { + float newSize = (float)Instance.Random.NextDouble() * (.95f - .6f) + .6f; + newSize = (float)Math.Round(newSize, 2); + + playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().Scale = newSize; + playerPawn.SetModel(player.Team == CsTeam.CounterTerrorist ? defaultTT : defaultCT); + playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().Scale = newSize; + playerPawn.SetModel(player.Team == CsTeam.CounterTerrorist ? defaultCT : defaultTT); + + Utils.PrintToChat(player, $"{ChatColors.DarkRed}\"MiniMajk\"{ChatColors.Lime}: Twój mnożnik wielkości to {newSize}x", false); + + Instance.AddTimer(.2f, () => { + if (IsPlayerValid(player)) + playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().Scale = 1; + }); + } + } + }); + + return HookResult.Continue; + }); + } + + 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/NieskonczoneAmmo.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/NieskonczoneAmmo.cs index 4ab7bfe..24a5b5e 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/NieskonczoneAmmo.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/NieskonczoneAmmo.cs @@ -1,4 +1,5 @@ using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; using static dRandomSkills.dRandomSkills; namespace dRandomSkills @@ -25,6 +26,20 @@ namespace dRandomSkills return HookResult.Continue; }); + Instance.RegisterEventHandler((@event, info) => + { + var player = @event.Userid; + + if (!IsValidPlayer(player)) return HookResult.Continue; + + var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + + if (playerInfo?.Skill == "Nieskończone Ammo") + player.GiveNamedItem($"weapon_{@event.Weapon}"); + + return HookResult.Continue; + }); + 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 b8678e6..c43e3e0 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ObrotWroga.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ObrotWroga.cs @@ -1,3 +1,4 @@ +using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Utils; using static dRandomSkills.dRandomSkills; @@ -8,7 +9,30 @@ namespace dRandomSkills { public static void LoadObrotWroga() { - Utils.RegisterSkill("Obrót Wroga", "Masz 25% szans na obrócenie wroga o 180 stopni po trafieniu", "#00FF00"); + Utils.RegisterSkill("Obrót Wroga", "Masz losową szanse na obrócenie wroga o 180 stopni po trafieniu", "#00FF00", false); + + 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 != "Obrót Wroga") continue; + + float newChance = (float)Instance.Random.NextDouble() * (.40f - .20f) + .20f; + playerInfo.SkillChance = newChance; + newChance = (float)Math.Round(newChance, 2) * 100; + newChance = (float)Math.Round(newChance); + + Utils.PrintToChat(player, $"{ChatColors.DarkRed}\"Obrót Wroga\"{ChatColors.Lime}: Twoje szanse na obrucenie wroga po trafieniu to: {newChance}%", false); + } + }); + + return HookResult.Continue; + }); Instance.RegisterEventHandler((@event, info) => { @@ -22,10 +46,8 @@ namespace dRandomSkills if (playerInfo?.Skill == "Obrót Wroga" && victim.PawnIsAlive) { - if (Instance.Random.NextDouble() <= 0.25) - { + if (Instance.Random.NextDouble() <= playerInfo.SkillChance) RotateEnemy(victim); - } } return HookResult.Continue; diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Phoenix.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Phoenix.cs index 5367df5..4dc7893 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Phoenix.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Phoenix.cs @@ -1,3 +1,4 @@ +using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Utils; using static dRandomSkills.dRandomSkills; @@ -6,24 +7,46 @@ namespace dRandomSkills { public static class Phoenix { - private const double ReviveChance = 0.35; - public static void LoadPhoenix() { - Utils.RegisterSkill("Phoenix", "Masz 35% szans na odrodzenie się po śmierci", "#ff5C0A"); + Utils.RegisterSkill("Phoenix", "Masz losową szans na odrodzenie się po śmierci", "#ff5C0A", false); + + 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 != "Phoenix") continue; + + float newChance = (float)Instance.Random.NextDouble() * (.40f - .20f) + .20f; + playerInfo.SkillChance = newChance; + newChance = (float)Math.Round(newChance, 2) * 100; + newChance = (float)Math.Round(newChance); + + Utils.PrintToChat(player, $"{ChatColors.DarkRed}\"Phoenix\"{ChatColors.Lime}: Twoje szanse na odrodzenie się po śmierci: {newChance}%", false); + } + }); + + return HookResult.Continue; + }); Instance.RegisterEventHandler((@event, info) => { var player = @event.Userid; - if (!IsValidPlayer(player)) return HookResult.Continue; + if (!IsPlayerValid(player)) return HookResult.Continue; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); if (playerInfo?.Skill == "Phoenix") { - if (Instance.Random.NextDouble() <= ReviveChance) + if (Instance.Random.NextDouble() <= playerInfo.SkillChance) { player.Respawn(); + Instance.AddTimer(.2f, () => player.Respawn()); Utils.PrintToChat(player, $"Zostałeś odrodzony z popiołów dzięki mocy: {ChatColors.DarkRed}Phoenix", false); } } @@ -32,7 +55,7 @@ namespace dRandomSkills }); } - private static bool IsValidPlayer(CCSPlayerController player) + private static bool IsPlayerValid(CCSPlayerController player) { return player != null && player.IsValid; } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Pilot.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Pilot.cs index 3f00b1c..bb1ad83 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Pilot.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Pilot.cs @@ -12,7 +12,7 @@ namespace dRandomSkills public static void LoadPilot() { - Utils.RegisterSkill("Pilot", "Latanie na noclip przez dany czas", "#1466F5"); + Utils.RegisterSkill("Pilot", "Latanie przez okreœlony czas. Przytrzymaj [USE - E], aby lataæ!", "#1466F5"); Instance.RegisterEventHandler((@event, info) => { diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rambo.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rambo.cs index 96878df..a812d84 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rambo.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rambo.cs @@ -1,5 +1,6 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; using static dRandomSkills.dRandomSkills; namespace dRandomSkills @@ -16,7 +17,7 @@ namespace dRandomSkills { foreach (var player in Utilities.GetPlayers()) { - if (IsValidPlayer(player)) continue; + if (!IsValidPlayer(player)) continue; var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); if (playerInfo?.Skill == "Rambo") { @@ -39,15 +40,10 @@ namespace dRandomSkills var pawn = player.PlayerPawn?.Value; if (pawn == null) return; - player.Health = Math.Min(player.Health + health, player.MaxHealth); - pawn.Health = Math.Min(pawn.Health + health, pawn.MaxHealth); - - if (health > 100) - { - player.MaxHealth = Math.Min(player.MaxHealth + health, 1000); - pawn.MaxHealth = Math.Min(pawn.MaxHealth + health, 1000); - } + pawn.MaxHealth = Math.Min(pawn.Health + health, 1000); + Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iMaxHealth"); + pawn.Health = pawn.MaxHealth; Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iHealth"); } } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rozbrojenie.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rozbrojenie.cs index abd0d95..ce8a882 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rozbrojenie.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Rozbrojenie.cs @@ -1,4 +1,6 @@ +using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; using static dRandomSkills.dRandomSkills; namespace dRandomSkills @@ -8,8 +10,31 @@ namespace dRandomSkills public static void LoadRozbrojenie() { - Utils.RegisterSkill("Rozbrojenie", "Masz 25% szans na wyrzucenie broni wroga po trafieniu", "#FF4500"); - + Utils.RegisterSkill("Rozbrojenie", "Masz losow¹ szanse na wyrzucenie broni wroga po trafieniu", "#FF4500", false); + + 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 != "Rozbrojenie") continue; + + float newChance = (float)Instance.Random.NextDouble() * (.40f - .20f) + .20f; + playerInfo.SkillChance = newChance; + newChance = (float)Math.Round(newChance, 2) * 100; + newChance = (float)Math.Round(newChance); + + Utils.PrintToChat(player, $"{ChatColors.DarkRed}\"Rozbrojenie\"{ChatColors.Lime}: Twoje szanse na wyrzucenie broni wroga to: {newChance}%", false); + } + }); + + return HookResult.Continue; + }); + Instance.RegisterEventHandler((@event, info) => { var attacker = @event.Attacker; @@ -23,23 +48,22 @@ namespace dRandomSkills if (playerInfo?.Skill == "Rozbrojenie" && victim.PawnIsAlive) { - if (Instance.Random.NextDouble() <= 0.25) + if (Instance.Random.NextDouble() <= playerInfo.SkillChance) { var weaponServices = victim.PlayerPawn?.Value?.WeaponServices; - if (weaponServices?.MyWeapons == null) return HookResult.Continue; + if (weaponServices?.ActiveWeapon == null) return HookResult.Continue; - foreach (var weapon in weaponServices.MyWeapons) - { - var weaponName = weapon.Value.DesignerName; - if (weaponName != null && !weaponName.Contains("weapon_knife") && !weaponName.Contains("weapon_c4")) - { - victim.DropActiveWeapon(); - } - } + var weaponName = weaponServices?.ActiveWeapon?.Value?.DesignerName; + if (weaponName != null && !weaponName.Contains("weapon_knife") && !weaponName.Contains("weapon_c4")) + victim.DropActiveWeapon(); } } return HookResult.Continue; }); } + 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/Saper.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Saper.cs new file mode 100644 index 0000000..eb62e59 --- /dev/null +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Saper.cs @@ -0,0 +1,68 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using static dRandomSkills.dRandomSkills; + +namespace dRandomSkills +{ + public static class Saper + { + public static void LoadEliminator() + { + Utils.RegisterSkill("Saper", "Możesz szybciej podłożyć bombę oraz ją zdefować", "#8A2BE2"); + + Instance.RegisterEventHandler((@event, info) => + { + foreach (var player in Utilities.GetPlayers()) + { + if (!IsPlayerValid(player)) return HookResult.Continue; + + var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + if (playerInfo?.Skill == "Saper") + { + var bombEntities = Utilities.FindAllEntitiesByDesignerName("weapon_c4").ToList(); + + if (bombEntities.Any()) + { + var bomb = bombEntities.FirstOrDefault(); + if (bomb != null) + { + bomb.BombPlacedAnimation = false; + bomb.ArmedTime = 0.0f; + } + } + } + } + + return HookResult.Continue; + }); + + Instance.RegisterEventHandler((@event, info) => + { + var player = @event.Userid; + + if (IsPlayerValid(player)) + { + var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + if (playerInfo?.Skill == "Saper") + { + var plantedBomb = Utilities.FindAllEntitiesByDesignerName("planted_c4").FirstOrDefault(); + if (plantedBomb != null) + { + Server.NextFrame(() => + { + plantedBomb.DefuseCountDown = 0; + }); + } + } + } + + return HookResult.Continue; + }); + } + + 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/Teleporter.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Teleporter.cs index 6efb7bd..b8b5ff0 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Teleporter.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/Teleporter.cs @@ -1,5 +1,8 @@ using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using System.Numerics; using static dRandomSkills.dRandomSkills; +using Vector = CounterStrikeSharp.API.Modules.Utils.Vector; namespace dRandomSkills { @@ -16,7 +19,6 @@ namespace dRandomSkills if (!IsValidPlayer(victim) || !IsValidPlayer(attacker)) return HookResult.Continue; - var victimInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == victim.SteamID); var attackerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID); if (attackerInfo?.Skill == "Teleportator") @@ -38,16 +40,16 @@ namespace dRandomSkills var attackerPawn = attacker.PlayerPawn.Value; var victimPawn = victim.PlayerPawn.Value; - var attackerPosition = attackerPawn.AbsOrigin; - var attackerAngles = attackerPawn.AbsRotation; - var attackerVelocity = attackerPawn.AbsVelocity; + Vector attackerPosition = new Vector(attackerPawn.AbsOrigin.X, attackerPawn.AbsOrigin.Y, attackerPawn.AbsOrigin.Z); + QAngle attackerAngles = new QAngle(attackerPawn.AbsRotation.X, attackerPawn.AbsRotation.Y, attackerPawn.AbsRotation.Z); + Vector attackerVelocity = new Vector(attackerPawn.AbsVelocity.X, attackerPawn.AbsVelocity.Y, attackerPawn.AbsVelocity.Z); - var victimPosition = victimPawn.AbsOrigin; - var victimAngles = victimPawn.AbsRotation; - var victimVelocity = victimPawn.AbsVelocity; + Vector victimPosition = new Vector(victimPawn.AbsOrigin.X, victimPawn.AbsOrigin.Y, victimPawn.AbsOrigin.Z); + QAngle victimAngles = new QAngle(victimPawn.AbsRotation.X, victimPawn.AbsRotation.Y, victimPawn.AbsRotation.Z); + Vector victimVelocity = new Vector(victimPawn.AbsVelocity.X, victimPawn.AbsVelocity.Y, victimPawn.AbsVelocity.Z); - attackerPawn.Teleport(victimPosition, victimAngles, victimVelocity); victimPawn.Teleport(attackerPosition, attackerAngles, attackerVelocity); + attackerPawn.Teleport(victimPosition, victimAngles, victimVelocity); } } } diff --git a/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ZamianaMiejsc.cs b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ZamianaMiejsc.cs new file mode 100644 index 0000000..79a4b8b --- /dev/null +++ b/[ D3X ] dRandomSkills - SRC Files/src/player/skills/ZamianaMiejsc.cs @@ -0,0 +1,164 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using static CounterStrikeSharp.API.Core.Listeners; +using static dRandomSkills.dRandomSkills; + +namespace dRandomSkills +{ + public static class ZamianaMiejsc + { + private static float timerCooldown = 30f; + private static readonly Dictionary SkillPlayerInfo = new Dictionary(); + public static void LoadZamianaMiejsc() + { + Utils.RegisterSkill("ZamianaMiejsc", "Zamiana miejscami z losowym wrogiem. Kliknij [USE - E], cooldown 30s!", "#1466F5"); + + Instance.RegisterEventHandler((@event, info) => + { + Instance.RegisterListener(CheckHandle); + Instance.AddTimer(0.1f, () => + { + foreach (var player in Utilities.GetPlayers()) + { + var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + if (playerInfo?.Skill == "ZamianaMiejsc") + { + SkillPlayerInfo[player.SteamID] = new ZamianaMiejsc_PlayerInfo + { + SteamID = player.SteamID, + CanUse = true, + Cooldown = DateTime.MinValue + }; + } + } + }); + + return HookResult.Continue; + }); + + Instance.RegisterEventHandler((@event, info) => + { + Instance.RemoveListener(CheckHandle); + SkillPlayerInfo.Clear(); + return HookResult.Continue; + }); + + Instance.RegisterEventHandler((@event, info) => + { + var player = @event.Userid; + + var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + if (playerInfo?.Skill == "ZamianaMiejsc") + if (SkillPlayerInfo.ContainsKey(player.SteamID)) + SkillPlayerInfo.Remove(player.SteamID); + + return HookResult.Continue; + }); + } + + private static void CheckHandle() + { + foreach (var player in Utilities.GetPlayers()) + { + var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + if (playerInfo?.Skill == "ZamianaMiejsc") + { + Handle(player); + } + } + } + + private static void Handle(CCSPlayerController player) + { + var buttons = player.Buttons; + if (SkillPlayerInfo.TryGetValue(player.SteamID, out var skillInfo)) + { + if (buttons.HasFlag(PlayerButtons.Use)) + { + if (skillInfo.CanUse) + UseSkill(player, skillInfo); + else + UpdateHUD(player, skillInfo); + } + } + } + + private static void UpdateHUD(CCSPlayerController player, ZamianaMiejsc_PlayerInfo skillInfo = null) + { + float cooldown = 0; + if (skillInfo != null) + { + float time = (float)((skillInfo.Cooldown.Second + timerCooldown) - DateTime.Now.Second); + cooldown = time > 0 ? time : 0; + } + + string infoLine = $"ZamianaMiejsc:
"; + string remainingLine = skillInfo == null ? "Nie znaleziono przeciwnika
" : $"Musisz poczekać jeszcze {cooldown} sekund
"; + + var hudContent = infoLine + remainingLine; + player.PrintToCenterHtml(hudContent); + } + + private static void ActiveUse(CCSPlayerController player) + { + if (SkillPlayerInfo.TryGetValue(player.SteamID, out var skillInfo)) + { + skillInfo.CanUse = true; + } + } + + private static void UseSkill(CCSPlayerController player, ZamianaMiejsc_PlayerInfo skillInfo) + { + var playerPawn = player.PlayerPawn.Value; + if (playerPawn?.CBodyComponent == null) return; + + List enemy = Utilities.GetPlayers().FindAll(p => IsPlayerValid(p) && p.Team != player.Team && p.PawnIsAlive); + if (enemy.Count == 0) + { + UpdateHUD(player); + return; + } + + CCSPlayerController randomEnemy = enemy[Instance.Random.Next(0, enemy.Count)]; + if (player.IsValid && player.PawnIsAlive && randomEnemy.IsValid && randomEnemy.PawnIsAlive) + { + skillInfo.CanUse = false; + skillInfo.Cooldown = DateTime.Now; + Instance.AddTimer(timerCooldown, () => ActiveUse(player)); + TeleportPlayers(player, randomEnemy); + } + else + UpdateHUD(player); + } + + private static void TeleportPlayers(CCSPlayerController attacker, CCSPlayerController victim) + { + var attackerPawn = attacker.PlayerPawn.Value; + var victimPawn = victim.PlayerPawn.Value; + + Vector attackerPosition = new Vector(attackerPawn.AbsOrigin.X, attackerPawn.AbsOrigin.Y, attackerPawn.AbsOrigin.Z); + QAngle attackerAngles = new QAngle(attackerPawn.AbsRotation.X, attackerPawn.AbsRotation.Y, attackerPawn.AbsRotation.Z); + Vector attackerVelocity = new Vector(attackerPawn.AbsVelocity.X, attackerPawn.AbsVelocity.Y, attackerPawn.AbsVelocity.Z); + + Vector victimPosition = new Vector(victimPawn.AbsOrigin.X, victimPawn.AbsOrigin.Y, victimPawn.AbsOrigin.Z); + QAngle victimAngles = new QAngle(victimPawn.AbsRotation.X, victimPawn.AbsRotation.Y, victimPawn.AbsRotation.Z); + Vector victimVelocity = new Vector(victimPawn.AbsVelocity.X, victimPawn.AbsVelocity.Y, victimPawn.AbsVelocity.Z); + + victimPawn.Teleport(attackerPosition, attackerAngles, attackerVelocity); + attackerPawn.Teleport(victimPosition, victimAngles, victimVelocity); + } + + private static bool IsPlayerValid(CCSPlayerController player) + { + return player != null && player.IsValid && player.PlayerPawn?.Value != null; + } + + public class ZamianaMiejsc_PlayerInfo + { + public ulong SteamID { get; set; } + public bool CanUse { get; set; } + public DateTime Cooldown { get; set; } + } + } +} \ No newline at end of file diff --git a/[ D3X ] dRandomSkills - SRC Files/src/utils/Utils.cs b/[ D3X ] dRandomSkills - SRC Files/src/utils/Utils.cs index f2cf2bc..1f5a407 100644 --- a/[ D3X ] dRandomSkills - SRC Files/src/utils/Utils.cs +++ b/[ D3X ] dRandomSkills - SRC Files/src/utils/Utils.cs @@ -1,5 +1,6 @@ using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Utils; +using System.Diagnostics; namespace dRandomSkills { @@ -11,11 +12,11 @@ namespace dRandomSkills player.PrintToChat($" {ChatColors.DarkRed}► {ChatColors.Green}[{ChatColors.DarkRed} LOSOWE MOCE {ChatColors.Green}] {checkIcon} {msg}"); } - public static void RegisterSkill(string name, string description, string color) + public static void RegisterSkill(string name, string description, string color, bool display = true) { if (!SkillData.Skills.Any(skill => skill.Name == name)) { - SkillData.Skills.Add(new dSkill_SkillInfo(name, description, color)); + SkillData.Skills.Add(new dSkill_SkillInfo(name, description, color, display)); } } } diff --git a/[ D3X ] dRandomSkills - Server Files/plugins/dRandomSkills/dRandomSkills.dll b/[ D3X ] dRandomSkills - Server Files/plugins/dRandomSkills/dRandomSkills.dll index 4338e36360882367832381397e8a0278b2055f1b..7e98c3f7d1aebf403d0a6537515ed4c78f911225 100644 GIT binary patch literal 87552 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�Iz(mt+Z+O| z6mfhNbYz(Sfw}MS@+VRq6tP4iMH2Wf3%<|G4|w?@FaIkj?KsGGcJMM7!uEx!{VaGt zFHhjI{ti>ec{#(&$9XC7QsL!V*zBP&budgl&MLpoP%8|t2>C5ueutMY^YTSrzQqd% z)%nw~`9zqSWC1ze`Ab}G7+&`BlIKM_`!a;Wfpa6TvWRQ22#{3nd3b1={3(b`Za{p~ zK;Uc#d*PebKMNb#4?S`EWerHl*@>LWP&&T@__E=OWiK$mq`|NOX-06bzcXNIROwwM z#?tIn$!54|?}x>v4)2nI=N{dHuq!0yje3n7cS^?wtj-;AZ-ilyI< zrN54}Agl(hz8jTdVHINQVAcc7o&B-&L$UP1So(3KF&{9Fy3l#r66j3CDotu7%)G={ zH}Yu=>;7EF-I2lUW**aJV+pmwv+j zI?K~njt?WgpU>_+&0m4zPjA`x>+&`08MeryM$R$2lP@YayByOizX)c`0EmnZkMN%{ zhaEF4nGYU0GEzFUR4Td0o;op7^o}1ra_q2IbQg~wJw7txp70JAM-Lx4dI)WRo}JwJ z(PFdtp@xrlEt}oaYZ_7h?ci6hV^Vm9qGRyxVEkla1HY8zH=22WDc`~`$u;v=%dM4s zL*I5@%2(yryqbBp;pJ<7E8lF_>wW{j%aAYE@~xF}GmrN!^9|`lu!bL@$QSMJEDVF# zUdP;%{9Q2I-#`aYge(5QSpDmF40IbE1pquj52e#%jyc@@%KYJZAMbV_#*55-yfk}_ zKYCZfi>~DdFiy40m6F%Uj2;UZc|eh+`Lbj5beFzk8$Z$H3CGpNkSe;;PpV7^d1Jne z+`s+TKl(#<^0W9e4xOPgS^E4X6MG|KJ&T%wtn<) zePQ}v{MoM^{MtYK^^X%<;lr2sOL)yoGleUMF5wO6t1Z8N>B5ZHda{aF?_YW;KYsY* z`Iqwvxz9hDpPMb@`SSqHOa9_3XosKmyHxX9(2`4us>AitqM180cIfC+#?t>$Kp$hA zeC6KOuYINQo2~I5{-l$sMB{sy>3nPevE<%ZJwrWcj8`gC=q-Mc4D;uC@i{CnEpEX|1Sp|nb`Yqz92aUwW6@68{n*W2A_|wLzl!{5dz)n!3_{|!OY>d#|6Wa zrgL~j>a;nB{3NcYk>=l9JAU-PRr3Nl)$fl;sm8l;l_q!`9|u_Z#;en~{lRk^JP*sW zCH#B8M9K4VE10*p^+cRLbt4tb7kB&?kUHoSPh;?uF@Cmh1Ey0Iee@?-aqmrt?>c1OFGi;xMKF literal 72192 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