From cc5da9eabb98d8a02b71018266a4cc89df807093 Mon Sep 17 00:00:00 2001 From: Bram Suurd <78373894+BramSuurdje@users.noreply.github.com> Date: Mon, 30 Jun 2025 00:44:08 +0200 Subject: [PATCH] Refactor UtilsClass in utils.php to enhance maintainability by introducing constants for knife defindexes and mappings, improving weapon category organization, and implementing caching for skin and weapon data. Add methods for knife validation and cache clearing to streamline functionality. --- website/class/utils.php | 201 ++++++++++++++++++++++++++++------------ 1 file changed, 142 insertions(+), 59 deletions(-) diff --git a/website/class/utils.php b/website/class/utils.php index 6454387c..a37ade47 100644 --- a/website/class/utils.php +++ b/website/class/utils.php @@ -1,95 +1,159 @@ 'weapon_bayonet', + 503 => 'weapon_knife_css', + 505 => 'weapon_knife_flip', + 506 => 'weapon_knife_gut', + 507 => 'weapon_knife_karambit', + 508 => 'weapon_knife_m9_bayonet', + 509 => 'weapon_knife_tactical', + 512 => 'weapon_knife_falchion', + 514 => 'weapon_knife_survival_bowie', + 515 => 'weapon_knife_butterfly', + 516 => 'weapon_knife_push', + 517 => 'weapon_knife_cord', + 518 => 'weapon_knife_canis', + 519 => 'weapon_knife_ursus', + 520 => 'weapon_knife_gypsy_jackknife', + 521 => 'weapon_knife_outdoor', + 522 => 'weapon_knife_stiletto', + 523 => 'weapon_knife_widowmaker', + 525 => 'weapon_knife_skeleton', + 526 => 'weapon_knife_css' + ]; + + // Weapon categories for better organization + private const WEAPON_CATEGORIES = [ + 'Rifles' => [7, 8, 10, 13, 16, 60, 39, 40, 38], + 'Pistols' => [1, 2, 3, 4, 30, 32, 36, 61, 63, 64], + 'SMGs' => [17, 19, 24, 26, 33, 34], + 'Shotguns' => [25, 27, 29, 35], + 'Snipers' => [9, 11, 38], + 'Machine Guns' => [14, 28], + 'Grenades' => [43, 44, 45, 46, 47, 48] + ]; + + private static $skinCache = null; + private static $weaponCache = null; + private static $knifeCache = null; + + public static function getKnifeDefindexes(): array + { + return self::KNIFE_DEFINDEXES; + } + + public static function getKnifeMapping(): array + { + return self::KNIFE_MAPPING; + } + + public static function getWeaponCategories(): array + { + return self::WEAPON_CATEGORIES; + } + public static function skinsFromJson(): array { + if (self::$skinCache !== null) { + return self::$skinCache; + } + $skins = []; - $json = json_decode(file_get_contents(__DIR__ . "/../data/".SKIN_LANGUAGE.".json"), true); + $jsonFile = __DIR__ . "/../data/" . SKIN_LANGUAGE . ".json"; + + if (!file_exists($jsonFile)) { + return []; + } + + $json = json_decode(file_get_contents($jsonFile), true); + if (!$json) { + return []; + } foreach ($json as $skin) { - $skins[(int) $skin['weapon_defindex']][(int) $skin['paint']] = [ + $defindex = (int) $skin['weapon_defindex']; + $paintId = (int) $skin['paint']; + + $skins[$defindex][$paintId] = [ 'weapon_name' => $skin['weapon_name'], 'paint_name' => $skin['paint_name'], 'image_url' => $skin['image'], ]; } + self::$skinCache = $skins; return $skins; } - public static function getWeaponsFromArray() + public static function getWeaponsFromArray(): array { - $weapons = []; - $temp = self::skinsFromJson(); - - foreach ($temp as $key => $value) { - if (key_exists($key, $weapons)) - continue; - - $weapons[$key] = [ - 'weapon_name' => $value[0]['weapon_name'], - 'paint_name' => $value[0]['paint_name'], - 'image_url' => $value[0]['image_url'], - ]; + if (self::$weaponCache !== null) { + return self::$weaponCache; } + $weapons = []; + $skins = self::skinsFromJson(); + + foreach ($skins as $defindex => $skinList) { + if (!isset($weapons[$defindex]) && isset($skinList[0])) { + $weapons[$defindex] = [ + 'weapon_name' => $skinList[0]['weapon_name'], + 'paint_name' => $skinList[0]['paint_name'], + 'image_url' => $skinList[0]['image_url'], + ]; + } + } + + self::$weaponCache = $weapons; return $weapons; } - public static function getKnifeTypes() + public static function getKnifeTypes(): array { - $knifes = []; - $temp = self::getWeaponsFromArray(); - - foreach ($temp as $key => $weapon) { - if ( - !in_array($key, [ - 500, - 503, - 505, - 506, - 507, - 508, - 509, - 512, - 514, - 515, - 516, - 517, - 518, - 519, - 520, - 521, - 522, - 523, - 525, - 526 - ]) - ) - continue; - - $knifes[$key] = [ - 'weapon_name' => $weapon['weapon_name'], - 'paint_name' => rtrim(explode("|", $weapon['paint_name'])[0]), - 'image_url' => $weapon['image_url'], - ]; - $knifes[0] = [ - 'weapon_name' => "weapon_knife", - 'paint_name' => "Default knife", - 'image_url' => "https://raw.githubusercontent.com/Nereziel/cs2-WeaponPaints/main/website/img/skins/weapon_knife.png", - ]; + if (self::$knifeCache !== null) { + return self::$knifeCache; } + $knifes = []; + $weapons = self::getWeaponsFromArray(); + + foreach (self::KNIFE_DEFINDEXES as $defindex) { + if (isset($weapons[$defindex])) { + $weapon = $weapons[$defindex]; + $knifes[$defindex] = [ + 'weapon_name' => $weapon['weapon_name'], + 'paint_name' => rtrim(explode("|", $weapon['paint_name'])[0]), + 'image_url' => $weapon['image_url'], + ]; + } + } + + // Add default knife + $knifes[0] = [ + 'weapon_name' => "weapon_knife", + 'paint_name' => "Default knife", + 'image_url' => "https://raw.githubusercontent.com/Nereziel/cs2-WeaponPaints/main/website/img/skins/weapon_knife.png", + ]; + ksort($knifes); + self::$knifeCache = $knifes; return $knifes; } - public static function getSelectedSkins(array $temp) + public static function getSelectedSkins(array $queryResult): array { $selected = []; - foreach ($temp as $weapon) { - $selected[$weapon['weapon_defindex']] = [ + foreach ($queryResult as $weapon) { + $selected[$weapon['weapon_defindex']] = [ 'weapon_paint_id' => $weapon['weapon_paint_id'], 'weapon_seed' => $weapon['weapon_seed'], 'weapon_wear' => $weapon['weapon_wear'], @@ -98,4 +162,23 @@ class UtilsClass return $selected; } + + public static function isKnifeDefindex(int $defindex): bool + { + return in_array($defindex, self::KNIFE_DEFINDEXES); + } + + public static function isKnifeWeapon(array $weapon): bool + { + return $weapon['weapon_name'] === 'weapon_knife' || + strpos($weapon['weapon_name'], 'knife') !== false || + strpos($weapon['paint_name'], '★') !== false; + } + + public static function clearCache(): void + { + self::$skinCache = null; + self::$weaponCache = null; + self::$knifeCache = null; + } }