test update

min CSShrap 155
globalshare not working
db remake
add option to not use ontick fix to cs2 weapon models
!skins will save only changed weapon
This commit is contained in:
Nereziel
2024-02-03 05:34:10 +01:00
parent 43e7a3183e
commit 56537971ad
10 changed files with 429 additions and 320 deletions

152
Events.cs
View File

@@ -1,5 +1,7 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Entities;
using System.Numerics;
namespace WeaponPaints
{
@@ -13,22 +15,18 @@ namespace WeaponPaints
{
UserId = player.UserId,
Index = (int)player.Index,
SteamId = player.SteamID.ToString(),
SteamId = player.SteamID,
Name = player?.PlayerName,
IpAddress = player?.IpAddress?.Split(":")[0]
};
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV || weaponSync == null) return;
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV || weaponSync == null) return;
Task.Run(async () =>
Task.Run(async () =>
{
if (Config.Additional.SkinEnabled)
await weaponSync.GetKnifeFromDatabase(playerInfo);
await weaponSync.GetPlayerDatabaseIndex(playerInfo);
});
//if (Config.Additional.KnifeEnabled && weaponSync != null)
//_ = weaponSync.GetKnifeFromDatabase(playerIndex);
}
}
private void OnClientDisconnect(int playerSlot)
{
@@ -36,16 +34,19 @@ namespace WeaponPaints
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV || player.UserId == null) return;
if (Config.Additional.KnifeEnabled)
g_playersDatabaseIndex.TryRemove((int)player.Index, out _);
if (Config.AdditionalSetting.KnifeEnabled)
g_playersKnife.TryRemove((int)player.Index, out _);
if (Config.Additional.SkinEnabled)
if (Config.AdditionalSetting.SkinEnabled)
{
if (gPlayerWeaponsInfo.TryRemove((int)player.Index, out var innerDictionary))
{
innerDictionary.Clear();
}
}
if (commandsCooldown.ContainsKey((int)player.UserId))
if (Config.AdditionalSetting.MusicKitEnabled)
g_playersMusicKit.TryRemove((int)player.Index, out _);
if (commandsCooldown.ContainsKey((int)player.UserId))
{
commandsCooldown.Remove((int)player.UserId);
}
@@ -53,7 +54,7 @@ namespace WeaponPaints
private void OnEntityCreated(CEntityInstance entity)
{
if (!Config.Additional.SkinEnabled) return;
if (!Config.AdditionalSetting.SkinEnabled) return;
if (entity == null || !entity.IsValid || string.IsNullOrEmpty(entity.DesignerName)) return;
string designerName = entity.DesignerName;
if (!weaponList.ContainsKey(designerName)) return;
@@ -93,42 +94,41 @@ namespace WeaponPaints
if (player == null || !player.IsValid) return HookResult.Continue;
/*
if (Config.Additional.SkinVisibilityFix)
if (Config.AdditionalSetting.SkinVisibilityFix)
AddTimer(0.2f, () => RefreshSkins(player));
*/
return HookResult.Continue;
}
/*
private HookResult OnItemPickup(EventItemPickup @event, GameEventInfo info)
{
if (@event.Defindex == 42 || @event.Defindex == 59)
{
CCSPlayerController? player = @event.Userid;
if (player == null || !player.IsValid || !g_knifePickupCount.ContainsKey((int)player.Index) || player.IsBot || !g_playersKnife.ContainsKey((int)player.Index))
return HookResult.Continue;
/*
private HookResult OnItemPickup(EventItemPickup @event, GameEventInfo info)
{
if (@event.Defindex == 42 || @event.Defindex == 59)
{
CCSPlayerController? player = @event.Userid;
if (player == null || !player.IsValid || !g_knifePickupCount.ContainsKey((int)player.Index) || player.IsBot || !g_playersKnife.ContainsKey((int)player.Index))
return HookResult.Continue;
if (g_knifePickupCount[(int)player.Index] >= 2) return HookResult.Continue;
if (g_knifePickupCount[(int)player.Index] >= 2) return HookResult.Continue;
if (g_playersKnife.ContainsKey((int)player.Index)
&&
g_playersKnife[(int)player.Index] != "weapon_knife")
{
g_knifePickupCount[(int)player.Index]++;
if (g_playersKnife.ContainsKey((int)player.Index)
&&
g_playersKnife[(int)player.Index] != "weapon_knife")
{
g_knifePickupCount[(int)player.Index]++;
RemovePlayerKnife(player, true);
RemovePlayerKnife(player, true);
if (!PlayerHasKnife(player) && Config.Additional.GiveKnifeAfterRemove)
AddTimer(0.3f, () => GiveKnifeToPlayer(player));
}
}
return HookResult.Continue;
}
*/
if (!PlayerHasKnife(player) && Config.AdditionalSetting.GiveKnifeAfterRemove)
AddTimer(0.3f, () => GiveKnifeToPlayer(player));
}
}
return HookResult.Continue;
}
*/
public HookResult OnPickup(CEntityIOOutput output, string name, CEntityInstance activator, CEntityInstance caller, CVariant value, float delay)
public HookResult OnPickup(CEntityIOOutput output, string name, CEntityInstance activator, CEntityInstance caller, CVariant value, float delay)
{
CCSPlayerController? player = Utilities.GetEntityFromIndex<CCSPlayerPawn>((int)activator.Index).OriginalController.Value;
@@ -150,26 +150,25 @@ namespace WeaponPaints
{
g_knifePickupCount[(int)player.Index]++;
player.RemoveItemByDesignerName(weapon.DesignerName);
if (Config.Additional.GiveKnifeAfterRemove)
if (Config.AdditionalSetting.GiveKnifeAfterRemove)
AddTimer(0.2f, () => GiveKnifeToPlayer(player));
}
return HookResult.Continue;
}
private void OnMapStart(string mapName)
private void OnMapStart(string mapName)
{
if (!Config.Additional.KnifeEnabled) return;
// TODO
// needed for now
AddTimer(2.0f, () =>
if (!Config.AdditionalSetting.KnifeEnabled) return;
// TODO
// needed for now
AddTimer(2.0f, () =>
{
NativeAPI.IssueServerCommand("mp_t_default_melee \"\"");
NativeAPI.IssueServerCommand("mp_ct_default_melee \"\"");
NativeAPI.IssueServerCommand("mp_equipment_reset_rounds 0");
if (Config.GlobalShare)
if (Config.GlobalShare)
GlobalShareConnect();
weaponSync = new WeaponSynchronization(DatabaseConnectionString, Config, GlobalShareApi, GlobalShareServerId);
@@ -178,26 +177,24 @@ namespace WeaponPaints
g_hTimerCheckSkinsData = AddTimer(10.0f, () =>
{
List<CCSPlayerController> players = Utilities.GetPlayers();
foreach (CCSPlayerController player in players)
HashSet<int> playerIndexes = new HashSet<int>(gPlayerWeaponsInfo.Keys);
foreach (CCSPlayerController player in players)
{
if (player.IsBot || player.IsHLTV || player.SteamID.ToString() == "") continue;
if (gPlayerWeaponsInfo.ContainsKey((int)player.Index)) continue;
//if (gPlayerWeaponsInfo.ContainsKey((int)player.Index)) continue;
if (playerIndexes.Contains((int)player.Index)) continue;
PlayerInfo playerInfo = new PlayerInfo
PlayerInfo playerInfo = new PlayerInfo
{
UserId = player.UserId,
Index = (int)player.Index,
SteamId = player?.SteamID.ToString(),
SteamId = player?.SteamID,
Name = player?.PlayerName,
IpAddress = player?.IpAddress?.Split(":")[0]
};
if (Config.Additional.SkinEnabled && weaponSync != null)
_ = weaponSync.GetWeaponPaintsFromDatabase(playerInfo);
if (Config.Additional.KnifeEnabled && weaponSync != null)
_ = weaponSync.GetKnifeFromDatabase(playerInfo);
}
if (weaponSync != null)
_ = weaponSync.GetKnifeFromDatabase(playerInfo);
}
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE | CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT);
}
@@ -211,22 +208,19 @@ namespace WeaponPaints
{
UserId = player.UserId,
Index = (int)player.Index,
SteamId = player?.SteamID.ToString(),
SteamId = player?.SteamID,
Name = player?.PlayerName,
IpAddress = player?.IpAddress?.Split(":")[0]
};
if (!gPlayerWeaponsInfo.ContainsKey((int)player!.Index))
if (!g_playersDatabaseIndex.ContainsKey((int)player!.Index))
{
Console.WriteLine($"[WeaponPaints] Retrying to retrieve player {player.PlayerName} skins");
Task.Run(async () =>
{
if (Config.Additional.SkinEnabled)
await weaponSync.GetWeaponPaintsFromDatabase(playerInfo);
if (Config.Additional.KnifeEnabled)
await weaponSync.GetKnifeFromDatabase(playerInfo);
});
}
await weaponSync.GetPlayerDatabaseIndex(playerInfo);
});
}
return HookResult.Continue;
}
@@ -239,7 +233,7 @@ namespace WeaponPaints
return HookResult.Continue;
}
if (Config.Additional.KnifeEnabled && !PlayerHasKnife(player))
if (Config.AdditionalSetting.KnifeEnabled && !PlayerHasKnife(player))
{
g_knifePickupCount[(int)player.Index] = 0;
GiveKnifeToPlayer(player);
@@ -247,7 +241,7 @@ namespace WeaponPaints
}
/*
if (Config.Additional.SkinVisibilityFix)
if (Config.AdditionalSetting.SkinVisibilityFix)
{
AddTimer(0.3f, () => RefreshSkins(player));
}
@@ -298,11 +292,11 @@ namespace WeaponPaints
if (
viewModel.Value.CBodyComponent != null
&& viewModel.Value.CBodyComponent.SceneNode != null
)
&& weapon.CBodyComponent!.SceneNode!.GetSkeletonInstance().ModelState.MeshGroupMask != 2
)
{
var skeleton = GetSkeletonInstance(viewModel.Value.CBodyComponent.SceneNode);
skeleton.ModelState.MeshGroupMask = 2;
}
weapon.CBodyComponent!.SceneNode!.GetSkeletonInstance().ModelState.MeshGroupMask = 2;
}
Utilities.SetStateChanged(viewModel.Value, "CBaseEntity", "m_CBodyComponent");
}
@@ -318,16 +312,18 @@ namespace WeaponPaints
RegisterListener<Listeners.OnClientPutInServer>(OnClientPutInServer);
RegisterListener<Listeners.OnClientDisconnect>(OnClientDisconnect);
RegisterListener<Listeners.OnMapStart>(OnMapStart);
RegisterListener<Listeners.OnTick>(OnTick);
RegisterEventHandler<EventPlayerConnectFull>(OnPlayerConnectFull);
if (!Config.AdditionalSetting.UseMetamodAlwaysLegacyModel)
RegisterListener<Listeners.OnTick>(OnTick);
RegisterEventHandler<EventPlayerConnectFull>(OnPlayerConnectFull);
RegisterEventHandler<EventPlayerSpawn>(OnPlayerSpawn);
RegisterEventHandler<EventRoundStart>(OnRoundStart, HookMode.Pre);
RegisterEventHandler<EventRoundEnd>(OnRoundEnd);
RegisterEventHandler<EventItemPurchase>(OnEventItemPurchasePost);
//RegisterEventHandler<EventItemPickup>(OnItemPickup);
HookEntityOutput("weapon_knife", "OnPlayerPickup", OnPickup, HookMode.Pre);
}
}
/* WORKAROUND FOR CLIENTS WITHOUT STEAMID ON AUTHORIZATION */
@@ -338,15 +334,15 @@ namespace WeaponPaints
if (player == null || !player.IsValid || !player.EntityIndex.HasValue || player.IsHLTV) return HookResult.Continue;
int playerIndex = (int)player.EntityIndex.Value.Value;
if (Config.Additional.SkinEnabled && weaponSync != null)
if (Config.AdditionalSetting.SkinEnabled && weaponSync != null)
_ = weaponSync.GetWeaponPaintsFromDatabase(playerIndex);
if (Config.Additional.KnifeEnabled && weaponSync != null)
if (Config.AdditionalSetting.KnifeEnabled && weaponSync != null)
_ = weaponSync.GetKnifeFromDatabase(playerIndex);
Task.Run(async () =>
{
if (Config.Additional.SkinEnabled && weaponSync != null)
if (Config.Additional.KnifeEnabled && weaponSync != null)
if (Config.AdditionalSetting.SkinEnabled && weaponSync != null)
if (Config.AdditionalSetting.KnifeEnabled && weaponSync != null)
});
return HookResult.Continue;