Skip to content

Commit

Permalink
Merge pull request #63 from daffyyyy/fix-knife-2
Browse files Browse the repository at this point in the history
Attempting to repair knives when a map or other plugin was giving them
  • Loading branch information
Nereziel authored Nov 22, 2023
2 parents 45fc4a8 + fc64e1d commit cf421c5
Showing 1 changed file with 81 additions and 55 deletions.
136 changes: 81 additions & 55 deletions WeaponPaints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -340,16 +340,24 @@ private HookResult OnPlayerSpawn(EventPlayerSpawn @event, GameEventInfo info)

if (Config.Additional.KnifeEnabled)
{
/*
if (!PlayerHasKnife(player))
GiveKnifeToPlayer(player);
*/
RemoveKnifeFromPlayer(player);
AddTimer(0.2f, () =>
{
GiveKnifeToPlayer(player);
});
}


return HookResult.Continue;
}
private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info)
{
/*
if (!IsMatchZy) return HookResult.Continue;
*/

NativeAPI.IssueServerCommand("mp_t_default_melee \"\"");
NativeAPI.IssueServerCommand("mp_ct_default_melee \"\"");
Expand All @@ -360,16 +368,18 @@ private HookResult OnItemPickup(EventItemPickup @event, GameEventInfo info)
{
if (@event.Defindex == 42 || @event.Defindex == 59)
{
CCSPlayerController player = @event.Userid;
CCSPlayerController? player = @event.Userid;
if (player == null || !player.IsValid || player.IsBot || !player.PawnIsAlive) return HookResult.Continue;

if (player.IsValid && !player.IsBot && @event.Item == "knife")
if (g_playersKnife.ContainsKey((int)player.EntityIndex!.Value.Value)
&&
g_playersKnife[(int)player.EntityIndex!.Value.Value] != "weapon_knife")
{
if (g_playersKnife.ContainsKey((int)player.EntityIndex!.Value.Value)
&&
g_playersKnife[(int)player.EntityIndex!.Value.Value] != "weapon_knife")
RemoveKnifeFromPlayer(player);
AddTimer(0.2f, () =>
{
RefreshPlayerKnife(player, true);
}
GiveKnifeToPlayer(player);
});
}
}
return HookResult.Continue;
Expand Down Expand Up @@ -463,9 +473,7 @@ private HookResult OnEventItemPurchasePost(EventItemPurchase @event, GameEventIn
private void GiveKnifeToPlayer(CCSPlayerController? player)
{
if (!Config.Additional.KnifeEnabled) return;
if (player == null || !player.IsValid) return;

if (PlayerHasKnife(player)) return;
if (player == null || !player.IsValid || !player.PawnIsAlive) return;

if (g_playersKnife.TryGetValue((int)player.EntityIndex!.Value.Value, out var knife))
{
Expand All @@ -489,47 +497,47 @@ private void RemoveKnifeFromPlayer(CCSPlayerController? player)
{
if (player == null || !player.IsValid || !player.PawnIsAlive) return;
var weapons = player.PlayerPawn.Value.WeaponServices!.MyWeapons;
foreach (var weapon in weapons)
if (weapons != null && weapons.Count > 0)
{
if (weapon.IsValid && weapon.Value.IsValid)
foreach (var weapon in weapons)
{
//if (weapon.Value.AttributeManager.Item.ItemDefinitionIndex == 42 || weapon.Value.AttributeManager.Item.ItemDefinitionIndex == 59)
if (weapon.Value.DesignerName.Contains("knife"))
if (weapon.IsValid && weapon.Value.IsValid)
{
weapon.Value.Remove();
return;
//if (weapon.Value.AttributeManager.Item.ItemDefinitionIndex == 42 || weapon.Value.AttributeManager.Item.ItemDefinitionIndex == 59)
if (weapon.Value.DesignerName.Contains("knife"))
{
weapon.Value.Remove();
return;
}
}
}
}
}
/* Causing crashes
private void RefreshPlayerKnife(CCSPlayerController? player, bool remove = false)
{
if (player == null || !player.IsValid || !player.PawnIsAlive) return;
if (player == null || !player.IsValid || player.IsBot || !player.PawnIsAlive) return;
if (remove == true)
AddTimer(0.1f, () =>
{
AddTimer(0.1f, () =>
if (remove == true)
{
if (PlayerHasKnife(player))
RemoveKnifeFromPlayer(player);
});
}
}
AddTimer(0.3f, () =>
{
if (!PlayerHasKnife(player))
GiveKnifeToPlayer(player);
GiveKnifeToPlayer(player);
});
if (Config.Additional.SkinVisibilityFix)
{
AddTimer(0.3f, () => RefreshSkins(player));
AddTimer(0.25f, () => RefreshSkins(player));
}
}
*/
private void RefreshSkins(CCSPlayerController? player)
{
if (player == null || !player.IsValid || !player.PawnIsAlive) return;

if (player == null || !player.IsValid || player.IsBot || !player.PawnIsAlive) return;

AddTimer(0.18f, () => NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot3"));
AddTimer(0.25f, () => NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot2"));
Expand All @@ -545,7 +553,7 @@ private bool PlayerHasKnife(CCSPlayerController? player)
}

var weapons = player.PlayerPawn.Value.WeaponServices!.MyWeapons;
if (weapons == null) return false;
if (weapons == null || weapons.Count <= 0) return false;
foreach (var weapon in weapons)
{
if (weapon.IsValid && weapon.Value.IsValid)
Expand All @@ -562,33 +570,39 @@ private void SetupKnifeMenu()
{
if (!Config.Additional.KnifeEnabled) return;
var giveItemMenu = new ChatMenu(ReplaceTags(Config.Messages.KnifeMenuTitle));
var handleGive = (CCSPlayerController player, ChatMenuOption option) =>
var handleGive = (CCSPlayerController? player, ChatMenuOption option) =>
{
string temp = "";
if (knifeTypes.TryGetValue(option.Text, out var knife))
if (player != null && player.IsValid)
{
g_playersKnife[(int)player.EntityIndex!.Value.Value] = knifeTypes[option.Text];
if (!string.IsNullOrEmpty(Config.Messages.ChosenKnifeMenu))
{
temp = $"{Config.Prefix} {Config.Messages.ChosenKnifeMenu}".Replace("{KNIFE}", option.Text);
player.PrintToChat(ReplaceTags(temp));
}
if (!string.IsNullOrEmpty(Config.Messages.ChosenKnifeMenuKill) && Config.Additional.CommandKillEnabled)
{
temp = $"{Config.Prefix} {Config.Messages.ChosenKnifeMenuKill}";
player.PrintToChat(ReplaceTags(temp));
}
if (player.PawnIsAlive)
string temp = "";
if (knifeTypes.TryGetValue(option.Text, out var knife))
{
g_playersKnife[(int)player.EntityIndex!.Value.Value] = knifeTypes[option.Text];
if (!string.IsNullOrEmpty(Config.Messages.ChosenKnifeMenu))
{
temp = $"{Config.Prefix} {Config.Messages.ChosenKnifeMenu}".Replace("{KNIFE}", option.Text);
player.PrintToChat(ReplaceTags(temp));
}
if (!string.IsNullOrEmpty(Config.Messages.ChosenKnifeMenuKill) && Config.Additional.CommandKillEnabled)
{
temp = $"{Config.Prefix} {Config.Messages.ChosenKnifeMenuKill}";
player.PrintToChat(ReplaceTags(temp));
}
if (player.PawnIsAlive)
{
RemoveKnifeFromPlayer(player);
AddTimer(0.2f, () =>
{
GiveKnifeToPlayer(player);
});
}
Task.Run(() => SyncKnifeToDatabase((int)player.EntityIndex!.Value.Value, knife));

/* Old way
RemoveKnifeFromPlayer(player);
RefreshPlayerKnife(player);
AddTimer(0.1f, () => GiveKnifeToPlayer(player));
*/
}
Task.Run(() => SyncKnifeToDatabase((int)player.EntityIndex!.Value.Value, knife));

/* Old way
RemoveKnifeFromPlayer(player);
AddTimer(0.1f, () => GiveKnifeToPlayer(player));
*/
}
};
foreach (var knife in knifeTypes)
Expand All @@ -604,8 +618,10 @@ private void SetupSkinsMenu()
var weaponSelectionMenu = new ChatMenu(ReplaceTags(Config.Messages.WeaponMenuTitle));

// Function to handle skin selection for a specific weapon
var handleWeaponSelection = (CCSPlayerController player, ChatMenuOption option) =>
var handleWeaponSelection = (CCSPlayerController? player, ChatMenuOption option) =>
{
if (player == null || !player.IsValid) return;

int playerIndex = (int)player.EntityIndex!.Value.Value;
string selectedWeapon = option.Text;
if (classNamesByWeapon.TryGetValue(selectedWeapon, out string? selectedWeaponClassname))
Expand All @@ -620,8 +636,10 @@ private void SetupSkinsMenu()
var skinSubMenu = new ChatMenu(ReplaceTags(Config.Messages.SkinMenuTitle).Replace("{WEAPON}", selectedWeapon));

// Function to handle skin selection for the chosen weapon
var handleSkinSelection = (CCSPlayerController p, ChatMenuOption opt) =>
var handleSkinSelection = (CCSPlayerController? p, ChatMenuOption opt) =>
{
if (p == null || !p.IsValid) return;

var steamId = new SteamID(player.SteamID);
var firstSkin = skinsList?.FirstOrDefault(skin =>
{
Expand Down Expand Up @@ -713,7 +731,7 @@ private void SetupSkinsMenu()
private void OnCommandRefresh(CCSPlayerController? player, CommandInfo command)
{
if (!Config.Additional.CommandWpEnabled || !Config.Additional.SkinEnabled) return;
if (player == null) return;
if (player == null || !player.IsValid || player.IsBot) return;
string temp = "";
int playerIndex = (int)player.EntityIndex!.Value.Value;
if (commandCooldown != null && DateTime.UtcNow >= commandCooldown[playerIndex].AddSeconds(Config.CmdRefreshCooldownSeconds))
Expand All @@ -722,9 +740,17 @@ private void OnCommandRefresh(CCSPlayerController? player, CommandInfo command)
Task.Run(async () => await GetWeaponPaintsFromDatabase(playerIndex));
if (Config.Additional.KnifeEnabled)
{
RemoveKnifeFromPlayer(player);
AddTimer(0.2f, () =>
{
GiveKnifeToPlayer(player);
});

Task.Run(async () => await GetKnifeFromDatabase(playerIndex));
/*
RemoveKnifeFromPlayer(player);
AddTimer(0.2f, () => GiveKnifeToPlayer(player));
*/
}
if (!string.IsNullOrEmpty(Config.Messages.SuccessRefreshCommand))
{
Expand Down

0 comments on commit cf421c5

Please sign in to comment.