v1.1.5
This commit is contained in:
parent
714624d96a
commit
2102f0581f
96 changed files with 1279 additions and 413 deletions
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue