Compare commits

...

9 Commits

Author SHA1 Message Date
Dawid Bepierszcz
8cb9563994 Merge pull request #211 from daffyyyy/main
2.2e
2024-03-11 11:19:41 +01:00
Dawid Bepierszcz
e45714cb9a Merge branch 'Nereziel:main' into main 2024-03-11 11:16:45 +01:00
Dawid Bepierszcz
97e73bfd53 2.2e 2024-03-11 11:16:18 +01:00
Dawid Bepierszcz
6dc047477c Merge branch 'main' of https://github.com/daffyyyy/cs2-WeaponPaints 2024-03-11 11:10:28 +01:00
Dawid Bepierszcz
ced010645d 2.2e
- Changed data loading to non-block main thread
- Additional check for empty agent
2024-03-11 11:10:25 +01:00
Dawid Bepierszcz
b030d5c7e1 Merge pull request #206 from daffyyyy/main
2.2d
2024-03-09 18:47:02 +01:00
Dawid Bepierszcz
90771f76c7 Merge branch 'Nereziel:main' into main 2024-03-09 18:46:39 +01:00
Dawid Bepierszcz
ad8e51a403 Merge branch 'main' of https://github.com/daffyyyy/cs2-WeaponPaints 2024-03-09 18:46:23 +01:00
Dawid Bepierszcz
8c1edddd1e 2.2d
- Fixed skins
2024-03-09 18:46:12 +01:00
7 changed files with 79 additions and 66 deletions

View File

@@ -33,30 +33,22 @@ namespace WeaponPaints
if (weaponSync != null) if (weaponSync != null)
{ {
var weaponTasks = new List<Task>(); if (Config.Additional.SkinEnabled)
weaponTasks.Add(Task.Run(async () =>
{ {
await weaponSync.GetWeaponPaintsFromDatabase(playerInfo); _ = Task.Run(async () => await weaponSync.GetWeaponPaintsFromDatabase(playerInfo));
}));
if (Config.Additional.GloveEnabled)
{
weaponTasks.Add(Task.Run(async () =>
{
await weaponSync.GetGloveFromDatabase(playerInfo);
}));
} }
if (Config.Additional.KnifeEnabled) if (Config.Additional.KnifeEnabled)
{ {
weaponTasks.Add(Task.Run(async () => _ = Task.Run(async () => await weaponSync.GetKnifeFromDatabase(playerInfo));
{ }
await weaponSync.GetKnifeFromDatabase(playerInfo); if (Config.Additional.GloveEnabled)
})); {
_ = Task.Run(async () => await weaponSync.GetGloveFromDatabase(playerInfo));
}
if (Config.Additional.AgentEnabled)
{
_ = Task.Run(async () => await weaponSync.GetAgentFromDatabase(playerInfo));
} }
Task.WaitAll(weaponTasks.ToArray());
RefreshGloves(player); RefreshGloves(player);
RefreshWeapons(player); RefreshWeapons(player);
@@ -175,7 +167,7 @@ namespace WeaponPaints
RefreshWeapons(player); RefreshWeapons(player);
if (weaponSync != null) if (weaponSync != null)
Task.Run(async () => await weaponSync.SyncKnifeToDatabase(playerInfo, knifeKey)); _ = Task.Run(async () => await weaponSync.SyncKnifeToDatabase(playerInfo, knifeKey));
} }
}; };
foreach (var knifePair in knivesOnly) foreach (var knifePair in knivesOnly)
@@ -288,7 +280,7 @@ namespace WeaponPaints
try try
{ {
Task.Run(async () => await weaponSync.SyncWeaponPaintsToDatabase(playerInfo)); _ = Task.Run(async () => await weaponSync.SyncWeaponPaintsToDatabase(playerInfo));
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -409,7 +401,7 @@ namespace WeaponPaints
if (weaponSync != null) if (weaponSync != null)
{ {
Task.Run(async () => _ = Task.Run(async () =>
{ {
await weaponSync.SyncGloveToDatabase(playerInfo, weaponDefindex); await weaponSync.SyncGloveToDatabase(playerInfo, weaponDefindex);
@@ -422,9 +414,9 @@ namespace WeaponPaints
value.Paint = paint; value.Paint = paint;
value.Wear = 0.00f; value.Wear = 0.00f;
value.Seed = 0; value.Seed = 0;
});
Task.Run(async () => await weaponSync.SyncWeaponPaintsToDatabase(playerInfo)); await weaponSync.SyncWeaponPaintsToDatabase(playerInfo);
});
} }
RefreshGloves(player); RefreshGloves(player);
@@ -516,7 +508,7 @@ namespace WeaponPaints
if (weaponSync != null) if (weaponSync != null)
{ {
Task.Run(async () => _ = Task.Run(async () =>
{ {
await weaponSync.SyncAgentToDatabase(playerInfo); await weaponSync.SyncAgentToDatabase(playerInfo);
}); });

View File

@@ -1,6 +1,7 @@
using CounterStrikeSharp.API; using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration; using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Modules.Entities;
namespace WeaponPaints namespace WeaponPaints
{ {
@@ -26,34 +27,25 @@ namespace WeaponPaints
try try
{ {
List<Task> tasks = new List<Task>();
if (Config.Additional.SkinEnabled) if (Config.Additional.SkinEnabled)
{ {
tasks.Add(Task.Run(() => weaponSync.GetWeaponPaintsFromDatabase(playerInfo))); _ = Task.Run(async () => await weaponSync.GetWeaponPaintsFromDatabase(playerInfo));
} }
if (Config.Additional.KnifeEnabled) if (Config.Additional.KnifeEnabled)
{ {
tasks.Add(Task.Run(() => weaponSync.GetKnifeFromDatabase(playerInfo))); _ = Task.Run(async () => await weaponSync.GetKnifeFromDatabase(playerInfo));
} }
if (Config.Additional.GloveEnabled) if (Config.Additional.GloveEnabled)
{ {
tasks.Add(Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo))); _ = Task.Run(async () => await weaponSync.GetGloveFromDatabase(playerInfo));
} }
if (Config.Additional.AgentEnabled) if (Config.Additional.AgentEnabled)
{ {
tasks.Add(Task.Run(() => weaponSync.GetAgentFromDatabase(playerInfo))); _ = Task.Run(async () => await weaponSync.GetAgentFromDatabase(playerInfo));
} }
Task.WaitAll(tasks.ToArray());
} }
catch (AggregateException ex) catch (Exception)
{ {
// Handle the exception
foreach (var innerException in ex.InnerExceptions)
{
Console.WriteLine($"An error occurred for player {player}: {innerException.Message}");
}
} }
return HookResult.Continue; return HookResult.Continue;
@@ -102,9 +94,7 @@ namespace WeaponPaints
private void GivePlayerWeaponSkin(CCSPlayerController player, CBasePlayerWeapon weapon) private void GivePlayerWeaponSkin(CCSPlayerController player, CBasePlayerWeapon weapon)
{ {
if (!Config.Additional.SkinEnabled) return; if (!Config.Additional.SkinEnabled) return;
if (player is null || weapon is null || !weapon.IsValid || !Utility.IsPlayerValid(player)) return; if (player is null || weapon is null || !weapon.IsValid || !Utility.IsPlayerValid(player)) return;
if (!gPlayerWeaponsInfo.ContainsKey(player.Slot)) return; if (!gPlayerWeaponsInfo.ContainsKey(player.Slot)) return;
bool isKnife = weapon.DesignerName.Contains("knife") || weapon.DesignerName.Contains("bayonet"); bool isKnife = weapon.DesignerName.Contains("knife") || weapon.DesignerName.Contains("bayonet");
@@ -162,7 +152,8 @@ namespace WeaponPaints
return; return;
} }
if (!gPlayerWeaponsInfo[player.Slot].ContainsKey(weaponDefIndex)) return; if (!gPlayerWeaponsInfo[player.Slot].ContainsKey(weaponDefIndex) || gPlayerWeaponsInfo[player.Slot][weaponDefIndex].Paint == 0) return;
WeaponInfo weaponInfo = gPlayerWeaponsInfo[player.Slot][weaponDefIndex]; WeaponInfo weaponInfo = gPlayerWeaponsInfo[player.Slot][weaponDefIndex];
//Log($"Apply on {weapon.DesignerName}({weapon.AttributeManager.Item.ItemDefinitionIndex}) paint {gPlayerWeaponPaints[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]} seed {gPlayerWeaponSeed[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]} wear {gPlayerWeaponWear[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]}"); //Log($"Apply on {weapon.DesignerName}({weapon.AttributeManager.Item.ItemDefinitionIndex}) paint {gPlayerWeaponPaints[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]} seed {gPlayerWeaponSeed[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]} wear {gPlayerWeaponWear[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]}");
weapon.AttributeManager.Item.ItemID = 16384; weapon.AttributeManager.Item.ItemID = 16384;
@@ -257,7 +248,7 @@ namespace WeaponPaints
} }
*/ */
public void OnEntitySpawned(CEntityInstance entity) public void OnEntityCreated(CEntityInstance entity)
{ {
var designerName = entity.DesignerName; var designerName = entity.DesignerName;
@@ -268,8 +259,31 @@ namespace WeaponPaints
var weapon = new CBasePlayerWeapon(entity.Handle); var weapon = new CBasePlayerWeapon(entity.Handle);
if (weapon == null || !weapon.IsValid || weapon.OwnerEntity.Value == null) return; if (weapon == null || !weapon.IsValid || weapon.OwnerEntity.Value == null) return;
CCSPlayerController? player = Utilities.GetPlayerFromIndex((int)weapon.OwnerEntity.Value.Index); SteamID? _steamid = (SteamID)weapon.OriginalOwnerXuidLow;
if (player == null || !player.IsValid || !Utility.IsPlayerValid(player)) return; CCSWeaponBaseGun gun = weapon.As<CCSWeaponBaseGun>();
CCSPlayerController? player = null;
try
{
if (_steamid != null && _steamid.IsValid())
{
player = Utilities.GetPlayers().Where(p => p is not null && p.IsValid && p.SteamID == _steamid.SteamId64).FirstOrDefault();
if (player == null)
player = Utilities.GetPlayerFromSteamId(weapon.OriginalOwnerXuidLow);
}
else
player = Utilities.GetPlayerFromIndex((int)weapon.OwnerEntity.Index) ?? Utilities.GetPlayerFromIndex((int)gun.OwnerEntity.Value!.Index);
if (player == null || string.IsNullOrEmpty(player?.PlayerName)) return;
}
catch (Exception)
{
return;
}
if (player is null || !player.IsValid || !Utility.IsPlayerValid(player)) return;
GivePlayerWeaponSkin(player, weapon); GivePlayerWeaponSkin(player, weapon);
}); });
@@ -299,7 +313,7 @@ namespace WeaponPaints
RegisterEventHandler<EventPlayerSpawn>(OnPlayerSpawn); RegisterEventHandler<EventPlayerSpawn>(OnPlayerSpawn);
RegisterEventHandler<EventRoundStart>(OnRoundStart, HookMode.Pre); RegisterEventHandler<EventRoundStart>(OnRoundStart, HookMode.Pre);
RegisterEventHandler<EventRoundEnd>(OnRoundEnd); RegisterEventHandler<EventRoundEnd>(OnRoundEnd);
RegisterListener<Listeners.OnEntitySpawned>(OnEntitySpawned); RegisterListener<Listeners.OnEntityCreated>(OnEntityCreated);
RegisterListener<Listeners.OnTick>(OnTick); RegisterListener<Listeners.OnTick>(OnTick);
//VirtualFunctions.GiveNamedItemFunc.Hook(OnGiveNamedItemPost, HookMode.Post); //VirtualFunctions.GiveNamedItemFunc.Hook(OnGiveNamedItemPost, HookMode.Post);
} }

View File

@@ -89,10 +89,9 @@ namespace WeaponPaints
internal static bool IsPlayerValid(CCSPlayerController? player) internal static bool IsPlayerValid(CCSPlayerController? player)
{ {
if (player is null) return false; if (player is null || WeaponPaints.weaponSync is null) return false;
return (player is not null && player.IsValid && !player.IsBot && !player.IsHLTV && player.UserId.HasValue return (player.IsValid && !player.IsBot && !player.IsHLTV && player.UserId.HasValue);
&& WeaponPaints.weaponSync != null && player.Connected == PlayerConnectedState.PlayerConnected && player.SteamID.ToString().Length == 17);
} }
internal static void LoadSkinsFromFile(string filePath) internal static void LoadSkinsFromFile(string filePath)

View File

@@ -1 +1 @@
2.2c 2.2e

View File

@@ -300,14 +300,17 @@ namespace WeaponPaints
{ {
if (!g_playersAgent.ContainsKey(player.Slot)) return; if (!g_playersAgent.ContainsKey(player.Slot)) return;
string? model = player.TeamNum == 3 ? g_playersAgent[player.Slot].CT : g_playersAgent[player.Slot].T;
if (string.IsNullOrEmpty(model)) return;
if (player.PlayerPawn.Value == null)
return;
try try
{ {
Server.NextFrame(() => Server.NextFrame(() =>
{ {
string? model = player.TeamNum == 3 ? g_playersAgent[player.Slot].CT : g_playersAgent[player.Slot].T; player.PlayerPawn.Value.SetModel(
if (string.IsNullOrEmpty(model)) return;
player.PlayerPawn.Value!.SetModel(
$"characters/models/{model}.vmdl" $"characters/models/{model}.vmdl"
); );
}); });

View File

@@ -158,7 +158,7 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
public override string ModuleAuthor => "Nereziel & daffyy"; public override string ModuleAuthor => "Nereziel & daffyy";
public override string ModuleDescription => "Skin, gloves, agents and knife selector, standalone and web-based"; public override string ModuleDescription => "Skin, gloves, agents and knife selector, standalone and web-based";
public override string ModuleName => "WeaponPaints"; public override string ModuleName => "WeaponPaints";
public override string ModuleVersion => "2.2c"; public override string ModuleVersion => "2.2e";
public static WeaponPaintsConfig GetWeaponPaintsConfig() public static WeaponPaintsConfig GetWeaponPaintsConfig()
{ {
@@ -175,13 +175,15 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
foreach (var player in Utilities.GetPlayers()) foreach (var player in Utilities.GetPlayers())
{ {
if (weaponSync == null || player is null || !player.IsValid || player.SteamID.ToString().Length != 17 || !player.PawnIsAlive || player.IsBot || if (weaponSync == null || player is null || !player.IsValid || player.SteamID.ToString().Length != 17 || player.IsBot ||
player.IsHLTV || player.Connected != PlayerConnectedState.PlayerConnected) player.IsHLTV || player.Connected != PlayerConnectedState.PlayerConnected)
continue; continue;
g_knifePickupCount[player.Slot] = 0; g_knifePickupCount[player.Slot] = 0;
gPlayerWeaponsInfo.TryRemove(player.Slot, out _); gPlayerWeaponsInfo.TryRemove(player.Slot, out _);
g_playersKnife.TryRemove(player.Slot, out _); g_playersKnife.TryRemove(player.Slot, out _);
g_playersGlove.TryRemove(player.Slot, out _);
g_playersAgent.TryRemove(player.Slot, out _);
PlayerInfo playerInfo = new PlayerInfo PlayerInfo playerInfo = new PlayerInfo
{ {
@@ -195,19 +197,19 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
if (Config.Additional.SkinEnabled) if (Config.Additional.SkinEnabled)
{ {
Task.Run(() => weaponSync.GetWeaponPaintsFromDatabase(playerInfo)); _ = Task.Run(async () => await weaponSync.GetWeaponPaintsFromDatabase(playerInfo));
} }
if (Config.Additional.KnifeEnabled) if (Config.Additional.KnifeEnabled)
{ {
Task.Run(() => weaponSync.GetKnifeFromDatabase(playerInfo)); _ = Task.Run(async () => await weaponSync.GetKnifeFromDatabase(playerInfo));
} }
if (Config.Additional.GloveEnabled) if (Config.Additional.GloveEnabled)
{ {
Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo)); _ = Task.Run(async () => await weaponSync.GetGloveFromDatabase(playerInfo));
} }
if (Config.Additional.AgentEnabled) if (Config.Additional.AgentEnabled)
{ {
Task.Run(() => weaponSync.GetAgentFromDatabase(playerInfo)); _ = Task.Run(async () => await weaponSync.GetAgentFromDatabase(playerInfo));
} }
} }
} }

View File

@@ -14,7 +14,7 @@ namespace WeaponPaints
_config = config; _config = config;
} }
public async Task GetKnifeFromDatabase(PlayerInfo player) internal async Task GetKnifeFromDatabase(PlayerInfo player)
{ {
try try
{ {
@@ -36,7 +36,7 @@ namespace WeaponPaints
} }
} }
public async Task GetGloveFromDatabase(PlayerInfo player) internal async Task GetGloveFromDatabase(PlayerInfo player)
{ {
try try
{ {
@@ -58,7 +58,7 @@ namespace WeaponPaints
} }
} }
public async Task GetAgentFromDatabase(PlayerInfo player) internal async Task GetAgentFromDatabase(PlayerInfo player)
{ {
try try
{ {
@@ -89,21 +89,24 @@ namespace WeaponPaints
} }
} }
public async Task GetWeaponPaintsFromDatabase(PlayerInfo player) internal async Task GetWeaponPaintsFromDatabase(PlayerInfo player)
{ {
try try
{ {
if (!_config.Additional.SkinEnabled || player == null || string.IsNullOrEmpty(player.SteamId)) if (!_config.Additional.SkinEnabled || player == null || string.IsNullOrEmpty(player.SteamId))
return; return;
var weaponInfos = new ConcurrentDictionary<int, WeaponInfo>();
await using var connection = await _database.GetConnectionAsync(); await using var connection = await _database.GetConnectionAsync();
string query = "SELECT * FROM `wp_player_skins` WHERE `steamid` = @steamid"; string query = "SELECT * FROM `wp_player_skins` WHERE `steamid` = @steamid";
var playerSkins = await connection.QueryAsync<dynamic>(query, new { steamid = player.SteamId }); var playerSkins = await connection.QueryAsync<dynamic>(query, new { steamid = player.SteamId });
if (playerSkins == null) if (playerSkins == null)
{
WeaponPaints.gPlayerWeaponsInfo[player.Slot] = weaponInfos;
return; return;
}
var weaponInfos = new ConcurrentDictionary<int, WeaponInfo>();
foreach (var row in playerSkins) foreach (var row in playerSkins)
{ {