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:
parent
810ca2fa3c
commit
68f26a22f4
30 changed files with 253 additions and 108 deletions
|
|
@ -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>();
|
||||
}
|
||||
}
|
||||
|
|
@ -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}";
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ namespace dRandomSkills
|
|||
{
|
||||
skillPlayer.IsDrawing = false;
|
||||
|
||||
var randomSkill = SkillData.Skills[Instance.Random.Next(SkillData.Skills.Length)];
|
||||
var randomSkill = SkillData.Skills[Instance.Random.Next(SkillData.Skills.Count)];
|
||||
skillPlayer.Skill = randomSkill.Name;
|
||||
|
||||
Utils.PrintToChat(player, $"{ChatColors.DarkRed}{randomSkill.Name}{ChatColors.Lime}: {randomSkill.Description}", false);
|
||||
|
|
@ -90,8 +90,8 @@ namespace dRandomSkills
|
|||
|
||||
if (!string.IsNullOrEmpty(teammateSkills))
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Lime}Supermoce twoich sojuszników:");
|
||||
player.PrintToChat(teammateSkills.TrimEnd('\n'));
|
||||
Utils.PrintToChat(player, $" {ChatColors.Lime}Supermoce twoich sojuszników:", false);
|
||||
Utils.PrintToChat(player, teammateSkills.TrimEnd('\n'), false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -106,19 +106,18 @@ namespace dRandomSkills
|
|||
var victim = @event.Userid;
|
||||
var attacker = @event.Attacker;
|
||||
|
||||
if (victim == null || attacker == null || victim == attacker) return HookResult.Continue;
|
||||
|
||||
if(Config.config.Settings.KillerSkillInfo)
|
||||
{
|
||||
if (victim != null && victim?.IsValid == true && attacker != null && attacker?.IsValid == true && victim != attacker)
|
||||
var attackerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
|
||||
if (attackerInfo != null)
|
||||
{
|
||||
var attackerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
|
||||
if (attackerInfo != null)
|
||||
{
|
||||
var skillData = SkillData.Skills.FirstOrDefault(s => s.Name == attackerInfo.Skill);
|
||||
string skillDesc = skillData?.Description ?? "Brak opisu";
|
||||
var skillData = SkillData.Skills.FirstOrDefault(s => s.Name == attackerInfo.Skill);
|
||||
string skillDesc = skillData?.Description ?? "Brak opisu";
|
||||
|
||||
victim.PrintToChat($"{ChatColors.Lime}Supermoc przeciwnika który cię zabił:");
|
||||
Utils.PrintToChat(victim, $"{ChatColors.DarkRed}{attacker.PlayerName}{ChatColors.Lime} posiada mocy: {ChatColors.DarkRed}{attackerInfo.Skill}{ChatColors.Lime} - {skillDesc}", false);
|
||||
}
|
||||
Utils.PrintToChat(victim, $"Supermoc przeciwnika {ChatColors.DarkRed}{attacker.PlayerName}{ChatColors.Lime}:", false);
|
||||
Utils.PrintToChat(victim, $"{ChatColors.DarkRed}{attackerInfo.Skill}{ChatColors.Lime} - {skillDesc}", false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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, () =>
|
||||
|
|
|
|||
|
|
@ -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, () =>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ namespace dRandomSkills
|
|||
|
||||
public static void LoadBunnyHop()
|
||||
{
|
||||
Utils.RegisterSkill("BunnyHop", "Otrzymujesz auto BunnyHopa", "#EB4034");
|
||||
|
||||
Instance.RegisterListener<OnTick>(OnTick);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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, () =>
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,28 +8,149 @@ 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;
|
||||
|
||||
string model = player.Team == CsTeam.Terrorist
|
||||
? "characters/models/ctm_fbi/ctm_fbi_variantb.vmdl"
|
||||
: player.Team == CsTeam.CounterTerrorist
|
||||
? "characters/models/tm_phoenix/tm_phoenix_varianta.vmdl"
|
||||
: null;
|
||||
|
||||
if (model != null)
|
||||
if (playerInfo?.Skill == "Impostor")
|
||||
{
|
||||
SetPlayerModel(player, model);
|
||||
string model = player.Team == CsTeam.Terrorist
|
||||
? GetRandomModel(CTModels)
|
||||
: player.Team == CsTeam.CounterTerrorist
|
||||
? GetRandomModel(TModels)
|
||||
: null;
|
||||
|
||||
if (model != null)
|
||||
{
|
||||
SetPlayerModel(player, model);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -38,6 +159,14 @@ namespace dRandomSkills
|
|||
});
|
||||
}
|
||||
|
||||
private static string GetRandomModel(List<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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
SpawnExplosion(player);
|
||||
if (playerInfo?.Skill == "Muhammed")
|
||||
{
|
||||
SpawnExplosion(player);
|
||||
}
|
||||
|
||||
return HookResult.Continue;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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 (Instance.Random.NextDouble() <= ReviveChance)
|
||||
if (playerInfo?.Skill == "Phoenix")
|
||||
{
|
||||
RevivePlayer(player);
|
||||
if (Instance.Random.NextDouble() <= ReviveChance)
|
||||
{
|
||||
player.Respawn();
|
||||
Utils.PrintToChat(player, $"Zostałeś odrodzony z popiołów dzięki mocy: {ChatColors.DarkRed}Phoenix", false);
|
||||
}
|
||||
}
|
||||
|
||||
return HookResult.Continue;
|
||||
|
|
@ -32,12 +36,5 @@ namespace dRandomSkills
|
|||
{
|
||||
return player != null && player.IsValid;
|
||||
}
|
||||
|
||||
private static void RevivePlayer(CCSPlayerController player)
|
||||
{
|
||||
player.Respawn();
|
||||
|
||||
Utils.PrintToChat(player, $"Zostałeś odrodzony z popiołów dzięki mocy: {ChatColors.DarkRed}Phoenix", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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,9 +40,14 @@ namespace dRandomSkills
|
|||
Instance.RegisterEventHandler<EventPlayerDeath>((@event, info) =>
|
||||
{
|
||||
var player = @event.Userid;
|
||||
if (PlayerPilotInfo.ContainsKey(player.SteamID))
|
||||
|
||||
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
if (playerInfo?.Skill == "Pilot")
|
||||
{
|
||||
PlayerPilotInfo.Remove(player.SteamID);
|
||||
if (PlayerPilotInfo.ContainsKey(player.SteamID))
|
||||
{
|
||||
PlayerPilotInfo.Remove(player.SteamID);
|
||||
}
|
||||
}
|
||||
|
||||
return HookResult.Continue;
|
||||
|
|
|
|||
|
|
@ -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, () =>
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue