Compare commits

..

4 Commits

Author SHA1 Message Date
Nereziel
646050fb72 Merge pull request #64 from daffyyyy/fix-knife-2
Still knife fix :D (Previous sometimes give random knife to player)
2023-11-24 08:11:37 +01:00
daffyyyy
87dadb9c62 Update WeaponPaints.cs 2023-11-23 01:32:07 +01:00
Nereziel
cf421c5614 Merge pull request #63 from daffyyyy/fix-knife-2
Attempting to repair knives when a map or other plugin was giving them
2023-11-23 00:33:16 +01:00
daffyyyy
fc64e1d261 Additional checks 2023-11-23 00:21:04 +01:00

View File

@@ -113,10 +113,11 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
{ {
for (int i = 1; i <= Server.MaxPlayers; i++) for (int i = 1; i <= Server.MaxPlayers; i++)
{ {
if (Config.Additional.KnifeEnabled)
await GetKnifeFromDatabase(i);
if (Config.Additional.SkinEnabled) if (Config.Additional.SkinEnabled)
await GetWeaponPaintsFromDatabase(i); await GetWeaponPaintsFromDatabase(i);
if (Config.Additional.KnifeEnabled)
await GetKnifeFromDatabase(i);
} }
}); });
} }
@@ -344,12 +345,13 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
GiveKnifeToPlayer(player); GiveKnifeToPlayer(player);
} }
return HookResult.Continue; return HookResult.Continue;
} }
private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info)
{ {
/*
if (!IsMatchZy) return HookResult.Continue; if (!IsMatchZy) return HookResult.Continue;
*/
NativeAPI.IssueServerCommand("mp_t_default_melee \"\""); NativeAPI.IssueServerCommand("mp_t_default_melee \"\"");
NativeAPI.IssueServerCommand("mp_ct_default_melee \"\""); NativeAPI.IssueServerCommand("mp_ct_default_melee \"\"");
@@ -360,15 +362,24 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
{ {
if (@event.Defindex == 42 || @event.Defindex == 59) 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) if (g_playersKnife.ContainsKey((int)player.EntityIndex!.Value.Value)
&& &&
g_playersKnife[(int)player.EntityIndex!.Value.Value] != "weapon_knife") g_playersKnife[(int)player.EntityIndex!.Value.Value] != "weapon_knife")
{ {
RefreshPlayerKnife(player, true); RemoveKnifeFromPlayer(player);
AddTimer(0.1f, () =>
{
if (!PlayerHasKnife(player))
GiveKnifeToPlayer(player);
});
if (Config.Additional.SkinVisibilityFix)
{
AddTimer(0.25f, () => RefreshSkins(player));
} }
} }
} }
@@ -462,33 +473,31 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
} }
private void GiveKnifeToPlayer(CCSPlayerController? player) private void GiveKnifeToPlayer(CCSPlayerController? player)
{ {
if (!Config.Additional.KnifeEnabled) return; if (!Config.Additional.KnifeEnabled || player == null || !player.IsValid) return;
if (player == null || !player.IsValid) return;
if (PlayerHasKnife(player)) return;
if (g_playersKnife.TryGetValue((int)player.EntityIndex!.Value.Value, out var knife)) if (g_playersKnife.TryGetValue((int)player.EntityIndex!.Value.Value, out var knife))
{ {
player.GiveNamedItem(knife); player.GiveNamedItem(knife);
} }
else else if (Config.Additional.GiveRandomKnife)
{
if (Config.Additional.GiveRandomKnife)
{ {
Random random = new Random(); Random random = new Random();
int index = random.Next(knifeTypes.Count); int index = random.Next(knifeTypes.Count);
player.GiveNamedItem(knifeTypes.Values.ElementAt(index)); var randomKnife = knifeTypes.Values.ElementAt(index);
player.GiveNamedItem(randomKnife);
} }
else else
{ {
player.GiveNamedItem((CsTeam)player.TeamNum == CsTeam.Terrorist ? "weapon_knife_t" : "weapon_knife"); var defaultKnife = (CsTeam)player.TeamNum == CsTeam.Terrorist ? "weapon_knife_t" : "weapon_knife";
} player.GiveNamedItem(defaultKnife);
} }
} }
private void RemoveKnifeFromPlayer(CCSPlayerController? player) private void RemoveKnifeFromPlayer(CCSPlayerController? player)
{ {
if (player == null || !player.IsValid || !player.PawnIsAlive) return; if (player == null || !player.IsValid || !player.PawnIsAlive) return;
var weapons = player.PlayerPawn.Value.WeaponServices!.MyWeapons; var weapons = player.PlayerPawn.Value.WeaponServices!.MyWeapons;
if (weapons != null && weapons.Count > 0)
{
foreach (var weapon in weapons) foreach (var weapon in weapons)
{ {
if (weapon.IsValid && weapon.Value.IsValid) if (weapon.IsValid && weapon.Value.IsValid)
@@ -502,34 +511,32 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
} }
} }
} }
}
/* Causing crashes
private void RefreshPlayerKnife(CCSPlayerController? player, bool remove = false) 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)) if (PlayerHasKnife(player))
RemoveKnifeFromPlayer(player); RemoveKnifeFromPlayer(player);
});
} }
AddTimer(0.3f, () =>
{
if (!PlayerHasKnife(player))
GiveKnifeToPlayer(player); GiveKnifeToPlayer(player);
}); });
if (Config.Additional.SkinVisibilityFix) if (Config.Additional.SkinVisibilityFix)
{ {
AddTimer(0.3f, () => RefreshSkins(player)); AddTimer(0.25f, () => RefreshSkins(player));
} }
} }
*/
private void RefreshSkins(CCSPlayerController? 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.18f, () => NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot3"));
AddTimer(0.25f, () => NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot2")); AddTimer(0.25f, () => NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot2"));
@@ -545,7 +552,7 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
} }
var weapons = player.PlayerPawn.Value.WeaponServices!.MyWeapons; 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) foreach (var weapon in weapons)
{ {
if (weapon.IsValid && weapon.Value.IsValid) if (weapon.IsValid && weapon.Value.IsValid)
@@ -562,7 +569,9 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
{ {
if (!Config.Additional.KnifeEnabled) return; if (!Config.Additional.KnifeEnabled) return;
var giveItemMenu = new ChatMenu(ReplaceTags(Config.Messages.KnifeMenuTitle)); var giveItemMenu = new ChatMenu(ReplaceTags(Config.Messages.KnifeMenuTitle));
var handleGive = (CCSPlayerController player, ChatMenuOption option) => var handleGive = (CCSPlayerController? player, ChatMenuOption option) =>
{
if (player != null && player.IsValid)
{ {
string temp = ""; string temp = "";
if (knifeTypes.TryGetValue(option.Text, out var knife)) if (knifeTypes.TryGetValue(option.Text, out var knife))
@@ -581,7 +590,10 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
if (player.PawnIsAlive) if (player.PawnIsAlive)
{ {
RemoveKnifeFromPlayer(player); RemoveKnifeFromPlayer(player);
RefreshPlayerKnife(player); AddTimer(0.2f, () =>
{
GiveKnifeToPlayer(player);
});
} }
Task.Run(() => SyncKnifeToDatabase((int)player.EntityIndex!.Value.Value, knife)); Task.Run(() => SyncKnifeToDatabase((int)player.EntityIndex!.Value.Value, knife));
@@ -590,6 +602,7 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
AddTimer(0.1f, () => GiveKnifeToPlayer(player)); AddTimer(0.1f, () => GiveKnifeToPlayer(player));
*/ */
} }
}
}; };
foreach (var knife in knifeTypes) foreach (var knife in knifeTypes)
{ {
@@ -604,8 +617,10 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
var weaponSelectionMenu = new ChatMenu(ReplaceTags(Config.Messages.WeaponMenuTitle)); var weaponSelectionMenu = new ChatMenu(ReplaceTags(Config.Messages.WeaponMenuTitle));
// Function to handle skin selection for a specific weapon // 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; int playerIndex = (int)player.EntityIndex!.Value.Value;
string selectedWeapon = option.Text; string selectedWeapon = option.Text;
if (classNamesByWeapon.TryGetValue(selectedWeapon, out string? selectedWeaponClassname)) if (classNamesByWeapon.TryGetValue(selectedWeapon, out string? selectedWeaponClassname))
@@ -620,8 +635,10 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
var skinSubMenu = new ChatMenu(ReplaceTags(Config.Messages.SkinMenuTitle).Replace("{WEAPON}", selectedWeapon)); var skinSubMenu = new ChatMenu(ReplaceTags(Config.Messages.SkinMenuTitle).Replace("{WEAPON}", selectedWeapon));
// Function to handle skin selection for the chosen weapon // 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 steamId = new SteamID(player.SteamID);
var firstSkin = skinsList?.FirstOrDefault(skin => var firstSkin = skinsList?.FirstOrDefault(skin =>
{ {
@@ -713,7 +730,7 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
private void OnCommandRefresh(CCSPlayerController? player, CommandInfo command) private void OnCommandRefresh(CCSPlayerController? player, CommandInfo command)
{ {
if (!Config.Additional.CommandWpEnabled || !Config.Additional.SkinEnabled) return; if (!Config.Additional.CommandWpEnabled || !Config.Additional.SkinEnabled) return;
if (player == null) return; if (player == null || !player.IsValid || player.IsBot) return;
string temp = ""; string temp = "";
int playerIndex = (int)player.EntityIndex!.Value.Value; int playerIndex = (int)player.EntityIndex!.Value.Value;
if (commandCooldown != null && DateTime.UtcNow >= commandCooldown[playerIndex].AddSeconds(Config.CmdRefreshCooldownSeconds)) if (commandCooldown != null && DateTime.UtcNow >= commandCooldown[playerIndex].AddSeconds(Config.CmdRefreshCooldownSeconds))
@@ -722,9 +739,17 @@ public class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
Task.Run(async () => await GetWeaponPaintsFromDatabase(playerIndex)); Task.Run(async () => await GetWeaponPaintsFromDatabase(playerIndex));
if (Config.Additional.KnifeEnabled) if (Config.Additional.KnifeEnabled)
{ {
RemoveKnifeFromPlayer(player);
AddTimer(0.2f, () =>
{
GiveKnifeToPlayer(player);
});
Task.Run(async () => await GetKnifeFromDatabase(playerIndex)); Task.Run(async () => await GetKnifeFromDatabase(playerIndex));
/*
RemoveKnifeFromPlayer(player); RemoveKnifeFromPlayer(player);
AddTimer(0.2f, () => GiveKnifeToPlayer(player)); AddTimer(0.2f, () => GiveKnifeToPlayer(player));
*/
} }
if (!string.IsNullOrEmpty(Config.Messages.SuccessRefreshCommand)) if (!string.IsNullOrEmpty(Config.Messages.SuccessRefreshCommand))
{ {