New Release

- Dodano więcej modeli do mocy Impostor.
- Zmieniono sposób rejestrowania mocy.
- Zmieniono wiadomości informacyjne o mocy zabójcy oraz sojusznikach.
- Naprawiono crash serwera przy fall damage
This commit is contained in:
D3X 2024-09-23 12:52:05 +02:00
parent 810ca2fa3c
commit 68f26a22f4
30 changed files with 253 additions and 108 deletions

View file

@ -12,7 +12,7 @@ namespace dRandomSkills
public override string ModuleName => "[CS2] D3X - [ Random Skills ]";
public override string ModuleAuthor => "D3X";
public override string ModuleDescription => "Plugin dodaje na serwer losowe moce co runde na serwery CS2 by D3X";
public override string ModuleVersion => "1.0.0";
public override string ModuleVersion => "1.0.1";
public override void Load(bool hotReload)
{
@ -74,35 +74,6 @@ namespace dRandomSkills
public static class SkillData
{
public static dSkill_SkillInfo[] Skills { get; } = new[]
{
new dSkill_SkillInfo("Paweł Jumper", "Otrzymujesz dodatkowy Skok", "#FFA500"),
new dSkill_SkillInfo("Duszek", "Jesteś całkowicie niewidzialny", "#FFFFFF"),
new dSkill_SkillInfo("BunnyHop", "Otrzymujesz auto BunnyHopa", "#EB4034"),
new dSkill_SkillInfo("Impostor", "Otrzymujesz na start rundy model postaci wroga", "#99140B"),
new dSkill_SkillInfo("Phoenix", "Masz 35% szans na odrodzenie się po śmierci", "#ff5C0A"),
new dSkill_SkillInfo("Muhammed", "Po śmierci wybucha i zabija graczy w obrębie", "#F5CB42"),
new dSkill_SkillInfo("Pilot", "Latanie na noclip przez dany czas", "#1466F5"),
new dSkill_SkillInfo("Rambo", "Otrzymujesz losową ilość zdrowia na start rundy", "#009905"),
new dSkill_SkillInfo("Bogacz", "Otrzymujesz losową ilość kasy na start rundy", "#D4AF37"),
new dSkill_SkillInfo("Flash", "Otrzymujesz losową ilość speed na start rundy", "#A31912"),
new dSkill_SkillInfo("Astronauta", "Otrzymujesz losową ilość grawitacji na start rundy", "#7E10AD"),
new dSkill_SkillInfo("Medyk", "Otrzymujesz losową ilość apteczek na start rundy", "#42FF5F"),
new dSkill_SkillInfo("Kurczak", "Otrzymujesz model kurczaka + jesteś o 10% szybszy", "#FF8B42"),
new dSkill_SkillInfo("One Shot", "Po trafieniu od razu zabija przeciwnika", "#ff5CD9"),
new dSkill_SkillInfo("Drakula", "Po trafieniu ofiary otrzymujesz zwrot zdrowia w postaci danego procentu zadanych obrażeń", "#FA050D"),
new dSkill_SkillInfo("Anty Flash", "Posiadasz odporność na flashe", "#D6E6FF"),
// new dSkill_SkillInfo("Mini Gun", "Strzelasz 50% szybciej z broni", "#2CF5BF"),
new dSkill_SkillInfo("Teleportator", "Zamieniasz się miejscami z trafionym wrogiem", "#8A2BE2"),
new dSkill_SkillInfo("Cień", "Teleportujesz się za plecy losowego wroga", "#18171A"),
new dSkill_SkillInfo("Katapulta", "Masz 25% szans na podrzucenie wroga", "#FF4500"),
new dSkill_SkillInfo("Nieskończone Ammo", "Otrzymujesz nieskończoną ilość ammo do wszystkich swoich broni", "#0000FF"),
new dSkill_SkillInfo("Żelazna Głowa", "Nie otrzymujesz obrażeń w głowę", "#8B4513"),
new dSkill_SkillInfo("Eliminator", "Możesz szybciej podłożyć bombe oraz ją zdefować", "#8A2BE2"),
// new dSkill_SkillInfo("Redukcja Obrażeń", "Redukujesz daną ilość obrażeń, które otrzymujesz", "#696969"),
// new dSkill_SkillInfo("Mnożnik Obrażeń", "Zadajesz pomnożoną ilość obrażeń", "#FF0000"),
new dSkill_SkillInfo("Obrót Wroga", "Masz 25% szans na obrócenie wroga o 180 stopni po trafieniu", "#00FF00"),
new dSkill_SkillInfo("Rozbrojenie", "Masz 25% szans na wyrzucenie broni wroga po trafieniu", "#FF4500")
};
public static List<dSkill_SkillInfo> Skills { get; } = new List<dSkill_SkillInfo>();
}
}

