Skip to content

Commit

Permalink
Improved player index
Browse files Browse the repository at this point in the history
The latest version of cssharp adds player.Index instead of entityIndex and does not allow to compile
  • Loading branch information
daffyyyy committed Nov 30, 2023
1 parent 00f9207 commit be51e4d
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 64 deletions.
22 changes: 11 additions & 11 deletions Commands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ private void RegisterCommands()
{
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);
});
Expand Down Expand Up @@ -60,11 +60,11 @@ private void SetupKnifeMenu()
player!.PrintToChat(Utility.ReplaceTags(temp));
}
g_playersKnife[(int)player!.EntityIndex!.Value.Value] = knifeKey;
g_playersKnife[(int)player!.Index] = knifeKey;
if (player!.PawnIsAlive && g_bCommandsAllowed)
{
g_changedKnife.Add((int)player.EntityIndex!.Value.Value);
//g_changedKnife.Add((int)player.Index);
RefreshWeapons(player);
//RefreshPlayerKnife(player);
Expand All @@ -73,7 +73,7 @@ private void SetupKnifeMenu()
*/
}
if (weaponSync != null)
Task.Run(() => weaponSync.SyncKnifeToDatabase((int)player.EntityIndex!.Value.Value, knifeKey));
Task.Run(() => weaponSync.SyncKnifeToDatabase((int)player.Index, knifeKey));
}
}
};
Expand All @@ -84,7 +84,7 @@ private void SetupKnifeMenu()
AddCommand($"css_{Config.Additional.CommandKnife}", "Knife Menu", (player, info) =>
{
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)
{
Expand All @@ -110,7 +110,7 @@ private void SetupSkinsMenu()
{
if (!Utility.IsPlayerValid(player)) return;
int playerIndex = (int)player!.EntityIndex!.Value.Value;
int playerIndex = (int)player!.Index;
string selectedWeapon = option.Text;
if (classNamesByWeapon.TryGetValue(selectedWeapon, out string? selectedWeaponClassname))
{
Expand All @@ -126,9 +126,9 @@ private void SetupSkinsMenu()
// Function to handle skin selection for the chosen weapon
var handleSkinSelection = (CCSPlayerController? p, ChatMenuOption opt) =>
{
if (p == null || !p.IsValid || !p.EntityIndex.HasValue) return;
if (p == null || !p.IsValid || p.Index <= 0) return;
playerIndex = (int)p.EntityIndex.Value.Value;
playerIndex = (int)p.Index;
var steamId = new SteamID(p.SteamID);
var firstSkin = skinsList?.FirstOrDefault(skin =>
Expand Down Expand Up @@ -204,7 +204,7 @@ private void SetupSkinsMenu()
AddCommand($"css_{Config.Additional.CommandSkinSelection}", "Skins selection menu", (player, info) =>
{
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)
{
Expand All @@ -226,8 +226,8 @@ private void OnCommandRefresh(CCSPlayerController? player, CommandInfo command)
if (!Config.Additional.CommandWpEnabled || !Config.Additional.SkinEnabled || !g_bCommandsAllowed) return;
if (!Utility.IsPlayerValid(player)) return;
string temp = "";
if (!player!.EntityIndex.HasValue) return;
int playerIndex = (int)player!.EntityIndex!.Value.Value;
if (player == null || player.Index <= 0) return;
int playerIndex = (int)player!.Index;
if (playerIndex != 0 && DateTime.UtcNow >= commandCooldown[playerIndex].AddSeconds(Config.CmdRefreshCooldownSeconds))
{
commandCooldown[playerIndex] = DateTime.UtcNow;
Expand Down
33 changes: 18 additions & 15 deletions Events.cs
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,9 @@ private void OnClientDisconnect(int playerSlot)
if (player == null || !player.IsValid || player.IsHLTV) return;

if (Config.Additional.KnifeEnabled)
g_playersKnife.Remove((int)player.EntityIndex!.Value.Value);
g_playersKnife.Remove((int)player.Index);
if (Config.Additional.SkinEnabled)
gPlayerWeaponsInfo.Remove((int)player.EntityIndex!.Value.Value);
gPlayerWeaponsInfo.Remove((int)player.Index);
}

private HookResult OnPlayerSpawn(EventPlayerSpawn @event, GameEventInfo info)
Expand All @@ -100,7 +100,7 @@ private HookResult OnPlayerSpawn(EventPlayerSpawn @event, GameEventInfo info)

if (Config.Additional.KnifeEnabled)
{
g_knifePickupCount[(int)player.EntityIndex!.Value.Value] = 0;
g_knifePickupCount[(int)player.Index] = 0;
if (!PlayerHasKnife(player))
GiveKnifeToPlayer(player);
}
Expand Down Expand Up @@ -134,13 +134,13 @@ private HookResult OnItemPickup(EventItemPickup @event, GameEventInfo info)
if (@event.Defindex == 42 || @event.Defindex == 59)
{
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);
AddTimer(0.3f, ()=> GiveKnifeToPlayer(player));
Expand Down Expand Up @@ -176,29 +176,32 @@ private void OnEntitySpawned(CEntityInstance entity)
{
try
{
if (!weapon.IsValid) 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++)
{
CCSPlayerController? ghostPlayer = Utilities.GetPlayerFromIndex(i);
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);
g_changedKnife.Remove((int)ghostPlayer.EntityIndex!.Value.Value);
g_changedKnife.Remove((int)ghostPlayer.Index);
break;
}
}
return;
}
if (!weapon.OwnerEntity.Value.EntityIndex.HasValue) return;
int weaponOwner = (int)weapon.OwnerEntity.Value.EntityIndex.Value.Value;
*/
if (weapon.OwnerEntity.Index <= 0) return;
int weaponOwner = (int)weapon.OwnerEntity.Index;
var pawn = new CBasePlayerPawn(NativeAPI.GetEntityFromIndex(weaponOwner));
if (!pawn.IsValid) return;
var playerIndex = (int)pawn.Controller.Value.EntityIndex!.Value.Value;
var playerIndex = (int)pawn.Controller.Index;
var player = Utilities.GetPlayerFromIndex(playerIndex);
if (!Utility.IsPlayerValid(player)) return;
Expand Down
2 changes: 1 addition & 1 deletion Utility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ internal static bool IsPlayerValid(CCSPlayerController? player)

internal static string BuildDatabaseConnectionString()
{
if (Config == null) return String.Empty;
if (Config == null) return string.Empty;
var builder = new MySqlConnectionStringBuilder
{
Server = Config.DatabaseHost,
Expand Down
52 changes: 26 additions & 26 deletions WeaponAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ public partial class WeaponPaints
{
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;

Expand Down Expand Up @@ -55,7 +55,7 @@ internal static void ChangeWeaponAttributes(CBasePlayerWeapon? weapon, CCSPlayer
internal static void GiveKnifeToPlayer(CCSPlayerController? player)
{
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);
}
Expand All @@ -77,7 +77,7 @@ internal static void GiveKnifeToPlayer(CCSPlayerController? player)
}
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;

var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons;
Expand All @@ -88,16 +88,16 @@ internal void RemovePlayerKnife(CCSPlayerController? player, bool force = false)

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.DesignerName.Contains("knife") || weapon.Value.DesignerName.Contains("bayonet"))
{
if (!force)
{
if (!weapon.Value.EntityIndex.HasValue) return;
int weaponEntityIndex = (int)weapon.Value.EntityIndex!.Value.Value;
NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot3");
if ((int)weapon.Index <= 0) return;
int weaponEntityIndex = (int)weapon.Index;
NativeAPI.IssueClientCommand((int)player.Index - 1, "slot3");
AddTimer(0.35f, () => service.DropActivePlayerWeapon(weapon.Value));

AddTimer(1.0f, () =>
Expand All @@ -123,35 +123,35 @@ internal void RemovePlayerKnife(CCSPlayerController? player, bool force = false)

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;

var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons;
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"));

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.DesignerName.Contains("knife") || weapon.Value.DesignerName.Contains("bayonet"))
{
if (!weapon.Value.EntityIndex.HasValue) return;
int weaponEntityIndex = (int)weapon.Value.EntityIndex!.Value.Value;
NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot3");
if (weapon.Index <= 0) return;
int weaponEntityIndex = (int)weapon.Index;
NativeAPI.IssueClientCommand((int)player.Index - 1, "slot3");
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)
{
NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot3");
NativeAPI.IssueClientCommand((int)player.Index - 1, "slot3");
service.DropActivePlayerWeapon(weapon.Value);
GiveKnifeToPlayer(player);
}
Expand All @@ -164,7 +164,7 @@ internal void RefreshPlayerKnife(CCSPlayerController? player)
{
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();
}
Expand All @@ -183,14 +183,14 @@ internal void RefreshSkins(CCSPlayerController? player)
{
if (!Utility.IsPlayerValid(player) || !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"));
AddTimer(0.38f, () => NativeAPI.IssueClientCommand((int)player.EntityIndex!.Value.Value - 1, "slot1"));
AddTimer(0.18f, () => NativeAPI.IssueClientCommand((int)player.Index - 1, "slot3"));
AddTimer(0.25f, () => NativeAPI.IssueClientCommand((int)player.Index - 1, "slot2"));
AddTimer(0.38f, () => NativeAPI.IssueClientCommand((int)player.Index - 1, "slot1"));
}

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;

var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons;
Expand All @@ -201,9 +201,9 @@ internal void RefreshWeapons(CCSPlayerController? player)

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)
try
{
Expand Down Expand Up @@ -249,14 +249,14 @@ internal static bool PlayerHasKnife(CCSPlayerController? player)
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;

var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons;
if (weapons == null || weapons.Count <= 0) return false;
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"))
{
Expand Down
2 changes: 1 addition & 1 deletion WeaponPaints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ 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, int> g_knifePickupCount = new Dictionary<int, int>();
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>();
Expand Down
9 changes: 1 addition & 8 deletions WeaponPaints.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.80" />
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.84" />
<PackageReference Include="Dapper" Version="2.1.24" />
<PackageReference Include="MySqlConnector" Version="2.3.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>

<ItemGroup>
<Reference Include="CounterStrikeSharp.API">
<HintPath>deps\CounterStrikeSharp.API.dll</HintPath>
</Reference>
</ItemGroup>

</Project>
4 changes: 2 additions & 2 deletions WeaponSynchronization.cs
Original file line number Diff line number Diff line change
Expand Up @@ -229,9 +229,9 @@ internal async Task GetWeaponPaintsFromDatabase(int playerIndex)

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();

using var connection = new MySqlConnection(_databaseConnectionString);
Expand Down

0 comments on commit be51e4d

Please sign in to comment.