Вход Регистрация
Файл: 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<=|| !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,'Не удалось приобрести герб.']; }
}
Онлайн: 4
Реклама