This commit is contained in:
Juzlus 2025-09-15 23:58:34 +02:00
parent 714624d96a
commit 2102f0581f
96 changed files with 1279 additions and 413 deletions

View file

@ -9,6 +9,7 @@ namespace jRandomSkills
public class SniperElite : ISkill
{
private const Skills skillName = Skills.SniperElite;
private static readonly Dictionary<ulong, List<CEntityInstance>> playerAWPs = [];
private static readonly Dictionary<ulong, string> sniperElites = [];
private static readonly string[] rifles = [ "weapon_mp9", "weapon_mac10", "weapon_bizon", "weapon_mp7", "weapon_ump45", "weapon_p90",
@ -24,6 +25,7 @@ namespace jRandomSkills
public static void NewRound()
{
sniperElites.Clear();
playerAWPs.Clear();
}
public static void PlayerDeath(EventPlayerDeath @event)
@ -32,18 +34,27 @@ namespace jRandomSkills
if (player == null || !player.IsValid) return;
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill == skillName)
sniperElites.Remove(player.SteamID);
DisableSkill(player);
}
public static void WeaponEquip(EventItemEquip @event)
{
var player = @event.Userid;
if (player == null || !player.IsValid) return;
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill == skillName)
DeleteDroppedAWP(player);
}
public static void EnableSkill(CCSPlayerController player)
{
sniperElites.Add(player.SteamID, "weapon_awp");
sniperElites.TryAdd(player.SteamID, "weapon_awp");
}
public static void DisableSkill(CCSPlayerController player)
{
sniperElites.Remove(player.SteamID);
playerAWPs.Remove(player.SteamID);
}
public static void UseSkill(CCSPlayerController player)
@ -64,18 +75,58 @@ namespace jRandomSkills
try
{
string? activeRifle = GetActiveRifle(player);
if (!string.IsNullOrEmpty(activeRifle))
player.RemoveItemByDesignerName(activeRifle, true);
sniperElites[player.SteamID] = activeRifle ?? "weapon_awp";
Server.NextFrame(() => player.GiveNamedItem(holdedWeapon ?? "weapon_awp") );
CBasePlayerWeapon? activeRifle = GetActiveRifle(player);
if (activeRifle != null && activeRifle.IsValid)
RemoveWeapon(player, activeRifle.DesignerName);
sniperElites[player.SteamID] = (activeRifle != null && activeRifle.IsValid) ? SkillUtils.GetDesignerName(activeRifle) : "weapon_awp";
Server.NextFrame(() => {
string weapon = holdedWeapon ?? "weapon_awp";
if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid) return;
var createdWeapon = player.PlayerPawn.Value?.ItemServices?.As<CCSPlayer_ItemServices>().GiveNamedItem<CEntityInstance>(weapon);
if (createdWeapon != null && createdWeapon.IsValid && createdWeapon.DesignerName == "weapon_awp")
{
if (playerAWPs.TryGetValue(player.SteamID, out List<CEntityInstance>? value))
value.Add(createdWeapon);
else
playerAWPs.Add(player.SteamID, [createdWeapon]);
}
DeleteDroppedAWP(player);
});
}
catch { }
}
private static string? GetActiveRifle(CCSPlayerController player)
private static void DeleteDroppedAWP(CCSPlayerController player)
{
string rifle = string.Empty;
var pawn = player.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid) return;
var weaponServices = pawn.WeaponServices;
if (weaponServices == null) return;
List<uint> playerWeapons = weaponServices.MyWeapons.Where(w => w != null && w.IsValid && w.Value != null && w.Value.IsValid)
.Select(w => w.Value!.Index).ToList();
if (playerAWPs.TryGetValue(player.SteamID, out var AWPs))
foreach (var awp in AWPs.ToList())
{
if (awp != null && awp.IsValid)
{
if (!playerWeapons.Contains(awp.Index))
{
awp.AcceptInput("Kill");
AWPs.Remove(awp);
}
}
else
AWPs.Remove(awp!);
}
}
private static CBasePlayerWeapon? GetActiveRifle(CCSPlayerController player)
{
CBasePlayerWeapon? rifle = null;
var pawn = player.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid) return rifle;
var weaponServices = pawn.WeaponServices;
@ -84,11 +135,21 @@ namespace jRandomSkills
foreach (var weapon in weaponServices.MyWeapons)
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
if (rifles.Contains(weapon.Value.DesignerName))
rifle = SkillUtils.GetDesignerName(weapon.Value);
rifle = weapon.Value;
return rifle;
}
private static void RemoveWeapon(CCSPlayerController player, string designerName)
{
var pawn = player.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) return;
public class SkillConfig(Skills skill = skillName, bool active = false, string color = "#e0873a", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false) : Config.DefaultSkillInfo(skill, active, color, onlyTeam, needsTeammates)
foreach (var item in pawn.WeaponServices.MyWeapons)
if (item != null && item.IsValid && item.Value != null && item.Value.IsValid && item.Value.DesignerName == designerName)
item.Value.AcceptInput("Kill");
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#e0873a", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false) : Config.DefaultSkillInfo(skill, active, color, onlyTeam, needsTeammates)
{
}
}