Implement WeaponHandler class to streamline weapon and knife selection logic in index.php, enhancing maintainability and clarity. Refactor weapon update handling to utilize the new class, improving organization and reducing code duplication. Update CSS for improved button styles and layout consistency.

This commit is contained in:
Bram Suurd
2025-06-30 00:56:18 +02:00
parent cc5da9eabb
commit 0d7077063f
4 changed files with 930 additions and 946 deletions

View File

@@ -1,16 +1,15 @@
<?php
define('SKIN_LANGUAGE', 'skins_en');
define('DB_HOST', 'localhost');
define('DB_HOST', '10.0.0.24');
define('DB_PORT', '3306');
define('DB_NAME', '');
define('DB_USER', '');
define('DB_PASS', '');
define('DB_NAME', 'weaponskins_database');
define('DB_USER', 'root');
define('DB_PASS', 'DoOctwqOnohFSMvxLDGhGMaLGMJXjTSZBwROQeQcvFyfhkqEZHTEWMvQprOZLVco');
define('WEB_STYLE_DARK', true);
define('STEAM_API_KEY', '');
define('STEAM_DOMAIN_NAME', '');
define('STEAM_LOGOUT_PAGE', '');
define('STEAM_LOGIN_PAGE', '');
define('STEAM_API_KEY', 'D4EA0D36F688221050E06AF062B5EA48');
define('STEAM_DOMAIN_NAME', 'http://10.0.0.254');
define('STEAM_LOGOUT_PAGE', 'index.php');
define('STEAM_LOGIN_PAGE', 'index.php');

View File

