using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Entities; using Nexd.MySQL; namespace WeaponPaints; public class WeaponPaints : BasePlugin { public override string ModuleName => "WeaponPaints"; public override string ModuleDescription => "Connector for web-based player chosen wepaon paints."; public override string ModuleAuthor => "Nereziel"; public override string ModuleVersion => "0.4"; MySqlDb? MySql = null; public override void Load(bool hotReload) { new Cfg().CheckConfig(ModuleDirectory); MySql = new MySqlDb(Cfg.config.DatabaseHost!, Cfg.config.DatabaseUser!, Cfg.config.DatabasePassword!, Cfg.config.DatabaseName!, (int)Cfg.config.DatabasePort); RegisterListener(OnEntitySpawned); } private void OnEntitySpawned(CEntityInstance entity) { var designerName = entity.DesignerName; if (!designerName.Contains("weapon_")) return; if (designerName.Contains("knife")) return; if (designerName.Contains("bayonet")) return; var weapon = new CBasePlayerWeapon(entity.Handle); Server.NextFrame(() => { if (!weapon.IsValid) return; var pawn = new CBasePlayerPawn(NativeAPI.GetEntityFromIndex((int)weapon.OwnerEntity.Value.EntityIndex!.Value.Value)); if (!pawn.IsValid) return; var playerIndex = (int)pawn.Controller.Value.EntityIndex!.Value.Value; int weaponPaint = GetPlayersWeaponPaint(playerIndex, weapon.AttributeManager.Item.ItemDefinitionIndex); if (weaponPaint == 0) return; weapon.AttributeManager.Item.ItemIDLow = unchecked((uint)-1); weapon.AttributeManager.Item.ItemIDHigh = unchecked((uint)-1); weapon.FallbackPaintKit = weaponPaint; weapon.FallbackSeed = 0; weapon.FallbackWear = 0.0001f; }); } private static void Log(string message) { Console.BackgroundColor = ConsoleColor.DarkGray; Console.ForegroundColor = ConsoleColor.DarkMagenta; Console.WriteLine(message); Console.ResetColor(); } public int GetPlayersWeaponPaint(int playerIndex, int weaponDefIndex) { try { CCSPlayerController player = Utilities.GetPlayerFromIndex(playerIndex); if (player == null || !player.IsValid) return 0; var steamId = new SteamID(player.SteamID); MySqlQueryCondition conditions = new MySqlQueryCondition() .Add("steamid", "=", steamId.SteamId64.ToString()) .Add("weapon_defindex", "=", weaponDefIndex); MySqlQueryResult result = MySql!.Table("wp_player_skins").Where(conditions).Select(); int weaponPaint = result.Get(0, "weapon_paint_id"); return weaponPaint; } catch (Exception) { return 0; } } }