View file

@ -13,7 +13,7 @@ namespace dRandomSkills
{
CenterHtmlMenu menu = new($"[ ★ Lista Super Mocy ★ ]");
for (int i = 0; i < SkillData.Skills.Length; i++)
for (int i = 0; i < SkillData.Skills.Count; i++)
{
var skill = SkillData.Skills[i];
string skillName = $"{skill.Name}";

View file

@ -70,7 +70,7 @@ namespace dRandomSkills
{
skillPlayer.IsDrawing = false;
var randomSkill = SkillData.Skills[Instance.Random.Next(SkillData.Skills.Length)];
var randomSkill = SkillData.Skills[Instance.Random.Next(SkillData.Skills.Count)];
skillPlayer.Skill = randomSkill.Name;
Utils.PrintToChat(player, $"{ChatColors.DarkRed}{randomSkill.Name}{ChatColors.Lime}: {randomSkill.Description}", false);
@ -90,8 +90,8 @@ namespace dRandomSkills
if (!string.IsNullOrEmpty(teammateSkills))
{
player.PrintToChat($" {ChatColors.Lime}Supermoce twoich sojuszników:");
player.PrintToChat(teammateSkills.TrimEnd('\n'));
Utils.PrintToChat(player, $" {ChatColors.Lime}Supermoce twoich sojuszników:", false);
Utils.PrintToChat(player, teammateSkills.TrimEnd('\n'), false);
}
});
}
@ -106,9 +106,9 @@ namespace dRandomSkills
var victim = @event.Userid;
var attacker = @event.Attacker;
if (victim == null || attacker == null || victim == attacker) return HookResult.Continue;
if(Config.config.Settings.KillerSkillInfo)
{
if (victim != null && victim?.IsValid == true && attacker != null && attacker?.IsValid == true && victim != attacker)
{
var attackerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
if (attackerInfo != null)
@ -116,9 +116,8 @@ namespace dRandomSkills
var skillData = SkillData.Skills.FirstOrDefault(s => s.Name == attackerInfo.Skill);
string skillDesc = skillData?.Description ?? "Brak opisu";
victim.PrintToChat($"{ChatColors.Lime}Supermoc przeciwnika który cię zabił:");
Utils.PrintToChat(victim, $"{ChatColors.DarkRed}{attacker.PlayerName}{ChatColors.Lime} posiada mocy: {ChatColors.DarkRed}{attackerInfo.Skill}{ChatColors.Lime} - {skillDesc}", false);
}
Utils.PrintToChat(victim, $"Supermoc przeciwnika {ChatColors.DarkRed}{attacker.PlayerName}{ChatColors.Lime}:", false);
Utils.PrintToChat(victim, $"{ChatColors.DarkRed}{attackerInfo.Skill}{ChatColors.Lime} - {skillDesc}", false);
}
}

View file

