Файл: system/clan_features.php
Строк: 97
<?php
/* Клановые гербы и безопасные операции казны: by Метриум (Стэлп) */
declare(strict_types=1);
function clan_features_bootstrap(): void {
static $done=false; if($done) return; $done=true;
if((int)(function_exists('game_meta_get')?game_meta_get('clan_features_schema','0'):0)>=1) return;
db_query("CREATE TABLE IF NOT EXISTS `clan_emblems` (`clan` int(11) NOT NULL,`emblem_id` tinyint unsigned NOT NULL,`purchased_at` int(11) NOT NULL DEFAULT 0,`purchased_by` int(11) NOT NULL DEFAULT 0,PRIMARY KEY (`clan`,`emblem_id`),KEY `idx_emblem` (`emblem_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci");
if(function_exists('game_meta_set')) game_meta_set('clan_features_schema','1');
}
function clan_emblem_ids(): array { return range(1,17); }
function clan_emblem_owned(int $clanId): array {
clan_features_bootstrap();
$out=[]; $q=db_query('SELECT `emblem_id` FROM `clan_emblems` WHERE `clan`='.(int)$clanId.' ORDER BY `emblem_id`');
while($r=db_fetch_assoc($q)) $out[]=(int)$r['emblem_id'];
return $out;
}
function clan_emblem_ensure_current(int $clanId,int $emblemId,int $userId=0): void {
clan_features_bootstrap();
if($clanId<=0 || !in_array($emblemId,clan_emblem_ids(),true)) return;
db_execute('INSERT IGNORE INTO `clan_emblems` (`clan`,`emblem_id`,`purchased_at`,`purchased_by`) VALUES (?,?,?,?)',[$clanId,$emblemId,time(),$userId]);
}
function clan_emblem_buy(int $clanId,int $emblemId,int $userId): array {
clan_features_bootstrap();
if(!in_array($emblemId,clan_emblem_ids(),true)) return [false,'Некорректный герб.'];
if((int)(db_result(db_query('SELECT COUNT(*) FROM `clan_emblems` WHERE `clan`='.$clanId.' AND `emblem_id`='.$emblemId),0)?:0)>0) return [false,'Этот герб уже куплен.'];
$pdo=db_pdo();
try {
$pdo->beginTransaction();
$st=$pdo->prepare('UPDATE `clans` SET `g`=`g`-5000,`s`=`s`-500000 WHERE `id`=? AND `g`>=5000 AND `s`>=500000');
$st->execute([$clanId]);
if($st->rowCount()!==1){$pdo->rollBack();return [false,'В казне нужно 5 000 золота и 500 000 серебра.'];}
$st=$pdo->prepare('INSERT INTO `clan_emblems` (`clan`,`emblem_id`,`purchased_at`,`purchased_by`) VALUES (?,?,?,?)');
$st->execute([$clanId,$emblemId,time(),$userId]);
$pdo->commit(); return [true,'Герб приобретён и добавлен в коллекцию клана.'];
} catch(Throwable $e){ if($pdo->inTransaction())$pdo->rollBack(); if(function_exists('app_log_write'))app_log_write('CLAN-EMBLEM',$e->getMessage()); return [false,'Не удалось приобрести герб.']; }
}