Compare commits

...

14 Commits

Author SHA1 Message Date
Nereziel
21eccfb6d9 Merge pull request #82 from daffyyyy/some-changes
CounterStrikeSharp v90
2023-12-02 16:45:01 +01:00
daffyyyy
a6b193cd13 CounterStrikeSharp v90
Adapted for counterstrikesharp v90
2023-12-02 13:52:06 +01:00
Nereziel
b992433d44 Merge pull request #80 from daffyyyy/some-changes
Changes
2023-12-02 12:56:55 +01:00
daffyyyy
06559af230 Changes 2023-12-02 12:54:13 +01:00
Nereziel
dfe6b200d8 Merge pull request #79 from daffyyyy/some-changes
Workaround for long player authorization
2023-11-30 17:43:32 +01:00
daffyyyy
3edcb5e52f Workaround for long player authorization 2023-11-30 17:28:40 +01:00
Nereziel
28936e9bb5 Merge pull request #78 from daffyyyy/some-changes
GlobalShare fix
2023-11-30 14:29:00 +01:00
daffyyyy
2772fb59b9 GlobalShare fix 2023-11-30 14:18:57 +01:00
Nereziel
0f6bb26ac9 Merge pull request #76 from daffyyyy/some-changes
Improved player index
2023-11-30 10:34:07 +01:00
daffyyyy
be51e4d1e9 Improved player index
The latest version of cssharp adds player.Index instead of entityIndex and does not allow to compile
2023-11-30 02:20:16 +01:00
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
Nereziel
42d70690eb Merge pull request #74 from daffyyyy/some-changes
Back to onclientauthorized
2023-11-29 13:52:25 +01:00
daffyyyy
73e3a05270 Back to onclientauthorized
Thanks cssharp :D
2023-11-29 12:37:08 +01:00
8 changed files with 231 additions and 143 deletions

View File

