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 4338e36..7e98c3f 100644
Binary files a/[ D3X ] dRandomSkills - Server Files/plugins/dRandomSkills/dRandomSkills.dll and b/[ D3X ] dRandomSkills - Server Files/plugins/dRandomSkills/dRandomSkills.dll differ