Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.4b #121

Merged
merged 2 commits into from
Jan 26, 2024
Merged

1.4b #121

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 49 additions & 11 deletions Events.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Entities;

namespace WeaponPaints
{
public partial class WeaponPaints
{
private void OnClientAuthorized(int playerSlot, SteamID steamID)
private void OnClientPutInServer(int playerSlot)
{
int playerIndex = playerSlot + 1;

CCSPlayerController? player = Utilities.GetPlayerFromIndex(playerIndex);
CCSPlayerController? player = Utilities.GetPlayerFromSlot(playerSlot);

PlayerInfo playerInfo = new PlayerInfo
{
UserId = player.UserId,
Index = (int)player.Index,
SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(),
SteamId = player.SteamID.ToString(),
Name = player?.PlayerName,
IpAddress = player?.IpAddress?.Split(":")[0]
};
Expand Down Expand Up @@ -138,7 +135,7 @@ public HookResult OnPickup(CEntityIOOutput output, string name, CEntityInstance
if (player == null || player.IsBot || player.IsHLTV)
return HookResult.Continue;

if (player == null || !player.IsValid || player.AuthorizedSteamID == null ||
if (player == null || !player.IsValid || player.SteamID.ToString() == "" ||
!g_knifePickupCount.ContainsKey((int)player.Index) || !g_playersKnife.ContainsKey((int)player.Index))
return HookResult.Continue;

Expand Down Expand Up @@ -184,14 +181,14 @@ private void OnMapStart(string mapName)

foreach (CCSPlayerController player in players)
{
if (player.IsBot || player.IsHLTV || player.AuthorizedSteamID == null) continue;
if (player.IsBot || player.IsHLTV || player.SteamID.ToString() == "") continue;
if (gPlayerWeaponsInfo.ContainsKey((int)player.Index)) continue;

PlayerInfo playerInfo = new PlayerInfo
{
UserId = player.UserId,
Index = (int)player.Index,
SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(),
SteamId = player?.SteamID.ToString(),
Name = player?.PlayerName,
IpAddress = player?.IpAddress?.Split(":")[0]
};
Expand All @@ -214,7 +211,7 @@ private HookResult OnPlayerConnectFull(EventPlayerConnectFull @event, GameEventI
{
UserId = player.UserId,
Index = (int)player.Index,
SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(),
SteamId = player?.SteamID.ToString(),
Name = player?.PlayerName,
IpAddress = player?.IpAddress?.Split(":")[0]
};
Expand Down Expand Up @@ -276,12 +273,52 @@ private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info)
return HookResult.Continue;
}

private void OnTick()
{
foreach (var player in Utilities.GetPlayers())
{
try
{
if (player == null || !player.IsValid || !player.PawnIsAlive || player.IsBot || player.IsHLTV) continue;

var viewModels = GetPlayerViewModels(player);

if (viewModels == null) continue;

var viewModel = viewModels[0];
if (viewModel == null || viewModel.Value == null || viewModel.Value.Weapon == null || viewModel.Value.Weapon.Value == null) continue;
CBasePlayerWeapon weapon = viewModel.Value.Weapon.Value;

if (weapon == null || !weapon.IsValid) continue;

var isKnife = viewModel.Value.VMName.Contains("knife");

if (!isKnife)
{
if (
viewModel.Value.CBodyComponent != null
&& viewModel.Value.CBodyComponent.SceneNode != null
)
{
var skeleton = GetSkeletonInstance(viewModel.Value.CBodyComponent.SceneNode);
skeleton.ModelState.MeshGroupMask = 2;
}

Utilities.SetStateChanged(viewModel.Value, "CBaseEntity", "m_CBodyComponent");
}
}
catch (Exception)
{ }
}
}

private void RegisterListeners()
{
RegisterListener<Listeners.OnEntityCreated>(OnEntityCreated);
RegisterListener<Listeners.OnClientAuthorized>(OnClientAuthorized);
RegisterListener<Listeners.OnClientPutInServer>(OnClientPutInServer);
RegisterListener<Listeners.OnClientDisconnect>(OnClientDisconnect);
RegisterListener<Listeners.OnMapStart>(OnMapStart);
RegisterListener<Listeners.OnTick>(OnTick);

RegisterEventHandler<EventPlayerConnectFull>(OnPlayerConnectFull);
RegisterEventHandler<EventPlayerSpawn>(OnPlayerSpawn);
Expand All @@ -292,6 +329,7 @@ private void RegisterListeners()
HookEntityOutput("weapon_knife", "OnPlayerPickup", OnPickup, HookMode.Pre);
}


/* WORKAROUND FOR CLIENTS WITHOUT STEAMID ON AUTHORIZATION */
/*private HookResult OnPlayerConnectFull(EventPlayerConnectFull @event, GameEventInfo info)
{
Expand Down
1 change: 0 additions & 1 deletion PluginServices.cs

This file was deleted.

2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.4a
1.4b
41 changes: 32 additions & 9 deletions WeaponAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using CounterStrikeSharp.API.Modules.Memory;
using CounterStrikeSharp.API.Modules.Utils;
using Microsoft.Extensions.Logging;
using System.Runtime.InteropServices;

namespace WeaponPaints
{
Expand All @@ -20,14 +21,10 @@

int weaponDefIndex = weapon.AttributeManager.Item.ItemDefinitionIndex;


if (isKnife)
{
weapon.AttributeManager.Item.EntityQuality = 3;
if (weapon.CBodyComponent != null && weapon.CBodyComponent.SceneNode != null)
{
var skeleton = GetSkeletonInstance(weapon.CBodyComponent.SceneNode);
skeleton.ForceParentToBeNetworked = true;
}
}

if (_config.Additional.GiveRandomSkin &&
Expand All @@ -43,8 +40,10 @@
if (!isKnife && weapon.CBodyComponent != null && weapon.CBodyComponent.SceneNode != null)
{
var skeleton = GetSkeletonInstance(weapon.CBodyComponent.SceneNode);
//skeleton.ModelState.MeshGroupMask = 2;
skeleton.ForceParentToBeNetworked = true;
if (skeleton.ModelState.MeshGroupMask != 2)
{
skeleton.ModelState.MeshGroupMask = 2;
}
}
return;
}
Expand All @@ -62,8 +61,10 @@
if (!isKnife && weapon.CBodyComponent != null && weapon.CBodyComponent.SceneNode != null)
{
var skeleton = GetSkeletonInstance(weapon.CBodyComponent.SceneNode);
skeleton.ForceParentToBeNetworked = true;
//skeleton.ModelState.MeshGroupMask = 2;
if (skeleton.ModelState.MeshGroupMask != 2)
{
skeleton.ModelState.MeshGroupMask = 2;
}
}
}

Expand Down Expand Up @@ -180,7 +181,7 @@
internal void RefreshSkins(CCSPlayerController? player)
{
return;
if (!Utility.IsPlayerValid(player) || !player!.PawnIsAlive) return;

Check warning on line 184 in WeaponAction.cs

View workflow job for this annotation

GitHub Actions / build

Unreachable code detected

Check warning on line 184 in WeaponAction.cs

View workflow job for this annotation

GitHub Actions / build

Unreachable code detected

AddTimer(0.18f, () => NativeAPI.IssueClientCommand((int)player.Index - 1, "slot3"));
AddTimer(0.25f, () => NativeAPI.IssueClientCommand((int)player.Index - 1, "slot2"));
Expand Down Expand Up @@ -326,5 +327,27 @@
Func<nint, nint> GetSkeletonInstance = VirtualFunction.Create<nint, nint>(node.Handle, 8);
return new CSkeletonInstance(GetSkeletonInstance(node.Handle));
}

private static unsafe CHandle<CBaseViewModel>[]? GetPlayerViewModels(CCSPlayerController player)
{
if (player.PlayerPawn.Value == null || player.PlayerPawn.Value.ViewModelServices == null) return null;
CCSPlayer_ViewModelServices viewModelServices = new CCSPlayer_ViewModelServices(player.PlayerPawn.Value.ViewModelServices!.Handle);
return GetFixedArray<CHandle<CBaseViewModel>>(viewModelServices.Handle, "CCSPlayer_ViewModelServices", "m_hViewModel", 3);
}

public static unsafe T[] GetFixedArray<T>(nint pointer, string @class, string member, int length) where T : CHandle<CBaseViewModel>
{
nint ptr = pointer + Schema.GetSchemaOffset(@class, member);
Span<nint> references = MemoryMarshal.CreateSpan<nint>(ref ptr, length);
T[] values = new T[length];

for (int i = 0; i < length; i++)
{
values[i] = (T)Activator.CreateInstance(typeof(T), references[i])!;
}

return values;
}

}
}
6 changes: 3 additions & 3 deletions WeaponPaints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
public override string ModuleAuthor => "Nereziel & daffyy";
public override string ModuleDescription => "Skin and knife selector, standalone and web-based";
public override string ModuleName => "WeaponPaints";
public override string ModuleVersion => "1.4a";
public override string ModuleVersion => "1.4b";

public static WeaponPaintsConfig GetWeaponPaintsConfig()
{
Expand All @@ -168,14 +168,14 @@ public override void Load(bool hotReload)

foreach (CCSPlayerController player in players)
{
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV || player.AuthorizedSteamID == null) continue;
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV || player.SteamID.ToString() == "") continue;
if (gPlayerWeaponsInfo.ContainsKey((int)player.Index)) continue;

PlayerInfo playerInfo = new PlayerInfo
{
UserId = player.UserId,
Index = (int)player.Index,
SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(),
SteamId = player?.SteamID.ToString(),
Name = player?.PlayerName,
IpAddress = player?.IpAddress?.Split(":")[0]
};
Expand Down
Loading