@@ -16,14 +16,14 @@ 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)
{ {
AddCommand($"css_{Config.Additional.CommandKill}", "kill yourself", (player, info) => AddCommand($"css_{Config.Additional.CommandKill}", "kill yourself", (player, info) =>
{ {
if (!Utility.IsPlayerValid(player) || !player!.PlayerPawn.IsValid) return; if (player == null || !Utility.IsPlayerValid(player) || player.PlayerPawn.Value == null || !player!.PlayerPawn.IsValid) return;
player.PlayerPawn.Value.CommitSuicide(true, false); player.PlayerPawn.Value.CommitSuicide(true, false);
}); });
@@ -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"))
@@ -60,22 +60,20 @@ namespace WeaponPaints
player!.PrintToChat(Utility.ReplaceTags(temp)); player!.PrintToChat(Utility.ReplaceTags(temp));
} }
g_playersKnife[(int)player!.EntityIndex!.Value.Value] = knifeKey; g_playersKnife[(int)player!.Index] = knifeKey;
if (player!.PawnIsAlive) if (player!.PawnIsAlive && g_bCommandsAllowed)
{ {
g_changedKnife.Add((int)player.EntityIndex!.Value.Value); //g_changedKnife.Add((int)player.Index);
if (PlayerHasKnife(player)) RefreshWeapons(player);
{ //RefreshPlayerKnife(player);
RefreshPlayerKnife(player);
}
/* /*
AddTimer(1.0f, () => GiveKnifeToPlayer(player)); AddTimer(1.0f, () => GiveKnifeToPlayer(player));
*/ */
} }
if (weaponSync != null) if (weaponSync != null)
Task.Run(() => weaponSync.SyncKnifeToDatabase((int)player.EntityIndex!.Value.Value, knifeKey)); Task.Run(() => weaponSync.SyncKnifeToDatabase((int)player.Index, knifeKey));
} }
} }
}; };
@@ -85,10 +83,10 @@ 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!.Index;
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))
{ {
commandCooldown[playerIndex] = DateTime.UtcNow; commandCooldown[playerIndex] = DateTime.UtcNow;
ChatMenus.OpenMenu(player, giveItemMenu); ChatMenus.OpenMenu(player, giveItemMenu);
@@ -112,7 +110,7 @@ namespace WeaponPaints
{ {
if (!Utility.IsPlayerValid(player)) return; if (!Utility.IsPlayerValid(player)) return;
int playerIndex = (int)player!.EntityIndex!.Value.Value; int playerIndex = (int)player!.Index;
string selectedWeapon = option.Text; string selectedWeapon = option.Text;
if (classNamesByWeapon.TryGetValue(selectedWeapon, out string? selectedWeaponClassname)) if (classNamesByWeapon.TryGetValue(selectedWeapon, out string? selectedWeaponClassname))
{ {
@@ -128,9 +126,13 @@ 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.Index <= 0) return;
var steamId = new SteamID(player.SteamID); playerIndex = (int)p.Index;
if (p.AuthorizedSteamID == null) return;
string steamId = p.AuthorizedSteamID.SteamId64.ToString();
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 +153,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);
});
}
} }
}; };
@@ -203,7 +206,7 @@ namespace WeaponPaints
AddCommand($"css_{Config.Additional.CommandSkinSelection}", "Skins selection menu", (player, info) => AddCommand($"css_{Config.Additional.CommandSkinSelection}", "Skins selection menu", (player, info) =>
{ {
if (!Utility.IsPlayerValid(player)) return; if (!Utility.IsPlayerValid(player)) return;
int playerIndex = (int)player!.EntityIndex!.Value.Value; int playerIndex = (int)player!.Index;
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)
{ {
@@ -222,11 +225,11 @@ 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 == null || player.Index <= 0) return;
int playerIndex = (int)player!.EntityIndex!.Value.Value; int playerIndex = (int)player!.Index;
if (playerIndex != 0 && DateTime.UtcNow >= commandCooldown[playerIndex].AddSeconds(Config.CmdRefreshCooldownSeconds)) if (playerIndex != 0 && DateTime.UtcNow >= commandCooldown[playerIndex].AddSeconds(Config.CmdRefreshCooldownSeconds))
{ {
commandCooldown[playerIndex] = DateTime.UtcNow; commandCooldown[playerIndex] = DateTime.UtcNow;

135
Events.cs
View File

@@ -1,24 +1,27 @@
using CounterStrikeSharp.API; using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Entities;
namespace WeaponPaints namespace WeaponPaints
{ {
public partial class WeaponPaints public partial class WeaponPaints
{ {
private void RegisterEvents() private void RegisterListeners()
{ {
RegisterListener<Listeners.OnEntitySpawned>(OnEntitySpawned); RegisterListener<Listeners.OnEntitySpawned>(OnEntitySpawned);
/*RegisterListener<Listeners.OnClientAuthorized>(OnClientAuthorized);*/ RegisterListener<Listeners.OnClientAuthorized>(OnClientAuthorized);
RegisterListener<Listeners.OnClientDisconnect>(OnClientDisconnect); RegisterListener<Listeners.OnClientDisconnect>(OnClientDisconnect);
RegisterListener<Listeners.OnMapStart>(OnMapStart); RegisterListener<Listeners.OnMapStart>(OnMapStart);
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);
} }
private HookResult OnPlayerConnectFull(EventPlayerConnectFull @event, GameEventInfo info) /*private HookResult OnPlayerConnectFull(EventPlayerConnectFull @event, GameEventInfo info)
{ {
CCSPlayerController? player = @event.Userid; CCSPlayerController? player = @event.Userid;
@@ -29,17 +32,16 @@ namespace WeaponPaints
_ = weaponSync.GetWeaponPaintsFromDatabase(playerIndex); _ = weaponSync.GetWeaponPaintsFromDatabase(playerIndex);
if (Config.Additional.KnifeEnabled && weaponSync != null) if (Config.Additional.KnifeEnabled && weaponSync != null)
_ = weaponSync.GetKnifeFromDatabase(playerIndex); _ = weaponSync.GetKnifeFromDatabase(playerIndex);
/*
Task.Run(async () => Task.Run(async () =>
{ {
if (Config.Additional.SkinEnabled && weaponSync != null) if (Config.Additional.SkinEnabled && weaponSync != null)
if (Config.Additional.KnifeEnabled && weaponSync != null) if (Config.Additional.KnifeEnabled && weaponSync != null)
}); });
*/
return HookResult.Continue; return HookResult.Continue;
} }
*/
private void OnMapStart(string mapName) private void OnMapStart(string mapName)
{ {
if (!Config.Additional.KnifeEnabled) return; if (!Config.Additional.KnifeEnabled) return;
@@ -50,44 +52,97 @@ namespace WeaponPaints
NativeAPI.IssueServerCommand("mp_t_default_melee \"\""); NativeAPI.IssueServerCommand("mp_t_default_melee \"\"");
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");
if (Config.GlobalShare)
GlobalShareConnect();
}); });
g_hTimerCheckSkinsData = AddTimer(10.0f, () =>
{
List<CCSPlayerController> players = Utilities.GetPlayers();
foreach (CCSPlayerController player in players)
{
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV || player.AuthorizedSteamID == null) continue;
if (gPlayerWeaponsInfo.ContainsKey((int)player.Index)) continue;
if (Config.Additional.SkinEnabled && weaponSync != null)
_ = weaponSync.GetWeaponPaintsFromDatabase((int)player.Index);
if (Config.Additional.KnifeEnabled && weaponSync != null)
_ = weaponSync.GetKnifeFromDatabase((int)player.Index);
}
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE | CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT);
} }
/*
private void OnClientAuthorized(int playerSlot, SteamID steamID) private void OnClientAuthorized(int playerSlot, SteamID steamID)
{ {
int playerIndex = playerSlot + 1; int playerIndex = playerSlot + 1;
Task.Run(async () =>
{ CCSPlayerController? player = Utilities.GetPlayerFromIndex(playerIndex);
if (Config.Additional.SkinEnabled && weaponSync != null)
await weaponSync.GetWeaponPaintsFromDatabase(playerIndex); if (player == null || !player.IsValid || player.IsBot || player.IsHLTV) return;
if (Config.Additional.KnifeEnabled && weaponSync != null)
await weaponSync.GetKnifeFromDatabase(playerIndex); if (Config.Additional.SkinEnabled && weaponSync != null)
}); _ = weaponSync.GetWeaponPaintsFromDatabase(playerIndex);
if (Config.Additional.KnifeEnabled && weaponSync != null)
_ = weaponSync.GetKnifeFromDatabase(playerIndex);
}
/* WORKAROUND FOR CLIENTS WITHOUT STEAMID ON AUTHORIZATION */
private HookResult OnPlayerConnectFull(EventPlayerConnectFull @event, GameEventInfo info)
{
CCSPlayerController? player = @event.Userid;
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV) return HookResult.Continue;
if (!gPlayerWeaponsInfo.ContainsKey((int)player.Index))
{
Console.WriteLine($"[WeaponPaints] Retrying to retrieve player {player.PlayerName} skins");
if (Config.Additional.SkinEnabled && weaponSync != null)
_ = weaponSync.GetWeaponPaintsFromDatabase((int)player.Index);
if (Config.Additional.KnifeEnabled && weaponSync != null)
_ = weaponSync.GetKnifeFromDatabase((int)player.Index);
/*
AddTimer(2.0f, () =>
{
if (!gPlayerWeaponsInfo.ContainsKey((int)player.Index))
{
Console.WriteLine($"[WeaponPaints] Last try to retrieve player {player.PlayerName} skins");
if (Config.Additional.SkinEnabled && weaponSync != null)
_ = weaponSync.GetWeaponPaintsFromDatabase((int)player.Index);
if (Config.Additional.KnifeEnabled && weaponSync != null)
_ = weaponSync.GetKnifeFromDatabase((int)player.Index);
}
});
*/
}
return HookResult.Continue;
} }
*/
private void OnClientDisconnect(int playerSlot) private void OnClientDisconnect(int playerSlot)
{ {
CCSPlayerController player = Utilities.GetPlayerFromSlot(playerSlot); CCSPlayerController player = Utilities.GetPlayerFromSlot(playerSlot);
if (player == null || !player.IsValid || player.IsHLTV) return; if (player == null || !player.IsValid || player.IsBot || player.IsHLTV) return;
if (Config.Additional.KnifeEnabled) if (Config.Additional.KnifeEnabled)
g_playersKnife.Remove((int)player.EntityIndex!.Value.Value); g_playersKnife.Remove((int)player.Index);
if (Config.Additional.SkinEnabled) if (Config.Additional.SkinEnabled)
gPlayerWeaponsInfo.Remove((int)player.EntityIndex!.Value.Value); gPlayerWeaponsInfo.Remove((int)player.Index);
} }
private HookResult OnPlayerSpawn(EventPlayerSpawn @event, GameEventInfo info) private HookResult OnPlayerSpawn(EventPlayerSpawn @event, GameEventInfo info)
{ {
CCSPlayerController? player = @event.Userid; CCSPlayerController? player = @event.Userid;
if (player == null || !player.IsValid || !player.PlayerPawn.IsValid) if (player == null || !player.IsValid)
{ {
return HookResult.Continue; return HookResult.Continue;
} }
if (Config.Additional.KnifeEnabled) if (Config.Additional.KnifeEnabled)
{ {
g_knifePickupCount[(int)player.EntityIndex!.Value.Value] = 0; g_knifePickupCount[(int)player.Index] = 0;
if (!PlayerHasKnife(player)) if (!PlayerHasKnife(player))
GiveKnifeToPlayer(player); GiveKnifeToPlayer(player);
} }
@@ -99,29 +154,39 @@ namespace WeaponPaints
return HookResult.Continue; return HookResult.Continue;
} }
private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info)
{ {
NativeAPI.IssueServerCommand("mp_t_default_melee \"\""); NativeAPI.IssueServerCommand("mp_t_default_melee \"\"");
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)
{ {
CCSPlayerController? player = @event.Userid; CCSPlayerController? player = @event.Userid;
if (!Utility.IsPlayerValid(player) || !player.PawnIsAlive || g_knifePickupCount[(int)player.EntityIndex!.Value.Value] >= 2) return HookResult.Continue; if (!Utility.IsPlayerValid(player) || !player.PawnIsAlive || g_knifePickupCount[(int)player.Index] >= 2) return HookResult.Continue;
if (g_playersKnife.ContainsKey((int)player.EntityIndex!.Value.Value) if (g_playersKnife.ContainsKey((int)player.Index)
&& &&
g_playersKnife[(int)player.EntityIndex!.Value.Value] != "weapon_knife") g_playersKnife[(int)player.Index] != "weapon_knife")
{ {
g_knifePickupCount[(int)player.EntityIndex!.Value.Value]++; g_knifePickupCount[(int)player.Index]++;
RemovePlayerKnife(player, true); RemovePlayerKnife(player, true);
AddTimer(0.3f, ()=> GiveKnifeToPlayer(player)); AddTimer(0.3f, () => GiveKnifeToPlayer(player));
//RefreshPlayerKnife(player); //RefreshPlayerKnife(player);
/* /*
@@ -154,29 +219,32 @@ namespace WeaponPaints
{ {
try try
{ {
if (!weapon.IsValid) return; if (!weapon.IsValid) return;
if (weapon.OwnerEntity.Value == null) return; if (weapon.OwnerEntity.Value == null) return;
if (!weapon.OwnerEntity.Value.EntityIndex.HasValue) /*
if (weapon.OwnerEntity.Index > 0)
{ {
for (int i = 1; i <= Server.MaxPlayers; i++) for (int i = 1; i <= Server.MaxPlayers; i++)
{ {
CCSPlayerController? ghostPlayer = Utilities.GetPlayerFromIndex(i); CCSPlayerController? ghostPlayer = Utilities.GetPlayerFromIndex(i);
if (!Utility.IsPlayerValid(ghostPlayer)) continue; if (!Utility.IsPlayerValid(ghostPlayer)) continue;
if (g_changedKnife.Contains((int)ghostPlayer.EntityIndex!.Value.Value)) if (g_changedKnife.Contains((int)ghostPlayer.Index))
{ {
ChangeWeaponAttributes(weapon, ghostPlayer, isKnife); ChangeWeaponAttributes(weapon, ghostPlayer, isKnife);
g_changedKnife.Remove((int)ghostPlayer.EntityIndex!.Value.Value); g_changedKnife.Remove((int)ghostPlayer.Index);
break; break;
} }
} }
return;
} }
*/
if (!weapon.OwnerEntity.Value.EntityIndex.HasValue) return; if (weapon.OwnerEntity.Index <= 0) return;
int weaponOwner = (int)weapon.OwnerEntity.Value.EntityIndex.Value.Value; int weaponOwner = (int)weapon.OwnerEntity.Index;
var pawn = new CBasePlayerPawn(NativeAPI.GetEntityFromIndex(weaponOwner)); var pawn = new CBasePlayerPawn(NativeAPI.GetEntityFromIndex(weaponOwner));
if (!pawn.IsValid) return; if (!pawn.IsValid) return;
var playerIndex = (int)pawn.Controller.Value.EntityIndex!.Value.Value;
var playerIndex = (int)pawn.Controller.Index;
var player = Utilities.GetPlayerFromIndex(playerIndex); var player = Utilities.GetPlayerFromIndex(playerIndex);
if (!Utility.IsPlayerValid(player)) return; if (!Utility.IsPlayerValid(player)) return;
@@ -191,6 +259,7 @@ namespace WeaponPaints
catch (Exception) { } catch (Exception) { }
}); });
} }
private HookResult OnEventItemPurchasePost(EventItemPurchase @event, GameEventInfo info) private HookResult OnEventItemPurchasePost(EventItemPurchase @event, GameEventInfo info)
{ {
CCSPlayerController? player = @event.Userid; CCSPlayerController? player = @event.Userid;

View File

@@ -24,7 +24,7 @@ Unfinished, unoptimized and not fully functional ugly demo weapon paints plugin
## Plugin Configuration ## Plugin Configuration
<details> <details>
<summary>Spoiler warning</summary> <summary>Click to expand</summary>
<code><pre>{ <code><pre>{
"Version": 4, // Don't touch "Version": 4, // Don't touch
"DatabaseHost": "", // MySQL host (required if GlobalShare = false) "DatabaseHost": "", // MySQL host (required if GlobalShare = false)
@@ -43,8 +43,11 @@ Unfinished, unoptimized and not fully functional ugly demo weapon paints plugin
"CooldownRefreshCommand": "You can\u0027t refresh weapon paints right now.", // Cooldown information (!wp command) Set to empty to disable "CooldownRefreshCommand": "You can\u0027t refresh weapon paints right now.", // Cooldown information (!wp command) Set to empty to disable
"SuccessRefreshCommand": "Refreshing weapon paints.", // Information about refreshing skins (!wp command) Set to empty to disable "SuccessRefreshCommand": "Refreshing weapon paints.", // Information about refreshing skins (!wp command) Set to empty to disable
"ChosenKnifeMenu": "You have chosen {KNIFE} as your knife.", // Information about choosen knife (!knife command) Set to empty to disable "ChosenKnifeMenu": "You have chosen {KNIFE} as your knife.", // Information about choosen knife (!knife command) Set to empty to disable
"ChosenSkinMenu": "You have chosen {SKIN} as your skin.", // Information about choosen skin (!skins command) Set to empty to disable
"ChosenKnifeMenuKill": "To correctly apply skin for knife, you need to type !kill.", // Information about suicide after knife selection (!knife command) Set to empty to disable "ChosenKnifeMenuKill": "To correctly apply skin for knife, you need to type !kill.", // Information about suicide after knife selection (!knife command) Set to empty to disable
"KnifeMenuTitle": "Knife Menu." // Menu title (!knife menu) "KnifeMenuTitle": "Knife Menu.", // Menu title (!knife menu)
"WeaponMenuTitle": "Weapon Menu.", // Menu title (!skins menu)
"SkinMenuTitle": "Select skin for {WEAPON}" // Menu title (!skins menu, after weapon select)
}, },
"Additional": { "Additional": {
"SkinVisibilityFix": true, // Enable or disable fix for skin visibility "SkinVisibilityFix": true, // Enable or disable fix for skin visibility
@@ -54,9 +57,11 @@ Unfinished, unoptimized and not fully functional ugly demo weapon paints plugin
"CommandKillEnabled": true, // Enable or disable kill command "CommandKillEnabled": true, // Enable or disable kill command
"CommandKnife": "knife", // Name of knife menu command, u can change to for e.g, knives "CommandKnife": "knife", // Name of knife menu command, u can change to for e.g, knives
"CommandSkin": "ws", // Name of skin information command, u can change to for e.g, skins "CommandSkin": "ws", // Name of skin information command, u can change to for e.g, skins
"CommandSkinSelection": "skins", // Name of skins menu command, u can change to for e.g, weapons
"CommandRefresh": "wp", // Name of skin refreshing command, u can change to for e.g, refreshskins "CommandRefresh": "wp", // Name of skin refreshing command, u can change to for e.g, refreshskins
"CommandKill": "kill", // Name of kill command, u can change to for e.g, suicide "CommandKill": "kill", // Name of kill command, u can change to for e.g, suicide
"GiveRandomKnife": false // Give random knife to players if they didn't choose "GiveRandomKnife": false, // Give random knife to players if they didn't choose
"GiveRandomSkins": false // Give random skins to players if they didn't choose
}, },
"ConfigVersion": 4 // Don't touch "ConfigVersion": 4 // Don't touch

View File

@@ -14,12 +14,12 @@ namespace WeaponPaints
internal static bool IsPlayerValid(CCSPlayerController? player) internal static bool IsPlayerValid(CCSPlayerController? player)
{ {
return (player != null && player.IsValid && !player.IsBot && !player.IsHLTV && player.SteamID.ToString() != "0"); return (player != null && player.IsValid && !player.IsBot && !player.IsHLTV && player.AuthorizedSteamID != null);
} }
internal static string BuildDatabaseConnectionString() internal static string BuildDatabaseConnectionString()
{ {
if (Config == null) return String.Empty; if (Config == null) return string.Empty;
var builder = new MySqlConnectionStringBuilder var builder = new MySqlConnectionStringBuilder
{ {
Server = Config.DatabaseHost, Server = Config.DatabaseHost,

View File

@@ -9,9 +9,9 @@ namespace WeaponPaints
{ {
internal static void ChangeWeaponAttributes(CBasePlayerWeapon? weapon, CCSPlayerController? player, bool isKnife = false) internal static void ChangeWeaponAttributes(CBasePlayerWeapon? weapon, CCSPlayerController? player, bool isKnife = false)
{ {
if (weapon == null || !weapon.IsValid || !Utility.IsPlayerValid(player)) return; if (player == null || weapon == null || !weapon.IsValid || !Utility.IsPlayerValid(player)) return;
int playerIndex = (int)player!.EntityIndex!.Value.Value; int playerIndex = (int)player.Index;
if (!gPlayerWeaponsInfo.ContainsKey(playerIndex)) return; if (!gPlayerWeaponsInfo.ContainsKey(playerIndex)) return;
@@ -55,7 +55,7 @@ namespace WeaponPaints
internal static void GiveKnifeToPlayer(CCSPlayerController? player) internal static void GiveKnifeToPlayer(CCSPlayerController? player)
{ {
if (!_config.Additional.KnifeEnabled || player == null || !player.IsValid) return; if (!_config.Additional.KnifeEnabled || player == null || !player.IsValid) return;
if (g_playersKnife.TryGetValue((int)player.EntityIndex!.Value.Value, out var knife)) if (g_playersKnife.TryGetValue((int)player.Index, out var knife))
{ {
player.GiveNamedItem(knife); player.GiveNamedItem(knife);
} }
@@ -77,7 +77,7 @@ namespace WeaponPaints
} }
internal void RemovePlayerKnife(CCSPlayerController? player, bool force = false) internal void RemovePlayerKnife(CCSPlayerController? player, bool force = false)
{ {
if (player == null || !player.IsValid || !player.PawnIsAlive) return; if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PawnIsAlive) return;
if (player.PlayerPawn.Value.WeaponServices == null || player.PlayerPawn.Value.ItemServices == null) return; if (player.PlayerPawn.Value.WeaponServices == null || player.PlayerPawn.Value.ItemServices == null) return;
var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons; var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons;
@@ -88,16 +88,16 @@ namespace WeaponPaints
foreach (var weapon in weapons) foreach (var weapon in weapons)
{ {
if (weapon != null && weapon.IsValid && weapon.Value.IsValid) if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
{ {
//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")) if (weapon.Value.DesignerName.Contains("knife") || weapon.Value.DesignerName.Contains("bayonet"))
{ {
if (!force) if (!force)
{ {
if (!weapon.Value.EntityIndex.HasValue) return; if ((int)weapon.Index <= 0) return;
int weaponEntityIndex = (int)weapon.Value.EntityIndex!.Value.Value; int weaponEntityIndex = (int)weapon.Index;
NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot3"); NativeAPI.IssueClientCommand((int)player.Index - 1, "slot3");
AddTimer(0.35f, () => service.DropActivePlayerWeapon(weapon.Value)); AddTimer(0.35f, () => service.DropActivePlayerWeapon(weapon.Value));
AddTimer(1.0f, () => AddTimer(1.0f, () =>
@@ -123,35 +123,35 @@ namespace WeaponPaints
internal void RefreshPlayerKnife(CCSPlayerController? player) internal void RefreshPlayerKnife(CCSPlayerController? player)
{ {
if (player == null || !player.IsValid || !player.PawnIsAlive) return; if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PawnIsAlive) return;
if (player.PlayerPawn.Value.WeaponServices == null || player.PlayerPawn.Value.ItemServices == null) return; if (player.PlayerPawn.Value.WeaponServices == null || player.PlayerPawn.Value.ItemServices == null) return;
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)
{ {
if (weapon != null && weapon.IsValid && weapon.Value.IsValid) if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
{ {
//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")) if (weapon.Value.DesignerName.Contains("knife") || weapon.Value.DesignerName.Contains("bayonet"))
{ {
if (!weapon.Value.EntityIndex.HasValue) return; if (weapon.Index <= 0) return;
int weaponEntityIndex = (int)weapon.Value.EntityIndex!.Value.Value; int weaponEntityIndex = (int)weapon.Index;
NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot3"); NativeAPI.IssueClientCommand((int)player.Index - 1, "slot3");
AddTimer(0.22f, () => AddTimer(0.22f, () =>
{ {
if (player.PlayerPawn.Value.WeaponServices.ActiveWeapon.Value.DesignerName.Contains("knife") if (player.PlayerPawn.Value.WeaponServices.ActiveWeapon.Value!.DesignerName.Contains("knife")
|| ||
player.PlayerPawn.Value.WeaponServices.ActiveWeapon.Value.DesignerName.Contains("bayonet") player.PlayerPawn.Value.WeaponServices.ActiveWeapon.Value!.DesignerName.Contains("bayonet")
) )
{ {
if (player.PawnIsAlive) if (player.PawnIsAlive)
{ {
NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot3"); NativeAPI.IssueClientCommand((int)player.Index - 1, "slot3");
service.DropActivePlayerWeapon(weapon.Value); service.DropActivePlayerWeapon(weapon.Value);
GiveKnifeToPlayer(player); GiveKnifeToPlayer(player);
} }
@@ -164,7 +164,7 @@ namespace WeaponPaints
{ {
CEntityInstance? knife = Utilities.GetEntityFromIndex<CEntityInstance>(weaponEntityIndex); CEntityInstance? knife = Utilities.GetEntityFromIndex<CEntityInstance>(weaponEntityIndex);
if (knife != null && knife.IsValid && knife.Handle != -1 && knife.EntityIndex.HasValue) if (knife != null && knife.IsValid && knife.Handle != -1 && knife.Index > 0)
{ {
knife.Remove(); knife.Remove();
} }
@@ -183,53 +183,67 @@ namespace WeaponPaints
{ {
if (!Utility.IsPlayerValid(player) || !player!.PawnIsAlive) return; if (!Utility.IsPlayerValid(player) || !player!.PawnIsAlive) return;
AddTimer(0.18f, () => NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot3")); AddTimer(0.18f, () => NativeAPI.IssueClientCommand((int)player.Index - 1, "slot3"));
AddTimer(0.25f, () => NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot2")); AddTimer(0.25f, () => NativeAPI.IssueClientCommand((int)player.Index - 1, "slot2"));
AddTimer(0.38f, () => NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot1")); AddTimer(0.38f, () => NativeAPI.IssueClientCommand((int)player.Index - 1, "slot1"));
} }
internal void RefreshWeapons(CCSPlayerController? player) internal void RefreshWeapons(CCSPlayerController? player)
{ {
if (player == null || !player.IsValid || !player.PawnIsAlive) return; if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PawnIsAlive) return;
if (player.PlayerPawn.Value.WeaponServices == null || player.PlayerPawn.Value.ItemServices == null) return; if (player.PlayerPawn.Value.WeaponServices == null || player.PlayerPawn.Value.ItemServices == null) return;
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)
{ {
if (weapon != null && weapon.IsValid && weapon.Value.IsValid) if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
{ {
if (!weapon.Value.EntityIndex.HasValue || !weapon.Value.DesignerName.Contains("weapon_")) continue; if (weapon.Index <= 0 || !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();
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(() =>
{
if (newWeapon == null) return;
try
{
newWeapon.Clip1 = clip1;
newWeapon.ReserveAmmo[0] = reservedAmmo;
}
catch (Exception)
{ }
});
}
} }
else 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);
} }
} }
@@ -237,19 +251,19 @@ namespace WeaponPaints
{ {
if (!_config.Additional.KnifeEnabled) return false; if (!_config.Additional.KnifeEnabled) return false;
if (player == null || !player.IsValid) if (player == null || !player.IsValid || !player.PlayerPawn.IsValid)
{ {
return false; return false;
} }
if (player.PlayerPawn.Value.WeaponServices == null || player.PlayerPawn.Value.ItemServices == null) if (player.PlayerPawn?.Value == null || player.PlayerPawn?.Value.WeaponServices == null || player.PlayerPawn?.Value.ItemServices == null)
return false; return false;
var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons; var weapons = player.PlayerPawn.Value.WeaponServices?.MyWeapons;
if (weapons == null || weapons.Count <= 0) return false; if (weapons == null) return false;
foreach (var weapon in weapons) foreach (var weapon in weapons)
{ {
if (weapon != null && weapon.IsValid && weapon.Value.IsValid) if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
{ {
if (weapon.Value.DesignerName.Contains("knife") || weapon.Value.DesignerName.Contains("bayonet")) if (weapon.Value.DesignerName.Contains("knife") || weapon.Value.DesignerName.Contains("bayonet"))
{ {
@@ -273,7 +287,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,18 +5,20 @@ using CounterStrikeSharp.API.Modules.Cvars;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
namespace WeaponPaints; namespace WeaponPaints;
[MinimumApiVersion(71)] [MinimumApiVersion(90)]
public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig> public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
{ {
public override string ModuleName => "WeaponPaints"; public override string ModuleName => "WeaponPaints";
public override string ModuleDescription => "Skin and knife selector, standalone and web-based"; public override string ModuleDescription => "Skin and knife selector, standalone and web-based";
public override string ModuleAuthor => "Nereziel & daffyy"; public override string ModuleAuthor => "Nereziel & daffyy";
public override string ModuleVersion => "1.3a"; public override string ModuleVersion => "1.3b";
public WeaponPaintsConfig Config { get; set; } = new(); public WeaponPaintsConfig Config { get; set; } = new();
internal static WeaponPaintsConfig _config = new WeaponPaintsConfig(); internal static WeaponPaintsConfig _config = new WeaponPaintsConfig();
internal static WeaponSynchronization? weaponSync; internal static WeaponSynchronization? weaponSync;
private CounterStrikeSharp.API.Modules.Timers.Timer? g_hTimerCheckSkinsData = null;
/* /*
private Dictionary<int, Dictionary<int, int>> gPlayerWeaponPaints = new(); private Dictionary<int, Dictionary<int, int>> gPlayerWeaponPaints = new();
private Dictionary<int, Dictionary<int, int>> gPlayerWeaponSeed = new(); private Dictionary<int, Dictionary<int, int>> gPlayerWeaponSeed = new();
@@ -31,7 +33,8 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
internal static Dictionary<int, Dictionary<int, WeaponInfo>> gPlayerWeaponsInfo = new Dictionary<int, Dictionary<int, WeaponInfo>>(); internal static Dictionary<int, Dictionary<int, WeaponInfo>> gPlayerWeaponsInfo = new Dictionary<int, Dictionary<int, WeaponInfo>>();
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()
@@ -100,10 +103,6 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
Utility.TestDatabaseConnection(); Utility.TestDatabaseConnection();
} }
if (Config.GlobalShare)
GlobalShareConnect();
weaponSync = new WeaponSynchronization(DatabaseConnectionString, Config, GlobalShareApi, GlobalShareServerId); weaponSync = new WeaponSynchronization(DatabaseConnectionString, Config, GlobalShareApi, GlobalShareServerId);
if (hotReload) if (hotReload)
@@ -127,7 +126,7 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
if (Config.Additional.SkinEnabled) if (Config.Additional.SkinEnabled)
SetupSkinsMenu(); SetupSkinsMenu();
RegisterEvents(); RegisterListeners();
RegisterCommands(); RegisterCommands();
Utility.LoadSkinsFromFile(ModuleDirectory + "/skins.json"); Utility.LoadSkinsFromFile(ModuleDirectory + "/skins.json");

View File

@@ -9,15 +9,8 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="*" /> <PackageReference Include="CounterStrikeSharp.API" Version="*" />
<PackageReference Include="Dapper" Version="2.1.21" /> <PackageReference Include="Dapper" Version="2.1.24" />
<PackageReference Include="MySqlConnector" Version="2.3.1" /> <PackageReference Include="MySqlConnector" Version="2.3.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Reference Include="CounterStrikeSharp.API">
<HintPath>deps\CounterStrikeSharp.API.dll</HintPath>
</Reference>
</ItemGroup>
</Project> </Project>

View File

@@ -31,14 +31,15 @@ namespace WeaponPaints
{ {
CCSPlayerController player = Utilities.GetPlayerFromIndex(playerIndex); CCSPlayerController player = Utilities.GetPlayerFromIndex(playerIndex);
if (!Utility.IsPlayerValid(player)) return; if (!Utility.IsPlayerValid(player)) return;
var steamId = new SteamID(player.SteamID); if (player.AuthorizedSteamID == null) return;
string steamId = player.AuthorizedSteamID.SteamId64.ToString();
if (_config.GlobalShare) if (_config.GlobalShare)
{ {
var values = new Dictionary<string, string> var values = new Dictionary<string, string>
{ {
{ "server_id", _globalShareServerId.ToString() }, { "server_id", _globalShareServerId.ToString() },
{ "steamid", steamId.SteamId64.ToString() }, { "steamid", steamId },
{ "knife", "1" } { "knife", "1" }
}; };
UriBuilder builder = new UriBuilder(_globalShareApi); UriBuilder builder = new UriBuilder(_globalShareApi);
@@ -75,7 +76,7 @@ namespace WeaponPaints
{ {
await connection.OpenAsync(); await connection.OpenAsync();
string query = "SELECT `knife` FROM `wp_player_knife` WHERE `steamid` = @steamid"; string query = "SELECT `knife` FROM `wp_player_knife` WHERE `steamid` = @steamid";
string? PlayerKnife = await connection.QueryFirstOrDefaultAsync<string>(query, new { steamid = steamId.SteamId64.ToString() }); string? PlayerKnife = await connection.QueryFirstOrDefaultAsync<string>(query, new { steamid = steamId });
if (PlayerKnife != null) if (PlayerKnife != null)
{ {
WeaponPaints.g_playersKnife[playerIndex] = PlayerKnife; WeaponPaints.g_playersKnife[playerIndex] = PlayerKnife;
@@ -102,12 +103,13 @@ namespace WeaponPaints
{ {
CCSPlayerController player = Utilities.GetPlayerFromIndex(playerIndex); CCSPlayerController player = Utilities.GetPlayerFromIndex(playerIndex);
if (player == null || !player.IsValid) return; if (player == null || !player.IsValid) return;
var steamId = new SteamID(player.SteamID); if (player.AuthorizedSteamID == null) return;
string steamId = player.AuthorizedSteamID.SteamId64.ToString();
using var connection = new MySqlConnection(_databaseConnectionString); using var connection = new MySqlConnection(_databaseConnectionString);
await connection.OpenAsync(); await connection.OpenAsync();
string query = "INSERT INTO `wp_player_knife` (`steamid`, `knife`) VALUES(@steamid, @newKnife) ON DUPLICATE KEY UPDATE `knife` = @newKnife"; string query = "INSERT INTO `wp_player_knife` (`steamid`, `knife`) VALUES(@steamid, @newKnife) ON DUPLICATE KEY UPDATE `knife` = @newKnife";
await connection.ExecuteAsync(query, new { steamid = steamId.SteamId64.ToString(), newKnife = knife }); await connection.ExecuteAsync(query, new { steamid = steamId, newKnife = knife });
await connection.CloseAsync(); await connection.CloseAsync();
} }
catch (Exception e) catch (Exception e)
@@ -124,7 +126,9 @@ namespace WeaponPaints
CCSPlayerController player = Utilities.GetPlayerFromIndex(playerIndex); CCSPlayerController player = Utilities.GetPlayerFromIndex(playerIndex);
if (!Utility.IsPlayerValid(player)) return; if (!Utility.IsPlayerValid(player)) return;
var steamId = new SteamID(player.SteamID); if (player.AuthorizedSteamID == null) return;
string steamId = player.AuthorizedSteamID.SteamId64.ToString();
if (!WeaponPaints.gPlayerWeaponsInfo.TryGetValue(playerIndex, out _)) if (!WeaponPaints.gPlayerWeaponsInfo.TryGetValue(playerIndex, out _))
{ {
@@ -137,7 +141,7 @@ namespace WeaponPaints
var values = new Dictionary<string, string> var values = new Dictionary<string, string>
{ {
{ "server_id", _globalShareServerId.ToString() }, { "server_id", _globalShareServerId.ToString() },
{ "steamid", steamId.SteamId64.ToString() }, { "steamid", steamId },
{ "skins", "1" } { "skins", "1" }
}; };
UriBuilder builder = new UriBuilder(_globalShareApi); UriBuilder builder = new UriBuilder(_globalShareApi);
@@ -193,7 +197,7 @@ namespace WeaponPaints
await connection.OpenAsync(); await connection.OpenAsync();
string query = "SELECT * FROM `wp_player_skins` WHERE `steamid` = @steamid"; string query = "SELECT * FROM `wp_player_skins` WHERE `steamid` = @steamid";
IEnumerable<dynamic> PlayerSkins = await connection.QueryAsync<dynamic>(query, new { steamid = steamId.SteamId64.ToString() }); IEnumerable<dynamic> PlayerSkins = await connection.QueryAsync<dynamic>(query, new { steamid = steamId });
if (PlayerSkins != null && PlayerSkins.AsList().Count > 0) if (PlayerSkins != null && PlayerSkins.AsList().Count > 0)
{ {
@@ -229,10 +233,11 @@ namespace WeaponPaints
internal async Task SyncWeaponPaintsToDatabase(CCSPlayerController? player) internal async Task SyncWeaponPaintsToDatabase(CCSPlayerController? player)
{ {
if (!Utility.IsPlayerValid(player)) return; if (player == null || !Utility.IsPlayerValid(player)) return;
int playerIndex = (int)player!.EntityIndex!.Value.Value; int playerIndex = (int)player.Index;
string steamId = new SteamID(player.SteamID).SteamId64.ToString(); if (player.AuthorizedSteamID == null) return;
string steamId = player.AuthorizedSteamID.SteamId64.ToString();
using var connection = new MySqlConnection(_databaseConnectionString); using var connection = new MySqlConnection(_databaseConnectionString);
await connection.OpenAsync(); await connection.OpenAsync();