Compare commits

...

2 Commits

Author SHA1 Message Date
Nereziel
0d521e0cd3 Merge pull request #75 from daffyyyy/some-changes
Some fixes
2023-11-29 20:45:16 +01:00
daffyyyy
00f920713d Some fixes 2023-11-29 19:39:56 +01:00
4 changed files with 60 additions and 42 deletions

View File

@@ -16,7 +16,7 @@ namespace WeaponPaints
}); });
AddCommand($"css_{Config.Additional.CommandRefresh}", "Skins refresh", (player, info) => AddCommand($"css_{Config.Additional.CommandRefresh}", "Skins refresh", (player, info) =>
{ {
if (!Utility.IsPlayerValid(player)) return; if (!Utility.IsPlayerValid(player) || !g_bCommandsAllowed) return;
OnCommandRefresh(player, info); OnCommandRefresh(player, info);
}); });
if (Config.Additional.CommandKillEnabled) if (Config.Additional.CommandKillEnabled)
@@ -31,7 +31,7 @@ namespace WeaponPaints
} }
private void SetupKnifeMenu() private void SetupKnifeMenu()
{ {
if (!Config.Additional.KnifeEnabled) return; if (!Config.Additional.KnifeEnabled || !g_bCommandsAllowed) return;
var knivesOnly = weaponList var knivesOnly = weaponList
.Where(pair => pair.Key.StartsWith("weapon_knife") || pair.Key.StartsWith("weapon_bayonet")) .Where(pair => pair.Key.StartsWith("weapon_knife") || pair.Key.StartsWith("weapon_bayonet"))
@@ -62,13 +62,11 @@ namespace WeaponPaints
g_playersKnife[(int)player!.EntityIndex!.Value.Value] = knifeKey; g_playersKnife[(int)player!.EntityIndex!.Value.Value] = knifeKey;
if (player!.PawnIsAlive) if (player!.PawnIsAlive && g_bCommandsAllowed)
{ {
g_changedKnife.Add((int)player.EntityIndex!.Value.Value); g_changedKnife.Add((int)player.EntityIndex!.Value.Value);
if (PlayerHasKnife(player)) RefreshWeapons(player);
{ //RefreshPlayerKnife(player);
RefreshPlayerKnife(player);
}
/* /*
AddTimer(1.0f, () => GiveKnifeToPlayer(player)); AddTimer(1.0f, () => GiveKnifeToPlayer(player));
@@ -85,7 +83,7 @@ namespace WeaponPaints
} }
AddCommand($"css_{Config.Additional.CommandKnife}", "Knife Menu", (player, info) => AddCommand($"css_{Config.Additional.CommandKnife}", "Knife Menu", (player, info) =>
{ {
if (!Utility.IsPlayerValid(player)) return; if (!Utility.IsPlayerValid(player) || !g_bCommandsAllowed) return;
int playerIndex = (int)player!.EntityIndex!.Value.Value; int playerIndex = (int)player!.EntityIndex!.Value.Value;
if (commandCooldown != null && DateTime.UtcNow >= commandCooldown[playerIndex].AddSeconds(Config.CmdRefreshCooldownSeconds) && playerIndex > 0 && playerIndex < commandCooldown.Length) if (commandCooldown != null && DateTime.UtcNow >= commandCooldown[playerIndex].AddSeconds(Config.CmdRefreshCooldownSeconds) && playerIndex > 0 && playerIndex < commandCooldown.Length)
@@ -128,9 +126,11 @@ namespace WeaponPaints
// 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; if (p == null || !p.IsValid || !p.EntityIndex.HasValue) return;
var steamId = new SteamID(player.SteamID); playerIndex = (int)p.EntityIndex.Value.Value;
var steamId = new SteamID(p.SteamID);
var firstSkin = skinsList?.FirstOrDefault(skin => var firstSkin = skinsList?.FirstOrDefault(skin =>
{ {
if (skin != null && skin.TryGetValue("weapon_name", out var weaponName)) if (skin != null && skin.TryGetValue("weapon_name", out var weaponName))
@@ -151,22 +151,23 @@ namespace WeaponPaints
string temp = $" {Config.Prefix} {Config.Messages.ChosenSkinMenu}".Replace("{SKIN}", selectedSkin); string temp = $" {Config.Prefix} {Config.Messages.ChosenSkinMenu}".Replace("{SKIN}", selectedSkin);
p.PrintToChat(Utility.ReplaceTags(temp)); p.PrintToChat(Utility.ReplaceTags(temp));
/* if (!gPlayerWeaponsInfo[playerIndex].ContainsKey(weaponDefIndex))
if (!gPlayerWeaponsInfo[playerIndex].ContainsKey(weaponDefIndex))
{ {
gPlayerWeaponsInfo[playerIndex][weaponDefIndex] = new WeaponInfo(); gPlayerWeaponsInfo[playerIndex][weaponDefIndex] = new WeaponInfo();
} }
*/
gPlayerWeaponsInfo[playerIndex][weaponDefIndex].Paint = paintID; gPlayerWeaponsInfo[playerIndex][weaponDefIndex].Paint = paintID;
gPlayerWeaponsInfo[playerIndex][weaponDefIndex].Wear = 0.0f; gPlayerWeaponsInfo[playerIndex][weaponDefIndex].Wear = 0.0f;
gPlayerWeaponsInfo[playerIndex][weaponDefIndex].Seed = 0; gPlayerWeaponsInfo[playerIndex][weaponDefIndex].Seed = 0;
if (weaponSync == null) return; if (!Config.GlobalShare)
Task.Run(async () =>
{ {
await weaponSync.SyncWeaponPaintsToDatabase(player); if (weaponSync == null) return;
}); Task.Run(async () =>
{
await weaponSync.SyncWeaponPaintsToDatabase(p);
});
}
} }
}; };
@@ -222,7 +223,7 @@ namespace WeaponPaints
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 || !g_bCommandsAllowed) return;
if (!Utility.IsPlayerValid(player)) return; if (!Utility.IsPlayerValid(player)) return;
string temp = ""; string temp = "";
if (!player!.EntityIndex.HasValue) return; if (!player!.EntityIndex.HasValue) return;