@ -1,4 +1,3 @@
using System.Diagnostics;
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using static CounterStrikeSharp.API.Core.Listeners;
@ -8,13 +7,8 @@ namespace dRandomSkills
{
public static class PlayerOnTick
{
private static readonly Stopwatch DrawStopwatch = new Stopwatch();
private static readonly float DrawUpdateInterval = 0.5f;
public static void Load()
{
DrawStopwatch.Start();
Instance.RegisterListener<OnTick>(() =>
{
foreach (var player in Utilities.GetPlayers())
@ -37,12 +31,11 @@ namespace dRandomSkills
string infoLine = "";
string skillLine = "";
if (skillPlayer.IsDrawing && DrawStopwatch.Elapsed.TotalSeconds >= DrawUpdateInterval)
if (skillPlayer.IsDrawing)
{
var randomSkill = SkillData.Skills[Instance.Random.Next(SkillData.Skills.Length)];
var randomSkill = SkillData.Skills[Instance.Random.Next(SkillData.Skills.Count)];
infoLine = $"<font class='fontSize-l' class='fontWeight-Bold' color='#FFFFFF'>Losowanie mocy:</font> <br>";
skillLine = $"<font class='fontSize-l' class='fontWeight-Bold' color='{randomSkill.Color}'>{randomSkill.Name}</font> <br>";
DrawStopwatch.Restart();
}
else if (!skillPlayer.IsDrawing)
{

View file

@ -7,6 +7,8 @@ namespace dRandomSkills
{
public static void LoadAntyFlash()
{
Utils.RegisterSkill("Anty Flash", "Posiadasz odporność na flashe", "#D6E6FF");
Instance.RegisterEventHandler<EventPlayerBlind>((@event, info) =>
{
var player = @event.Userid;

View file

@ -8,6 +8,8 @@ namespace dRandomSkills
{
public static void LoadAstronauta()
{
Utils.RegisterSkill("Astronauta", "Otrzymujesz losową ilość grawitacji na start rundy", "#7E10AD");
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
{
Instance.AddTimer(0.1f, () =>

View file

@ -8,6 +8,8 @@ namespace dRandomSkills
{
public static void LoadBogacz()
{
Utils.RegisterSkill("Bogacz", "Otrzymujesz losową ilość kasy na start rundy", "#D4AF37");
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
{
Instance.AddTimer(0.1f, () =>

View file

@ -13,6 +13,8 @@ namespace dRandomSkills
public static void LoadBunnyHop()
{
Utils.RegisterSkill("BunnyHop", "Otrzymujesz auto BunnyHopa", "#EB4034");
Instance.RegisterListener<OnTick>(OnTick);
}

View file

@ -10,6 +10,8 @@ namespace dRandomSkills
public static void LoadCien()
{
Utils.RegisterSkill("Cień", "Teleportujesz się za plecy losowego wroga", "#18171A");
Instance.RegisterEventHandler<EventPlayerHurt>((@event, info) =>
{
var attacker = @event.Attacker;

View file

@ -10,6 +10,8 @@ namespace dRandomSkills
public static void LoadDrakula()
{
Utils.RegisterSkill("Drakula", "Po trafieniu ofiary otrzymujesz zwrot zdrowia w postaci danego procentu zadanych obrażeń", "#FA050D");
Instance.RegisterEventHandler<EventPlayerHurt>((@event, info) =>
{
var attacker = @event.Attacker;
@ -19,7 +21,7 @@ namespace dRandomSkills
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
if (playerInfo?.Skill == "Drakula" && attacker.PawnIsAlive)
if (playerInfo?.Skill == "Drakula" && victim.PawnIsAlive)
{
HealAttacker(attacker, @event.DmgHealth);
}

View file

@ -9,6 +9,8 @@ namespace dRandomSkills
{
public static void LoadDuszek()
{
Utils.RegisterSkill("Duszek", "Jesteś całkowicie niewidzialny", "#FFFFFF");
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
{
Instance.AddTimer(0.1f, () =>

View file

@ -8,11 +8,13 @@ namespace dRandomSkills
{
public static void LoadEliminator()
{
Utils.RegisterSkill("Eliminator", "Możesz szybciej podłożyć bombę oraz ją zdefować", "#8A2BE2");
Instance.RegisterEventHandler<EventBombBeginplant>((@event, info) =>
{
foreach (var player in Utilities.GetPlayers())
{
if (!IsPlayerValid(player)) continue;
if (!IsPlayerValid(player)) return HookResult.Continue;
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill == "Eliminator")

View file

@ -8,16 +8,18 @@ namespace dRandomSkills
{
public static void LoadFlash()
{
Utils.RegisterSkill("Flash", "Otrzymujesz losową ilość speed na start rundy", "#A31912");
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
{
Instance.AddTimer(0.1f, () =>
{
foreach (var player in Utilities.GetPlayers())
{
if (!IsPlayerValid(player)) continue;
if (!IsPlayerValid(player)) return;
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill != "Flash") continue;
if (playerInfo?.Skill != "Flash") return;
var playerPawn = player.PlayerPawn?.Value;

View file

@ -8,23 +8,143 @@ namespace dRandomSkills
{
public static class Impostor
{
private static readonly List<string> CTModels = new List<string>
{
// SWAT
"characters/models/ctm_swat/ctm_swat_variante.vmdl",
"characters/models/ctm_swat/ctm_swat_variantf.vmdl",
"characters/models/ctm_swat/ctm_swat_varianth.vmdl",
"characters/models/ctm_swat/ctm_swat_varianti.vmdl",
"characters/models/ctm_swat/ctm_swat_variantj.vmdl",
"characters/models/ctm_swat/ctm_swat_variantk.vmdl",
// ST6
"characters/models/ctm_st6/ctm_st6_variante.vmdl",
"characters/models/ctm_st6/ctm_st6_variantg.vmdl",
"characters/models/ctm_st6/ctm_st6_varianti.vmdl",
"characters/models/ctm_st6/ctm_st6_variantj.vmdl",
"characters/models/ctm_st6/ctm_st6_variantk.vmdl",
"characters/models/ctm_st6/ctm_st6_variantl.vmdl",
"characters/models/ctm_st6/ctm_st6_variantm.vmdl",
"characters/models/ctm_st6/ctm_st6_variantn.vmdl",
// SAS
"characters/models/ctm_sas/ctm_sas.vmdl",
"characters/models/ctm_sas/ctm_sas_variantf.vmdl",
"characters/models/ctm_sas/ctm_sas_variantg.vmdl",
// CTM_HEAVY
"characters/models/ctm_heavy/ctm_heavy.vmdl",
// GENDARMERIE
"characters/models/ctm_gendarmerie/ctm_gendarmerie_varianta.vmdl",
"characters/models/ctm_gendarmerie/ctm_gendarmerie_variantb.vmdl",
"characters/models/ctm_gendarmerie/ctm_gendarmerie_variantc.vmdl",
"characters/models/ctm_gendarmerie/ctm_gendarmerie_variantd.vmdl",
"characters/models/ctm_gendarmerie/ctm_gendarmerie_variante.vmdl",
// FBI
"characters/models/ctm_fbi/ctm_fbi.vmdl",
"characters/models/ctm_fbi/ctm_fbi_varianta.vmdl",
"characters/models/ctm_fbi/ctm_fbi_variantb.vmdl",
"characters/models/ctm_fbi/ctm_fbi_variantc.vmdl",
"characters/models/ctm_fbi/ctm_fbi_variantd.vmdl",
"characters/models/ctm_fbi/ctm_fbi_variante.vmdl",
"characters/models/ctm_fbi/ctm_fbi_variantf.vmdl",
"characters/models/ctm_fbi/ctm_fbi_variantg.vmdl",
"characters/models/ctm_fbi/ctm_fbi_varianth.vmdl",
// DIVER
"characters/models/ctm_diver/ctm_diver_varianta.vmdl",
"characters/models/ctm_diver/ctm_diver_variantb.vmdl",
"characters/models/ctm_diver/ctm_diver_variantc.vmdl",
};
private static readonly List<string> TModels = new List<string>
{
// BALKAN
"characters/models/tm_balkan/tm_balkan_variantf.vmdl",
"characters/models/tm_balkan/tm_balkan_variantg.vmdl",
"characters/models/tm_balkan/tm_balkan_varianth.vmdl",
"characters/models/tm_balkan/tm_balkan_varianti.vmdl",
"characters/models/tm_balkan/tm_balkan_variantj.vmdl",
"characters/models/tm_balkan/tm_balkan_variantk.vmdl",
"characters/models/tm_balkan/tm_balkan_variantl.vmdl",
// JUMPSUIT
"characters/models/tm_jumpsuit/tm_jumpsuit_varianta.vmdl",
"characters/models/tm_jumpsuit/tm_jumpsuit_variantb.vmdl",
"characters/models/tm_jumpsuit/tm_jumpsuit_variantc.vmdl",
// JUNGLERAIDER
"characters/models/tm_jungle_raider/tm_jungle_raider_varianta.vmdl",
"characters/models/tm_jungle_raider/tm_jungle_raider_variantb.vmdl",
"characters/models/tm_jungle_raider/tm_jungle_raider_variantb2.vmdl",
"characters/models/tm_jungle_raider/tm_jungle_raider_variantc.vmdl",
"characters/models/tm_jungle_raider/tm_jungle_raider_variantd.vmdl",
"characters/models/tm_jungle_raider/tm_jungle_raider_variante.vmdl",
"characters/models/tm_jungle_raider/tm_jungle_raider_variantf.vmdl",
"characters/models/tm_jungle_raider/tm_jungle_raider_variantf2.vmdl",
// LEET
"characters/models/tm_leet/tm_leet_varianta.vmdl",
"characters/models/tm_leet/tm_leet_variantb.vmdl",
"characters/models/tm_leet/tm_leet_variantc.vmdl",
"characters/models/tm_leet/tm_leet_variantd.vmdl",
"characters/models/tm_leet/tm_leet_variante.vmdl",
"characters/models/tm_leet/tm_leet_variantf.vmdl",
"characters/models/tm_leet/tm_leet_variantg.vmdl",
"characters/models/tm_leet/tm_leet_varianth.vmdl",
"characters/models/tm_leet/tm_leet_varianti.vmdl",
"characters/models/tm_leet/tm_leet_variantj.vmdl",
"characters/models/tm_leet/tm_leet_variantk.vmdl",
// PHOENIX
"characters/models/tm_phoenix/tm_phoenix.vmdl",
"characters/models/tm_phoenix/tm_phoenix_varianta.vmdl",
"characters/models/tm_phoenix/tm_phoenix_variantb.vmdl",
"characters/models/tm_phoenix/tm_phoenix_variantc.vmdl",
"characters/models/tm_phoenix/tm_phoenix_variantd.vmdl",
"characters/models/tm_phoenix/tm_phoenix_variantf.vmdl",
"characters/models/tm_phoenix/tm_phoenix_variantg.vmdl",
"characters/models/tm_phoenix/tm_phoenix_varianth.vmdl",
"characters/models/tm_phoenix/tm_phoenix_varianti.vmdl",
// PHOENIX HEAVY
"characters/models/tm_phoenix_heavy/tm_phoenix_heavy.vmdl",
// PROFESSIONAL
"characters/models/tm_professional/tm_professional_varf.vmdl",
"characters/models/tm_professional/tm_professional_varf1.vmdl",
"characters/models/tm_professional/tm_professional_varf2.vmdl",
"characters/models/tm_professional/tm_professional_varf3.vmdl",
"characters/models/tm_professional/tm_professional_varf4.vmdl",
"characters/models/tm_professional/tm_professional_varf5.vmdl",
"characters/models/tm_professional/tm_professional_varg.vmdl",
"characters/models/tm_professional/tm_professional_varh.vmdl",
"characters/models/tm_professional/tm_professional_vari.vmdl",
"characters/models/tm_professional/tm_professional_varj.vmdl",
};
public static void LoadImpostor()
{
Utils.RegisterSkill("Impostor", "Otrzymujesz na start rundy model postaci wroga", "#99140B");
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
{
Instance.AddTimer(0.1f, () =>
{
foreach (var player in Utilities.GetPlayers())
{
if (!IsPlayerValid(player)) continue;
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill != "Impostor") continue;
if (playerInfo?.Skill == "Impostor")
{
string model = player.Team == CsTeam.Terrorist
? "characters/models/ctm_fbi/ctm_fbi_variantb.vmdl"
? GetRandomModel(CTModels)
: player.Team == CsTeam.CounterTerrorist
? "characters/models/tm_phoenix/tm_phoenix_varianta.vmdl"
? GetRandomModel(TModels)
: null;
if (model != null)
@ -32,12 +152,21 @@ namespace dRandomSkills
SetPlayerModel(player, model);
}
}
}
});
return HookResult.Continue;
});
}
private static string GetRandomModel(List<string> models)
{
if (models == null || models.Count == 0) return null;
var random = new Random();
int index = random.Next(models.Count);
return models[index];
}
private static void SetPlayerModel(CCSPlayerController player, string model)
{
var pawn = player.PlayerPawn?.Value;
@ -51,10 +180,5 @@ namespace dRandomSkills
pawn.Render = Color.FromArgb(255, originalRender.R, originalRender.G, originalRender.B);
});
}
private static bool IsPlayerValid(CCSPlayerController player)
{
return player != null && player.IsValid && player.PlayerPawn?.Value != null;
}
}
}

View file

@ -8,6 +8,8 @@ namespace dRandomSkills
public static void LoadKatapulta()
{
Utils.RegisterSkill("Katapulta", "Masz 25% szans na podrzucenie wroga", "#FF4500");
Instance.RegisterEventHandler<EventPlayerHurt>((@event, info) =>
{
var attacker = @event.Attacker;
@ -19,7 +21,7 @@ namespace dRandomSkills
var attackerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
if (attackerInfo?.Skill == "Katapulta" && attacker.PawnIsAlive)
if (attackerInfo?.Skill == "Katapulta" && victim.PawnIsAlive)
{
if (Instance.Random.NextDouble() <= 0.25)
{

View file

@ -9,16 +9,18 @@ namespace dRandomSkills
{
public static void LoadKurczak()
{
Utils.RegisterSkill("Kurczak", "Otrzymujesz model kurczaka + jesteś o 10% szybszy", "#FF8B42");
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
{
Instance.AddTimer(0.1f, () =>
{
foreach (var player in Utilities.GetPlayers())
{
if (!IsPlayerValid(player)) continue;
if (!IsPlayerValid(player)) return;
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill != "Kurczak") continue;
if (playerInfo?.Skill != "Kurczak") return;
var playerPawn = player.PlayerPawn?.Value;
if (playerPawn != null)

View file

@ -8,15 +8,17 @@ namespace dRandomSkills
{
public static void LoadMedyk()
{
Utils.RegisterSkill("Medyk", "Otrzymujesz losową ilość apteczek na start rundy", "#42FF5F");
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
{
Instance.AddTimer(0.1f, () =>
{
foreach (var player in Utilities.GetPlayers())
{
if (!IsPlayerValid(player)) continue;
if (!IsPlayerValid(player)) return;
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill != "Medyk") continue;
if (playerInfo?.Skill != "Medyk") return;
int healthshot = Instance.Random.Next(1, 10);
for (int i = 0; i < healthshot; i++)
@ -33,10 +35,10 @@ namespace dRandomSkills
{
foreach (var player in Utilities.GetPlayers())
{
if (!IsPlayerValid(player)) continue;
if (!IsPlayerValid(player)) return HookResult.Continue;
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill != "Medyk") continue;
if (playerInfo?.Skill != "Medyk") return HookResult.Continue;
player.RemoveItemByDesignerName("weapon_healthshot");
}

View file

@ -12,6 +12,8 @@ namespace dRandomSkills
public static void LoadMuhammed()
{
Utils.RegisterSkill("Muhammed", "Po śmierci wybucha i zabija graczy w obrębie", "#F5CB42");
Instance.RegisterEventHandler<EventPlayerDeath>((@event, info) =>
{
CCSPlayerController player = @event.Userid;
@ -19,9 +21,10 @@ namespace dRandomSkills
if (!IsPlayerValid(player)) return HookResult.Continue;
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill != "Muhammed") return HookResult.Continue;
if (playerInfo?.Skill == "Muhammed")
{
SpawnExplosion(player);
}
return HookResult.Continue;
});

View file

@ -5,9 +5,10 @@ namespace dRandomSkills
{
public static class NieskonczoneAmmo
{
public static void LoadNieskonczoneAmmo()
{
Utils.RegisterSkill("Nieskończone Ammo", "Otrzymujesz nieskończoną ilość ammo do wszystkich swoich broni", "#0000FF");
Instance.RegisterEventHandler<EventWeaponFire>((@event, info) =>
{
var player = @event.Userid;

View file

@ -6,9 +6,10 @@ namespace dRandomSkills
{
public static class ObrotWroga
{
public static void LoadObrotWroga()
{
Utils.RegisterSkill("Obrót Wroga", "Masz 25% szans na obrócenie wroga o 180 stopni po trafieniu", "#00FF00");
Instance.RegisterEventHandler<EventPlayerHurt>((@event, info) =>
{
var attacker = @event.Attacker;
@ -19,7 +20,7 @@ namespace dRandomSkills
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
if (playerInfo?.Skill == "Obrót Wroga" && attacker.PawnIsAlive)
if (playerInfo?.Skill == "Obrót Wroga" && victim.PawnIsAlive)
{
if (Instance.Random.NextDouble() <= 0.25)
{

View file

@ -9,27 +9,34 @@ namespace dRandomSkills
{
public static void LoadOneShot()
{
Utils.RegisterSkill("One Shot", "Po trafieniu od razu zabija przeciwnika", "#ff5CD9");
VirtualFunctions.CBaseEntity_TakeDamageOldFunc.Hook(OnTakeDamage, HookMode.Pre);
}
private static HookResult OnTakeDamage(DynamicHook h)
{
CTakeDamageInfo param = h.GetParam<CTakeDamageInfo>(1);
CEntityInstance param = h.GetParam<CEntityInstance>(0);
CTakeDamageInfo param2 = h.GetParam<CTakeDamageInfo>(1);
if (param == null || param?.Attacker == null || !param.Attacker.Value.IsValid) return HookResult.Continue;
if (param == null || param2 == null || param2.Attacker == null)
return HookResult.Continue;
CCSPlayerPawn attackerPawn = new CCSPlayerPawn(param.Attacker.Value.Handle);
if (attackerPawn == null || attackerPawn.Controller == null || !attackerPawn.Controller.Value.IsValid) return HookResult.Continue;
CCSPlayerPawn attackerPawn = new CCSPlayerPawn(param2.Attacker.Value.Handle);
CCSPlayerPawn victimPawn = new CCSPlayerPawn(param.Handle);
if (attackerPawn == null || attackerPawn.Controller?.Value == null || victimPawn == null || victimPawn.Controller?.Value == null)
return HookResult.Continue;
CCSPlayerController attacker = attackerPawn.Controller.Value.As<CCSPlayerController>();
if (attacker == null) return HookResult.Continue;
CCSPlayerController victim = victimPawn.Controller.Value.As<CCSPlayerController>();
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
if (playerInfo == null) return HookResult.Continue;
if (playerInfo.Skill == "One Shot" && attacker.PawnIsAlive)
{
param.Damage = 1000f;
param2.Damage = 1000f;
}
return HookResult.Continue;

View file

@ -14,11 +14,13 @@ namespace dRandomSkills
public static void LoadPawelJumper()
{
Utils.RegisterSkill("Paweł Jumper", "Otrzymujesz dodatkowy Skok", "#FFA500");
Instance.RegisterListener<OnTick>(() =>
{
foreach (var player in Utilities.GetPlayers())
{
if (!IsPlayerValid(player)) continue;
if (!IsPlayerValid(player)) return;
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill == "Paweł Jumper")
{

View file

@ -10,6 +10,8 @@ namespace dRandomSkills
public static void LoadPhoenix()
{
Utils.RegisterSkill("Phoenix", "Masz 35% szans na odrodzenie się po śmierci", "#ff5C0A");
Instance.RegisterEventHandler<EventPlayerDeath>((@event, info) =>
{
var player = @event.Userid;
@ -17,11 +19,13 @@ namespace dRandomSkills
if (!IsValidPlayer(player)) return HookResult.Continue;
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill != "Phoenix") return HookResult.Continue;
if (playerInfo?.Skill == "Phoenix")
{
if (Instance.Random.NextDouble() <= ReviveChance)
{
RevivePlayer(player);
player.Respawn();
Utils.PrintToChat(player, $"Zostałeś odrodzony z popiołów dzięki mocy: {ChatColors.DarkRed}Phoenix", false);
}
}
return HookResult.Continue;
@ -32,12 +36,5 @@ namespace dRandomSkills
{
return player != null && player.IsValid;
}
private static void RevivePlayer(CCSPlayerController player)
{
player.Respawn();
Utils.PrintToChat(player, $"Zostałeś odrodzony z popiołów dzięki mocy: {ChatColors.DarkRed}Phoenix", false);
}
}
}

View file

@ -12,6 +12,8 @@ namespace dRandomSkills
public static void LoadPilot()
{
Utils.RegisterSkill("Pilot", "Latanie na noclip przez dany czas", "#1466F5");
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
{
Instance.AddTimer(0.1f, () =>
@ -38,10 +40,15 @@ namespace dRandomSkills
Instance.RegisterEventHandler<EventPlayerDeath>((@event, info) =>
{
var player = @event.Userid;
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill == "Pilot")
{
if (PlayerPilotInfo.ContainsKey(player.SteamID))
{
PlayerPilotInfo.Remove(player.SteamID);
}
}
return HookResult.Continue;
});

View file

@ -8,6 +8,8 @@ namespace dRandomSkills
{
public static void LoadRambo()
{
Utils.RegisterSkill("Rambo", "Otrzymujesz losową ilość zdrowia na start rundy", "#009905");
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
{
Instance.AddTimer(0.1f, () =>

View file

@ -8,6 +8,8 @@ namespace dRandomSkills
public static void LoadRozbrojenie()
{
Utils.RegisterSkill("Rozbrojenie", "Masz 25% szans na wyrzucenie broni wroga po trafieniu", "#FF4500");
Instance.RegisterEventHandler<EventPlayerHurt>((@event, info) =>
{
var attacker = @event.Attacker;
@ -19,7 +21,7 @@ namespace dRandomSkills
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
if (playerInfo?.Skill == "Rozbrojenie" && attacker.PawnIsAlive)
if (playerInfo?.Skill == "Rozbrojenie" && victim.PawnIsAlive)
{
if (Instance.Random.NextDouble() <= 0.25)
{

View file

@ -7,6 +7,8 @@ namespace dRandomSkills
{
public static void LoadTeleporter()
{
Utils.RegisterSkill("Teleportator", "Zamieniasz się miejscami z trafionym wrogiem", "#8A2BE2");
Instance.RegisterEventHandler<EventPlayerHurt>((@event, info) =>
{
var victim = @event.Userid;

View file

@ -8,6 +8,8 @@ namespace dRandomSkills
public static void LoadZelaznaGlowa()
{
Utils.RegisterSkill("Żelazna Głowa", "Nie otrzymujesz obrażeń w głowę", "#8B4513");
Instance.RegisterEventHandler<EventPlayerHurt>((@event, info) =>
{
var attacker = @event.Attacker;

View file

@ -10,5 +10,13 @@ namespace dRandomSkills
string checkIcon = isError ? $"{ChatColors.DarkRed}✖{ChatColors.LightRed}" : $"{ChatColors.Green}✔{ChatColors.Lime}";
player.PrintToChat($" {ChatColors.DarkRed}► {ChatColors.Green}[{ChatColors.DarkRed} LOSOWE MOCE {ChatColors.Green}] {checkIcon} {msg}");
}
public static void RegisterSkill(string name, string description, string color)
{
if (!SkillData.Skills.Any(skill => skill.Name == name))
{
SkillData.Skills.Add(new dSkill_SkillInfo(name, description, color));
}
}
}
}