@@ -0,0 +1,304 @@
<?php
require_once 'utils.php';
require_once 'database.php';
class WeaponHandler
{
private $db;
private $steamid;
public function __construct($steamid)
{
$this->db = new DataBase();
$this->steamid = $steamid;
}
public function handleWeaponUpdate($postData): bool
{
if (!isset($postData['forma'])) {
return false;
}
$formaParts = explode("-", $postData['forma']);
if ($formaParts[0] === "knife") {
return $this->handleKnifeSelection($formaParts[1]);
} else {
return $this->handleWeaponSkin($formaParts, $postData);
}
}
private function handleKnifeSelection($knifeId): bool
{
$knifes = UtilsClass::getKnifeTypes();
if (!isset($knifes[$knifeId])) {
return false;
}
$knifeData = $knifes[$knifeId];
// Clear existing knife data
$this->clearKnifeData();
// Set new knife selection (insert for both teams separately)
$this->db->query(
"INSERT INTO `wp_player_knife` (`steamid`, `knife`, `weapon_team`) VALUES (:steamid, :knife, 2)",
["steamid" => $this->steamid, "knife" => $knifeData['weapon_name']]
);
$this->db->query(
"INSERT INTO `wp_player_knife` (`steamid`, `knife`, `weapon_team`) VALUES (:steamid, :knife, 3)",
["steamid" => $this->steamid, "knife" => $knifeData['weapon_name']]
);
return true;
}
private function handleWeaponSkin($formaParts, $postData): bool
{
$defindex = $formaParts[0];
$paintId = $formaParts[1];
$skins = UtilsClass::skinsFromJson();
if (!isset($skins[$defindex][$paintId]) ||
!isset($postData['wear']) ||
!isset($postData['seed'])) {
return false;
}
$wear = $this->validateWear($postData['wear']);
$seed = $this->validateSeed($postData['seed']);
if ($wear === false || $seed === false) {
return false;
}
// Handle knife skins
if (UtilsClass::isKnifeDefindex($defindex)) {
$this->handleKnifeSkin($defindex, $paintId, $wear, $seed);
} else {
$this->handleRegularWeaponSkin($defindex, $paintId, $wear, $seed);
}
return true;
}
private function handleKnifeSkin($defindex, $paintId, $wear, $seed): void
{
$knifeMapping = UtilsClass::getKnifeMapping();
// Clear existing knife data
$this->clearKnifeData();
// Clear other knife skins
$knifeDefindexes = UtilsClass::getKnifeDefindexes();
foreach ($knifeDefindexes as $knifeDefindex) {
if ($knifeDefindex != $defindex) {
$this->db->query(
"DELETE FROM `wp_player_skins` WHERE `steamid` = :steamid AND `weapon_defindex` = :weapon_defindex",
["steamid" => $this->steamid, "weapon_defindex" => $knifeDefindex]
);
}
}
// Set knife type in wp_player_knife table
if (isset($knifeMapping[$defindex])) {
$this->db->query(
"INSERT INTO `wp_player_knife` (`steamid`, `knife`, `weapon_team`) VALUES (:steamid, :knife, 2)",
["steamid" => $this->steamid, "knife" => $knifeMapping[$defindex]]
);
$this->db->query(
"INSERT INTO `wp_player_knife` (`steamid`, `knife`, `weapon_team`) VALUES (:steamid, :knife, 3)",
["steamid" => $this->steamid, "knife" => $knifeMapping[$defindex]]
);
}
// Set knife skin
$this->upsertWeaponSkin($defindex, $paintId, $wear, $seed);
}
private function handleRegularWeaponSkin($defindex, $paintId, $wear, $seed): void
{
$this->upsertWeaponSkin($defindex, $paintId, $wear, $seed);
}
private function upsertWeaponSkin($defindex, $paintId, $wear, $seed): void
{
$selectedSkins = $this->getSelectedSkins();
if (array_key_exists($defindex, $selectedSkins)) {
// Update existing
$this->db->query(
"UPDATE wp_player_skins SET weapon_paint_id = :weapon_paint_id, weapon_wear = :weapon_wear, weapon_seed = :weapon_seed WHERE steamid = :steamid AND weapon_defindex = :weapon_defindex",
[
"weapon_paint_id" => $paintId,
"weapon_wear" => $wear,
"weapon_seed" => $seed,
"steamid" => $this->steamid,
"weapon_defindex" => $defindex
]
);
} else {
// Insert new for both teams
$this->db->query(
"INSERT INTO wp_player_skins (`steamid`, `weapon_defindex`, `weapon_paint_id`, `weapon_wear`, `weapon_seed`, `weapon_team`) VALUES (:steamid, :weapon_defindex, :weapon_paint_id, :weapon_wear, :weapon_seed, 2)",
[
"steamid" => $this->steamid,
"weapon_defindex" => $defindex,
"weapon_paint_id" => $paintId,
"weapon_wear" => $wear,
"weapon_seed" => $seed
]
);
$this->db->query(
"INSERT INTO wp_player_skins (`steamid`, `weapon_defindex`, `weapon_paint_id`, `weapon_wear`, `weapon_seed`, `weapon_team`) VALUES (:steamid, :weapon_defindex, :weapon_paint_id, :weapon_wear, :weapon_seed, 3)",
[
"steamid" => $this->steamid,
"weapon_defindex" => $defindex,
"weapon_paint_id" => $paintId,
"weapon_wear" => $wear,
"weapon_seed" => $seed
]
);
}
}
private function clearKnifeData(): void
{
$knifeDefindexes = UtilsClass::getKnifeDefindexes();
// Clear knife skins
foreach ($knifeDefindexes as $knifeDefindex) {
$this->db->query(
"DELETE FROM `wp_player_skins` WHERE `steamid` = :steamid AND `weapon_defindex` = :weapon_defindex",
["steamid" => $this->steamid, "weapon_defindex" => $knifeDefindex]
);
}
// Clear basic knife selection
$this->db->query(
"DELETE FROM `wp_player_knife` WHERE `steamid` = :steamid",
["steamid" => $this->steamid]
);
}
private function validateWear($wear)
{
$wear = floatval($wear);
return ($wear >= 0.00 && $wear <= 1.00) ? $wear : false;
}
private function validateSeed($seed)
{
$seed = intval($seed);
return ($seed >= 0) ? $seed : false;
}
public function getSelectedSkins(): array
{
$query = $this->db->select(
"SELECT `weapon_defindex`, MAX(`weapon_paint_id`) AS `weapon_paint_id`, MAX(`weapon_wear`) AS `weapon_wear`, MAX(`weapon_seed`) AS `weapon_seed`
FROM `wp_player_skins`
WHERE `steamid` = :steamid
GROUP BY `weapon_defindex`, `steamid`",
["steamid" => $this->steamid]
);
return UtilsClass::getSelectedSkins($query ?: []);
}
public function getSelectedKnife(): array
{
return $this->db->select(
"SELECT * FROM `wp_player_knife` WHERE `steamid` = :steamid LIMIT 1",
["steamid" => $this->steamid]
) ?: [];
}
public function getLoadoutData(): array
{
$weapons = UtilsClass::getWeaponsFromArray();
$knifes = UtilsClass::getKnifeTypes();
$selectedSkins = $this->getSelectedSkins();
$selectedKnife = $this->getSelectedKnife();
return [
'weapons' => $weapons,
'knifes' => $knifes,
'selectedSkins' => $selectedSkins,
'selectedKnife' => $selectedKnife,
'displayKnife' => $this->getDisplayKnife($selectedSkins, $selectedKnife, $knifes)
];
}
private function getDisplayKnife($selectedSkins, $selectedKnife, $knifes): array
{
$skins = UtilsClass::skinsFromJson();
// Check for knife skin first
foreach ($selectedSkins as $defindex => $selectedSkin) {
if (UtilsClass::isKnifeDefindex($defindex) && isset($skins[$defindex][$selectedSkin['weapon_paint_id']])) {
return [
'data' => $skins[$defindex][$selectedSkin['weapon_paint_id']],
'source' => 'skin'
];
}
}
// Check for basic knife selection
if (!empty($selectedKnife)) {
foreach ($knifes as $knife) {
if ($selectedKnife[0]['knife'] === $knife['weapon_name']) {
return [
'data' => $knife,
'source' => 'basic'
];
}
}
}
// Default knife
return [
'data' => $knifes[0] ?? null,
'source' => 'default'
];
}
public function getOrganizedWeapons(): array
{
$weapons = UtilsClass::getWeaponsFromArray();
$knifes = UtilsClass::getKnifeTypes();
$categories = UtilsClass::getWeaponCategories();
$organized = [
'Knives' => [],
'Gloves' => []
];
// Add weapon categories
foreach ($categories as $categoryName => $weaponIds) {
$organized[$categoryName] = [];
foreach ($weaponIds as $weaponId) {
if (isset($weapons[$weaponId])) {
$organized[$categoryName][$weaponId] = $weapons[$weaponId];
}
}
}
// Add knives (exclude default)
foreach ($knifes as $knifeId => $knife) {
if ($knifeId !== 0) {
$organized['Knives'][$knifeId] = $knife;
}
}
// Remove empty categories
return array_filter($organized, function($category) {
return !empty($category);
});
}
}