View File

@@ -15,6 +15,7 @@ namespace WeaponPaints
//RegisterEventHandler<EventPlayerConnectFull>(OnPlayerConnectFull); //RegisterEventHandler<EventPlayerConnectFull>(OnPlayerConnectFull);
RegisterEventHandler<EventPlayerSpawn>(OnPlayerSpawn); RegisterEventHandler<EventPlayerSpawn>(OnPlayerSpawn);
RegisterEventHandler<EventRoundStart>(OnRoundStart, HookMode.Pre); RegisterEventHandler<EventRoundStart>(OnRoundStart, HookMode.Pre);
RegisterEventHandler<EventRoundEnd>(OnRoundEnd);
RegisterEventHandler<EventItemPurchase>(OnEventItemPurchasePost); RegisterEventHandler<EventItemPurchase>(OnEventItemPurchasePost);
RegisterEventHandler<EventItemPickup>(OnItemPickup); RegisterEventHandler<EventItemPickup>(OnItemPickup);
} }
@@ -66,7 +67,6 @@ namespace WeaponPaints
if (Config.Additional.KnifeEnabled && weaponSync != null) if (Config.Additional.KnifeEnabled && weaponSync != null)
_ = weaponSync.GetKnifeFromDatabase(playerIndex); _ = weaponSync.GetKnifeFromDatabase(playerIndex);
/* /*
Task.Run(async () => Task.Run(async () =>
{ {
@@ -118,8 +118,17 @@ namespace WeaponPaints
NativeAPI.IssueServerCommand("mp_ct_default_melee \"\""); NativeAPI.IssueServerCommand("mp_ct_default_melee \"\"");
NativeAPI.IssueServerCommand("mp_equipment_reset_rounds 0"); NativeAPI.IssueServerCommand("mp_equipment_reset_rounds 0");
g_bCommandsAllowed = true;
return HookResult.Continue; return HookResult.Continue;
} }
private HookResult OnRoundEnd(EventRoundEnd @event, GameEventInfo info)
{
g_bCommandsAllowed = false;
return HookResult.Continue;
}
private HookResult OnItemPickup(EventItemPickup @event, GameEventInfo info) private HookResult OnItemPickup(EventItemPickup @event, GameEventInfo info)
{ {
if (@event.Defindex == 42 || @event.Defindex == 59) if (@event.Defindex == 42 || @event.Defindex == 59)

View File

@@ -196,7 +196,7 @@ namespace WeaponPaints
var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons; var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons;
if (weapons != null && weapons.Count > 0) if (weapons != null && weapons.Count > 0)
{ {
CCSPlayer_ItemServices service = new CCSPlayer_ItemServices(player.PlayerPawn.Value.ItemServices.Handle); CCSPlayer_ItemServices service = new(player.PlayerPawn.Value.ItemServices.Handle);
//var dropWeapon = VirtualFunction.CreateVoid<nint, nint>(service.Handle, GameData.GetOffset("CCSPlayer_ItemServices_DropActivePlayerWeapon")); //var dropWeapon = VirtualFunction.CreateVoid<nint, nint>(service.Handle, GameData.GetOffset("CCSPlayer_ItemServices_DropActivePlayerWeapon"));
foreach (var weapon in weapons) foreach (var weapon in weapons)
@@ -205,31 +205,38 @@ namespace WeaponPaints
{ {
if (!weapon.Value.EntityIndex.HasValue || !weapon.Value.DesignerName.Contains("weapon_")) continue; if (!weapon.Value.EntityIndex.HasValue || !weapon.Value.DesignerName.Contains("weapon_")) continue;
//if (weapon.Value.AttributeManager.Item.ItemDefinitionIndex == 42 || weapon.Value.AttributeManager.Item.ItemDefinitionIndex == 59) //if (weapon.Value.AttributeManager.Item.ItemDefinitionIndex == 42 || weapon.Value.AttributeManager.Item.ItemDefinitionIndex == 59)
if (weapon.Value.DesignerName.Contains("knife") || weapon.Value.DesignerName.Contains("bayonet")) try
{ {
weapon.Value.Remove(); if (weapon.Value.DesignerName.Contains("knife") || weapon.Value.DesignerName.Contains("bayonet"))
GiveKnifeToPlayer(player); {
} weapon.Value.Remove();
else GiveKnifeToPlayer(player);
}
else
{
int clip1, reservedAmmo;
clip1 = weapon.Value.Clip1;
reservedAmmo = weapon.Value.ReserveAmmo[0];
weapon.Value.Remove();
CBasePlayerWeapon newWeapon = new(player.GiveNamedItem(weapon.Value.DesignerName));
Server.NextFrame(() =>
{
newWeapon.Clip1 = clip1;
newWeapon.ReserveAmmo[0] = reservedAmmo;
});
}
} catch(Exception ex)
{ {
int clip1, reservedAmmo; Console.WriteLine("[WeaponPaints] Refreshing weapons exception");
Console.WriteLine(ex.Message);
clip1 = weapon.Value.Clip1;
reservedAmmo = weapon.Value.ReserveAmmo[0];
weapon.Value.Remove();
CBasePlayerWeapon newWeapon = new CBasePlayerWeapon(player.GiveNamedItem(weapon.Value.DesignerName));
Server.NextFrame(() =>
{
newWeapon.Clip1 = clip1;
newWeapon.ReserveAmmo[0] = reservedAmmo;
});
} }
} }
} }
RefreshSkins(player); if (Config.Additional.SkinVisibilityFix)
RefreshSkins(player);
} }
} }
@@ -273,7 +280,7 @@ namespace WeaponPaints
if (WeaponPaints.skinsList != null) if (WeaponPaints.skinsList != null)
{ {
// Filter weapons by the provided defindex // Filter weapons by the provided defindex
var filteredWeapons = WeaponPaints.skinsList.FindAll(w => w["weapon_defindex"]?.ToString() == defindex.ToString()); var filteredWeapons = skinsList.FindAll(w => w["weapon_defindex"]?.ToString() == defindex.ToString());
if (filteredWeapons.Count > 0) if (filteredWeapons.Count > 0)
{ {

View File

@@ -5,7 +5,7 @@ using CounterStrikeSharp.API.Modules.Cvars;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
namespace WeaponPaints; namespace WeaponPaints;
[MinimumApiVersion(71)] [MinimumApiVersion(82)]
public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig> public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
{ {
public override string ModuleName => "WeaponPaints"; public override string ModuleName => "WeaponPaints";
@@ -32,6 +32,7 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
internal static Dictionary<int, int> g_knifePickupCount = new Dictionary<int, int>(); internal static Dictionary<int, int> g_knifePickupCount = new Dictionary<int, int>();
internal static Dictionary<int, string> g_playersKnife = new(); internal static Dictionary<int, string> g_playersKnife = new();
internal static List<int> g_changedKnife = new(); internal static List<int> g_changedKnife = new();
internal bool g_bCommandsAllowed = true;
internal static List<JObject> skinsList = new List<JObject>(); internal static List<JObject> skinsList = new List<JObject>();
internal static readonly Dictionary<string, string> weaponList = new() internal static readonly Dictionary<string, string> weaponList = new()