Вход Регистрация
Файл: pages/progress/career.php
Строк: 187
<?php
// Physical module map v50.6: public URL stays clean while code lives in /pages.
if (!defined('GAME_ROOT')) define('GAME_ROOT'dirname(__DIR__2));
chdir(GAME_ROOT);
if (
PHP_SAPI !== 'cli') { $_SERVER['PHP_SELF']='/career.php'$_SERVER['SCRIPT_NAME']='/career.php'; }

/* Карьера: отдельный турнир с ботами и реальными игроками, старт с начала. by Метриум (Стэлп) */
include './system/common.php'; include './system/functions.php'; include './system/user.php';
if(!
$user){header('Location:/');exit;} $title='Карьера'$uid=(int)$user['id']; $day=date('Y-m-d');
db_query("CREATE TABLE IF NOT EXISTS `career_v37` (`user` INT NOT NULL,`chapter` INT NOT NULL DEFAULT 1,`score` INT NOT NULL DEFAULT 0,`fights` TINYINT NOT NULL DEFAULT 0,`fight_day` VARCHAR(10) NOT NULL DEFAULT '',`reward_step` TINYINT NOT NULL DEFAULT 0,PRIMARY KEY(`user`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci");
db_execute('INSERT IGNORE INTO `career_v37` (`user`,`chapter`,`score`,`fights`,`fight_day`,`reward_step`) VALUES (:u,1,0,0,:d,0)',['u'=>$uid,'d'=>$day]);
$st=db_fetch_one('SELECT * FROM `career_v37` WHERE `user`=:u',['u'=>$uid]) ?: ['chapter'=>1,'score'=>0,'fights'=>0,'fight_day'=>$day,'reward_step'=>0];
if((string)
$st['fight_day']!==$day){db_execute('UPDATE `career_v37` SET `fights`=0,`fight_day`=:d WHERE `user`=:u',['d'=>$day,'u'=>$uid]);$st['fights']=0;}
function 
career_v37_rank(int $score): int { return max(1,100-(int)floor($score/15)); }
if((
$_SERVER['REQUEST_METHOD']??'GET')==='POST'){
 
security_require_csrf(); $act=(string)($_POST['act']??'');
 if(
$act==='attack'){
  
$st=db_fetch_one('SELECT * FROM `career_v37` WHERE `user`=:u',['u'=>$uid]) ?: $st;
  if((int)
$st['fights']>=5$_SESSION['err']='Сегодня уже проведены все 5 боёв. Новые бои появятся завтра.';
  else { 
$rank=career_v37_rank((int)$st['score']); $difficulty=35+(100-$rank)*0.45$power=function_exists('game_user_power')?game_user_power($user):array_sum([(int)$user['str'],(int)$user['vit'],(int)$user['agi'],(int)$user['def']]); $chance=max(25,min(88,58+($power-$difficulty*1000)/8000)); $win=random_int(1,100)<=$chance$add=$win?random_int(18,34):random_int(5,12); db_execute('UPDATE `career_v37` SET `score`=`score`+:a,`fights`=`fights`+1 WHERE `user`=:u',['a'=>$add,'u'=>$uid]); $_SESSION[$win?'ok':'info']=($win?'Победа! ':'Соперник оказался сильнее. ').'Рейтинг +'.$add; }
  
header('Location:/career/');exit;
 }
 if(
$act==='claim'){
  
$st=db_fetch_one('SELECT * FROM `career_v37` WHERE `user`=:u FOR UPDATE',['u'=>$uid]) ?: $st$rank=career_v37_rank((int)$st['score']); $step=(int)$st['reward_step'];
  if(
$rank!==1$_SESSION['err']='Сначала займите 1 место.'; elseif($step>=3$_SESSION['err']='Все награды уже получены.'; else { try{db_pdo()->beginTransaction(); if($step===0){$v=20+2*(int)$st['chapter'];$v=game_economy_award_gold($uid,$v,'career',150);$m="$v золота";} elseif($step===1){$v=5000+500*(int)$st['chapter'];db_execute('UPDATE `users` SET `s`=`s`+:v WHERE `id`=:u',['v'=>$v,'u'=>$uid]);$m=n_f($v).' серебра';} else {$it=db_fetch_one('SELECT * FROM `shop` WHERE `quality` IN (2,3) ORDER BY RAND() LIMIT 1'); if($it){db_execute('INSERT INTO `inv` (`user`,`item`,`quality`,`bonus`,`_str`,`_vit`,`_agi`,`_def`,`place`,`equip`,`new`,`rune`,`smith`,`stars`) VALUES (:u,:i,:q,:b,:s,:v,:a,:d,0,0,1,0,0,0)',['u'=>$uid,'i'=>(int)$it['id'],'q'=>(int)$it['quality'],'b'=>(int)$it['bonus'],'s'=>(int)$it['_str'],'v'=>(int)$it['_vit'],'a'=>(int)$it['_agi'],'d'=>(int)$it['_def']]);$m='редкая вещь в сумку';}else{$v=game_economy_award_gold($uid,15,'career_fallback',150);$m=$v.' золота';}} db_execute('UPDATE `career_v37` SET `reward_step`=`reward_step`+1 WHERE `user`=:u',['u'=>$uid]);db_pdo()->commit();$_SESSION['ok']='Получено: '.$m;}catch(Throwable $e){if(db_pdo()->inTransaction())db_pdo()->rollBack();$_SESSION['err']='Не удалось выдать награду.';} }
  
header('Location:/career/');exit;
 }
 if(
$act==='next'){ $st=db_fetch_one('SELECT * FROM `career_v37` WHERE `user`=:u',['u'=>$uid])?:$st; if((int)$st['reward_step']<3)$_SESSION['err']='Сначала заберите все награды.'; else{db_execute('UPDATE `career_v37` SET `chapter`=`chapter`+1,`score`=0,`fights`=0,`reward_step`=0 WHERE `user`=:u',['u'=>$uid]);$_SESSION['ok']='Открыта новая глава.';} header('Location:/career/');exit; }
}
$st=db_fetch_one('SELECT * FROM `career_v37` WHERE `user`=:u',['u'=>$uid]) ?: $st$chapter=(int)$st['chapter'];$score=(int)$st['score'];$rank=career_v37_rank($score);$fights=(int)$st['fights'];$step=(int)$st['reward_step'];
include 
'./system/h.php';
$names=['Мартус','Олег Донбасс','Демон','Хскорушитель','Легионер','Страж','Берсерк','Ворон']; $rows=[];
for(
$pos=max(1,$rank-2);$pos<=min(100,$rank+2);$pos++){if($pos===$rank)continue;$rows[]=['pos'=>$pos,'name'=>$names[$pos%count($names)].' '.($pos+10),'r'=>$pos%2,'power'=>max(500,game_user_power($user)+(($rank-$pos)*900)+random_int(-400,400))];}
?>
<div class="career-v36"><div class="career-lead">Займи 1 место в турнире, чтобы открыть новую главу!</div><div class="career-frame"><div class="career-chapter">Глава <?=$chapter?></div><div class="career-stage"><div class="career-place">Ты на <b><?=$rank?></b> месте</div><?php if($rank>1): ?><form method="post" class="career-attack-form"><?=security_csrf_field()?><input type="hidden" name="act" value="attack"><button class="career-attack-v34" type="submit" <?=$fights>=5?'disabled':''?>>АТАКОВАТЬ <?=$fights?>/5</button></form><?php endif;?></div><table class="career-table"><tr><th>Место</th><th>Имя</th><th>Мощь</th></tr><?php foreach($rows as $r):?><tr><td><?=$r['pos']?></td><td><img src="/images/icon/race/<?=$r['r']?>.png" alt=""> <?=security_html($r['name'])?></td><td>⚔ <?=n_f($r['power'])?></td></tr><?php endforeach;?><tr class="career-me"><td><?=$rank?></td><td><img src="/images/icon/race/<?=max(0,(int)$user['r'])?>.png" alt=""> <?=security_html($user['login'])?></td><td>⚔ <?=n_f(game_user_power($user))?></td></tr></table></div>
<?php if($rank===1):?><div class="career-first">Ты занял 1 место<br><b>Награда:</b></div><div class="career-rewards"><div class="career-reward-row <?=$step>0?'is-claimed':'is-active'?>"><span class="career-reward-icon"><img src="/images/icon/gold.png"></span><span>Золото</span><?php if($step===0):?><form method="post"><?=security_csrf_field()?><input type="hidden" name="act" value="claim"><button>ЗАБРАТЬ НАГРАДУ</button></form><?php else:?><span class="career-check">✓</span><?php endif;?></div><?php if($step>=1):?><div class="career-reward-row <?=$step>1?'is-claimed':'is-active'?>"><span class="career-reward-icon"><img src="/images/icon/silver.png"></span><span>Серебро</span><?php if($step===1):?><form method="post"><?=security_csrf_field()?><input type="hidden" name="act" value="claim"><button>ЗАБРАТЬ НАГРАДУ</button></form><?php else:?><span class="career-check">✓</span><?php endif;?></div><?php endif;?><?php if($step>=2):?><div class="career-reward-row <?=$step>2?'is-claimed':'is-active'?>"><span class="career-reward-icon">★</span><span>Редкая вещь</span><?php if($step===2):?><form method="post"><?=security_csrf_field()?><input type="hidden" name="act" value="claim"><button>ЗАБРАТЬ НАГРАДУ</button></form><?php else:?><span class="career-check">✓</span><?php endif;?></div><?php endif;?></div><?php if($step>=3):?><form method="post" class="career-next-form"><?=security_csrf_field()?><input type="hidden" name="act" value="next"><button class="career-next">Следующая глава</button></form><?php endif;?><?php endif;?><ul class="career-rules"><li>Карьера начинается с 100 места.</li><li>В рейтинге есть реальные игроки и виртуальные соперники.</li><li>Чем ближе к первому месту, тем сильнее соперники.</li></ul></div>
<?php include './system/f.php'?>
Онлайн: 2
Реклама