WIP: перед введенимем класса Fighter.php
This commit is contained in:
+898
-1898
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Battle;
|
||||
|
||||
class Fighter
|
||||
{
|
||||
|
||||
}
|
||||
@@ -24,6 +24,8 @@ class Finish
|
||||
private int $aBexp = 0; //Добавочный опыт в боях
|
||||
private Battle $battle;
|
||||
|
||||
private array $btlstatus = [];
|
||||
|
||||
public function __construct(Battle $battle)
|
||||
{
|
||||
$this->battle = $battle;
|
||||
@@ -35,7 +37,6 @@ class Finish
|
||||
$injuryName = [1 => 'легкую', 2 => 'среднюю', 3 => 'тяжелую', 4 => 'неизлечимую',];
|
||||
$dnr = 0; //???
|
||||
$chat = new Chat();
|
||||
mysql_query('LOCK TABLES users,stats,battle,battle_last,battle_end,chat WRITE');
|
||||
|
||||
$test = Db::getRow('select id, team_win, testfinish from battle where id = ? and team_win != -1', [$this->battle->info['id']]);
|
||||
if ($test['testfinish'] == -1) {
|
||||
@@ -259,7 +260,7 @@ class Finish
|
||||
);
|
||||
}
|
||||
unset($spik, $plik);
|
||||
//
|
||||
|
||||
$usrreal = '';
|
||||
$usr_real = mysql_fetch_array(
|
||||
mysql_query(
|
||||
@@ -270,13 +271,9 @@ class Finish
|
||||
$usr_real = $this->battle->users[$i];
|
||||
}
|
||||
if (isset($usr_real['id'])) {
|
||||
if ($usr_real['align'] > 0) {
|
||||
$usrreal .= '<img src=//img.new-combats.tech/i/align/align' . $usr_real['align'] . '.gif width=12 height=15 >';
|
||||
}
|
||||
if ($usr_real['clan'] > 0) {
|
||||
$usrreal .= '<img src=//img.new-combats.tech/i/clan/' . $usr_real['clan'] . '.gif width=24 height=15 >';
|
||||
}
|
||||
$usrreal .= '<strong>' . $usr_real['login'] . '</strong>[' . $usr_real['level'] . ']<a target=_blank href=/info/' . $usr_real['id'] . ' ><img src=//img.new-combats.tech/i/inf_capitalcity.gif alt=""></a>';
|
||||
$login = new User\Login($usr_real['align'], $usr_real['clan'], $usr_real['level'], $usr_real['login']);
|
||||
$usrreal .= $login->fullLogin;
|
||||
unset($login);
|
||||
}
|
||||
|
||||
$text = str_replace('{u1}', $usrreal, $text);
|
||||
@@ -357,14 +354,14 @@ class Finish
|
||||
$usrwin = '';
|
||||
while ($j < count($this->battle->users)) {
|
||||
if ($this->battle->users[$j]['no_ip'] != 'trupojor' && $this->battle->users[$j]['bot'] == 0 && $this->battle->stats[$j]['hpNow'] > 0) {
|
||||
$usrwin .= ', ';
|
||||
if ($this->battle->users[$j]['align'] > 0) {
|
||||
$usrwin .= '<img width=12 height=15 src=//img.new-combats.tech/i/align/align' . $this->battle->users[$j]['align'] . '.gif >';
|
||||
}
|
||||
if ($this->battle->users[$j]['clan'] > 0) {
|
||||
$usrwin .= '<img width=24 height=15 src=//img.new-combats.tech/i/clan/' . $this->battle->users[$j]['clan'] . '.gif >';
|
||||
}
|
||||
$usrwin .= '<strong>' . $this->battle->users[$j]['login'] . '</strong> [' . $this->battle->users[$j]['level'] . ']<a target=_blank href=info/' . $this->battle->users[$j]['id'] . ' ><img alt="" src=//img.new-combats.tech/i/inf_capitalcity.gif ></a>';
|
||||
$login = new User\Login(
|
||||
$this->battle->users[$j]['align'],
|
||||
$this->battle->users[$j]['clan'],
|
||||
$this->battle->users[$j]['level'],
|
||||
$this->battle->users[$j]['login']
|
||||
);
|
||||
$usrwin .= ', ' . $login->fullLogin;
|
||||
unset($login);
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
@@ -950,9 +947,11 @@ class Finish
|
||||
)
|
||||
);
|
||||
|
||||
$btlstatus = $this->typeBattle($prsusers[0]);
|
||||
|
||||
$this->btlstatus = Battle::getType($prsusers[0]);
|
||||
|
||||
if ($this->battle->info['smert'] == 1) {
|
||||
$btlstatus = [150, 150, 'Жесточайшее Сражение', 'Жесточайшее Сражение'];
|
||||
$this->btlstatus = [150, 150, 'Жесточайшее Сражение', 'Жесточайшее Сражение'];
|
||||
}
|
||||
//
|
||||
if ($this->battle->stats[$i]['clanpos'] > 0 && ($this->battle->stats[$i]['clanpos'] == 1 || $this->battle->stats[$i]['clanpos'] == 2 || $this->battle->stats[$i]['clanpos'] == 3)) {
|
||||
@@ -961,11 +960,11 @@ class Finish
|
||||
|
||||
unset($r1);
|
||||
//Статусная битва
|
||||
if ($btlstatus[0] > 0) {
|
||||
if ($this->btlstatus[0] > 0) {
|
||||
if ($this->battle->info['type'] == 99) {
|
||||
$this->battle->info['addExp'] += $btlstatus[1];
|
||||
$this->battle->info['addExp'] += $this->btlstatus[1];
|
||||
} else {
|
||||
$this->battle->info['addExp'] += $btlstatus[0];
|
||||
$this->battle->info['addExp'] += $this->btlstatus[0];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1126,11 +1125,11 @@ class Finish
|
||||
|
||||
unset($lime);
|
||||
|
||||
if ($btlstatus[0] > 0) {
|
||||
if ($this->btlstatus[0] > 0) {
|
||||
if ($this->battle->info['type'] == 99) {
|
||||
$prc .= ' (' . $btlstatus[3] . ')';
|
||||
$prc .= ' (' . $this->btlstatus[3] . ')';
|
||||
} else {
|
||||
$prc .= ' (' . $btlstatus[2] . ')';
|
||||
$prc .= ' (' . $this->btlstatus[2] . ')';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1504,13 +1503,17 @@ class Finish
|
||||
mysql_query('UPDATE `battle_users` SET `finish` = 1 WHERE `uid` = "' . $this->battle->users[$i]['id'] . '"');
|
||||
$this->saveLogs();
|
||||
if ($u->info['battle'] != 0 && !isset($u->info['battle_lsto'])) {
|
||||
echo '<script>document.getElementById(\'teams\').style.display=\'none\';var battleFinishData = "' . $u->info['battle_text'] . '";</script>';
|
||||
echo <<<HTML
|
||||
<script>
|
||||
document.getElementById('teams').style.display='none';
|
||||
var battleFinishData = {$u->info['battle_text']}
|
||||
</script>
|
||||
HTML;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
mysql_query('UPDATE `battle` SET `testfinish` = "0" WHERE `id` = "' . $this->battle->info['id'] . '" LIMIT 1');
|
||||
mysql_query('UNLOCK TABLES');
|
||||
|
||||
}
|
||||
|
||||
private function addItemToItemsLocal(int $itemId, int $uid, string $data = ''): void
|
||||
@@ -1597,23 +1600,6 @@ class Finish
|
||||
Db::sql('delete from battle_actions where btl = ?', [$this->battle->info['id']]);
|
||||
}
|
||||
|
||||
private function typeBattle(int $x): array
|
||||
{
|
||||
$r = [0, 0, 'Обычный поединок', 'Кровавый Поединок'];
|
||||
if ($x >= 50000 && $x < 100000) {
|
||||
$r = [25, 50, 'Великая Битва', 'Кровавая Битва'];
|
||||
} elseif ($x < 500000) {
|
||||
$r = [50, 75, 'Величайшая Битва', 'Кровавая Резня'];
|
||||
} elseif ($x < 1000000) {
|
||||
$r = [75, 100, 'Историческая Битва', 'Кровавая Сеча'];
|
||||
} elseif ($x < 2500000) {
|
||||
$r = [100, 125, 'Эпохальная Битва', 'Кровавое Побоище'];
|
||||
} elseif ($x >= 5000000) {
|
||||
$r = [150, 150, 'Судный День', 'Судный День'];
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
private function dieInDungeon(int $dnr, int $i, User $u, ChatMessage $cmsg, Chat $chat): void
|
||||
{
|
||||
if ($dnr != 1) {
|
||||
@@ -1913,4 +1899,9 @@ class Finish
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function getBtlstatus(): array
|
||||
{
|
||||
return $this->btlstatus;
|
||||
}
|
||||
}
|
||||
@@ -169,7 +169,6 @@ class Log
|
||||
'<вырезано цензурой> каратисты фиговы',
|
||||
];
|
||||
$randomcomment = $comments[array_rand($comments)];
|
||||
$text = "{tm1} <i>Комментатор: $randomcomment</i>";
|
||||
|
||||
self::add(
|
||||
[
|
||||
@@ -181,4 +180,497 @@ class Log
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public static function getAttackTurnText(int $weaponType, int $attackZone): array
|
||||
{
|
||||
$w = [
|
||||
0 => ['грудью', 'ребром руки', 'лбом', 'кулаком', 'ногой', 'левой ногой', 'правой ногой', 'коленом',],
|
||||
1 => ['ножом', 'тыльной стороной лезвия ножа', 'рукоятью ножа', 'лезвием ножа'],
|
||||
2 => ['сучковатой палкой', 'поленом', 'тяжелой дубиной', 'дубиной', 'рукоятью молота'],
|
||||
3 => ['секирой', 'топором', 'лезвием секиры', 'алебардой', 'тяжелым держаком', 'длинной секирой'],
|
||||
4 => ['ножнами', 'гардой', 'мечом', 'лезвием меча', 'рукоятью меча', 'тупым лезвием', 'острой стороной меча', 'огромным мечом',],
|
||||
5 => ['сучковатой палкой', 'посохом', 'тяжелой тростью', 'корявым посохом', 'основанием посоха'],
|
||||
22 => ['костылем'],
|
||||
100 => ['непонятной хреновиной'],
|
||||
];
|
||||
|
||||
$z = [
|
||||
1 => ['в нос', 'в глаз', 'в челюсть', 'по переносице', 'в кадык', 'по затылку', 'в правый глаз', 'в левый глаз', 'в скулу',],
|
||||
2 => ['в грудь', 'в корпус', 'в солнечное сплетение', 'в сердце', 'в область лопаток'],
|
||||
3 => ['в бок', 'по желудку', 'по левой руке', 'по правой руке'],
|
||||
4 => ['по <вырезано цензурой>', 'в пах', 'в промежность', 'по левой ягодице', 'по правой ягодице'],
|
||||
5 => ['по ногам', 'в область правой пятки', 'в область левой пятки', 'по коленной чашечке', 'по икрам'],
|
||||
100 => ['по непонятному месту'],
|
||||
];
|
||||
|
||||
if (!in_array($weaponType, [0, 1, 2, 3, 4, 5, 22])) {
|
||||
$weaponType = 100;
|
||||
}
|
||||
|
||||
if (!in_array($attackZone, [1, 2, 3, 4, 5])) {
|
||||
$attackZone = 100;
|
||||
}
|
||||
|
||||
return [
|
||||
$w[$weaponType][array_rand($w[$weaponType])],
|
||||
$z[$attackZone][array_rand($z[$attackZone])],
|
||||
];
|
||||
}
|
||||
|
||||
public static function addLogLine(int $type, int $gender, bool $count = false): string|int
|
||||
{
|
||||
$logtext = [
|
||||
[ // муж.
|
||||
[],
|
||||
[
|
||||
'вспомнил что-то важное',
|
||||
'высморкался',
|
||||
'задумался',
|
||||
'замешкался',
|
||||
'засмотрелся на <вырезано цензурой>',
|
||||
'кашлянул',
|
||||
'ковырялся в зубах',
|
||||
'обернулся',
|
||||
'осмотрелся',
|
||||
'почесался',
|
||||
'пошатнулся',
|
||||
'пришел в себя',
|
||||
'пытался сконцентрироваться',
|
||||
'пытался увернуться',
|
||||
'пытался что-то сказать',
|
||||
'расплылся в улыбке',
|
||||
'расстроился',
|
||||
'растерялся',
|
||||
'удивился',
|
||||
'чесал <вырезано цензурой>',
|
||||
'пытался отойти покурить',
|
||||
'чесал яйца',
|
||||
],
|
||||
[
|
||||
', и за это ',
|
||||
', а ',
|
||||
', но в это время ',
|
||||
', и тут ',
|
||||
', но вдруг неожиданно ',
|
||||
', и вдруг ',
|
||||
', но ',
|
||||
', и внезапно ',
|
||||
', но неожиданно ',
|
||||
', и в этот момент ',
|
||||
', и в ту же секунду ',
|
||||
', и в этот миг ',
|
||||
],
|
||||
[
|
||||
'обезумевший',
|
||||
'расстроенный',
|
||||
'неустрашимый',
|
||||
'продвинутый',
|
||||
'расстроенный',
|
||||
'страшный',
|
||||
'задумчивый',
|
||||
'небритый',
|
||||
'бесстрастный',
|
||||
'разъяренный',
|
||||
'смелый',
|
||||
'безумный',
|
||||
'восхитительный',
|
||||
'жестокий',
|
||||
'злобный',
|
||||
'мужественный',
|
||||
'непобедимый',
|
||||
'наглый',
|
||||
'хитрый',
|
||||
'храбрый',
|
||||
'отважный',
|
||||
'железный',
|
||||
'могучий',
|
||||
'сильнейший',
|
||||
'крепкий',
|
||||
'великий',
|
||||
'бесстрашный',
|
||||
],
|
||||
[
|
||||
'случайно ',
|
||||
'отчаянно ',
|
||||
'проснувшись ',
|
||||
'мимоходом ',
|
||||
'разбежавшись ',
|
||||
'сдуру ',
|
||||
'со скуки ',
|
||||
'не помня себя от испуга ',
|
||||
'улыбаясь ',
|
||||
'прослезившись ',
|
||||
'пошатнувшись ',
|
||||
'проснувшись ',
|
||||
'беспричинно ',
|
||||
'опрометчиво ',
|
||||
'разбежавшись ',
|
||||
'зевнув ',
|
||||
'сделав двойное сальто ',
|
||||
'не подумав ',
|
||||
'хихикая ',
|
||||
'ласково ',
|
||||
'с испугу ',
|
||||
],
|
||||
[
|
||||
'влепил ',
|
||||
'вломил ',
|
||||
'саданул ',
|
||||
],
|
||||
[
|
||||
'грубый',
|
||||
'наглый',
|
||||
'красивый',
|
||||
],
|
||||
[
|
||||
'неизвестный удар',
|
||||
'колющий удар',
|
||||
'рубящий удар',
|
||||
'дробящий удар',
|
||||
'режущий удар',
|
||||
'обжигающий удар',
|
||||
'удар электричеством',
|
||||
'обмораживающий удар',
|
||||
'удар магией земли',
|
||||
'удар светлой магией',
|
||||
'удар тёмной магией',
|
||||
'удар серой магией',
|
||||
'обычный удар',
|
||||
'удар',
|
||||
],
|
||||
[
|
||||
'не контролировал ситуацию',
|
||||
'обманулся',
|
||||
'старался провести удар',
|
||||
'думал о <вырезано цензурой>',
|
||||
'испугался',
|
||||
'потерял самоконтроль',
|
||||
'потерял момент',
|
||||
'был слишком самоуверен',
|
||||
'пытался провести удар',
|
||||
'поскользнулся',
|
||||
'не думал о бое',
|
||||
'не рассчитал свои силы',
|
||||
'промахнулся',
|
||||
'оступился',
|
||||
'думал не о том',
|
||||
],
|
||||
[
|
||||
', и потому ',
|
||||
' и ',
|
||||
', но ',
|
||||
', вследствие чего ',
|
||||
', потому ',
|
||||
],
|
||||
[
|
||||
'остановил',
|
||||
'поставил блок на',
|
||||
'блокировал',
|
||||
'отбил',
|
||||
],
|
||||
[
|
||||
'ушел вправо от удара',
|
||||
'ушел влево от удара',
|
||||
'увел удар',
|
||||
'уклонился от удара',
|
||||
'увернулся от удара',
|
||||
],
|
||||
[
|
||||
'приняв боевые 100 грамм',
|
||||
'сказав "БУ!"',
|
||||
'показав противнику кукиш',
|
||||
'в отчаянном рывке',
|
||||
'показав сразу два пальца',
|
||||
],
|
||||
[
|
||||
'о<вырезано цензурой>ный',
|
||||
'точнейший',
|
||||
],
|
||||
[
|
||||
'погиб!',
|
||||
'повержен!',
|
||||
'мертв!',
|
||||
'убит!',
|
||||
'проиграл бой!',
|
||||
],
|
||||
[
|
||||
'пропустил свой ход',
|
||||
'потратил свой ход на магию',
|
||||
'потратил свой ход на прием',
|
||||
],
|
||||
[
|
||||
'использовал',
|
||||
],
|
||||
[
|
||||
'{u1}, вспомнив слова своего сэнсея, из последних сил применил прием "{pr}".',
|
||||
'Кроличья лапка, подкова в перчатке и прием "{pr}" помогли {u1} продержаться ещё немного.',
|
||||
'{u1}, пораскинув мозгами по земле, сообразил, что его выручат или прием "{pr}" или вмешательство Мусорщика.',
|
||||
'{u1} выкрикнув: "А ещё я вот так могу!", применил прием "{pr}".',
|
||||
'{u1} понял, пропустив очередной удар в голову, что поможет ему только прием "{pr}".',
|
||||
'{u1} сам не поняв зачем, применил прием "{pr}".',
|
||||
'{u1} нетрезво оценив положение, решил, что его спасение это прием "{pr}".',
|
||||
],
|
||||
[
|
||||
'{u1}, вспомнив слова своего сэнсея, из последних сил применил прием "{pr}" на {u2}.',
|
||||
],
|
||||
[
|
||||
'{u1}, победив страх, решил поразить {u2} заклятьем "{pr}"',
|
||||
'{u1} наконец сфокусировал свое внимание на поединке и наколдовал "{pr}" на {u2}',
|
||||
'{u1} нарисовав вокруг себя несколько рун, призвал заклятье "{pr}" на {u2}',
|
||||
'{u1} догадавшись, что пришло время показать себя, произнес заклятье "{pr}" на {u2}',
|
||||
'{u1} с испугу произнес, первое пришедшее на ум, заклятье "{pr}" на {u2}',
|
||||
'{u1} впал в транс и начал бормотать заклятие "{pr}" на {u2}',
|
||||
'{u1} очнулся от медитации, и призвал заклятье "{pr}" на {u2}',
|
||||
],
|
||||
[
|
||||
'{u1} пытался наколдовать ужасающее заклятие "{pr}" на {u2}, но ничего не вышло',
|
||||
'{u1} не смог сфокусировать и наколдовать "{pr}" на {u2}, но ничего не вышло',
|
||||
'{u1} с испугу произнес ошибочное заклятие "{pr}" на {u2} и ничего не вышло',
|
||||
'{u1}, потеряв концентрацию, не смог наколдовать "{pr}" на {u2} и ничего не вышло',
|
||||
'{u1} <вырезано цензурой> от перенапряжения, вследствие чего не смог наколдовать "{pr}" на {u2}',
|
||||
'{u1} пытался превратить {u2} в табуретку при помощи заклинания "{pr}"... но ничего не вышло',
|
||||
],
|
||||
[
|
||||
'{u1}, победив страх, решил поразить всех и наколдовал "{pr}"',
|
||||
'{u1} наконец сфокусировал свое внимание на поединке и наколдовал "{pr}"',
|
||||
'{u1} нарисовав вокруг себя несколько рун, призвал заклятье "{pr}"',
|
||||
'{u1} догадавшись, что пришло время показать себя, произнес заклятье "{pr}"',
|
||||
'{u1} с испугу произнес, первое пришедшее на ум, заклятье "{pr}"',
|
||||
'{u1} впал в транс и начал бормотать заклятие "{pr}"',
|
||||
'{u1} очнулся от медитации, и призвал заклятье "{pr}"',
|
||||
],
|
||||
|
||||
],
|
||||
[ // жен.
|
||||
[],
|
||||
[
|
||||
'вспомнила что-то важное',
|
||||
'высморкалась',
|
||||
'задумалась',
|
||||
'замешкалась',
|
||||
'засмотрелась на <вырезано цензурой>',
|
||||
'кашлянула',
|
||||
'ковырялась в зубах',
|
||||
'обернулась',
|
||||
'осмотрелась',
|
||||
'почесалась',
|
||||
'пошатнулась',
|
||||
'пришла в себя',
|
||||
'пыталась сконцентрироваться',
|
||||
'пыталась увернуться',
|
||||
'пыталась что-то сказать',
|
||||
'расплылалась в улыбке',
|
||||
'расстроилась',
|
||||
'растерялась',
|
||||
'удивилась',
|
||||
'чесала <вырезано цензурой>',
|
||||
'пыталась отойти покурить',
|
||||
'поправляла прическу',
|
||||
],
|
||||
[
|
||||
', и за это ',
|
||||
', а ',
|
||||
', но в это время ',
|
||||
', и тут ',
|
||||
', но вдруг неожиданно ',
|
||||
', и вдруг ',
|
||||
', но ',
|
||||
', и внезапно ',
|
||||
', но неожиданно ',
|
||||
', и в этот момент ',
|
||||
', и в ту же секунду ',
|
||||
', и в этот миг ',
|
||||
],
|
||||
[
|
||||
'обезумевшая',
|
||||
'расстроенная',
|
||||
'неустрашимая',
|
||||
'продвинутая',
|
||||
'расстроенная',
|
||||
'страшная',
|
||||
'задумчивая',
|
||||
'взъерошенная',
|
||||
'бесстрастная',
|
||||
'разъяренная',
|
||||
'смелая',
|
||||
'безумная',
|
||||
'восхитительная',
|
||||
'жестокая',
|
||||
'злобная',
|
||||
'мужественная',
|
||||
'непобедимая',
|
||||
'наглая',
|
||||
'хитрая',
|
||||
'храбрая',
|
||||
'отважная',
|
||||
'железная',
|
||||
'могучая',
|
||||
'сильнейшая',
|
||||
'крепкая',
|
||||
'великая',
|
||||
'бесстрашная',
|
||||
],
|
||||
[
|
||||
'случайно ',
|
||||
'отчаянно ',
|
||||
'проснувшись ',
|
||||
'мимоходом ',
|
||||
'разбежавшись ',
|
||||
'сдуру ',
|
||||
'со скуки ',
|
||||
'не помня себя от испуга ',
|
||||
'улыбаясь ',
|
||||
'прослезившись ',
|
||||
'пошатнувшись ',
|
||||
'проснувшись ',
|
||||
'беспричинно ',
|
||||
'опрометчиво ',
|
||||
'разбежавшись ',
|
||||
'зевнув ',
|
||||
'сделав двойное сальто ',
|
||||
'не подумав ',
|
||||
'хихикая ',
|
||||
'ласково ',
|
||||
'с испугу ',
|
||||
],
|
||||
[
|
||||
'влепила ',
|
||||
'вломила ',
|
||||
'саданула ',
|
||||
],
|
||||
[
|
||||
'грубый',
|
||||
'наглый',
|
||||
'красивый',
|
||||
],
|
||||
[
|
||||
'тычок',
|
||||
'тычок',
|
||||
'рубящий удар',
|
||||
'разбивающий удар',
|
||||
'рассекающий удар',
|
||||
'обжигающий удар',
|
||||
'удар электричеством',
|
||||
'обмораживающий удар',
|
||||
'удар магией земли',
|
||||
'удар светлой магией',
|
||||
'удар тёмной магией',
|
||||
'удар серой магией',
|
||||
'неизсветный удар',
|
||||
'удар',
|
||||
],
|
||||
[
|
||||
'не контролировала ситуацию',
|
||||
'обманулась',
|
||||
'старалась провести удар',
|
||||
'думала о <вырезано цензурой>',
|
||||
'испугалась',
|
||||
'потеряла самоконтроль',
|
||||
'потеряла момент',
|
||||
'была слишком самоуверенна',
|
||||
'пыталась провести удар',
|
||||
'поскользнулась',
|
||||
'не думала о бое',
|
||||
'не рассчитала свои силы',
|
||||
'промахнулась',
|
||||
'оступилась',
|
||||
'думала не о том',
|
||||
],
|
||||
[
|
||||
', и потому ',
|
||||
' и ',
|
||||
', но ',
|
||||
', вследствие чего ',
|
||||
', потому ',
|
||||
],
|
||||
[
|
||||
'остановила',
|
||||
'поставила блок на',
|
||||
'блокировала',
|
||||
'отбила',
|
||||
],
|
||||
[
|
||||
'ушла вправо от удара',
|
||||
'ушла влево от удара',
|
||||
'увела удар',
|
||||
'уклонилась от удара',
|
||||
'увернулась от удара',
|
||||
],
|
||||
[
|
||||
'приняв боевые 100 грамм',
|
||||
'сказав "БУ!"',
|
||||
'показав противнику кукиш',
|
||||
'в отчаянном рывке',
|
||||
'показав сразу два пальца',
|
||||
],
|
||||
[
|
||||
'о<вырезано цензурой>ный',
|
||||
'точнейший',
|
||||
],
|
||||
[
|
||||
'погибла!',
|
||||
'повержена!',
|
||||
'мертва!',
|
||||
'убита!',
|
||||
'проиграла бой!',
|
||||
],
|
||||
[
|
||||
'пропустила свой ход',
|
||||
'потратила свой ход на магию',
|
||||
'потратила свой ход на прием',
|
||||
],
|
||||
[
|
||||
'использовала',
|
||||
],
|
||||
[
|
||||
'{u1}, вспомнив слова своего сэнсея, из последних сил применила прием "{pr}".',
|
||||
'Кроличья лапка, подкова в перчатке и прием "{pr}" помогли {u1} продержаться ещё немного.',
|
||||
'{u1}, пораскинув мозгами по земле, сообразила, что её выручат или прием "{pr}" или вмешательство Мусорщика.',
|
||||
'{u1} выкрикнув: "А ещё я вот так могу!", применила прием "{pr}".',
|
||||
'{u1} поняла, пропустив очередной удар в голову, что поможет ей только прием "{pr}".',
|
||||
'{u1} сама не поняв зачем, применила прием "{pr}".',
|
||||
'{u1} нетрезво оценив положение, решила, что её спасение это прием "{pr}".',
|
||||
],
|
||||
[
|
||||
'{u1}, вспомнив слова своего сэнсея, из последних сил применила прием "{pr}" на {u2}.',
|
||||
],
|
||||
[
|
||||
'{u1}, победив страх, решила поразить {u2} заклятьем "{pr}"',
|
||||
'{u1} наконец сфокусировала свое внимание на поединке и наколдовала "{pr}" на {u2}',
|
||||
'{u1} нарисовав вокруг себя несколько рун, призвала заклятье "{pr}" на {u2}',
|
||||
'{u1} догадавшись, что пришло время показать себя, произнесла заклятье "{pr}" на {u2}',
|
||||
'{u1} с испугу произнесла, первое пришедшее на ум, заклятье "{pr}" на {u2}',
|
||||
'{u1} впала в транс и начала бормотать заклятие "{pr}" на {u2}',
|
||||
'{u1} очнулась от медитации, и призвала заклятье "{pr}" на {u2}',
|
||||
],
|
||||
[
|
||||
'{u1} пыталась наколдовать ужасающее заклятие "{pr}" на {u2}, но ничего не вышло',
|
||||
'{u1} не смогла сфокусировать и наколдовать "{pr}" на {u2}, но ничего не вышло',
|
||||
'{u1} с испугу произнесла ошибочное заклятие "{pr}" на {u2} и ничего не вышло',
|
||||
'{u1}, потеряв концентрацию, не смогла наколдовать "{pr}" на {u2} и ничего не вышло',
|
||||
'{u1} <вырезано цензурой> от перенапряжения, вследствие чего не смогла наколдовать "{pr}" на {u2}',
|
||||
'{u1} пыталась превратить {u2} в табуретку при помощи заклинания "{pr}"... но ничего не вышло',
|
||||
],
|
||||
[
|
||||
'{u1}, победив страх, решила поразить всех и наколдовала "{pr}"',
|
||||
'{u1} наконец сфокусировала свое внимание на поединке и наколдовала "{pr}"',
|
||||
'{u1} нарисовав вокруг себя несколько рун, призвала заклятье "{pr}"',
|
||||
'{u1} догадавшись, что пришло время показать себя, произнесла заклятье "{pr}"',
|
||||
'{u1} с испугу произнесла, первое пришедшее на ум, заклятье "{pr}"',
|
||||
'{u1} впала в транс и начала бормотать заклятие "{pr}"',
|
||||
'{u1} очнулась от медитации, и призвала заклятье "{pr}"',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
if ($count) {
|
||||
return count($logtext[$gender][$type]);
|
||||
}
|
||||
|
||||
if (!in_array($gender, [0, 1]) || !in_array($type, range(1, 21))) {
|
||||
return 'произошло нечто непонятное';
|
||||
}
|
||||
|
||||
return $logtext[$gender][$type][array_rand($logtext[$gender][$type])];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
namespace Battle\Priem;
|
||||
|
||||
abstract class AbstractPriem implements PriemInterface
|
||||
{
|
||||
protected int $caster;
|
||||
protected string $name;
|
||||
protected string $icon;
|
||||
|
||||
protected int $power;
|
||||
|
||||
/**
|
||||
* На кого применяем приём. Например:
|
||||
* self, static_friend, static_enemy, random_friend, random_enemy, random_friend_group, random_enemy_group,
|
||||
* all_friend, all_enemy, all,...
|
||||
* @var int
|
||||
*/
|
||||
protected int $targetType;
|
||||
|
||||
/**
|
||||
* Массив id союзников
|
||||
* @var array
|
||||
*/
|
||||
protected array $friendTeam;
|
||||
|
||||
/** Массив id противников
|
||||
* @var array
|
||||
*/
|
||||
protected array $enemyTeam;
|
||||
|
||||
public function __construct(
|
||||
int $caster,
|
||||
array $friendTeam,
|
||||
array $enemyTeam,
|
||||
int $targetType,
|
||||
string $name,
|
||||
string $icon = '',
|
||||
) {
|
||||
$this->caster = $caster;
|
||||
$this->friendTeam = $friendTeam;
|
||||
$this->enemyTeam = $enemyTeam;
|
||||
$this->targetType = $targetType;
|
||||
$this->icon = $icon;
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
protected function getTarget(): array
|
||||
{
|
||||
$targets = [];
|
||||
$allExceptCaster = array_merge($this->friendTeam, $this->enemyTeam);
|
||||
switch ($this->targetType) {
|
||||
case self::TAGRET_SELF:
|
||||
$targets[] = $this->caster;
|
||||
break;
|
||||
case self::TARGET_RANDOM_ENEMY:
|
||||
shuffle($this->enemyTeam);
|
||||
$targets[] = end($this->enemyTeam);
|
||||
break;
|
||||
case self::TARGET_RANDOM_FRIEND:
|
||||
shuffle($this->friendTeam);
|
||||
$targets[] = end($this->friendTeam);
|
||||
break;
|
||||
case self::TARGET_RANDOM:
|
||||
shuffle($allExceptCaster);
|
||||
$targets[] = end($allExceptCaster);
|
||||
break;
|
||||
case self::TARGET_RANDOM_ENEMIES:
|
||||
for ($i = 1; $i <= count($this->enemyTeam); $i++) {
|
||||
if ($i > 1 && mt_rand(1,2) === 1) {
|
||||
continue;
|
||||
}
|
||||
shuffle($this->enemyTeam);
|
||||
$targets[] = array_shift($this->enemyTeam);
|
||||
}
|
||||
break;
|
||||
case self::TARGET_RANDOM_FRIENDS:
|
||||
for ($i = 1; $i <= count($this->friendTeam); $i++) {
|
||||
if ($i > 1 && mt_rand(1,2) === 1) {
|
||||
continue;
|
||||
}
|
||||
shuffle($this->friendTeam);
|
||||
$targets[] = array_shift($this->friendTeam);
|
||||
}
|
||||
break;
|
||||
case self::TARGET_RANDOMS:
|
||||
for ($i = 1; $i <= count($allExceptCaster); $i++) {
|
||||
if ($i > 1 && mt_rand(1,2) === 1) {
|
||||
continue;
|
||||
}
|
||||
shuffle($allExceptCaster);
|
||||
$targets[] = array_shift($allExceptCaster);
|
||||
}
|
||||
break;
|
||||
case self::TARGET_ALL_ENEMIES:
|
||||
$targets = $this->enemyTeam;
|
||||
break;
|
||||
case self::TARGET_ALL_FRIENDS:
|
||||
$targets = $this->friendTeam;
|
||||
break;
|
||||
case self::TARGET_ALL:
|
||||
$targets = $allExceptCaster;
|
||||
$targets[] = $this->caster;
|
||||
break;
|
||||
}
|
||||
return $targets;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает иконку приёма. В текущей реализации у каждого приёма должна быть иконка.
|
||||
* @return string
|
||||
*/
|
||||
abstract public function getIcon(): string;
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace Battle\Priem;
|
||||
|
||||
class Priem extends AbstractPriem
|
||||
{
|
||||
|
||||
/*
|
||||
|
||||
id, name, image,
|
||||
damage_type_value: static, +value,
|
||||
damage_time: now, next_turn, x_turns,
|
||||
target: self, static_friend, static_enemy, random_friend, random_enemy, random_friend_group, random_enemy_group, all_friend, all_enemy, all,
|
||||
damage_type: physical (колка, рубка, резка, дробка), magical (water, air, earth, fire,)
|
||||
|
||||
physical: {
|
||||
type: [static, +value,]
|
||||
time: [now, next_turn, x_turns,]
|
||||
target: [static_enemy,]
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
protected int $power;
|
||||
private array $targets;
|
||||
|
||||
/**
|
||||
* @param int $caster
|
||||
* @param array $friendTeam
|
||||
* @param array $enemyTeam
|
||||
* @param int $targetType
|
||||
* @param int $power
|
||||
* @param int $powerType static, +value,
|
||||
* @param string $name
|
||||
* @param int $activeTurns количество ходов которое будет применяться приём. 0 - выполнить в текущий ход.
|
||||
* @param string $icon
|
||||
*/
|
||||
public function __construct(
|
||||
int $caster,
|
||||
array $friendTeam,
|
||||
array $enemyTeam,
|
||||
int $targetType,
|
||||
int $power,
|
||||
int $powerType,
|
||||
string $name,
|
||||
int $activeTurns = 1,
|
||||
string $icon = '',
|
||||
) {
|
||||
parent::__construct($caster, $friendTeam, $enemyTeam, $targetType, $name, $icon);
|
||||
$this->power = $power;
|
||||
$this->targets = $this->getTarget();
|
||||
|
||||
}
|
||||
|
||||
public function getIcon(): string
|
||||
{
|
||||
return $this->icon;
|
||||
}
|
||||
|
||||
public function getTargetType(): int
|
||||
{
|
||||
return $this->targetType;
|
||||
}
|
||||
|
||||
public function getTarget(): array
|
||||
{
|
||||
return $this->targets;
|
||||
}
|
||||
|
||||
public function getPower(): int
|
||||
{
|
||||
return $this->power;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//$pr = new Priem(45,[1,2,3],[4,5,6],5,44,'Kaboom!', 'kaboom.gif');
|
||||
//$pr->
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Battle\Priem;
|
||||
|
||||
interface PriemInterface
|
||||
{
|
||||
public const DAMAGE = 1;
|
||||
public const HEAL = 2;
|
||||
|
||||
public const TAGRET_SELF = 1; //Приём на себя
|
||||
public const TARGET_CUSTOM = 2; //Приём на конкретного персонажа
|
||||
public const TARGET_RANDOM_ENEMY = 3; //Приём на случайного врага
|
||||
public const TARGET_RANDOM_FRIEND = 4; //Приём на случайного друга
|
||||
public const TARGET_RANDOM = 5; //Приём на случайного персонажа
|
||||
public const TARGET_RANDOM_ENEMIES = 6; //Приём на случайных врагов
|
||||
public const TARGET_RANDOM_FRIENDS = 7; //Приём на случайных друзей
|
||||
public const TARGET_RANDOMS = 8; //Приём на случайных персонажей
|
||||
public const TARGET_ALL_ENEMIES = 9; //Приём на всех врагов
|
||||
public const TARGET_ALL_FRIENDS = 10; //Приём на всех друзей
|
||||
public const TARGET_ALL = 11; //Приём на всех персонажей
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает тип цели к которым применяется приём.
|
||||
* @return int
|
||||
*/
|
||||
public function getTargetType(): int;
|
||||
|
||||
/**
|
||||
* Возвращает силу действия приёма. Параметр на который изменится та или иная характеристика. Урон для боевых,
|
||||
* количество восстановленого здоровья для лечения, количество процентов для процентных значений.
|
||||
* @return int
|
||||
*/
|
||||
public function getPower(): int;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Battle\Priem;
|
||||
|
||||
class UsePriem
|
||||
{
|
||||
|
||||
public function __construct(Priem $priem) {
|
||||
$damage = $priem->getPower();
|
||||
$targets = $priem->getTarget();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,580 @@
|
||||
<?php
|
||||
|
||||
namespace Battle;
|
||||
|
||||
use Battle;
|
||||
use Helper\Comparsion;
|
||||
use Helper\Conversion;
|
||||
|
||||
class Razmen
|
||||
{
|
||||
private array $attackerStats;
|
||||
private array $targetStats;
|
||||
private int $uid1;
|
||||
private int $uid2;
|
||||
|
||||
/**
|
||||
* @param Battle $battle
|
||||
* @param int $id
|
||||
* @param array $at
|
||||
*/
|
||||
public function __construct(private readonly Battle $battle, private readonly int $id, private array $at)
|
||||
{
|
||||
$uid1 = $this->battle->atacks[$this->id]['uid1'];
|
||||
$uid2 = $this->battle->atacks[$this->id]['uid2'];
|
||||
$stats1 = $this->battle->stats[$this->battle->uids[$uid1]];
|
||||
$stats2 = $this->battle->stats[$this->battle->uids[$uid2]];
|
||||
if ($stats1['yhod'] > 0) {
|
||||
$uid1 = $this->battle->yhod_user($uid2, $uid1, $stats1['yhod']);
|
||||
} elseif ($stats2['yhod'] > 0) {
|
||||
$uid2 = $this->battle->yhod_user($uid1, $uid2, $stats2['yhod']);
|
||||
}
|
||||
$this->uid1 = $uid1;
|
||||
$this->uid2 = $uid2;
|
||||
$this->attackerStats = $this->battle->stats[$this->battle->uids[$uid1]];
|
||||
$this->targetStats = $this->battle->stats[$this->battle->uids[$uid2]];
|
||||
|
||||
# Переменные - Моё почтение!
|
||||
# $this->stats[$this->uids[$this->yhod_user($this->atacks[$this->id]['uid2'], $this->atacks[$this->id]['uid1'], $this->stats[$this->uids[$this->atacks[$this->id]['uid1']]]['yhod'])]];
|
||||
# $this->battle->stats[$this->battle->uids[$this->battle->yhod_user($this->battle->atacks[$this->id]['uid2'], $this->battle->atacks[$this->id]['uid1'], $this->battle->stats[$this->battle->uids[$this->battle->atacks[$this->id]['uid1']]]['yhod'])]];
|
||||
|
||||
}
|
||||
|
||||
private function updateBattleStats(): void
|
||||
{
|
||||
$this->battle->stats[$this->battle->uids[$this->uid1]] = $this->attackerStats;
|
||||
$this->battle->stats[$this->battle->uids[$this->uid2]] = $this->targetStats;
|
||||
}
|
||||
|
||||
/**
|
||||
* Расчет парирования Цели (uid2) от Атакующего (uid1)
|
||||
* @param int $counterstrikecheck
|
||||
* @param bool $pat
|
||||
* @param int $loopstart
|
||||
* @return void
|
||||
*/
|
||||
public function parry(int $counterstrikecheck = 0, bool $pat = false, int $loopstart = 0): void
|
||||
{
|
||||
if ($pat) {
|
||||
$tempAt = $this->at;
|
||||
$this->at = $tempAt['p'];
|
||||
}
|
||||
|
||||
if ($loopstart > 0) {
|
||||
$loopstart--;
|
||||
}
|
||||
|
||||
|
||||
if (is_array($this->at[1]['atack'])) {
|
||||
for ($j = $loopstart; $j < count($this->at[1]['atack']) && $j < 8; $j++) {
|
||||
if (
|
||||
!empty($this->targetStats['no_pr1']) ||
|
||||
$this->at[1]['atack'][$j][2] != $counterstrikecheck ||
|
||||
$this->mfs(__FUNCTION__, [1 => $this->targetStats['m7'], 2 => $this->attackerStats['m7'],]) != 1 ||
|
||||
$this->battle->atacks[$this->id]['out2'] != 0
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
if (!empty($this->attackerStats['nopryh']) || $this->attackerStats['nopryh_act'] > 0) {
|
||||
continue;
|
||||
}
|
||||
// Парировал
|
||||
$this->attackerStats['nopryh'] = (int)floor($this->attackerStats['nopryh']);
|
||||
$this->at[1]['atack'][$j][1] = 6;
|
||||
$this->attackerStats['nopryh']--;
|
||||
$this->attackerStats['nopryh_act']++;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_array($this->at[2]['atack'])) {
|
||||
for ($j = $loopstart; $j < count($this->at[2]['atack']) && $j < 8; $j++) {
|
||||
if (
|
||||
!empty($this->attackerStats['no_pr1']) ||
|
||||
$this->at[2]['atack'][$j][2] != $counterstrikecheck ||
|
||||
$this->mfs(__FUNCTION__, [1 => $this->attackerStats['m7'], 2 => $this->targetStats['m7'],]) != 1 ||
|
||||
$this->battle->atacks[$this->id]['out1'] != 0
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
if (!empty($this->targetStats['nopryh']) || $this->targetStats['nopryh_act'] > 0) {
|
||||
continue;
|
||||
}
|
||||
// Парировал
|
||||
$this->targetStats['nopryh'] = (int)floor($this->targetStats['nopryh']);
|
||||
$this->at[2]['atack'][$j][1] = 6;
|
||||
$this->targetStats['nopryh']--;
|
||||
$this->targetStats['nopryh_act']++;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($tempAt)) {
|
||||
$tempAt['p'] = $this->at;
|
||||
$this->at = $tempAt;
|
||||
}
|
||||
|
||||
$this->updateBattleStats();
|
||||
}
|
||||
|
||||
/**
|
||||
* Расчет блока щитом Цели (uid2) от Атакующего (uid1)
|
||||
* @param int $counterstrikecheck
|
||||
* @param bool $pat
|
||||
* @return void
|
||||
*/
|
||||
public function blockByShield(int $counterstrikecheck = 0, bool $pat = false): void
|
||||
{
|
||||
if ($pat) {
|
||||
$tempAt = $this->at;
|
||||
$this->at = $tempAt['p'];
|
||||
}
|
||||
|
||||
//m8 блок щитом, m18 абсолютный блок щитом
|
||||
if ($this->targetStats['shield1'] > 0) {
|
||||
for ($j = 0; $j < count($this->at[1]['atack']) && $j < 8; $j++) {
|
||||
if (
|
||||
$this->at[1]['atack'][$j][2] != $counterstrikecheck ||
|
||||
$this->battle->atacks[$this->id]['out2'] != 0 ||
|
||||
$this->mfs(__FUNCTION__, $this->targetStats['m8'] / 2 + $this->targetStats['m18']) != 1
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
$this->at[1]['atack'][$j][1] = 7;
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->attackerStats['shield1'] > 0) {
|
||||
for ($j = 0; $j < count($this->at[2]['atack']) && $j < 8; $j++) {
|
||||
if (
|
||||
$this->at[2]['atack'][$j][2] != $counterstrikecheck ||
|
||||
$this->battle->atacks[$this->id]['out1'] != 0 ||
|
||||
$this->mfs(__FUNCTION__, $this->attackerStats['m8'] / 2 + $this->attackerStats['m18']) != 1
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
$this->at[2]['atack'][$j][1] = 7;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($tempAt)) {
|
||||
$tempAt['p'] = $this->at;
|
||||
$this->at = $tempAt;
|
||||
}
|
||||
|
||||
$this->updateBattleStats();
|
||||
}
|
||||
|
||||
/**
|
||||
* Расчет крита Атакующего (uid1) по Цели (uid2)
|
||||
* @param bool $pat
|
||||
* @param int $loopstart
|
||||
* @return void
|
||||
*/
|
||||
public function criticalDamage(bool $pat = false, int $loopstart = 0): void
|
||||
{
|
||||
if ($pat) {
|
||||
$tempAt = $this->at;
|
||||
$this->at = $tempAt['p'];
|
||||
}
|
||||
|
||||
if ($loopstart > 0) {
|
||||
$loopstart--;
|
||||
}
|
||||
|
||||
$checkhand = false;
|
||||
|
||||
if (is_array($this->at[1]['atack'])) {
|
||||
for ($j = $loopstart; $j < count($this->at[1]['atack']) && $j < 8; $j++) {
|
||||
[$data, $checkhand] = $this->getDataArrayByHand($checkhand, $this->attackerStats);
|
||||
|
||||
if ($this->mfs(__FUNCTION__, ['mf' => $this->attackerStats['m1'] + $data['sv_m1'], 'amf' => $this->attackerStats['m14'], 'smf' => $this->targetStats['m2']]) != 1) {
|
||||
continue;
|
||||
}
|
||||
$this->at[1]['atack'][$j][1] = match (true) {
|
||||
$this->at[1]['atack'][$j][1] == 3 => 4, //в блок
|
||||
!in_array($this->at[1]['atack'][$j][1], [2, 6, 7, 8]) => 5, //обычный крит
|
||||
default => 1 // а ты что такое?
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (is_array($this->at[2]['atack'])) {
|
||||
for ($j = $loopstart; $j < count($this->at[2]['atack']) && $j < 8; $j++) {
|
||||
[$data, $checkhand] = $this->getDataArrayByHand($checkhand, $this->targetStats);
|
||||
|
||||
if ($this->mfs(__FUNCTION__, ['mf' => $this->targetStats['m1'] + $data['sv_m1'], 'amf' => $this->targetStats['m14'], 'smf' => $this->attackerStats['m2']]) != 1) {
|
||||
continue;
|
||||
}
|
||||
$this->at[2]['atack'][$j][1] = match (true) {
|
||||
$this->at[2]['atack'][$j][1] == 3 => 4, //в блок
|
||||
!in_array($this->at[2]['atack'][$j][1], [2, 6, 7, 8]) => 5, //обычный крит
|
||||
default => 1 // а ты что такое?
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($tempAt)) {
|
||||
$tempAt['p'] = $this->at;
|
||||
$this->at = $tempAt;
|
||||
}
|
||||
|
||||
$this->updateBattleStats();
|
||||
}
|
||||
|
||||
/**
|
||||
* Расчет уворота Цели (uid2) от Атакующего (uid1)
|
||||
* @param int $counterstrikecheck
|
||||
* @param bool $pat
|
||||
* @param int $loopstart
|
||||
* @return void
|
||||
*/
|
||||
public function evasion(int $counterstrikecheck = 0, bool $pat = false, int $loopstart = 0): void
|
||||
{
|
||||
if ($pat) {
|
||||
$tempAt = $this->at;
|
||||
$this->at = $tempAt['p'];
|
||||
}
|
||||
|
||||
if ($loopstart > 0) {
|
||||
$loopstart--;
|
||||
}
|
||||
|
||||
$checkhand = false;
|
||||
|
||||
if (is_array($this->at[1]['atack'])) {
|
||||
for ($j = $loopstart; $j < count($this->at[1]['atack']) && $j < 8; $j++) {
|
||||
[$data, $checkhand] = $this->getDataArrayByHand($checkhand, $this->attackerStats);
|
||||
|
||||
if (
|
||||
$this->at[1]['atack'][$j][2] != $counterstrikecheck ||
|
||||
$this->battle->atacks[$this->id]['out2'] != 0 ||
|
||||
$this->mfs(
|
||||
__FUNCTION__,
|
||||
[
|
||||
'mf' => $this->targetStats['m4'],
|
||||
'amf' => $this->targetStats['m15'],
|
||||
'smf' => $this->attackerStats['m5'] + $data['sv_m5'],
|
||||
'asmf' => $this->attackerStats['m21'],
|
||||
]
|
||||
) != 1
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
$this->attackerStats['nopryh'] = (int)floor($this->attackerStats['nopryh']);
|
||||
if (!isset($this->attackerStats['nopryh']) || $this->attackerStats['nopryh'] < 1) {
|
||||
$this->at[1]['atack'][$j][1] = 2;
|
||||
} else {
|
||||
$this->attackerStats['nopryh']--;
|
||||
$this->attackerStats['nopryh_act']++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_array($this->at[2]['atack'])) {
|
||||
for ($j = $loopstart; $j < count($this->at[2]['atack']) && $j < 8; $j++) {
|
||||
[$data, $checkhand] = $this->getDataArrayByHand($checkhand, $this->targetStats);
|
||||
|
||||
if (
|
||||
$this->at[2]['atack'][$j][2] != $counterstrikecheck ||
|
||||
$this->battle->atacks[$this->id]['out1'] != 0 ||
|
||||
$this->mfs(
|
||||
__FUNCTION__,
|
||||
[
|
||||
'mf' => $this->attackerStats['m4'],
|
||||
'amf' => $this->attackerStats['m15'],
|
||||
'smf' => $this->targetStats['m5'] + $data['sv_m5'],
|
||||
'asmf' => $this->targetStats['m21'],
|
||||
]
|
||||
) != 1
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
$this->targetStats['nopryh'] = (int)floor($this->targetStats['nopryh']);
|
||||
if (!isset($this->targetStats['nopryh']) || $this->targetStats['nopryh'] < 1) {
|
||||
$this->at[2]['atack'][$j][1] = 2;
|
||||
} else {
|
||||
$this->targetStats['nopryh']--;
|
||||
$this->targetStats['nopryh_act']++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($tempAt)) {
|
||||
$tempAt['p'] = $this->at;
|
||||
$this->at = $tempAt;
|
||||
}
|
||||
|
||||
$this->updateBattleStats();
|
||||
}
|
||||
|
||||
/**
|
||||
* Расчет контрудара Цели (uid2) по Атакующему (uid1)
|
||||
* @param int $counterstrikecheck
|
||||
* @return void
|
||||
*/
|
||||
public function counterstrike(int $counterstrikecheck = 0): void //terrorists win!
|
||||
{
|
||||
if (is_array($this->at[1]['atack'])) {
|
||||
for ($j = 0; $j < count($this->at[1]['atack']) && $j < 8; $j++) {
|
||||
if (
|
||||
$this->at[1]['atack'][$j][1] != 2 ||
|
||||
$this->at[1]['atack'][$j][2] != $counterstrikecheck ||
|
||||
$this->mfs(__FUNCTION__, ['a' => $this->targetStats['m6'], 'b' => $this->attackerStats['m6']]) != 1
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
$this->at[1]['atack'][$j][1] = 8;
|
||||
$rand = mt_rand(1, 5);
|
||||
if ($this->battle->testRazmenblock1($this->id, $this->uid2, $this->uid1)) {
|
||||
$this->at[2]['atack'][] = [$rand, 3, 0, 1];
|
||||
} else {
|
||||
$this->at[2]['atack'][] = [$rand, 1, 0, 1]; // 3 , 0 , 1
|
||||
}
|
||||
|
||||
$this->counterstrikehit(count($this->at[2]['atack']));
|
||||
}
|
||||
}
|
||||
|
||||
if (is_array($this->at[2]['atack'])) {
|
||||
for ($j = 0; $j < count($this->at[2]['atack']) && $j < 8; $j++) {
|
||||
if (
|
||||
$this->at[2]['atack'][$j][1] != 2 ||
|
||||
$this->at[2]['atack'][$j][2] != $counterstrikecheck ||
|
||||
$this->mfs(__FUNCTION__, ['a' => $this->attackerStats['m6'], 'b' => $this->targetStats['m6']]) != 1
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
$this->at[2]['atack'][$j][1] = 8;
|
||||
$rand = mt_rand(1, 5);
|
||||
if ($this->battle->testRazmenblock1($this->id, $this->uid1, $this->uid2)) {
|
||||
$this->at[1]['atack'][] = [$rand, 3, 0, 1];
|
||||
} else {
|
||||
$this->at[1]['atack'][] = [$rand, 1, 0, 1]; // 3 , 0 , 1
|
||||
}
|
||||
|
||||
$this->counterstrikehit(count($this->at[1]['atack']));
|
||||
}
|
||||
}
|
||||
|
||||
$this->updateBattleStats();
|
||||
}
|
||||
|
||||
/**
|
||||
* Рассчёт урона.
|
||||
* @param bool $pat
|
||||
* @param int $loopstart
|
||||
* @return void
|
||||
*/
|
||||
public function damage(bool $pat = false, int $loopstart = 0): void
|
||||
{
|
||||
$yhod = [1 => 0, 0];
|
||||
if ($this->battle->stats[$this->battle->uids[$this->uid1]]['yhod'] > 0) {
|
||||
$yhod = [1 => 1, 0];
|
||||
} elseif ($this->battle->stats[$this->battle->uids[$this->uid2]]['yhod'] > 0) {
|
||||
$yhod = [1 => 0, 1];
|
||||
}
|
||||
|
||||
if ($pat) {
|
||||
$tempAt = $this->at;
|
||||
$this->at = $tempAt['p'];
|
||||
}
|
||||
|
||||
if ($loopstart > 0) {
|
||||
$loopstart--;
|
||||
}
|
||||
|
||||
$checkhand = false;
|
||||
|
||||
if (is_array($this->at[1]['atack'])) {
|
||||
for ($j = $loopstart; $j < count($this->at[1]['atack']) && $j < 8; $j++) {
|
||||
[$data, $checkhand, $wp, $witm] = $this->getDataArrayByHand($checkhand, $this->attackerStats);
|
||||
$this->at[1]['atack'][$j]['wt'] = $witm['type'];
|
||||
$this->at[1]['atack'][$j]['yhod'] = $yhod[1];
|
||||
|
||||
if (
|
||||
!isset($this->at[1]['atack'][$j]['yron']) &&
|
||||
in_array($this->at[1]['atack'][$j][1], [1, 4, 5])
|
||||
) {
|
||||
$type = 'yron';
|
||||
} else {
|
||||
$type = 'block';
|
||||
}
|
||||
|
||||
$this->at[1]['atack'][$j][$type] = $this->battle->yronGetrazmen($this->uid2, $this->uid1, $witm);
|
||||
if ($this->at[1]['atack'][$j][1] == 4) {
|
||||
$this->at[1]['atack'][$j][$type]['y_old'] = $this->at[1]['atack'][$j][$type]['y'];
|
||||
$this->at[1]['atack'][$j][$type]['y'] = (int)round($this->at[1]['atack'][$j][$type]['k'] / 2);
|
||||
} elseif ($this->at[1]['atack'][$j][1] == 5) {
|
||||
$this->at[1]['atack'][$j][$type]['y_old'] = $this->at[1]['atack'][$j][$type]['y'];
|
||||
$this->at[1]['atack'][$j][$type]['y'] = $this->at[1]['atack'][$j][$type]['k'];
|
||||
}
|
||||
$this->at[1]['atack'][$j][$type]['2h'] = $data['2h'];
|
||||
$this->at[1]['atack'][$j][$type]['w'] = $wp;
|
||||
if ($this->at[1]['atack'][$j][$type]['y'] > 0) {
|
||||
$this->at[1]['atack'][$j][$type]['r'] = '-' . $this->at[1]['atack'][$j][$type]['y'];
|
||||
} else {
|
||||
$this->at[1]['atack'][$j][$type]['r'] = '--';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_array($this->at[2]['atack'])) {
|
||||
for ($j = $loopstart; $j < count($this->at[2]['atack']) && $j < 8; $j++) {
|
||||
[$data, $checkhand, $wp, $witm] = $this->getDataArrayByHand($checkhand, $this->targetStats);
|
||||
$this->at[2]['atack'][$j]['wt'] = $witm['type'];
|
||||
$this->at[2]['atack'][$j]['yhod'] = $yhod[1];
|
||||
|
||||
if (
|
||||
!isset($this->at[2]['atack'][$j]['yron']) &&
|
||||
in_array($this->at[2]['atack'][$j][1], [1, 4, 5])
|
||||
) {
|
||||
$type = 'yron';
|
||||
} else {
|
||||
$type = 'block';
|
||||
}
|
||||
|
||||
$this->at[2]['atack'][$j][$type] = $this->battle->yronGetrazmen($this->uid1, $this->uid2, $witm);
|
||||
if ($this->at[2]['atack'][$j][1] == 4) {
|
||||
$this->at[2]['atack'][$j][$type]['y_old'] = $this->at[2]['atack'][$j][$type]['y'];
|
||||
$this->at[2]['atack'][$j][$type]['y'] = (int)round($this->at[2]['atack'][$j][$type]['k'] / 2);
|
||||
} elseif ($this->at[2]['atack'][$j][1] == 5) {
|
||||
$this->at[2]['atack'][$j][$type]['y_old'] = $this->at[2]['atack'][$j][$type]['y'];
|
||||
$this->at[2]['atack'][$j][$type]['y'] = $this->at[2]['atack'][$j][$type]['k'];
|
||||
}
|
||||
$this->at[2]['atack'][$j][$type]['2h'] = $data['2h'];
|
||||
$this->at[2]['atack'][$j][$type]['w'] = $wp;
|
||||
if ($this->at[2]['atack'][$j][$type]['y'] > 0) {
|
||||
$this->at[2]['atack'][$j][$type]['r'] = '-' . $this->at[2]['atack'][$j][$type]['y'];
|
||||
} else {
|
||||
$this->at[2]['atack'][$j][$type]['r'] = '--';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($tempAt)) {
|
||||
$tempAt['p'] = $this->at;
|
||||
$this->at = $tempAt;
|
||||
}
|
||||
$this->updateBattleStats();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает массив:
|
||||
*
|
||||
* 0 => data предмета в зависимости от руки в которой тот находится,
|
||||
*
|
||||
* 1 => флажок проверки руки,
|
||||
*
|
||||
* 2 => число слота руки(?!),
|
||||
*
|
||||
* 3 => массив параметров предмета для Battle::class->yronGetrazmen()
|
||||
* @param bool $check
|
||||
* @param array $stats
|
||||
* @return array{array,bool,int,array}
|
||||
*/
|
||||
private function getDataArrayByHand(bool $check, array $stats): array
|
||||
{
|
||||
if (!$check && isset($stats['wp3id'])) { //Левая рука
|
||||
$wp = 3;
|
||||
$check = true;
|
||||
} else { //Правая рука
|
||||
if (isset($stats['wp14id']) && $stats['items'][$stats['wp14id']]['type'] != 13) {
|
||||
$wp = 14;
|
||||
} else {
|
||||
$wp = 3;
|
||||
}
|
||||
$check = false;
|
||||
}
|
||||
$witm = $stats['items'][$stats["wp{$wp}id"]];
|
||||
return [Conversion::dataStringToArray($witm['data']), $check, $wp, $witm];
|
||||
}
|
||||
|
||||
|
||||
private function mfs(int|string $type, array|int $mf): int
|
||||
{
|
||||
if (is_array($mf)) {
|
||||
$mf = array_map(fn($a) => max($a, 0), $mf);
|
||||
}
|
||||
$rval = 0;
|
||||
if ($type == 'criticalDamage') {
|
||||
//Крит
|
||||
if ($mf['mf'] > $mf['smf']) {
|
||||
$rval = 100 - floor(((($mf['smf']) / ($mf['mf'] + 1)) * 100));
|
||||
}
|
||||
|
||||
$rval = Comparsion::minimax($rval, 0, 75);
|
||||
|
||||
if ($mf['amf'] > 0) {
|
||||
$mf['amf'] = min(100, $mf['amf']);
|
||||
|
||||
if (($mf['amf'] * 100) >= mt_rand(1, 10000)) {
|
||||
$rval = 100;
|
||||
}
|
||||
}
|
||||
} elseif ($type == 'evasion') {
|
||||
if ($mf['mf'] > $mf['smf']) {
|
||||
$rval = 100 - floor(((($mf['smf']) / ($mf['mf'] + 1)) * 100)); //2.5
|
||||
}
|
||||
|
||||
$rval = Comparsion::minimax($rval, 0, 75);
|
||||
|
||||
if ($mf['asmf'] > 0) {
|
||||
$mf['asmf'] = min(100, $mf['asmf']);
|
||||
|
||||
if ($mf['asmf'] >= mt_rand(1, 100)) {
|
||||
$rval = 0;
|
||||
}
|
||||
}
|
||||
if ($mf['amf'] >= 0) {
|
||||
$mf['amf'] = min(100, $mf['amf']);
|
||||
|
||||
if ($mf['amf'] >= mt_rand(1, 100)) {
|
||||
$rval = 100;
|
||||
}
|
||||
}
|
||||
} elseif ($type == 'parry') {
|
||||
$mf[1] = max($mf[1], 1);
|
||||
$mf[2] = max($mf[2], 1);
|
||||
$rval = $mf[1] - $mf[2] / 2;
|
||||
$rval = Comparsion::minimax($rval, 1, 75);
|
||||
|
||||
} elseif ($type == 4) {
|
||||
$mf = round($mf * 0.6);
|
||||
$mf = Comparsion::minimax($mf, 0, 100);
|
||||
$rval = min($mf, 100); //пробой брони
|
||||
} elseif ($type == 'blockByShield') {
|
||||
$mf = max($mf, 0);
|
||||
$rval = min($mf, 85); //блок щитом
|
||||
} elseif ($type == 'counterstrike') {
|
||||
//Контрудар
|
||||
if ($mf['a'] > 0) {
|
||||
if ($mf['b'] > 0) {
|
||||
$rval = round($mf['a'] - ($mf['b'] / 2));
|
||||
} else {
|
||||
$rval = $mf['a'];
|
||||
}
|
||||
}
|
||||
$rval = Comparsion::minimax($rval, 0, 75);
|
||||
}
|
||||
return Helper::getChanse($rval) ? 1 : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Повторный просчёт всего для успешного контрудара.
|
||||
* @param int $loopstart
|
||||
* @return void
|
||||
*/
|
||||
private function counterstrikehit(int $loopstart): void
|
||||
{
|
||||
$this->evasion(1, true, $loopstart);
|
||||
$this->parry(1, true, $loopstart);
|
||||
$this->blockByShield(1, true);
|
||||
$this->criticalDamage(true, $loopstart);
|
||||
$this->damage(true, $loopstart);
|
||||
}
|
||||
|
||||
public function getAt(): array
|
||||
{
|
||||
return $this->at;
|
||||
}
|
||||
}
|
||||
@@ -512,9 +512,6 @@ ORDER BY `1price`ASC , inGroupCount DESC'
|
||||
if ($pl['dn_delete'] > 0) {
|
||||
$is2 .= '<div style="color:brown;">Предмет будет удален при выходе из подземелья</div>';
|
||||
}
|
||||
if ($this->pokol > $pl['geni']) {
|
||||
$is2 .= '<div style="color:brown">Предмет устарел</div>';
|
||||
}
|
||||
if (isset($po['zazuby']) && $po['zazuby'] > 0) {
|
||||
$is2 .= '<div style="color:brown;">Предмет куплен за зубы</div>';
|
||||
}
|
||||
|
||||
@@ -75,13 +75,11 @@ class Config
|
||||
$c['nosanich'] = true; //Странички Саныча не выпадают - true , выпадают - false
|
||||
$c['zuby'] = false; //зубы
|
||||
$c['limitedexp'] = false; //лимит опыта
|
||||
$c['infinity5level'] = false; //вечные 5 уровни
|
||||
$c['expstop'] = 2999999; //9; //Опыт на котором останавливаемся 11 149999999
|
||||
$c['expstopu'] = 2999999; //Опыт на котором останавливаемся
|
||||
$c['noobgade'] = false; //нуб квест (пещера)
|
||||
$c['level_ransfer'] = 8; //С какого уровня разрешены передачи
|
||||
|
||||
$c['nolevel'] = false; //лимитирование уровней
|
||||
$c['noitembuy'] = false; //Не требует ресурсы для покупки
|
||||
$c['effz'] = 0; //Скольким секундам равен заряд
|
||||
$c['money_haot'] = true; //кр за хаоты
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Core;
|
||||
|
||||
class Debug
|
||||
{
|
||||
public static function x(): void
|
||||
{
|
||||
ini_set('xdebug.var_display_max_depth', 10);
|
||||
ini_set('xdebug.var_display_max_children', 256);
|
||||
ini_set('xdebug.var_display_max_data', 1024);
|
||||
}
|
||||
}
|
||||
@@ -383,10 +383,12 @@ class FightRequest
|
||||
|
||||
/**
|
||||
* Звуковой пинг в чат?
|
||||
* @param string $to
|
||||
* @param int $room
|
||||
* @return void
|
||||
* @todo убрать колхоз с условиями когда станет ясно как оно работает.
|
||||
*/
|
||||
private function sendSysChatSound(string $to = '', int $room = 0)
|
||||
private function sendSysChatSound(string $to = '', int $room = 0): void
|
||||
{
|
||||
$cmsg = new ChatMessage();
|
||||
if (empty($to)) {
|
||||
@@ -399,9 +401,9 @@ class FightRequest
|
||||
} else {
|
||||
$cmsg->setRoom($room);
|
||||
}
|
||||
$cmsg->setCity($this->u->info['city']);
|
||||
$cmsg->setType(11);
|
||||
$cmsg->setSound(117);
|
||||
$cmsg->setText('Ваш бой начался!');
|
||||
(new Chat())->sendMsg($cmsg);
|
||||
}
|
||||
|
||||
@@ -621,6 +623,7 @@ class FightRequest
|
||||
$nz['time_start'] = 600;
|
||||
}
|
||||
|
||||
|
||||
if (isset($_POST['mut_hidden'])) {
|
||||
$nz['invise'] = 1;
|
||||
}
|
||||
@@ -817,19 +820,17 @@ class FightRequest
|
||||
return isset($symbols[1]) ? $symbols[0] . '.' . $symbols[1] : $symbols[0] . '.0';
|
||||
}
|
||||
|
||||
public function getEndedBattlesList(string $slogin, int $dt)
|
||||
public function getEndedBattlesList(string $slogin, int $dt): void
|
||||
{
|
||||
$code = PassGen::intCode();
|
||||
$btl = '';
|
||||
$see = '';
|
||||
$usr = Db::getRow('select id, login, level, city from users where login = ? limit 1', [$slogin]);
|
||||
|
||||
if (isset($usr['id'])) {
|
||||
$tms = $dt;
|
||||
$tmf = $dt + 86400;
|
||||
$uid = Db::getValue('select id from users where login = ? limit 1', [$slogin]);
|
||||
|
||||
if ($uid) {
|
||||
$sp = Db::getRows(
|
||||
'select * from battle_last where time >= ? and time < ? and uid = ? order by id desc ',
|
||||
[$tms, $tmf, $usr['id']]
|
||||
[$dt, $dt + 86400, $uid]
|
||||
);
|
||||
$jk = 0;
|
||||
$btl_lst = [];
|
||||
@@ -840,11 +841,13 @@ class FightRequest
|
||||
$tms = [];
|
||||
$ts = [];
|
||||
$spi = Db::getRows('select * from battle_last where battle_id = ?', [$pl['battle_id']]);
|
||||
|
||||
foreach ($spi as $pli) {
|
||||
if (!isset($tms[$pli['team']])) {
|
||||
$ts[] = $pli['team'];
|
||||
}
|
||||
$tms[$pli['team']][count($tms[$pli['team']])] = $pli;
|
||||
|
||||
$tms[$pli['team']][] = $pli;
|
||||
}
|
||||
$k = 0;
|
||||
while ($k < count($ts)) {
|
||||
@@ -859,7 +862,7 @@ class FightRequest
|
||||
}
|
||||
$tm2 .= '<b>' . $tms[$g][$h]['login'] . '</b> [' . $tms[$g][$h]['lvl'] . ']
|
||||
<a href="info/' . $tms[$g][$h]['uid'] . '" target="_blank">
|
||||
<img src="' . Config::img() . '/i/inf_capitalcity.gif" alt=""></a>, ';
|
||||
<img src="' . Config::img() . '/i/inf.gif" alt=""></a>, ';
|
||||
}
|
||||
$h++;
|
||||
}
|
||||
@@ -875,20 +878,24 @@ class FightRequest
|
||||
$k++;
|
||||
}
|
||||
}
|
||||
if (!isset($btl_lst[$b['id']])) {
|
||||
$btl_lst[$b['id']] = true;
|
||||
if ($tm == '') {
|
||||
$tm = 'Данные поединка потеряны';
|
||||
}
|
||||
$jk++;
|
||||
$btl .= $jk . '. <span class=date>' . date(
|
||||
'd.m.y H:i', $pl['time']
|
||||
) . '</span> ' . $tm . ' <A HREF="logs.php?log=' . $pl['battle_id'] . '&rnd=' . $code . '" target=_blank>»»</A><br>';
|
||||
|
||||
if (isset($btl_lst[$b['id']])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$btl_lst[$b['id']] = true;
|
||||
if ($tm == '') {
|
||||
$tm = 'Данные поединка потеряны';
|
||||
}
|
||||
$jk++;
|
||||
$btl .= $jk . '. <span class=date>' . date('d.m.y H:i', $pl['time']) . '</span> ' .
|
||||
$tm . ' <a href="/logs.php?log=' . $pl['battle_id'] . '&rnd=' . $code . '" target=_blank>»»</a><br>';
|
||||
}
|
||||
}
|
||||
$see .= empty($btl) ? '<div style="font-weight: bold;">В этот день не было боев, или же, летописец опять потерял свитки...</div><hr><br>' : $btl;
|
||||
echo $see;
|
||||
|
||||
echo empty($btl) ?
|
||||
'<div style="font-weight: bold;">В этот день не было боев, или же, летописец опять потерял свитки...</div><hr><br>' :
|
||||
$btl;
|
||||
}
|
||||
|
||||
public function getCurrentBattlesList(): void
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
namespace Magic\Elemental;
|
||||
|
||||
use Battle;
|
||||
use DTO\BattleSpell;
|
||||
use Helper\Math;
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ class ActionModel
|
||||
$this->uid = $uid;
|
||||
}
|
||||
|
||||
public static function new(array $user, string $vals, string $vars, int $time = 0)
|
||||
public static function new(array $user, string $vals, string $vars, int $time = 0): void
|
||||
{
|
||||
if (!$time) {
|
||||
$time = time();
|
||||
@@ -60,7 +60,7 @@ class ActionModel
|
||||
);
|
||||
}
|
||||
|
||||
public function deleteByVals(string $vals)
|
||||
public function deleteByVals(string $vals): void
|
||||
{
|
||||
Db::sql('delete from actions where uid = ? and vals = ?', [$this->uid, $vals]);
|
||||
}
|
||||
@@ -83,4 +83,25 @@ class ActionModel
|
||||
|
||||
return !empty($arr) ? $arr : [];
|
||||
}*/
|
||||
|
||||
public function getDailyQuest(): array|false
|
||||
{
|
||||
return Db::getRow("select * from actions where uid = ? and vars = 'day_quest' limit 1", [$this->uid]);
|
||||
}
|
||||
|
||||
public function getFinishedDailyQuestTasks(int $timeout): array
|
||||
{
|
||||
$arr = [];
|
||||
$counter = Db::getRows(
|
||||
"select count(*) as c, vars
|
||||
from actions
|
||||
where vars in ('end_trup', 'end_xaot', 'psh0', 'trup_sun', 'izlom', 'win') and time > ? and uid = ?
|
||||
group by vars",
|
||||
[$timeout, $this->uid]
|
||||
);
|
||||
foreach ($counter as $c) {
|
||||
$arr[$c['vars']] = $c['c'];
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace Model;
|
||||
|
||||
use Core\Db;
|
||||
use stdClass;
|
||||
|
||||
readonly class BattleModel
|
||||
{
|
||||
public stdClass $battle;
|
||||
public array $battleArray;
|
||||
private array $all;
|
||||
public function __construct(int $id) {
|
||||
$this->all = Db::getRows('select * from battle');
|
||||
if (empty($id)) {
|
||||
$this->battle = new stdClass();
|
||||
$this->battleArray = [];
|
||||
} else {
|
||||
foreach ($this->all as $b) {
|
||||
if ($b['id'] != $id) {
|
||||
continue;
|
||||
}
|
||||
$this->battle = (object)$b;
|
||||
$this->battleArray = get_object_vars($this->battle);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static function countClanWars(int $clanid): array
|
||||
{
|
||||
$today = (new \DateTimeImmutable('now 00:00:00'))->getTimestamp();
|
||||
$sql = "select count(id) from battle where
|
||||
type = 250 and
|
||||
time_over > ? and
|
||||
(team_win = ? and clan1 = ?) or (team_win = ? and clan2 = ?)";
|
||||
$count1 = Db::getValue($sql, [$today, 1, $clanid, 2, $clanid]);
|
||||
$count2 = Db::getValue($sql, [$today, 2, $clanid, 1, $clanid]);
|
||||
return [
|
||||
$count1 ?? 0,
|
||||
$count2 ?? 0,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+61
-53
@@ -84,7 +84,7 @@ class Priems
|
||||
$mpNow = $this->zeromax($btl->stats[$btl->uids[$uid]]['mpNow'], $btl->stats[$btl->uids[$uid]]['mpAll']);
|
||||
if ($mpNow > 0) {
|
||||
Db::sql(
|
||||
'update stats set mpNow = ? where id = ?',
|
||||
'update stats set mpnow = ? where id = ?',
|
||||
[$btl->stats[$btl->uids[$uid]]['mpNow'], $uid]
|
||||
);
|
||||
}
|
||||
@@ -113,7 +113,7 @@ class Priems
|
||||
$u = $this->u; // Для присоедиянемых файлов.
|
||||
$return_main = true;
|
||||
$ue = Db::getRow(
|
||||
'select * from users left join stats on (users.id = stats.id) where users.id = ? and battle = ? and hpNow > 0',
|
||||
'select * from users left join stats on (users.id = stats.id) where users.id = ? and battle = ? and hpnow > 0',
|
||||
[$eff['uid'], $btl->info['id']]
|
||||
);
|
||||
|
||||
@@ -461,11 +461,11 @@ class Priems
|
||||
/**
|
||||
* Новая функция магического заклинания с приёма.
|
||||
* Работает с числовыми приёмами в папке [priem].
|
||||
* @param int $attackerId кто использует приём
|
||||
* @param int $defenderId на кого использует приём
|
||||
* @param float $damage базовый урон приёма
|
||||
* @param string $damageType тип урона (стихия?) приходит строкой, и конвертируется функцией.
|
||||
* @param bool $hasCritical флаг, что приём МОЖЕТ критовать
|
||||
* @param int $attackerId кто использует приём
|
||||
* @param int $defenderId на кого использует приём
|
||||
* @param float $damage базовый урон приёма
|
||||
* @param string $damageType тип урона (стихия?) приходит строкой, и конвертируется функцией.
|
||||
* @param bool $hasCritical флаг, что приём МОЖЕТ критовать
|
||||
* @return array [0|damage] int урон, [1|crit] bool был ли крит, [2|miss] bool был ли промах, [3|miss_type] int тип промаха (всегда = 2).
|
||||
* @author Insallah
|
||||
*/
|
||||
@@ -781,8 +781,7 @@ class Priems
|
||||
$krituet = true,
|
||||
$heal = 0,
|
||||
$namenew = null
|
||||
)
|
||||
{
|
||||
) {
|
||||
$trawm_off = false;
|
||||
global $btl;
|
||||
if ($namenew != null) {
|
||||
@@ -961,7 +960,8 @@ class Priems
|
||||
);
|
||||
|
||||
//заносим в лог боя
|
||||
$vLog = 'time1=' . time() . '||s1=' . $btl->users[$btl->uids[$usu]]['sex'] . '||t1=' . $btl->users[$btl->uids[$usu]]['team'] . '||login1=' . $btl->users[$btl->uids[$usu]]['login'] . '||s2=' . $btl->users[$btl->uids[$uen]]['sex'] . '||t2=' . $btl->users[$btl->uids[$uen]]['team'] . '||login2=' . $btl->users[$btl->uids[$uen]]['login'] . '';
|
||||
$vLog = 'time1=' . time(
|
||||
) . '||s1=' . $btl->users[$btl->uids[$usu]]['sex'] . '||t1=' . $btl->users[$btl->uids[$usu]]['team'] . '||login1=' . $btl->users[$btl->uids[$usu]]['login'] . '||s2=' . $btl->users[$btl->uids[$uen]]['sex'] . '||t2=' . $btl->users[$btl->uids[$uen]]['team'] . '||login2=' . $btl->users[$btl->uids[$uen]]['login'] . '';
|
||||
$mas1 = [
|
||||
'time' => time(),
|
||||
'battle' => $btl->info['id'],
|
||||
@@ -1392,18 +1392,18 @@ class Priems
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($btl->stats[$btl->uids[$this->u->info['id']]]['nousepriem']) && $btl->stats[$btl->uids[$this->u->info['id']]]['nousepriem'] > 0 && $pl['nosh'] == 0) {
|
||||
if ($btl->stats[$btl->uids[$this->u->info['id']]]['noshock_voda'] > 0 && substr(
|
||||
$pl['img'], 0,
|
||||
10
|
||||
) == 'wis_water_') {
|
||||
//вода
|
||||
} else {
|
||||
$notr++;
|
||||
}
|
||||
if (
|
||||
isset($btl->stats[$btl->uids[$this->u->info['id']]]['nousepriem']) &&
|
||||
$btl->stats[$btl->uids[$this->u->info['id']]]['nousepriem'] > 0 &&
|
||||
$pl['nosh'] == 0 &&
|
||||
($btl->stats[$btl->uids[$this->u->info['id']]]['noshock_voda'] <= 0 || !str_starts_with($pl['img'], 'wis_water_'))
|
||||
) {
|
||||
$notr++;
|
||||
}
|
||||
|
||||
if ($pl['id'] == $btl->stats[$btl->uids[$this->u->info['id']]]['notuse_last_pr']) {
|
||||
|
||||
if (isset($btl->stats[$btl->uids[$this->u->info['id']]]['notuse_last_pr']) &&
|
||||
$pl['id'] == $btl->stats[$btl->uids[$this->u->info['id']]]['notuse_last_pr']) {
|
||||
$notr++;
|
||||
}
|
||||
|
||||
@@ -1423,7 +1423,7 @@ class Priems
|
||||
|
||||
if ($pl['xuse'] > 0) {
|
||||
$xu = $this->u->testAction(
|
||||
'`vars` = "use_priem_' . $btl->info['id'] . '_' . $this->u->info['id'] . '" AND `vals` = "' . $pl['id'] . '" LIMIT ' . $pl['xuse'] . '',
|
||||
'`vars` = "use_priem_' . $btl->info['id'] . '_' . $this->u->info['id'] . '" AND `vals` = "' . $pl['id'] . '" LIMIT ' . $pl['xuse'],
|
||||
2
|
||||
);
|
||||
if ($xu[0] >= $pl['xuse']) {
|
||||
@@ -1574,13 +1574,13 @@ class Priems
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $uid на кого кастуем
|
||||
* @param int $pr id приема
|
||||
* @param int $uid на кого кастуем
|
||||
* @param int $pr id приема
|
||||
* @param int|string $data дата, если -1, то добавляем дату3
|
||||
* @param int $d2
|
||||
* @param int $d2
|
||||
* @param $tm
|
||||
* @param int $h ход
|
||||
* @param int $uu id юзера который использовал
|
||||
* @param int $h ход
|
||||
* @param int $uu id юзера который использовал
|
||||
* @param $max
|
||||
* @param $bj
|
||||
* @param $tp
|
||||
@@ -1609,8 +1609,7 @@ class Priems
|
||||
$noupdatebtl = 0,
|
||||
$noplus = 0,
|
||||
$pname = null
|
||||
)
|
||||
{
|
||||
) {
|
||||
global $btl;
|
||||
//$pl = mysql_fetch_assoc(mysql_query('SELECT * FROM `priems` WHERE `id` = ' . (int)$pr));
|
||||
$pl = Db::getRow('select * from priems where id = ?', [$pr]);
|
||||
@@ -1664,7 +1663,7 @@ class Priems
|
||||
unset($num);
|
||||
}
|
||||
if (!isset($num['id'])) {
|
||||
$q = 'insert into eff_users (tr_life_user, bj, user_use, hod, v2, img2, id_eff, uid, name, data, overType, timeUse, v1) values (?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
$q = 'insert into eff_users (tr_life_user, bj, user_use, hod, v2, img2, id_eff, uid, name, data, overtype, timeuse, v1) values (?,?,?,?,?,?,?,?,?,?,?,?,?)';
|
||||
$image = !empty($pl['img']) ? $pl['img'] : $pl['id'];
|
||||
$name = !empty($pname) ? $pname : $pl['name'];
|
||||
$image .= '.gif';
|
||||
@@ -1728,8 +1727,8 @@ class Priems
|
||||
|
||||
/** Получает строку data c шаблонной записью типа add_m11=2*{lvl1} и конвертирует в реальную строку.
|
||||
* <br>Шаблон: <br>lvl1 = $uid[level] <br>ts5 = $uid[s5] <br>mpAll = $uid[mpAll]
|
||||
* @param string $pl строка в формате data
|
||||
* @param int $uid пользователь, параметры которого используются для подставки в шаблон.
|
||||
* @param string $pl строка в формате data
|
||||
* @param int $uid пользователь, параметры которого используются для подставки в шаблон.
|
||||
* @return string строка в формате data с развёрнутыми шаблонами.
|
||||
*/
|
||||
public function redate($pl, $uid)
|
||||
@@ -1740,13 +1739,13 @@ class Priems
|
||||
$e = explode('|', $pl);
|
||||
while ($i < count($e)) {
|
||||
$f = explode('=', $e[$i]);
|
||||
// $f[1] = $this->getdr(
|
||||
// $f[1], [0 => 'lvl1', 1 => 'ts5', 2 => 'mpAll'], [
|
||||
// 0 => $btl->users[$btl->uids[$uid]]['level'],
|
||||
// 1 => $btl->stats[$btl->uids[$uid]]['s5'],
|
||||
// 2 => $btl->stats[$btl->uids[$uid]]['mpAll'],
|
||||
// ]
|
||||
// );
|
||||
// $f[1] = $this->getdr(
|
||||
// $f[1], [0 => 'lvl1', 1 => 'ts5', 2 => 'mpAll'], [
|
||||
// 0 => $btl->users[$btl->uids[$uid]]['level'],
|
||||
// 1 => $btl->stats[$btl->uids[$uid]]['s5'],
|
||||
// 2 => $btl->stats[$btl->uids[$uid]]['mpAll'],
|
||||
// ]
|
||||
// );
|
||||
$f[1] = $this->getDynamicInfo($f[1]);
|
||||
if ($f[0] != '' && $f[1] != '') {
|
||||
$e[$i] = implode('=', $f);
|
||||
@@ -1977,7 +1976,8 @@ class Priems
|
||||
} else {
|
||||
//бьем противника с пропуском хода
|
||||
mysql_query(
|
||||
'INSERT INTO `battle_act` (`battle`,`uid1`,`uid2`,`time`,`out1`,`type`,`tpo1`) VALUES ("' . $btl->info['id'] . '","' . $this->u->info['id'] . '","' . $this->u->info['enemy'] . '","' . time() . '","1","1","2")'
|
||||
'INSERT INTO `battle_act` (`battle`,`uid1`,`uid2`,`time`,`out1`,`type`,`tpo1`) VALUES ("' . $btl->info['id'] . '","' . $this->u->info['id'] . '","' . $this->u->info['enemy'] . '","' . time(
|
||||
) . '","1","1","2")'
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -2081,9 +2081,11 @@ class Priems
|
||||
);
|
||||
if ($upd) {
|
||||
TrainingManager::getInstance()
|
||||
->addPoint('my_user_fourth_quest', function (TrainingManager $manager) {
|
||||
$manager->store();
|
||||
});
|
||||
->addPoint(
|
||||
'my_user_fourth_quest', function (TrainingManager $manager) {
|
||||
$manager->store();
|
||||
}
|
||||
);
|
||||
$this->u->info['priems'] = $p;
|
||||
}
|
||||
} else {
|
||||
@@ -2097,12 +2099,16 @@ class Priems
|
||||
public function getTechniquesInfo(?int $id = null): array
|
||||
{
|
||||
if (isset($id)) {
|
||||
return Db::getRow('SELECT * FROM techniques_categories LEFT JOIN priems ON techniques_categories.technique_id = priems.id
|
||||
WHERE priems.level <= ? AND priems.activ > 0 AND priems.id = ? ORDER BY priems.img,priems.level', [User::start()->info['level'], $id]);
|
||||
return Db::getRow(
|
||||
'select * from techniques_categories left join priems on techniques_categories.technique_id = priems.id
|
||||
where priems.level <= ? and priems.activ > 0 and priems.id = ? order by priems.img,priems.level', [User::start()->info['level'], $id]
|
||||
);
|
||||
}
|
||||
|
||||
return Db::getRows('SELECT * FROM techniques_categories LEFT JOIN priems ON techniques_categories.technique_id = priems.id
|
||||
WHERE priems.level <= ? AND priems.activ > 0 ORDER BY priems.img,priems.level', [User::start()->info['level']]);
|
||||
return Db::getRows(
|
||||
'select * from techniques_categories left join priems on techniques_categories.technique_id = priems.id
|
||||
where priems.level <= ? and priems.activ > 0 order by priems.img,priems.level', [User::start()->info['level']]
|
||||
);
|
||||
}
|
||||
|
||||
public function seeMy($t)
|
||||
@@ -2294,7 +2300,9 @@ class Priems
|
||||
echo
|
||||
<<< HTML
|
||||
<a href="javascript:void(0)" onclick="location.href='main.php?skills=1&rz=4&use_priem=$priem[id]';">
|
||||
<img class="pwq$priem[category_id] pwqall" onMouseOver="top.popup(this, '(#$priem[id]) <b>$priem[name]</b><Br>{$this->priemInfo($priem, 1)[0]}');" onMouseOut="top.hic();" onMouseDown="top.hic();" style="display:none;margin-top:2px; $cl margin-left:1px;" src="//img.new-combats.tech/i/eff/$priem[img].gif" width="40" height="25" />
|
||||
<img class="pwq$priem[category_id] pwqall" onMouseOver="top.popup(this, '(#$priem[id]) <b>$priem[name]</b><Br>{$this->priemInfo(
|
||||
$priem, 1
|
||||
)[0]}');" onMouseOut="top.hic();" onMouseDown="top.hic();" style="display:none;margin-top:2px; $cl margin-left:1px;" src="//img.new-combats.tech/i/eff/$priem[img].gif" width="40" height="25" />
|
||||
</a>
|
||||
HTML;
|
||||
}
|
||||
@@ -2358,7 +2366,7 @@ class Priems
|
||||
|
||||
$btl->stats[$btl->uids[$u1]]['hpNow'] = $pvr['hpNow'];
|
||||
|
||||
Db::sql('update stats set hpNow = ? where id = ?', [$btl->stats[$btl->uids[$u1]]['hpNow'], $u1]);
|
||||
Db::sql('update stats set hpnow = ? where id = ?', [$btl->stats[$btl->uids[$u1]]['hpNow'], $u1]);
|
||||
|
||||
$color = $this->logColor[self::FIRE];
|
||||
$prv['text'] = '{u2} утратил здоровье от "{pr}" ';
|
||||
@@ -2444,7 +2452,7 @@ class Priems
|
||||
|
||||
$btl->stats[$btl->uids[$this->ue['id']]]['hpNow'] = $this->ue['hpNow'];
|
||||
|
||||
Db::sql('update stats set hpNow = ? where id = ?', [$this->ue['hpNow'], $this->ue['id']]);
|
||||
Db::sql('update stats set hpnow = ? where id = ?', [$this->ue['hpNow'], $this->ue['id']]);
|
||||
|
||||
if ($isMiss) {
|
||||
$color = $this->logColor['miss'];
|
||||
@@ -2623,7 +2631,7 @@ class Priems
|
||||
|
||||
$uu = $pl['id'] === 260 ? '' : $this->u->info['id'];
|
||||
Db::sql(
|
||||
'insert into eff_users (hod, v1, v2, img2, id_eff, uid, name, data, overType, timeUse, user_use) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
||||
'insert into eff_users (hod, v1, v2, img2, id_eff, uid, name, data, overtype, timeuse, user_use) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
||||
[$hd1, 'priem', $pl['id'], $pl['img'] . '.gif', 22, $uid, $pl['name'], $data, 0, $tm, $uu]
|
||||
);
|
||||
|
||||
@@ -2724,7 +2732,7 @@ class Priems
|
||||
* Конечный damage после множителей делится на 5 и пишется в БД (atgm=).
|
||||
* Файлы: 33, 56, 57, 58, 59, 60.
|
||||
* @param $id
|
||||
* @param array $pl массив значений из БД priems.
|
||||
* @param array $pl массив значений из БД priems.
|
||||
* @param Battle $btl
|
||||
* @return void
|
||||
*/
|
||||
@@ -2756,7 +2764,7 @@ class Priems
|
||||
* Если есть одинаковые статы из них выбирается случайный.
|
||||
* Файл:267, приём 268. Понимай как хочешь.
|
||||
* @param $id
|
||||
* @param array $pl
|
||||
* @param array $pl
|
||||
* @param Battle $btl
|
||||
* @return void
|
||||
*/
|
||||
@@ -2765,7 +2773,7 @@ class Priems
|
||||
$q = 'select stats as data from stats where id = ?
|
||||
union all select stats as data from test_bot where id = ?
|
||||
union all select data from eff_users where `delete` = 0 and uid = ?
|
||||
union all select data from items_users where inOdet > 0 and `delete` = 0 and uid = ?';
|
||||
union all select data from items_users where inodet > 0 and `delete` = 0 and uid = ?';
|
||||
$datas = Db::getColumn($q, array_fill(0, 3, $this->ue['id']));
|
||||
$stats = array_fill_keys(['s1', 's2', 's3', 's5', 's6'], 0);
|
||||
foreach ($datas as $data) {
|
||||
|
||||
@@ -433,7 +433,7 @@ class Quests
|
||||
}
|
||||
|
||||
if (isset($d['add_rep'])) {
|
||||
$t .= 'Репутация ' . $u->city_name[$pl['city']] . ': ' . $d['add_rep'] . '<br>';
|
||||
$t .= 'Репутация ' . $pl['city'] . ': ' . $d['add_rep'] . '<br>';
|
||||
}
|
||||
|
||||
if (isset($d['add_repizlom'])) {
|
||||
@@ -582,7 +582,7 @@ class Quests
|
||||
return $r;
|
||||
}
|
||||
|
||||
public function testquest()
|
||||
public function testquest(): void
|
||||
{
|
||||
global $u;
|
||||
if ($u->info['battle'] == 0 && $u->room['name'] != 'Башня Смерти') {
|
||||
@@ -749,12 +749,9 @@ class Quests
|
||||
}
|
||||
unset($x, $i, $ii, $ex, $x2, $bot2, $ex2);
|
||||
if ($pl['city'] != '') {
|
||||
$t .= '' . $d['add_rep'] . ' ед. репутации ' . $u->city_name[$pl['city']] . ', ';
|
||||
$t .= '' . $d['add_rep'] . ' ед. репутации ' . $pl['city'] . ', ';
|
||||
$rep = mysql_fetch_array(mysql_query('SELECT * FROM `rep` WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'));
|
||||
// Рыцарки
|
||||
/*if($rep['rep'.$pl['city']] < 10000 && $rep['rep'.$pl['city']] + $d['add_rep'] >= 10000 && $pl['kin'] != 1) {
|
||||
$rep['rep'.$pl['city']] = 9999;
|
||||
} else*/
|
||||
|
||||
if ($rep['rep' . $pl['city']] < 24999 && $rep['rep' . $pl['city']] + $d['add_rep'] >= 24999 && $pl['kin'] != 2) {
|
||||
$rep['rep' . $pl['city']] = 24999;
|
||||
} else {
|
||||
@@ -976,7 +973,7 @@ class Quests
|
||||
if ($this->stats['more_awards'] >= 0) {
|
||||
$d['add_rep'] += $d['add_rep'] / 100 * 50;
|
||||
}
|
||||
$t .= '' . $d['add_rep'] . ' ед. репутации ' . $u->city_name[$quest['city']] . ', ';
|
||||
$t .= '' . $d['add_rep'] . ' ед. репутации ' . $quest['city'] . ', ';
|
||||
if (
|
||||
$rep['rep' . $quest['city']] < 24999 &&
|
||||
$rep['rep' . $quest['city']] + $d['add_rep'] >= 24999 &&
|
||||
|
||||
+123
-190
@@ -9,6 +9,7 @@ use Model\ActionModel;
|
||||
use User\Effects;
|
||||
use User\InfoBox;
|
||||
use User\ItemsModel;
|
||||
use User\Login;
|
||||
use User\Reputation;
|
||||
use User\Stats;
|
||||
use User\UserCalculatedStats;
|
||||
@@ -17,7 +18,6 @@ use User\UserStats;
|
||||
class User
|
||||
{
|
||||
private static ?self $flag_one = null;
|
||||
public int $pokol = 2; //Акктуальное поколение предметов
|
||||
public array $aves = ['now' => 0, 'max' => 0];
|
||||
public array $room = [];
|
||||
public array $align_nm = [
|
||||
@@ -26,34 +26,6 @@ class User
|
||||
3 => 'Тьма',
|
||||
7 => 'Нейтралитет',
|
||||
];
|
||||
public array $mod_nm = [
|
||||
0 => [0 => ''],
|
||||
1 => [
|
||||
'1' => 'Свет',
|
||||
'1.1' => 'Паладин Поднебесья',
|
||||
'1.4' => 'Таможенный Паладин',
|
||||
'1.5' => 'Паладин Солнечной Улыбки',
|
||||
'1.6' => 'Инквизитор',
|
||||
'1.7' => 'Паладин Огненной Зари',
|
||||
'1.75' => 'Паладин-Хранитель',
|
||||
'1.9' => 'Паладин Неба',
|
||||
'1.91' => 'Старший Паладин Неба',
|
||||
'1.92' => 'Ветеран Ордена',
|
||||
'1.99' => 'Верховный Паладин',
|
||||
],
|
||||
3 => [
|
||||
'3' => 'Тьма',
|
||||
'3.01' => 'Тарман-Служитель',
|
||||
'3.05' => 'Тарман-Надсмотрщик',
|
||||
'3.06' => 'Каратель',
|
||||
'3.07' => 'Тарман-Убийца',
|
||||
'3.075' => 'Тарман-Хранитель',
|
||||
'3.09' => 'Тарман-Палач',
|
||||
'3.091' => 'Тарман-Владыка',
|
||||
'3.092' => 'Ветеран Армады',
|
||||
'3.99' => 'Тарман Патриарх',
|
||||
],
|
||||
];
|
||||
public array $rgd = [0 => 0, 1 => 0];
|
||||
public array $city_name = [
|
||||
'emeraldscity' => 'Emeralds city',
|
||||
@@ -584,25 +556,35 @@ class User
|
||||
public string $error = '';
|
||||
public array $info = [];
|
||||
public array $rep;
|
||||
public $tfer;
|
||||
public $stats;
|
||||
/** Для переводов персонажа */
|
||||
public array|false $tfer;
|
||||
public array $stats;
|
||||
private InfoBox $infoBox;
|
||||
private Reputation $reputation;
|
||||
private Stats $userStats;
|
||||
|
||||
private function __construct()
|
||||
private function __construct(int $uid = 0)
|
||||
{
|
||||
if (empty($_SESSION['uid']) && empty($_COOKIE['login'])) {
|
||||
if (empty($_SESSION['uid']) && empty($_COOKIE['login']) && empty($uid)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$user = !empty($_SESSION['uid']) ? $_SESSION['uid'] : $_COOKIE['login'];
|
||||
$user = match (true) {
|
||||
!empty($uid) => $uid,
|
||||
!empty($_SESSION['uid']) => $_SESSION['uid'],
|
||||
default => $_COOKIE['login']
|
||||
};
|
||||
|
||||
$this->info = self::getInfo($user);
|
||||
|
||||
unset($user);
|
||||
|
||||
Database::init(); // для всяких mysql_*
|
||||
|
||||
$this->userStats = new Stats($this);
|
||||
//$this->getStats($this->info); // Бля, а вдруг?
|
||||
$this->stats = $this->userStats->getStats($this->info);
|
||||
|
||||
$this->infoTasks();
|
||||
|
||||
if (Core\Config::get('securetime') > 0) {
|
||||
@@ -813,11 +795,18 @@ class User
|
||||
}
|
||||
|
||||
//Выделяем передачи
|
||||
$this->tfer = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `id`,`time`,`uid1`,`uid2`,`city`,`room`,`good1`,`good2`,`cancel1`,`cancel2`,`money1`,`money2`,`start1`,`start2`,`text`,`r0`,`r1`,`r2`,`finish1`,`finish2` FROM `transfers` WHERE (`uid1` = "' . $this->info['id'] . '" OR `uid2` = "' . $this->info['id'] . '") AND (`cancel1` = "0" OR (`finish1` > 0 AND `uid1` = "' . $this->info['id'] . '") OR (`finish2` > 0 AND `uid2` = "' . $this->info['id'] . '")) AND (`cancel2` = "0" OR (`finish2` > 0 AND `uid2` = "' . $this->info['id'] . '") OR (`finish1` > 0 AND `uid1` = "' . $this->info['id'] . '")) ORDER BY `id` DESC LIMIT 1'
|
||||
)
|
||||
|
||||
$this->tfer = Db::getRow(
|
||||
'select *
|
||||
from transfers
|
||||
where (uid1 = ? or uid2 = ?)
|
||||
and (cancel1 = 0 or (finish1 > 0 and uid1 = ?) or (finish2 > 0 and uid2 = ?))
|
||||
and (cancel2 = 0 or (finish2 > 0 and uid2 = ?) or (finish1 > 0 and uid1 = ?))
|
||||
order by id desc
|
||||
limit 1',
|
||||
[$this->info['id'], $this->info['id'], $this->info['id'], $this->info['id'], $this->info['id'], $this->info['id']]
|
||||
);
|
||||
|
||||
if ($this->tfer) {
|
||||
if ($this->tfer['uid1'] == $this->tfer['uid2']) {
|
||||
$this->tfer = false;
|
||||
@@ -891,11 +880,11 @@ class User
|
||||
$cmp = Db::getValue('select val from save_com where uid = ? and id = ?', [$this->info['id'], (int)$_GET['usec1']]);
|
||||
if ($cmp) {
|
||||
//снимаем все вещи
|
||||
Db::sql('update items_users set inOdet = 0 where uid = ?', [$this->info['id']]);
|
||||
Db::sql('update items_users set inodet = 0 where uid = ?', [$this->info['id']]);
|
||||
//одеваем вещи, если они не удалены
|
||||
$cm = Conversion::dataStringToArray($cmp);
|
||||
foreach ($cm as $slot => $itemid) {
|
||||
Db::sql('update items_users set inOdet = ? where id = ? and uid = ? and inShop = 0', [(int)$slot, (int)$itemid, $this->info['id']]);
|
||||
Db::sql('update items_users set inodet = ? where id = ? and uid = ? and inshop = 0', [(int)$slot, (int)$itemid, $this->info['id']]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1013,7 +1002,7 @@ class User
|
||||
$j++;
|
||||
}
|
||||
if ($tritm != '' && !$tr) {
|
||||
$this->error = 'Необходимы предметы: ' . $tritm . '';
|
||||
$this->error = 'Необходимы предметы: ' . $tritm;
|
||||
}
|
||||
}
|
||||
while ($x < count($t)) {
|
||||
@@ -1029,7 +1018,7 @@ class User
|
||||
mysql_query(
|
||||
'UPDATE `users` SET `obraz` = "' . $o['img'] . '" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1'
|
||||
);
|
||||
$this->addAction(time(), 'sel_obraz', 'id=' . $o['id'] . '');
|
||||
$this->addAction(time(), 'sel_obraz', 'id=' . $o['id']);
|
||||
$this->info['obraz'] = $o['img'];
|
||||
}
|
||||
} else {
|
||||
@@ -1044,7 +1033,7 @@ class User
|
||||
} else {
|
||||
$this->error = 'Выбирать образ можно не чаще одного раза в сутки, следующая смена ' . date(
|
||||
'd.m.Y H:i', $sm['time'] + 86400
|
||||
) . '';
|
||||
);
|
||||
unset($_GET['obr_sel']);
|
||||
$_GET['inv'] = 1;
|
||||
}
|
||||
@@ -1115,9 +1104,6 @@ class User
|
||||
return;
|
||||
}
|
||||
|
||||
$this->userStats = new Stats($this);
|
||||
//$this->getStats($this->info); // Бля, а вдруг?
|
||||
$this->stats = $this->userStats->getStats($this->info);
|
||||
|
||||
$this->info['achiv'] = Db::getRow('select * from users_achiv where id = ?', [$this->info['id']]);
|
||||
if (!isset($this->info['achiv']['id'])) {
|
||||
@@ -1365,12 +1351,13 @@ class User
|
||||
//Расчет защиты (магия)
|
||||
|
||||
/** Singletone.
|
||||
* @param int $uid
|
||||
* @return User
|
||||
*/
|
||||
public static function start(): User
|
||||
public static function start(int $uid = 0): User
|
||||
{
|
||||
if (!isset(self::$flag_one)) {
|
||||
self::$flag_one = new self();
|
||||
self::$flag_one = new self($uid);
|
||||
}
|
||||
return self::$flag_one;
|
||||
}
|
||||
@@ -1401,13 +1388,10 @@ class User
|
||||
where users.id = ?',
|
||||
[$uid]
|
||||
);
|
||||
$imgBase = Config::img() . DIRECTORY_SEPARATOR . 'i';
|
||||
|
||||
$alignStr = empty($align) ? '' : "<img src='$imgBase/align/align$align.gif' alt=''>";
|
||||
$clanStr = empty($clanName) ? '' : "<img src='$imgBase/clan/$clanName.gif' alt='$clanName'>";
|
||||
$spacedLogin = str_replace(' ', '%20', $login);
|
||||
$loginLink = "<a href='/inf.php?login=$spacedLogin' target='_blank'><img src='img/inf.gif' title='Инф. о $login' alt='Инф. о $login'></a>";
|
||||
return "$alignStr$clanStr<strong>$login</strong> [$level]$loginLink";
|
||||
if (!isset($login)) {
|
||||
return "uid:$uid";
|
||||
}
|
||||
return (new Login($align, $clanName, $level, $login))->fullLogin;
|
||||
}
|
||||
|
||||
public function dayquest(int $id): string
|
||||
@@ -1465,11 +1449,11 @@ class User
|
||||
}
|
||||
$this->error = 'Вы успешно восстановили ' . round($this->stats['hpAll'] - $this->stats['hpNow']) . ' HP.';
|
||||
Db::sql(
|
||||
'insert into vortex (uid, room, time, val, type) VALUES (?,?,unix_timestamp(),?,1)',
|
||||
'insert into vortex (uid, room, time, val, type) values (?,?,unix_timestamp(),?,1)',
|
||||
[$this->info['id'], $this->info['room'], round($this->stats['hpAll'] - $this->stats['hpNow'])]
|
||||
);
|
||||
$this->stats['hpNow'] = $this->stats['hpAll'];
|
||||
Db::sql('update stats set hpNow = ? where id = ?', [$this->stats['hpNow'], $this->info['id']]);
|
||||
Db::sql('update stats set hpnow = ? where id = ?', [$this->stats['hpNow'], $this->info['id']]);
|
||||
}
|
||||
} elseif (isset($_GET['vmp'])) {
|
||||
$v = Db::getValue('select time from vortex where uid = ? and type = 2 order by time desc limit 1');
|
||||
@@ -1482,11 +1466,11 @@ class User
|
||||
}
|
||||
$this->error = 'Вы успешно восстановили ' . round($this->stats['mpAll'] - $this->stats['mpNow']) . ' MP.';
|
||||
Db::sql(
|
||||
'insert into vortex (uid, room, time, val, type) VALUES (?,?,unix_timestamp(),?,2)',
|
||||
'insert into vortex (uid, room, time, val, type) values (?,?,unix_timestamp(),?,2)',
|
||||
[$this->info['id'], $this->info['room'], round($this->stats['mpAll'] - $this->stats['mpNow'])]
|
||||
);
|
||||
$this->stats['mpNow'] = $this->stats['mpAll'];
|
||||
Db::sql('update stats set mpNow = ? where id = ?', [$this->stats['mpNow'], $this->info['id']]);
|
||||
Db::sql('update stats set mpnow = ? where id = ?', [$this->stats['mpNow'], $this->info['id']]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1532,7 +1516,7 @@ class User
|
||||
if ($an <= 0) {
|
||||
return;
|
||||
}
|
||||
Db::sql('replace into users_align (uid, time, align) VALUES (?,unix_timestamp(),?)', [$uid, floor($an)]);
|
||||
Db::sql('replace into users_align (uid, time, align) values (?,unix_timestamp(),?)', [$uid, floor($an)]);
|
||||
|
||||
}
|
||||
|
||||
@@ -1987,7 +1971,7 @@ class User
|
||||
//копируем пользователя
|
||||
|
||||
Db::sql(
|
||||
"insert into users (align, login, level, pass, city, cityreg, name, sex, timereg, obraz, bot_id, inTurnir) values (?,?,?,uuid(),'Неведомые земли','Неведомые земли',?,?,?,?,?,?)",
|
||||
"insert into users (align, login, level, pass, city, cityreg, name, sex, timereg, obraz, bot_id, inturnir) values (?,?,?,uuid(),'Неведомые земли','Неведомые земли',?,?,?,?,?,?)",
|
||||
[
|
||||
$clon['align'] ?? 0,
|
||||
$clon['login'],
|
||||
@@ -2027,17 +2011,17 @@ class User
|
||||
$uid = (int)Db::lastInsertId();
|
||||
|
||||
//копируем статы
|
||||
Db::sql('insert into stats (clone, id, stats, hpNow, upLevel, bot, priems) values (?,?,?,1000000,?,1,?)', [$clon['id'], $uid, $clon['stats'], $clon['upLevel'], $clon['priems']]);
|
||||
Db::sql('insert into stats (clone, id, stats, hpnow, uplevel, bot, priems) values (?,?,?,1000000,?,1,?)', [$clon['id'], $uid, $clon['stats'], $clon['upLevel'], $clon['priems']]);
|
||||
|
||||
//копируем предметы
|
||||
Db::sql(
|
||||
"insert into items_users (uid, item_id, data, inOdet, iznosMAX, kolvo) select ?, item_id, replace(data, 'toclan', 'to_clan_'), inOdet, iznosMAX, kolvo from items_users where inOdet > 0 and uid = ?",
|
||||
"insert into items_users (uid, item_id, data, inodet, iznosmax, kolvo) select ?, item_id, replace(data, 'toclan', 'to_clan_'), inodet, iznosmax, kolvo from items_users where inodet > 0 and uid = ?",
|
||||
[$uid, $clon['id']]
|
||||
);
|
||||
|
||||
//копируем эффекты
|
||||
Db::sql(
|
||||
"insert into eff_users (uid, id_eff, data, name, overType, timeUse, x) select ?, id_eff, data, name, overType, timeUse, x from eff_users where uid = ? and deactiveTime < unix_timestamp() and v1 != 'priem'",
|
||||
"insert into eff_users (uid, id_eff, data, name, overtype, timeuse, x) select ?, id_eff, data, name, overtype, timeuse, x from eff_users where uid = ? and deactivetime < unix_timestamp() and v1 != 'priem'",
|
||||
[$uid, $clon['id']]
|
||||
);
|
||||
|
||||
@@ -2047,7 +2031,7 @@ class User
|
||||
|
||||
} else {
|
||||
|
||||
$bot = Db::getRow('select id, login, stats, upLevel, itemsUse from test_bot where id = ?', [$id]);
|
||||
$bot = Db::getRow('select id, login, stats, uplevel, itemsuse from test_bot where id = ?', [$id]);
|
||||
|
||||
if (!isset($bot['id'])) {
|
||||
return [];
|
||||
@@ -2088,7 +2072,7 @@ class User
|
||||
$bot['stats'] = Conversion::arrayToDataString($statss);
|
||||
unset($statss);
|
||||
}
|
||||
Db::sql('insert into stats (id, stats, hpNow, upLevel, bot) values (?,?,1000000,?,1)', [$uid, $bot['stats'], $bot['upLevel']]);
|
||||
Db::sql('insert into stats (id, stats, hpnow, uplevel, bot) values (?,?,1000000,?,1)', [$uid, $bot['stats'], $bot['upLevel']]);
|
||||
|
||||
$bot['id'] = $uid;
|
||||
$bot['logins_bot'] = $logins_bot;
|
||||
@@ -2109,7 +2093,7 @@ class User
|
||||
$w3b = 1;
|
||||
}
|
||||
}
|
||||
Db::sql('update items_users set inOdet = ? where id = ?', [$inslot, $iditem]);
|
||||
Db::sql('update items_users set inodet = ? where id = ?', [$inslot, $iditem]);
|
||||
}
|
||||
return $bot;
|
||||
}
|
||||
@@ -2188,7 +2172,7 @@ class User
|
||||
|
||||
public function freeStatsMod($id, $s, $uid): void
|
||||
{
|
||||
$itm = Db::getValue('select data from items_users where id = ? and uid = ? and inShop = 0 and inOdet = 0', [$id, $uid]);
|
||||
$itm = Db::getValue('select data from items_users where id = ? and uid = ? and inshop = 0 and inodet = 0', [$id, $uid]);
|
||||
|
||||
if (!isset($itm)) {
|
||||
return;
|
||||
@@ -2236,7 +2220,7 @@ class User
|
||||
|
||||
public function freeStatsItem(int $id, int $s, int $uid): void
|
||||
{
|
||||
$itm = Db::getValue('select data from items_users where id = ? and uid = ? and inShop = 0 and inOdet = 0', [$id, $uid]);
|
||||
$itm = Db::getValue('select data from items_users where id = ? and uid = ? and inshop = 0 and inodet = 0', [$id, $uid]);
|
||||
if (!$itm || $s != 1 && $s != 2 && $s != 3 && $s != 5) {
|
||||
return;
|
||||
}
|
||||
@@ -2253,7 +2237,7 @@ class User
|
||||
|
||||
public function freeStats2Item(int $id, int $s, int $uid, int $tp): void
|
||||
{
|
||||
$itm = Db::getRow('select id, data, so from items_users where id = ? and uid = ? and inShop = 0 and inOdet = 0', [$id, $uid]);
|
||||
$itm = Db::getRow('select id, data, so from items_users where id = ? and uid = ? and inshop = 0 and inodet = 0', [$id, $uid]);
|
||||
if (!isset($itm['id']) || $itm['so'] <= 0) {
|
||||
return;
|
||||
}
|
||||
@@ -2323,7 +2307,7 @@ class User
|
||||
|
||||
public function obj_addItem(int $id): void
|
||||
{
|
||||
$itm = Db::getRow('select id, inGroup, item_id, uid from items_users where uid = ? and inOdet = 0 and inShop = 0 and id = ?', [$this->info['id'], $id]);
|
||||
$itm = Db::getRow('select id, ingroup, item_id, uid from items_users where uid = ? and inodet = 0 and inshop = 0 and id = ?', [$this->info['id'], $id]);
|
||||
if ($this->info['transfers'] < 1) {
|
||||
$this->error = 'На сегодня лимит передач исчерпан.';
|
||||
return;
|
||||
@@ -2332,25 +2316,25 @@ class User
|
||||
return;
|
||||
}
|
||||
if ($itm['inGroup'] > 0 && $this->itemsX($id) > 1) {
|
||||
Db::sql('update items_users set inshop = 1 where inShop != 30 and uid = ? and item_id = ? and inGroup = ?', [$this->info['id'], $itm['item_id'], $itm['inGroup']]);
|
||||
Db::sql('update items_users set inshop = 1 where inshop != 30 and uid = ? and item_id = ? and ingroup = ?', [$this->info['id'], $itm['item_id'], $itm['inGroup']]);
|
||||
} else {
|
||||
Db::sql('update items_users set inshop = 1 where inShop != 30 and uid = ? and id = ? and inOdet = 0', [$this->info['id'], $id]);
|
||||
Db::sql('update items_users set inshop = 1 where inshop != 30 and uid = ? and id = ? and inodet = 0', [$this->info['id'], $id]);
|
||||
}
|
||||
}
|
||||
|
||||
public function itemsX(int $id, $uid = null, $item_id = null): bool|int
|
||||
{
|
||||
//fixme какая-то дичь тут.
|
||||
$item = Db::getRow('select uid, item_id, inGroup, inShop from items_users where id = ?', [$id]);
|
||||
$item = Db::getRow('select uid, item_id, ingroup, inshop from items_users where id = ?', [$id]);
|
||||
return Db::getValue(
|
||||
'select count(id) from items_users where inShop = ? and item_id = ? and uid = ? and inGroup = ?',
|
||||
'select count(id) from items_users where inshop = ? and item_id = ? and uid = ? and ingroup = ?',
|
||||
[$item['inShop'], $item['item_id'], $item['uid'], $item['ingroup']]
|
||||
);
|
||||
}
|
||||
|
||||
public function obj_takeItem($id): void
|
||||
{
|
||||
$itm = Db::getRow('select id, inGroup from items_users where id = ? and uid = ? and inOdet = 0 and inShop = 0');
|
||||
$itm = Db::getRow('select id, ingroup from items_users where id = ? and uid = ? and inodet = 0 and inshop = 0');
|
||||
if ($this->info['transfers'] < 1) {
|
||||
$this->error = 'На сегодня лимит передач исчерпан.';
|
||||
return;
|
||||
@@ -2359,15 +2343,15 @@ class User
|
||||
return;
|
||||
}
|
||||
if ($itm['inGroup'] > 0 && $this->itemsX($id) > 1) {
|
||||
Db::sql('update items_users set inshop = 0 where inShop != 30 and uid = ? and (id = ? or inGroup = ?) and inOdet = 0', [$this->info['id'], $id, $itm['inGroup']]);
|
||||
Db::sql('update items_users set inshop = 0 where inshop != 30 and uid = ? and (id = ? or ingroup = ?) and inodet = 0', [$this->info['id'], $id, $itm['inGroup']]);
|
||||
} else {
|
||||
Db::sql('update items_users set inshop = 0 where inShop != 30 and uid = ? and id = ? and inOdet = 0', [$this->info['id'], $id]);
|
||||
Db::sql('update items_users set inshop = 0 where inshop != 30 and uid = ? and id = ? and inodet = 0', [$this->info['id'], $id]);
|
||||
}
|
||||
}
|
||||
|
||||
public function itemsSmSave(int $id, int $s, int $uid): void
|
||||
{
|
||||
$itm = Db::getValue('select data from items_users where id = ? and uid = ? and inShop = 0 and inOdet = 0', [$id, $uid]);
|
||||
$itm = Db::getValue('select data from items_users where id = ? and uid = ? and inshop = 0 and inodet = 0', [$id, $uid]);
|
||||
if (!$itm) {
|
||||
return;
|
||||
}
|
||||
@@ -2619,7 +2603,7 @@ class User
|
||||
//-----------------------------------------------
|
||||
$idt = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `id`,`name`,`img`,`type`,`inslot`,`2h`,`2too`,`iznosMAXi`,`inRazdel`,`price1`,`price2`,`price3`,`magic_chance`,`info`,`massa`,`level`,`magic_inci`,`overTypei`,`group`,`group_max`,`geni`,`ts`,`srok`,`class`,`class_point`,`anti_class`,`anti_class_point`,`max_text`,`useInBattle`,`lbtl`,`lvl_itm`,`lvl_exp`,`lvl_aexp` FROM `items_main` WHERE `id` = "' . $id['item_id'] . '" LIMIT` 1'
|
||||
'SELECT `id`,`name`,`img`,`type`,`inslot`,`2h`,`2too`,`iznosMAXi`,`inRazdel`,`price1`,`price2`,`price3`,`magic_chance`,`info`,`massa`,`level`,`magic_inci`,`overTypei`,`group`,`group_max`,`ts`,`srok`,`class`,`class_point`,`anti_class`,`anti_class_point`,`max_text`,`useInBattle`,`lbtl`,`lvl_itm`,`lvl_exp`,`lvl_aexp` FROM `items_main` WHERE `id` = "' . $id['item_id'] . '" LIMIT` 1'
|
||||
)
|
||||
);
|
||||
|
||||
@@ -2664,7 +2648,7 @@ class User
|
||||
}
|
||||
//Новая чарка
|
||||
|
||||
$srune = mysql_query('SELECT * FROM `new_charov` WHERE 1');
|
||||
$srune = mysql_query('select * from new_charov where 1');
|
||||
$irun = 0;
|
||||
while ($nrune = mysql_fetch_array($srune)) {
|
||||
$irun++;
|
||||
@@ -2711,7 +2695,7 @@ class User
|
||||
} elseif ($rune['type'] == 62) {
|
||||
$idt = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `id`,`name`,`img`,`type`,`inslot`,`2h`,`2too`,`iznosMAXi`,`inRazdel`,`price1`,`price2`,`price3`,`magic_chance`,`info`,`massa`,`level`,`magic_inci`,`overTypei`,`group`,`group_max`,`geni`,`ts`,`srok`,`class`,`class_point`,`anti_class`,`anti_class_point`,`max_text`,`useInBattle`,`lbtl`,`lvl_itm`,`lvl_exp`,`lvl_aexp` FROM `items_main` WHERE `id` = "' . $id['item_id'] . '" LIMIT` 1'
|
||||
'SELECT `id`,`name`,`img`,`type`,`inslot`,`2h`,`2too`,`iznosMAXi`,`inRazdel`,`price1`,`price2`,`price3`,`magic_chance`,`info`,`massa`,`level`,`magic_inci`,`overTypei`,`group`,`group_max`,`ts`,`srok`,`class`,`class_point`,`anti_class`,`anti_class_point`,`max_text`,`useInBattle`,`lbtl`,`lvl_itm`,`lvl_exp`,`lvl_aexp` FROM `items_main` WHERE `id` = "' . $id['item_id'] . '" LIMIT` 1'
|
||||
)
|
||||
);
|
||||
if ($idt['type'] == 7) {
|
||||
@@ -3011,7 +2995,7 @@ class User
|
||||
} elseif ($rune['type'] == 46) {
|
||||
$idt = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `id`,`name`,`img`,`type`,`inslot`,`2h`,`2too`,`iznosMAXi`,`inRazdel`,`price1`,`price2`,`price3`,`magic_chance`,`info`,`massa`,`level`,`magic_inci`,`overTypei`,`group`,`group_max`,`geni`,`ts`,`srok`,`class`,`class_point`,`anti_class`,`anti_class_point`,`max_text`,`useInBattle`,`lbtl`,`lvl_itm`,`lvl_exp`,`lvl_aexp` FROM `items_main` WHERE `id` = ' . $id['item_id']
|
||||
'SELECT `id`,`name`,`img`,`type`,`inslot`,`2h`,`2too`,`iznosMAXi`,`inRazdel`,`price1`,`price2`,`price3`,`magic_chance`,`info`,`massa`,`level`,`magic_inci`,`overTypei`,`group`,`group_max`,`ts`,`srok`,`class`,`class_point`,`anti_class`,`anti_class_point`,`max_text`,`useInBattle`,`lbtl`,`lvl_itm`,`lvl_exp`,`lvl_aexp` FROM `items_main` WHERE `id` = ' . $id['item_id']
|
||||
)
|
||||
);
|
||||
if ($idt['type'] == 5) {
|
||||
@@ -3190,7 +3174,7 @@ class User
|
||||
} elseif ($rune['type'] == 68) {
|
||||
$idt = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `id`,`name`,`img`,`type`,`inslot`,`2h`,`2too`,`iznosMAXi`,`inRazdel`,`price1`,`price2`,`price3`,`magic_chance`,`info`,`massa`,`level`,`magic_inci`,`overTypei`,`group`,`group_max`,`geni`,`ts`,`srok`,`class`,`class_point`,`anti_class`,`anti_class_point`,`max_text`,`useInBattle`,`lbtl`,`lvl_itm`,`lvl_exp`,`lvl_aexp` FROM `items_main` WHERE `id` = "' . $id['item_id'] . '" LIMIT` 1'
|
||||
'SELECT `id`,`name`,`img`,`type`,`inslot`,`2h`,`2too`,`iznosMAXi`,`inRazdel`,`price1`,`price2`,`price3`,`magic_chance`,`info`,`massa`,`level`,`magic_inci`,`overTypei`,`group`,`group_max`,`ts`,`srok`,`class`,`class_point`,`anti_class`,`anti_class_point`,`max_text`,`useInBattle`,`lbtl`,`lvl_itm`,`lvl_exp`,`lvl_aexp` FROM `items_main` WHERE `id` = "' . $id['item_id'] . '" LIMIT` 1'
|
||||
)
|
||||
);
|
||||
if ($idt['type'] == 5) {
|
||||
@@ -3310,7 +3294,6 @@ class User
|
||||
`im`.`overTypei`,
|
||||
`im`.`group`,
|
||||
`im`.`group_max`,
|
||||
`im`.`geni`,
|
||||
`im`.`ts`,
|
||||
`im`.`srok`,
|
||||
`im`.`class`,
|
||||
@@ -3371,7 +3354,7 @@ class User
|
||||
`im`.`magic_inci`, `im`.`overTypei`,
|
||||
`im`.`group`,
|
||||
`im`.`group_max`,
|
||||
`im`.`geni`, `im`.`ts`,
|
||||
`im`.`ts`,
|
||||
`im`.`srok`,
|
||||
`im`.`class`, `im`.`class_point`,
|
||||
`im`.`anti_class`, `im`.`anti_class_point`,
|
||||
@@ -4241,10 +4224,6 @@ class User
|
||||
$is2 .= '<div style="color:brown;">Предмет будет удален при выходе из подземелья</div>';
|
||||
}
|
||||
|
||||
if ($this->pokol > $pl['geni']) {
|
||||
$is2 .= '<div style="color:brown">Предмет устарел</div>';
|
||||
}
|
||||
|
||||
if (isset($po['zazuby']) && $po['zazuby'] > 0) {
|
||||
$is2 .= '<div style="color:brown;">Предмет куплен за зубы</div>';
|
||||
}
|
||||
@@ -4867,7 +4846,6 @@ class User
|
||||
`im`.`overTypei`,
|
||||
`im`.`group`,
|
||||
`im`.`group_max`,
|
||||
`im`.`geni`,
|
||||
`im`.`ts`,
|
||||
`im`.`srok`,
|
||||
`im`.`class`,
|
||||
@@ -4983,7 +4961,6 @@ class User
|
||||
`im`.`overTypei`,
|
||||
`im`.`group`,
|
||||
`im`.`group_max`,
|
||||
`im`.`geni`,
|
||||
`im`.`ts`,
|
||||
`im`.`srok`,
|
||||
`im`.`class`,
|
||||
@@ -5064,7 +5041,7 @@ class User
|
||||
$i = 0;
|
||||
do { //fixme ужасный цикл, ужасный запрос.
|
||||
$i++;
|
||||
$gr = Db::getValue('select inGroup from items_users where uid = ? and inGroup = ? and item_id = ?', [$uid, $i, $item]);
|
||||
$gr = Db::getValue('select ingroup from items_users where uid = ? and ingroup = ? and item_id = ?', [$uid, $i, $item]);
|
||||
|
||||
if (empty($gr)) {
|
||||
$g = 1;
|
||||
@@ -5107,24 +5084,24 @@ class User
|
||||
item_id,
|
||||
time_create,
|
||||
time_sleep,
|
||||
timeOver,
|
||||
timeover,
|
||||
name,
|
||||
overType,
|
||||
inOdet,
|
||||
iznosNOW,
|
||||
iznosMAX,
|
||||
iznosMAXi
|
||||
overtype,
|
||||
inodet,
|
||||
iznosnow,
|
||||
iznosmax,
|
||||
iznosmaxi
|
||||
from items_users
|
||||
left join items_main on items_main.id = item_id
|
||||
where
|
||||
(
|
||||
inOdet != 0 or
|
||||
inodet != 0 or
|
||||
data like '%srok%' or
|
||||
data like '%vip_sale%' or
|
||||
data like '%sudba=1%' or
|
||||
iznosNOW > 0 or
|
||||
iznosnow > 0 or
|
||||
srok > 0 or
|
||||
(timeOver !=0 and timeOver < unix_timestamp())
|
||||
(timeover !=0 and timeover < unix_timestamp())
|
||||
) and uid = ?",
|
||||
[$u['id']]
|
||||
);
|
||||
@@ -5141,7 +5118,9 @@ class User
|
||||
$notr++;
|
||||
}
|
||||
}
|
||||
if ($itm['iznosNOW'] >= ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999) {
|
||||
if (isset($itm['iznosNOW'], $itm['iznosMAX'], $itm['iznosMAXi']) &&
|
||||
$itm['iznosNOW'] >= ceil($itm['iznosMAX']) &&
|
||||
$itm['iznosMAXi'] != 999999999) {
|
||||
$notr++;
|
||||
}
|
||||
if ($notr > 0 && $itm['inOdet'] != 0) {
|
||||
@@ -5240,7 +5219,7 @@ class User
|
||||
return 0;
|
||||
}
|
||||
|
||||
$sql = 'select count(*) from items_users where id = ? and inOdet != 0';
|
||||
$sql = 'select count(*) from items_users where id = ? and inodet != 0';
|
||||
$args = [$id];
|
||||
if ($uid > 0) {
|
||||
$sql .= ' and uid = ?';
|
||||
@@ -5250,7 +5229,7 @@ class User
|
||||
if (empty(Db::getValue($sql, $args))) {
|
||||
return 0;
|
||||
}
|
||||
Db::sql('update items_users set lastUPD = unix_timestamp(), inOdet = 0 where id = ?', [$id]);
|
||||
Db::sql('update items_users set lastupd = unix_timestamp(), inodet = 0 where id = ?', [$id]);
|
||||
if (isset($_GET['remitem']) || isset($_GET['sid'])) {
|
||||
$this->info['autospell'] = 1;
|
||||
Db::sql('update users set autospell = 1 where id = ?', [$this->info['id']]);
|
||||
@@ -5282,7 +5261,7 @@ class User
|
||||
|
||||
public function btlMagicList(): string
|
||||
{
|
||||
$sv = array_fill(1, 10, '<img class="nopriemuse" title="Пустой слот магия" src="' . Config::img() . '/i/items/w/w101.gif" alt="">');
|
||||
$sv = array_fill(1, 12, '<img class="nopriemuse" title="Пустой слот магия" src="' . Config::img() . '/i/items/w/w101.gif" alt="">');
|
||||
|
||||
foreach ($this->stats['items'] as $stat) {
|
||||
if (!in_array($stat['inslot'], [40, 51])) {
|
||||
@@ -5335,7 +5314,7 @@ class User
|
||||
|
||||
public function endEffect($id, $u): int
|
||||
{
|
||||
$e = Db::getRow('select id, uid, id_eff, name, sleeptime, data, type1 from eff_users left join eff_main on id_eff = id2 where id = ? and deactiveTime < unix_timestamp()', [$id]);
|
||||
$e = Db::getRow('select id, uid, id_eff, name, sleeptime, data, type1 from eff_users left join eff_main on id_eff = id2 where id = ? and deactivetime < unix_timestamp()', [$id]);
|
||||
|
||||
if (!isset($e['id'])) {
|
||||
return 0;
|
||||
@@ -5391,11 +5370,15 @@ class User
|
||||
{
|
||||
$r = '';
|
||||
$sp = Db::getRows(
|
||||
'select iznosNOW, iznosMAX, name from items_users left join items_main on item_id = items_main.id where uid = ? and inShop = 0 and inOdet between 1 and 18 limit 18',
|
||||
'select iznosnow, iznosmax, name from items_users left join items_main on item_id = items_main.id where uid = ? and inshop = 0 and inodet between 1 and 18 limit 18',
|
||||
[$this->info['id']]
|
||||
);
|
||||
foreach ($sp as $pl) {
|
||||
if ($pl['iznosNOW'] <= ceil($pl['iznosMAX'] * 0.80)) {
|
||||
if (
|
||||
!isset($pl['iznosMAX']) ||
|
||||
!isset($pl['iznosNOW']) ||
|
||||
$pl['iznosNOW'] <= ceil($pl['iznosMAX'] * 0.80)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
$r .= '<strong>' . $pl['name'] . '</strong> [<span style="color: brown">' . floor($pl['iznosNOW']) . '/' .
|
||||
@@ -5409,16 +5392,16 @@ class User
|
||||
if ($uid < 1) {
|
||||
return 0;
|
||||
}
|
||||
Db::sql('update items_users set lastUPD = unix_timestamp(), inOdet = 0 where inOdet != 0 and uid = ?', [$uid]);
|
||||
Db::sql('update items_users set lastupd = unix_timestamp(), inodet = 0 where inodet != 0 and uid = ?', [$uid]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
public function odetItem(int $id, int $uid)
|
||||
{
|
||||
$sql = "select items_users.id, data, 2price, inGroup, gift, gtxt1, `group`, price2, name, type, inslot, 2too, 2h
|
||||
$sql = "select items_users.id, data, 2price, ingroup, gift, gtxt1, `group`, price2, name, type, inslot, 2too, 2h
|
||||
from items_users
|
||||
left join items_main on item_id = items_main.id
|
||||
where items_users.id = ? and inOdet = 0 and inShop = 0";
|
||||
where items_users.id = ? and inodet = 0 and inshop = 0";
|
||||
$args = [$id];
|
||||
|
||||
if ($uid) {
|
||||
@@ -5439,7 +5422,7 @@ class User
|
||||
if (
|
||||
isset($tr['maks_itm_one']) &&
|
||||
$tr['maks_itm_one'] > 0 &&
|
||||
Db::getValue('select true from items_users where uid = ? and inOdet > 0 and data like ? limit 1', [$this->info['id'], "%maks_itm_one={$tr['maks_itm_one']}%"])
|
||||
Db::getValue('select true from items_users where uid = ? and inodet > 0 and data like ? limit 1', [$this->info['id'], "%maks_itm_one={$tr['maks_itm_one']}%"])
|
||||
) {
|
||||
$this->error = 'Возможное использование максимум одного предмета!';
|
||||
$notr++;
|
||||
@@ -5491,7 +5474,7 @@ class User
|
||||
} elseif (isset($tr['open']) && isset($_GET['open']) && isset($tr['items_in_file'])) {
|
||||
$io = '';
|
||||
if ($itm['inGroup'] > 0) {
|
||||
Db::sql('update items_users set lastUPD = unix_timestamp(), inGroup = 0 where id = ?', [$itm['id']]);
|
||||
Db::sql('update items_users set lastupd = unix_timestamp(), ingroup = 0 where id = ?', [$itm['id']]);
|
||||
}
|
||||
if (file_exists('_incl_data/class/Magic/' . $tr['items_in_file'] . '.php')) {
|
||||
require_once '_incl_data/class/Magic/' . $tr['items_in_file'] . '.php';
|
||||
@@ -5530,7 +5513,7 @@ class User
|
||||
$this->error = 'Не удалось открыть подарок. Содержимое испорчено.';
|
||||
} elseif ($itmin['item_id'] == 4868) {
|
||||
//Летучая мышь
|
||||
Db::sql('update stats set hpNow = 1, mpNow = 1 where id = ?', [$this->info['id']]);
|
||||
Db::sql('update stats set hpnow = 1, mpnow = 1 where id = ?', [$this->info['id']]);
|
||||
$this->deleteItem($itm['id'], $this->info['id']);
|
||||
$this->deleteItem($itmin['id'], $this->info['id']);
|
||||
$this->error = 'Вы потеряли все HP...';
|
||||
@@ -5660,7 +5643,7 @@ class User
|
||||
$itms[$i] = $itms[$i][0];
|
||||
$s = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `id`,`name`,`img`,`type`,`inslot`,`2h`,`2too`,`iznosMAXi`,`inRazdel`,`price1`,`price2`,`price3`,`magic_chance`,`info`,`massa`,`level`,`magic_inci`,`overTypei`,`group`,`group_max`,`geni`,`ts`,`srok`,`class`,`class_point`,`anti_class`,`anti_class_point`,`max_text`,`useInBattle`,`lbtl`,`lvl_itm`,`lvl_exp`,`lvl_aexp` FROM `items_main` WHERE `id`="' . ((int)$itms[$i]) . '" LIMIT 1'
|
||||
'SELECT `id`,`name`,`img`,`type`,`inslot`,`2h`,`2too`,`iznosMAXi`,`inRazdel`,`price1`,`price2`,`price3`,`magic_chance`,`info`,`massa`,`level`,`magic_inci`,`overTypei`,`group`,`group_max`,`ts`,`srok`,`class`,`class_point`,`anti_class`,`anti_class_point`,`max_text`,`useInBattle`,`lbtl`,`lvl_itm`,`lvl_exp`,`lvl_aexp` FROM `items_main` WHERE `id`="' . ((int)$itms[$i]) . '" LIMIT 1'
|
||||
)
|
||||
);
|
||||
if (isset($s['id'])) {
|
||||
@@ -5809,10 +5792,8 @@ LIMIT 1'
|
||||
if ($x == 0 or $x == null) {
|
||||
$x = $this->itemsX($itm['id']); //кол-во распада
|
||||
$inGroup = 0;
|
||||
} elseif ($x != 0) {
|
||||
$inGroup = $this->stackGroupCheck($this->info['id'], $itm['inGroup'], $itm['item_id']);
|
||||
} else {
|
||||
$inGroup = 0;
|
||||
$inGroup = $this->stackGroupCheck($this->info['id'], $itm['inGroup'], $itm['item_id']);
|
||||
}
|
||||
$sp = mysql_query(
|
||||
'SELECT `im`.`id`,
|
||||
@@ -5835,7 +5816,6 @@ LIMIT 1'
|
||||
`im`.`overTypei`,
|
||||
`im`.`group`,
|
||||
`im`.`group_max`,
|
||||
`im`.`geni`,
|
||||
`im`.`ts`,
|
||||
`im`.`srok`,
|
||||
`im`.`class`,
|
||||
@@ -5906,25 +5886,21 @@ LIMIT 1'
|
||||
}
|
||||
}
|
||||
|
||||
private function trItem($po)
|
||||
private function trItem($po): int
|
||||
{
|
||||
$tr = '';
|
||||
$t = $this->items['tr'];
|
||||
$x = 0;
|
||||
$notr = 0;
|
||||
while ($x < count($t)) {
|
||||
$n = $t[$x];
|
||||
if (isset($po['tr_' . $n])) {
|
||||
if ($n == 'sex') {
|
||||
if ($this->info['sex'] != $po['tr_' . $n]) {
|
||||
$notr++;
|
||||
}
|
||||
} elseif ($po['tr_' . $n] > $this->stats[$n] && $n != 'align') {
|
||||
$notr++;
|
||||
}
|
||||
foreach ($this->items['tr'] as $trn) {
|
||||
if (!isset($po["tr_$trn"])) {
|
||||
continue;
|
||||
}
|
||||
if (
|
||||
$trn === 'sex' && $this->info['sex'] != $po["tr_$trn"] ||
|
||||
$trn !== 'align' && $po["tr_$trn"] > $this->stats[$trn]
|
||||
) {
|
||||
$notr++;
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
|
||||
return $notr;
|
||||
}
|
||||
|
||||
@@ -6046,67 +6022,23 @@ LIMIT 1'
|
||||
|
||||
if (isset($this->stats['levels']['upLevel'])) {
|
||||
$telvl = [];
|
||||
$sp = mysql_query('SELECT `upLevel`,`exp` FROM `levels`');
|
||||
while ($pl = mysql_fetch_array($sp)) {
|
||||
$telvl[$pl['upLevel']] = $pl['exp'];
|
||||
|
||||
foreach (Db::getRows('select uplevel, exp from levels') as $row) {
|
||||
$telvl[$row['uplevel']] = $row['exp'];
|
||||
}
|
||||
|
||||
if ($this->info['exp'] >= $telvl[$this->info['upLevel']]) {
|
||||
$lvl = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `duh`,`vinos`,`bprice`,`upLevel`,`nextLevel`,`exp`,`money`,`money_bonus1`,`money_bonus2`,`ability`,`skills`,`nskills`,`sskills`,`expBtlMax`,`hpRegen`,`mpRegen`,`money2` FROM `levels` WHERE `upLevel`="' . $this->info['upLevel'] . '" LIMIT 1'
|
||||
)
|
||||
);
|
||||
$lvln = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `duh`,`vinos`,`bprice`,`upLevel`,`nextLevel`,`exp`,`money`,`money_bonus1`,`money_bonus2`,`ability`,`skills`,`nskills`,`sskills`,`expBtlMax`,`hpRegen`,`mpRegen`,`money2` FROM `levels` WHERE `upLevel`="' . ($lvl['upLevel'] + 1) . '" LIMIT 1'
|
||||
)
|
||||
);
|
||||
//Кристал вечности
|
||||
if ($this->info['exp'] > 12499 && $this->info['level'] <= 5 && Config::get('infinity5level')) {
|
||||
$itm = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT `id`,`item_id`,`1price`,`2price`,`3price`,`uid`,`use_text`,`data`,`inOdet`,`inShop`,`delete`,`iznosNOW`,`iznosMAX`,`gift`,`gtxt1`,`gtxt2`,`kolvo`,`geniration`,`magic_inc`,`maidin`,`lastUPD`,`timeOver`,`overType`,`secret_id`,`time_create`,`inGroup`,`dn_delete`,`inTransfer`,`post_delivery`,`lbtl_`,`bexp`,`so`,`blvl` FROM `items_users` WHERE `item_id` = "1204" AND `delete` = "0" AND `uid` = "' . $this->info['id'] . '" AND `inShop` = "0" AND `inTransfer` = "0" LIMIT 1'
|
||||
)
|
||||
);
|
||||
if (!isset($itm['id']) && $this->info['host_reg'] != 'noinfinity5' && $this->info['twink'] == 0) {
|
||||
$this->info['exp'] = 12499;
|
||||
mysql_query(
|
||||
'UPDATE `stats` SET `exp` = "12499" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1'
|
||||
);
|
||||
echo '<script>chat.sendMsg(["new","' . time(
|
||||
) . '","6","","' . $this->info['login'] . '","Для перехода на 6-ой уровень требуется "<strong>Кристалл Вечности [6]</strong>".","Black","1","1","0"]);</script>';
|
||||
} else {
|
||||
mysql_query(
|
||||
'UPDATE `items_users` SET `delete` = "' . time() . '" WHERE `id` = "' . $itm['id'] . '" LIMIT 1'
|
||||
);
|
||||
$text = 'Предмет "<strong>Кристалл Вечности [6]</strong>" был успешно использован.';
|
||||
echo '<script>chat.sendMsg(["new","' . time() . '","6","","' . $this->info['login'] . '","' . $text . '","Black","1","1","0"]);</script>';
|
||||
}
|
||||
}
|
||||
[$lvl, $lvln] = Db::getRows('select * from levels where uplevel >= ? order by uplevel limit 2', [$this->info['upLevel']]);
|
||||
|
||||
$i = 0;
|
||||
$ult = 0;
|
||||
|
||||
$sex1 = '';
|
||||
|
||||
if ($this->info['sex'] == 1) {
|
||||
$sex1 = 'ла';
|
||||
}
|
||||
|
||||
while ($i != 1) {
|
||||
if (Config::get('nolevel') && $this->info['exp'] >= $lvl['exp'] && isset($lvln['upLevel'])) {
|
||||
$tlus = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT COUNT(*) FROM `users` WHERE `real` = 1 AND `level` = "' . $this->info['level'] . '" LIMIT 1'
|
||||
)
|
||||
);
|
||||
//берем апп или уровень, $lvln
|
||||
if ($tlus[0] < $this->info['level'] * 5) {
|
||||
//Нельзя получать лвл/аппы пока не будет 100 персонажей текущего уровня
|
||||
$this->info['exp'] = $lvl['exp'] - 1;
|
||||
mysql_query(
|
||||
'UPDATE `stats` SET `exp` = "' . $this->info['exp'] . '" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1'
|
||||
);
|
||||
}
|
||||
}
|
||||
if ($this->info['exp'] < $lvl['exp'] || !isset($lvln['upLevel'])) {
|
||||
$i = 1;
|
||||
} else {
|
||||
@@ -6282,6 +6214,7 @@ LIMIT 1'
|
||||
$rt++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($ult == 1) {
|
||||
$chat = new Chat();
|
||||
$cmsg = new ChatMessage();
|
||||
@@ -6476,10 +6409,10 @@ LIMIT 1'
|
||||
if ($u['hpNow'] < $st['hpAll'] || $u['mpNow'] < $st['mpAll']) {
|
||||
Db::sql(
|
||||
'update stats set
|
||||
regHP = unix_timestamp(),
|
||||
regMP = unix_timestamp(),
|
||||
hpNow = ?,
|
||||
mpNow = ?
|
||||
reghp = unix_timestamp(),
|
||||
regmp = unix_timestamp(),
|
||||
hpnow = ?,
|
||||
mpnow = ?
|
||||
where id = ?', [$st['hpNow'], $st['mpNow'], $u['id']]
|
||||
);
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ class ItemsModel
|
||||
return [
|
||||
'now' => Db::getValue('select sum(massa) from items_users left join items_main on item_id = items_main.id
|
||||
where uid = ? and (`delete` = 0 or (`delete` = 1000 and inGroup > 0)) and inShop = 0 and inOdet = 0', [$uid]),
|
||||
'max' => 40 + ($stats['os7'] * 10) + $stats['s4'] + $stats['maxves'] + $stats['s1'] * 4,
|
||||
'max' => 40 + (($stats['os7'] ?? 0) * 10) + $stats['s4'] + $stats['maxves'] + $stats['s1'] * 4,
|
||||
'items' => Db::getValue('select count(*) from items_users where uid = ? and `delete` = 0 and inShop = 0 and inOdet = 0', [$uid]),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace User;
|
||||
|
||||
use Core\Config;
|
||||
|
||||
readonly final class Login
|
||||
{
|
||||
public string $fullLogin;
|
||||
public function __construct(
|
||||
int|string|null $align,
|
||||
int|string|null $clanName,
|
||||
int $level,
|
||||
string $login
|
||||
) {
|
||||
$imgBase = Config::img() . DIRECTORY_SEPARATOR . 'i';
|
||||
$alignStr = empty($align) ? '' : "<img src='$imgBase/align/align$align.gif' alt=''>";
|
||||
$clanStr = empty($clanName) ? '' : "<img src='$imgBase/clan/$clanName.gif' alt='$clanName'>";
|
||||
$spacedLogin = str_replace(' ', '%20', $login);
|
||||
$loginLink = "<a href='/inf.php?login=$spacedLogin' target='_blank'><img src='$imgBase/inf.gif' title='Инф. о $login' alt='Инф. о $login'></a>";
|
||||
$this->fullLogin = "$alignStr$clanStr<strong>$login</strong> [$level]$loginLink";
|
||||
}
|
||||
}
|
||||
+93
-113
@@ -126,17 +126,18 @@ class Stats
|
||||
public function getStats(int|array|null $uid = null, $i1 = 0, $reimg = false, $btl_cache = false): array
|
||||
{
|
||||
$u = match (true) {
|
||||
empty($uid) => User::getInfo($this->u->info['id']),
|
||||
empty($uid) => $this->u->info,
|
||||
is_array($uid) => $uid,
|
||||
default => User::getInfo($uid),
|
||||
};
|
||||
|
||||
|
||||
if (!isset($u['id'])) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// Как? Нахуя 4 переменные разные для одного и того же?
|
||||
$st = array_fill_keys($this->sysNames, 0);
|
||||
$st = array_fill_keys(array_keys($this->sysNames), 0);
|
||||
$sti = $st;
|
||||
$s_v = $st;
|
||||
$s_vi = $st;
|
||||
@@ -168,9 +169,12 @@ class Stats
|
||||
$st['items'] = [];
|
||||
$st['effects'] = [];
|
||||
|
||||
|
||||
|
||||
$st['vip'] = $u['vip'];
|
||||
|
||||
foreach (Conversion::dataStringToArray($u['stats']) as $stat => $value) {
|
||||
//fixme несуществующие статы mg5 mg6 a6 s8-s15
|
||||
$this->addKeyIfNotExist($stat, (int)$value, $st);
|
||||
}
|
||||
|
||||
@@ -282,13 +286,13 @@ class Stats
|
||||
|
||||
// мф.анти-уворот = 2.5
|
||||
$st['m5'] += $st['s2'] * 5;
|
||||
$st['za'] += $st['s4'] * 1.0;
|
||||
$st['za'] += $st['s4'];
|
||||
|
||||
$st['m19'] += (int)($st['s3'] * 0.03);
|
||||
|
||||
|
||||
|
||||
$st['m19'] += round($st['s3'] * 0.03);
|
||||
|
||||
//Мощности
|
||||
//Мощность против "Мощность крит. урона". Гамс
|
||||
$st['antm3'] += $st['s5'] * 0.5;
|
||||
|
||||
//Бонусы комплектов
|
||||
if (is_iterable($coms['new'])) {
|
||||
@@ -321,33 +325,19 @@ class Stats
|
||||
//Бонусы статов
|
||||
$this->addStatBonuses($st);
|
||||
|
||||
//если второе оружие одето
|
||||
if ($hnd2 == 1 && $hnd1 == 1) {
|
||||
$st['zona']++;
|
||||
}
|
||||
if ($sht1 == 1) {
|
||||
$st['zonb']++;
|
||||
}/* Владения */
|
||||
/* Владения */
|
||||
|
||||
//mib1-mib4, mab1-mab4 armor??
|
||||
|
||||
if (isset($st['s5'])) {
|
||||
$st['pm1'] += $st['s5'] * 0.5;
|
||||
$st['pm2'] += $st['s5'] * 0.5;
|
||||
$st['pm3'] += $st['s5'] * 0.5;
|
||||
$st['pm4'] += $st['s5'] * 0.5;
|
||||
$st['pm7'] += $st['s5'] * 0.5;
|
||||
if (!empty($st['s5'])) {
|
||||
$st['pm1'] += (int)($st['s5'] * 0.5);
|
||||
$st['pm2'] += (int)($st['s5'] * 0.5);
|
||||
$st['pm3'] += (int)($st['s5'] * 0.5);
|
||||
$st['pm4'] += (int)($st['s5'] * 0.5);
|
||||
$st['pm7'] += (int)($st['s5'] * 0.5);
|
||||
}
|
||||
|
||||
if (isset($st['m11a'])) {
|
||||
$st['pm1'] += $st['m11a'] * 0.5;
|
||||
$st['pm2'] += $st['m11a'] * 0.5;
|
||||
$st['pm3'] += $st['m11a'] * 0.5;
|
||||
$st['pm4'] += $st['m11a'] * 0.5;
|
||||
$st['pm7'] += $st['m11a'] * 0.5;
|
||||
}
|
||||
|
||||
if (isset($st['aall'])) {
|
||||
if (!empty($st['aall'])) {
|
||||
$st['a1'] += $st['aall'];
|
||||
$st['a2'] += $st['aall'];
|
||||
$st['a3'] += $st['aall'];
|
||||
@@ -355,56 +345,35 @@ class Stats
|
||||
$st['a5'] += $st['aall'];
|
||||
}
|
||||
|
||||
if (isset($st['m2all'])) {
|
||||
$st['mg1'] += $st['m2all'];
|
||||
$st['mg2'] += $st['m2all'];
|
||||
$st['mg3'] += $st['m2all'];
|
||||
$st['mg4'] += $st['m2all'];
|
||||
$st['mg7'] += $st['m2all'];
|
||||
}
|
||||
|
||||
if (isset($st['zm'])) {
|
||||
if (!empty($st['zm'])) {
|
||||
$st['zm1'] += $st['zm'];
|
||||
$st['zm2'] += $st['zm'];
|
||||
$st['zm3'] += $st['zm'];
|
||||
$st['zm4'] += $st['zm'];
|
||||
$st['zm5'] += $st['zm'];
|
||||
$st['zm6'] += $st['zm'];
|
||||
$st['zm7'] += $st['zm'];
|
||||
}
|
||||
|
||||
if (isset($st['zma'])) {
|
||||
$st['zm1'] += $st['zma'];
|
||||
$st['zm2'] += $st['zma'];
|
||||
$st['zm3'] += $st['zma'];
|
||||
$st['zm4'] += $st['zma'];
|
||||
$st['zm5'] += $st['zma'];
|
||||
$st['zm6'] += $st['zma'];
|
||||
$st['zm7'] += $st['zma'];
|
||||
}
|
||||
|
||||
if (isset($st['mall'])) {
|
||||
if (!empty($st['mall'])) {
|
||||
$st['mg1'] += $st['mall'];
|
||||
$st['mg2'] += $st['mall'];
|
||||
$st['mg3'] += $st['mall'];
|
||||
$st['mg4'] += $st['mall'];
|
||||
}
|
||||
|
||||
if (isset($st['m11'])) {
|
||||
if (!empty($st['m11'])) {
|
||||
$st['pm1'] += $st['m11'];
|
||||
$st['pm2'] += $st['m11'];
|
||||
$st['pm3'] += $st['m11'];
|
||||
$st['pm4'] += $st['m11'];
|
||||
}
|
||||
|
||||
if (isset($st['m10'])) {
|
||||
if (!empty($st['m10'])) {
|
||||
$st['pa1'] += $st['m10'];
|
||||
$st['pa2'] += $st['m10'];
|
||||
$st['pa3'] += $st['m10'];
|
||||
$st['pa4'] += $st['m10'];
|
||||
}
|
||||
|
||||
if (isset($st['za'])) {
|
||||
if (!empty($st['za'])) {
|
||||
$st['za1'] += $st['za'];
|
||||
$st['za2'] += $st['za'];
|
||||
$st['za3'] += $st['za'];
|
||||
@@ -412,16 +381,16 @@ class Stats
|
||||
}
|
||||
|
||||
if (!empty($st['hpVinos'])) {
|
||||
$st['hpall'] += round($st['hpVinos'] * $st['s4']);
|
||||
$st['hpall'] += (int)($st['hpVinos'] * $st['s4']);
|
||||
}
|
||||
if (!empty($st['mpVinos'])) {
|
||||
$st['mpall'] += round($st['mpVinos'] * $st['s6']);
|
||||
$st['mpall'] += (int)($st['mpVinos'] * $st['s6']);
|
||||
}
|
||||
if (!empty($st['hpProc'])) {
|
||||
$st['hpall'] += round($st['hpall'] / 100 * $st['hpProc']);
|
||||
$st['hpall'] += (int)($st['hpall'] / 100 * $st['hpProc']);
|
||||
}
|
||||
if (!empty($st['mpProc'])) {
|
||||
$st['mpall'] += round($st['mpall'] / 100 * $st['mpProc']);
|
||||
$st['mpall'] += (int)($st['mpall'] / 100 * $st['mpProc']);
|
||||
}
|
||||
|
||||
//Реген. - 250 ед.
|
||||
@@ -430,6 +399,15 @@ class Stats
|
||||
$st['mpNow'] = Comparsion::minimax($st['mpNow'], 0, $st['mpall']);
|
||||
|
||||
//зоны блока и удара
|
||||
|
||||
//если второе оружие одето
|
||||
if ($hnd2 == 1 && $hnd1 == 1) {
|
||||
$st['zona']++;
|
||||
}
|
||||
if ($sht1 == 1) {
|
||||
$st['zonb']++;
|
||||
}
|
||||
|
||||
if ($st['zona'] < 1) {
|
||||
$st['zona'] = 1;
|
||||
}
|
||||
@@ -473,12 +451,9 @@ class Stats
|
||||
$st['btl_cof'] = $st['prckr'];
|
||||
Db::sql('update stats set btl_cof = ? where id = ?', [$st['prckr'], $st['id']]);
|
||||
}
|
||||
if ($st['hpall'] < 1) {
|
||||
$st['hpall'] = 1;
|
||||
}
|
||||
if ($st['mpall'] < 0) {
|
||||
$st['mpall'] = 0;
|
||||
}
|
||||
|
||||
$st['hpall'] = max($st['hpall'], 1);
|
||||
$st['mpall'] = max($st['mpall'], 0);
|
||||
|
||||
if (stristr($u['login'], '(зверь ') || (stristr($u['login'], 'Каменный страж') && $u['ip'] == '0')) {
|
||||
$st['this_animal'] = 1;
|
||||
@@ -495,8 +470,8 @@ class Stats
|
||||
} else {
|
||||
$rt = $st;
|
||||
}
|
||||
if ($u['hpAll'] != $st['hpall'] || $u['mpAll'] != $st['mpall']) {
|
||||
Db::sql('update stats set hpAll = ?, mpAll = ? where id = ?', [$st['hpall'], $st['mpall'], $u['id']]);
|
||||
if ($u['hpAll'] != $st['hpAll'] || $u['mpAll'] != $st['mpAll']) {
|
||||
Db::sql('update stats set hpAll = ?, mpAll = ? where id = ?', [$st['hpAll'], $st['mpAll'], $u['id']]);
|
||||
}
|
||||
if ($btl_cache) {
|
||||
$dataca = [
|
||||
@@ -564,6 +539,7 @@ class Stats
|
||||
5 => [70, 89,],//Великолепная
|
||||
];
|
||||
|
||||
|
||||
foreach ($wearedItems as $wearedItem) {
|
||||
$this->addKeyIfNotExist('wp' . $wearedItem['inOdet'] . 'id', $h, $st);
|
||||
|
||||
@@ -591,48 +567,37 @@ class Stats
|
||||
$this->addKeyIfNotExist('reting', 1, $st);
|
||||
}
|
||||
|
||||
if (isset($data['add_oza'])) {
|
||||
$oza = array_fill_keys($oza, $ozaozmtypes[$data['add_oza']]);
|
||||
}
|
||||
# Пришлось зацикливать, уж больно однотипное.
|
||||
# oza[X][0,1] = add_ozaX[0,1] + add_oza[0,1]
|
||||
# ozm[X][0,1] = add_ozmX[0,1] + add_ozm[0,1]
|
||||
for ($i = 1; $i <= 4; $i++) {
|
||||
if (!isset($data["add_oza$i"])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($data['add_ozm'])) {
|
||||
$ozm = array_fill_keys($ozm, $ozaozmtypes[$data['add_ozm']]);
|
||||
} else {
|
||||
$ozm = array_fill_keys($ozm, $ozaozmtypes[1]);
|
||||
}
|
||||
if (isset($data['add_oza']) && in_array($data['add_oza'], range(1, 5))) {
|
||||
$oza[$i][0] += $ozaozmtypes[$data['add_oza']][0];
|
||||
$oza[$i][1] += $ozaozmtypes[$data['add_oza']][1];
|
||||
}
|
||||
if (isset($data['add_ozm']) && in_array($data['add_ozm'], range(1, 5))) {
|
||||
$ozm[$i][0] += $ozaozmtypes[$data['add_ozm']][0];
|
||||
$ozm[$i][1] += $ozaozmtypes[$data['add_ozm']][1];
|
||||
} else {
|
||||
$ozm[$i][0] += $ozaozmtypes[1][0];
|
||||
$ozm[$i][1] += $ozaozmtypes[1][1];
|
||||
}
|
||||
|
||||
if (in_array($data['add_oza1'], range(1, 5))) {
|
||||
$oza[1] = $ozaozmtypes[$data['add_oza1']];
|
||||
}
|
||||
if (in_array($data['add_oza2'], range(1, 5))) {
|
||||
$oza[2] = $ozaozmtypes[$data['add_oza2']];
|
||||
}
|
||||
if (in_array($data['add_oza3'], range(1, 5))) {
|
||||
$oza[3] = $ozaozmtypes[$data['add_oza3']];
|
||||
}
|
||||
if (in_array($data['add_oza4'], range(1, 5))) {
|
||||
$oza[4] = $ozaozmtypes[$data['add_oza4']];
|
||||
}
|
||||
|
||||
if (in_array($data['add_ozm1'], range(1, 5))) {
|
||||
$ozm[1] = $ozaozmtypes[$data['add_ozm1']];
|
||||
} else {
|
||||
$ozm[1] = $ozaozmtypes[1];
|
||||
}
|
||||
if (in_array($data['add_ozm2'], range(1, 5))) {
|
||||
$ozm[2] = $ozaozmtypes[$data['add_ozm2']];
|
||||
} else {
|
||||
$ozm[2] = $ozaozmtypes[1];
|
||||
}
|
||||
if (in_array($data['add_ozm3'], range(1, 5))) {
|
||||
$ozm[3] = $ozaozmtypes[$data['add_ozm3']];
|
||||
} else {
|
||||
$ozm[3] = $ozaozmtypes[1];
|
||||
}
|
||||
if (in_array($data['add_ozm4'], range(1, 5))) {
|
||||
$ozm[4] = $ozaozmtypes[$data['add_ozm4']];
|
||||
} else {
|
||||
$ozm[4] = $ozaozmtypes[1];
|
||||
if (in_array($data["add_oza$i"], range(1, 5))) {
|
||||
$oza[$i][0] += $ozaozmtypes[$data["add_oza$i"]][0];
|
||||
$oza[$i][1] += $ozaozmtypes[$data["add_oza$i"]][1];
|
||||
}
|
||||
if (isset($data["add_ozm$i"]) && in_array($data["add_ozm$i"], range(1, 5))) {
|
||||
$ozm[$i][0] += $ozaozmtypes[$data["add_ozm$i"]][0];
|
||||
$ozm[$i][1] += $ozaozmtypes[$data["add_ozm$i"]][1];
|
||||
} else {
|
||||
$ozm[$i][0] += $ozaozmtypes[1][0];
|
||||
$ozm[$i][1] += $ozaozmtypes[1][1];
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($data['art'])) {
|
||||
@@ -1167,7 +1132,11 @@ class Stats
|
||||
);
|
||||
|
||||
//Бонус за количество полностью вырытых пещер.
|
||||
$st['m10'] += 10 * $finishedDungeons;
|
||||
if (isset($st['m10'])) {
|
||||
$st['m10'] += 10 * $finishedDungeons;
|
||||
} else {
|
||||
$st['m10'] = 10 * $finishedDungeons;
|
||||
}
|
||||
}
|
||||
|
||||
private function addAdminBonuses(array $u, array &$st): void
|
||||
@@ -1197,11 +1166,22 @@ class Stats
|
||||
*/
|
||||
private function renameArrayKeys(array &$st): void
|
||||
{
|
||||
$st['lvl'] = $st['level'];
|
||||
$st['hpNow'] = $st['hpnow'];
|
||||
$st['mpNow'] = $st['mpnow'];
|
||||
|
||||
unset($st['level'], $st['hpnow'], $st['mpnow']);
|
||||
if (isset($st['level'])) {
|
||||
$st['lvl'] = $st['level'];
|
||||
}
|
||||
if (isset($st['hpall'])) {
|
||||
$st['hpAll'] = $st['hpall'];
|
||||
}
|
||||
if (isset($st['mpall'])) {
|
||||
$st['mpAll'] = $st['mpall'];
|
||||
}
|
||||
if (isset($st['hpnow'])) {
|
||||
$st['hpNow'] = $st['hpnow'];
|
||||
}
|
||||
if (isset($st['mpnow'])) {
|
||||
$st['mpNow'] = $st['mpnow'];
|
||||
}
|
||||
unset($st['level'], $st['hpnow'], $st['mpnow'], $st['hpall'], $st['mpall']);
|
||||
}
|
||||
|
||||
public static function saveBattleStats(array $stats, int $id): void
|
||||
|
||||
@@ -107,7 +107,7 @@ $pvr = array();
|
||||
}
|
||||
//
|
||||
$pvr['x5']['priem']['id'] = $pvr['x5']['v2'];
|
||||
$btl->delPriem($pvr['x5'],$btl->users[$btl->uids[$this->ue['id']]],2);
|
||||
$btl->delPriem($pvr['x5'], $btl->users[$btl->uids[$this->ue['id']]], 2);
|
||||
//
|
||||
|
||||
//Добавляем прием
|
||||
|
||||
@@ -107,7 +107,7 @@ $pvr = array();
|
||||
}
|
||||
//
|
||||
$pvr['x5']['priem']['id'] = $pvr['x5']['v2'];
|
||||
$btl->delPriem($pvr['x5'],$btl->users[$btl->uids[$this->ue['id']]],2);
|
||||
$btl->delPriem($pvr['x5'], $btl->users[$btl->uids[$this->ue['id']]], 2);
|
||||
//
|
||||
|
||||
//Добавляем прием
|
||||
|
||||
@@ -107,7 +107,7 @@ $pvr = array();
|
||||
}
|
||||
//
|
||||
$pvr['x5']['priem']['id'] = $pvr['x5']['v2'];
|
||||
$btl->delPriem($pvr['x5'],$btl->users[$btl->uids[$this->ue['id']]],2);
|
||||
$btl->delPriem($pvr['x5'], $btl->users[$btl->uids[$this->ue['id']]], 2);
|
||||
//
|
||||
|
||||
//Добавляем прием
|
||||
|
||||
+143
-129
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
if(!defined('GAME')) {
|
||||
die();
|
||||
if (!defined('GAME')) {
|
||||
die();
|
||||
}
|
||||
/*
|
||||
Прием: Магический барьер [4]
|
||||
@@ -8,136 +8,150 @@ if(!defined('GAME')) {
|
||||
Цена: 2 маны - 1 ед.
|
||||
Процент поглощения: 50%
|
||||
*/
|
||||
$pvr = array();
|
||||
$pvr = [];
|
||||
|
||||
//Действие при клике
|
||||
if( isset($pr_momental_this)) {
|
||||
$fx_moment = function( $uid, $enemy, $j_id, $yron, $profil ) {
|
||||
if(!isset($btl->stats[$btl->uids[$uid]]['um_priem'][$j_id])) {
|
||||
global $u, $btl;
|
||||
$prv['j_priem'] = $btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][0];
|
||||
$prv['priem_th'] = $btl->stats[$btl->uids[$uid]]['effects'][$prv['j_priem']]['id'];
|
||||
$yron = $btl->testPogB($uid,$yron,$btl->stats[$btl->uids[$uid]]['effects'][$prv['j_priem']]['id']);
|
||||
$btl->testPogB($uid,1,$btl->stats[$btl->uids[$uid]]['effects'][$prv['j_priem']]['id'],1);
|
||||
//$btl->stats[$btl->uids[$uid]]['um_priem'][$j_id]
|
||||
/*$btl->priemAddLogFast( $uid, 0, "Призрачная защита",
|
||||
'{tm1} '.$btl->addlt(1 , 17 , $btl->users[$btl->uids[$uid]]['sex'] , NULL).'',
|
||||
0, time() );*/
|
||||
if( $yron < 0 ) {
|
||||
$yron = 0;
|
||||
}
|
||||
$btl->stats[$btl->uids[$uid]]['um_priem'][$j_id] = true;
|
||||
}
|
||||
return round($yron);
|
||||
};
|
||||
}elseif( isset($pr_tested_this) ) {
|
||||
$fx_priem = function( $id , $at , $uid, $j_id ) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if( $uid == $uid2 ) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
}elseif( $uid == $uid1 ) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if( isset($at['p'][$a]['priems']['kill'][$uid][$j_id]) ) {
|
||||
//mysql_query('UPDATE `eff_users` SET `delete` = "'.time().'" WHERE `id` = "'.$btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][3].'" AND `uid` = "'.$uid.'" LIMIT 1');
|
||||
//unset($btl->stats[$btl->uids[$uid]]['u_priem'][$j_id]);
|
||||
}
|
||||
//
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset( $pr_used_this );
|
||||
}elseif( isset($pr_used_this) ) {
|
||||
$fx_priem = function( $id , $at , $uid, $j_id ) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if( $uid == $uid2 ) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
}elseif( $uid == $uid1 ) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if( $a > 0 ) {
|
||||
$j = 0; $k = 0; $wp = 3;
|
||||
$checktuman=mysql_fetch_array(mysql_query('SELECT * FROM `eff_users` WHERE `uid` = "'.$uid.'"
|
||||
if (isset($pr_momental_this)) {
|
||||
$fx_moment = function ($uid, $enemy, $j_id, $yron, $profil) {
|
||||
if (!isset($btl->stats[$btl->uids[$uid]]['um_priem'][$j_id])) {
|
||||
global $u, $btl;
|
||||
$prv['j_priem'] = $btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][0];
|
||||
$prv['priem_th'] = $btl->stats[$btl->uids[$uid]]['effects'][$prv['j_priem']]['id'];
|
||||
$yron = $btl->testPogB($uid, $yron, $btl->stats[$btl->uids[$uid]]['effects'][$prv['j_priem']]['id']);
|
||||
$btl->testPogB($uid, 1, $btl->stats[$btl->uids[$uid]]['effects'][$prv['j_priem']]['id'], 1);
|
||||
//$btl->stats[$btl->uids[$uid]]['um_priem'][$j_id]
|
||||
/*$btl->priemAddLogFast( $uid, 0, "Призрачная защита",
|
||||
'{tm1} '.$btl->addlt(1 , 17 , $btl->users[$btl->uids[$uid]]['sex'] , NULL).'',
|
||||
0, time() );*/
|
||||
if ($yron < 0) {
|
||||
$yron = 0;
|
||||
}
|
||||
$btl->stats[$btl->uids[$uid]]['um_priem'][$j_id] = true;
|
||||
}
|
||||
return round($yron);
|
||||
};
|
||||
} elseif (isset($pr_tested_this)) {
|
||||
$fx_priem = function ($id, $at, $uid, $j_id) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if ($uid == $uid2) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
} elseif ($uid == $uid1) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
|
||||
//
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset($pr_used_this);
|
||||
} elseif (isset($pr_used_this)) {
|
||||
$fx_priem = function ($id, $at, $uid, $j_id) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if ($uid == $uid2) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
} elseif ($uid == $uid1) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if ($a > 0) {
|
||||
$j = 0;
|
||||
$k = 0;
|
||||
$wp = 3;
|
||||
$checktuman = mysql_fetch_array(
|
||||
mysql_query(
|
||||
'SELECT * FROM `eff_users` WHERE `uid` = "' . $uid . '"
|
||||
AND (`v2` = 273 OR `v2` = 286 OR `v2` = 287 OR `v2` = 288)
|
||||
AND `delete` =0 LIMIT 1')); //проверка на туманный образ
|
||||
if(!isset($checktuman['id']))
|
||||
{
|
||||
while($j < count($at['p'][$a]['atack'])) {
|
||||
if( isset($at['p'][$a]['atack'][$j]['yron']) && (
|
||||
$at['p'][$a]['atack'][$j][1] == 1 ||
|
||||
$at['p'][$a]['atack'][$j][1] == 4 ||
|
||||
$at['p'][$a]['atack'][$j][1] == 5 )) {
|
||||
//if( !isset($at['p'][$a]['priems']['kill'][$uid][$j_id]) ) {
|
||||
//
|
||||
$prv['j_priem'] = $btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][0];
|
||||
$prv['priem_th'] = $btl->stats[$btl->uids[$uid]]['effects'][$prv['j_priem']]['id'];
|
||||
//
|
||||
$attest = round($btl->testPogB($uid,$at['p'][$a]['atack'][$j]['yron']['y'],$btl->stats[$btl->uids[$uid]]['effects'][$prv['j_priem']]['id']));
|
||||
if( $at['p'][$a]['atack'][$j]['yron']['y'] < 1 ) { $at['p'][$a]['atack'][$j]['yron']['y'] = 0; }
|
||||
|
||||
$at['p'][$a]['atack'][$j]['yron']['y'] = round($at['p'][$a]['atack'][$j]['yron']['y']/2);
|
||||
$at['p'][$a]['atack'][$j]['yron']['r'] = round($at['p'][$a]['atack'][$j]['yron']['r']/2);
|
||||
$at['p'][$a]['atack'][$j]['yron']['k'] = round($at['p'][$a]['atack'][$j]['yron']['k']/2);
|
||||
$at['p'][$a]['atack'][$j]['yron']['m_k'] = round($at['p'][$a]['atack'][$j]['yron']['m_k']1.2);
|
||||
$at['p'][$a]['atack'][$j]['yron']['m_y'] = round($at['p'][$a]['atack'][$j]['yron']['m_y']/2);
|
||||
|
||||
|
||||
if( $at['p'][$a]['atack'][$j]['yron']['y'] < 1 ) { $at['p'][$a]['atack'][$j]['yron']['y'] = 1; }
|
||||
if( $at['p'][$a]['atack'][$j]['yron']['r'] >= 0 ) { $at['p'][$a]['atack'][$j]['yron']['r'] = -1; }
|
||||
if( $at['p'][$a]['atack'][$j]['yron']['k'] < 1 ) { $at['p'][$a]['atack'][$j]['yron']['k'] = 1; }
|
||||
if( $at['p'][$a]['atack'][$j]['yron']['m_k'] < 1 ) { $at['p'][$a]['atack'][$j]['yron']['m_k'] = 1; }
|
||||
if( $at['p'][$a]['atack'][$j]['yron']['m_y'] < 1 ) { $at['p'][$a]['atack'][$j]['yron']['m_y'] = 1; }
|
||||
//
|
||||
$at['p'][$a]['atack'][$j]['yron']['used'][] = array($j_id,$uid,$pvr['used']);
|
||||
$at['p'][$a]['atack'][$j]['yron']['kill'][] = array($j_id,$uid,$pvr['kill']);
|
||||
//
|
||||
$at['p'][$a]['priems']['kill'][$uid][$j_id] = true;
|
||||
//}
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset( $pr_used_this );
|
||||
}else{
|
||||
//Действие при клике
|
||||
$btl->priemAddLog( $id, 1, 2, $u->info['id'], $u->info['enemy'],
|
||||
'Магический Барьер [4]',
|
||||
'{tm1} '.$btl->addlt(1 , 21 , $btl->users[$btl->uids[$u->info['id']]]['sex'] , NULL).'',
|
||||
($btl->hodID+1)
|
||||
);
|
||||
echo '<font color=red><b>Вы успешно использовали прием "Магический Барьер [4]"</b></font>';
|
||||
$this->addEffPr($pl,$id);
|
||||
AND `delete` =0 LIMIT 1'
|
||||
)
|
||||
); //проверка на туманный образ
|
||||
if (!isset($checktuman['id'])) {
|
||||
while ($j < count($at['p'][$a]['atack'])) {
|
||||
if (isset($at['p'][$a]['atack'][$j]['yron']) && (
|
||||
$at['p'][$a]['atack'][$j][1] == 1 ||
|
||||
$at['p'][$a]['atack'][$j][1] == 4 ||
|
||||
$at['p'][$a]['atack'][$j][1] == 5)) {
|
||||
//if( !isset($at['p'][$a]['priems']['kill'][$uid][$j_id]) ) {
|
||||
//
|
||||
$prv['j_priem'] = $btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][0];
|
||||
$prv['priem_th'] = $btl->stats[$btl->uids[$uid]]['effects'][$prv['j_priem']]['id'];
|
||||
//
|
||||
$attest = round($btl->testPogB($uid, $at['p'][$a]['atack'][$j]['yron']['y'], $btl->stats[$btl->uids[$uid]]['effects'][$prv['j_priem']]['id']));
|
||||
if ($at['p'][$a]['atack'][$j]['yron']['y'] < 1) {
|
||||
$at['p'][$a]['atack'][$j]['yron']['y'] = 0;
|
||||
}
|
||||
|
||||
$at['p'][$a]['atack'][$j]['yron']['y'] = round($at['p'][$a]['atack'][$j]['yron']['y'] / 2);
|
||||
$at['p'][$a]['atack'][$j]['yron']['r'] = round($at['p'][$a]['atack'][$j]['yron']['r'] / 2);
|
||||
$at['p'][$a]['atack'][$j]['yron']['k'] = round($at['p'][$a]['atack'][$j]['yron']['k'] / 2);
|
||||
$at['p'][$a]['atack'][$j]['yron']['m_k'] = round($at['p'][$a]['atack'][$j]['yron']['m_k'] / 1.2);
|
||||
$at['p'][$a]['atack'][$j]['yron']['m_y'] = round($at['p'][$a]['atack'][$j]['yron']['m_y'] / 2);
|
||||
|
||||
|
||||
if ($at['p'][$a]['atack'][$j]['yron']['y'] < 1) {
|
||||
$at['p'][$a]['atack'][$j]['yron']['y'] = 1;
|
||||
}
|
||||
if ($at['p'][$a]['atack'][$j]['yron']['r'] >= 0) {
|
||||
$at['p'][$a]['atack'][$j]['yron']['r'] = -1;
|
||||
}
|
||||
if ($at['p'][$a]['atack'][$j]['yron']['k'] < 1) {
|
||||
$at['p'][$a]['atack'][$j]['yron']['k'] = 1;
|
||||
}
|
||||
if ($at['p'][$a]['atack'][$j]['yron']['m_k'] < 1) {
|
||||
$at['p'][$a]['atack'][$j]['yron']['m_k'] = 1;
|
||||
}
|
||||
if ($at['p'][$a]['atack'][$j]['yron']['m_y'] < 1) {
|
||||
$at['p'][$a]['atack'][$j]['yron']['m_y'] = 1;
|
||||
}
|
||||
//
|
||||
$at['p'][$a]['atack'][$j]['yron']['used'][] = [$j_id, $uid, $pvr['used']];
|
||||
$at['p'][$a]['atack'][$j]['yron']['kill'][] = [$j_id, $uid, $pvr['kill']];
|
||||
//
|
||||
$at['p'][$a]['priems']['kill'][$uid][$j_id] = true;
|
||||
//}
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset($pr_used_this);
|
||||
} else {
|
||||
//Действие при клике
|
||||
$btl->priemAddLog(
|
||||
$id, 1, 2, $u->info['id'], $u->info['enemy'],
|
||||
'Магический Барьер [4]',
|
||||
'{tm1} ' . $btl->addlt(1, 21, $btl->users[$btl->uids[$u->info['id']]]['sex'], null) . '',
|
||||
($btl->hodID + 1)
|
||||
);
|
||||
echo '<font color=red><b>Вы успешно использовали прием "Магический Барьер [4]"</b></font>';
|
||||
$this->addEffPr($pl, $id);
|
||||
}
|
||||
|
||||
unset($pvr);
|
||||
?>
|
||||
+96
-107
@@ -1,115 +1,104 @@
|
||||
<?php
|
||||
if(!defined('GAME')) {
|
||||
die();
|
||||
if (!defined('GAME')) {
|
||||
die();
|
||||
}
|
||||
/*
|
||||
Прием: Скрытая ловкость
|
||||
Уворот от 1-го удара и наносите контрудар
|
||||
*/
|
||||
$pvr = array();
|
||||
if( isset($pr_tested_this) ) {
|
||||
$fx_priem = function( $id , $at , $uid, $j_id ) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if( $uid == $uid2 ) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
}elseif( $uid == $uid1 ) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if( isset($at['p'][$a]['priems']['kill'][$uid][$j_id]) ) {
|
||||
mysql_query('UPDATE `eff_users` SET `delete` = "'.time().'" WHERE `id` = "'.$btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][3].'" AND `uid` = "'.$uid.'" LIMIT 1');
|
||||
unset($btl->stats[$btl->uids[$uid]]['u_priem'][$j_id]);
|
||||
}
|
||||
//
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset( $pr_used_this );
|
||||
}elseif( isset($pr_used_this) ) {
|
||||
$fx_priem = function( $id , $at , $uid, $j_id ) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if( $uid == $uid2 ) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
}elseif( $uid == $uid1 ) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if( $a > 0 ) {
|
||||
$j = 0; $k = 0; $wp = 3;
|
||||
while($j < count($at['p'][$a]['atack'])) {
|
||||
if(
|
||||
!isset($at['p'][$a]['atack'][$j]['priem_used']) &&
|
||||
( $at['p'][$a]['atack'][$j][1] > 0 )
|
||||
){
|
||||
if(/* $btl->stats[$btl->uids[$u1]]['nopryh_act'] < 1 хуй знает для чего &&*/ $pvr['used'] == 0 && !isset($at['p'][$a]['priems']['kill'][$uid][$j_id]) ) {
|
||||
//
|
||||
//Уворот от удара выставляем
|
||||
unset($at['p'][$a]['atack'][$j]['yron']);
|
||||
$at['p'][$a]['atack'][$j][1] = 8;
|
||||
$pvr['rnd_a'] = rand(1,5);
|
||||
if( $btl->testRazmenblock1($id,$u2,$u1,$pvr['rnd_a']) == false ) {
|
||||
//Попал
|
||||
$at['p'][$b]['atack'][] = array( $pvr['rnd_a'] , 1 , 0 , 1 ); // 1 1 1
|
||||
}else{
|
||||
//В блок
|
||||
$at['p'][$b]['atack'][] = array( $pvr['rnd_a'] , 3 , 0 , 1 ); // 2 1 1
|
||||
}
|
||||
//$at = $btl->contrRestart($id,$at,true);
|
||||
//$at = $btl->priemsTestRazmen($id,$at);
|
||||
//
|
||||
/*$at['p'][$a]['atack'][$j]['yron']['plog'][] = '$this->deleffm(215,'.(0+$uid).','.$btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][3].');
|
||||
$this->priemAddLog( '.$id.', '.$b.', '.$a.', '.$u2.', '.$u1.',
|
||||
"Скрытая ловкость",
|
||||
"{tm1} '.$btl->addlt($b , 17 , $btl->users[$btl->uids[$u2]]['sex'] , NULL).'",
|
||||
'.($btl->hodID + 1).' );';*/
|
||||
//
|
||||
$at['p'][$a]['atack'][$j]['yron']['used'][] = array($j_id,$uid,$pvr['used']);
|
||||
$at['p'][$a]['atack'][$j]['yron']['kill'][] = array($j_id,$uid,$pvr['kill']);
|
||||
//
|
||||
$at['p'][$a]['priems']['kill'][$uid][$j_id] = true;
|
||||
$at['p'][$a]['atack'][$j]['priem_used'] = $id;
|
||||
//
|
||||
if( $btl->testRazmenblock1($id,$u2,$u1,$pvr['rnd_a']) == false ) {
|
||||
$at = $this->yronRazmen($id,$at,true);
|
||||
}
|
||||
//
|
||||
}
|
||||
//
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset( $pr_used_this );
|
||||
}else{
|
||||
//Действие при клике
|
||||
$this->addEffPr($pl,$id);
|
||||
$pvr = [];
|
||||
if (isset($pr_tested_this)) {
|
||||
$fx_priem = function ($id, $at, $uid, $j_id) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if ($uid == $uid2) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
} elseif ($uid == $uid1) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if (isset($at['p'][$a]['priems']['kill'][$uid][$j_id])) {
|
||||
mysql_query('UPDATE `eff_users` SET `delete` = "' . time() . '" WHERE `id` = "' . $btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][3] . '" AND `uid` = "' . $uid . '" LIMIT 1');
|
||||
unset($btl->stats[$btl->uids[$uid]]['u_priem'][$j_id]);
|
||||
}
|
||||
//
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset($pr_used_this);
|
||||
} elseif (isset($pr_used_this)) {
|
||||
$fx_priem = function ($id, $at, $uid, $j_id) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if ($uid == $uid2) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
} elseif ($uid == $uid1) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if ($a > 0) {
|
||||
$j = 0;
|
||||
$k = 0;
|
||||
$wp = 3;
|
||||
while ($j < count($at['p'][$a]['atack'])) {
|
||||
if (
|
||||
!isset($at['p'][$a]['atack'][$j]['priem_used']) &&
|
||||
($at['p'][$a]['atack'][$j][1] > 0)
|
||||
) {
|
||||
if (/* $btl->stats[$btl->uids[$u1]]['nopryh_act'] < 1 хуй знает для чего &&*/ $pvr['used'] == 0 && !isset($at['p'][$a]['priems']['kill'][$uid][$j_id])) {
|
||||
//
|
||||
//Уворот от удара выставляем
|
||||
unset($at['p'][$a]['atack'][$j]['yron']);
|
||||
$at['p'][$a]['atack'][$j][1] = 8;
|
||||
$pvr['rnd_a'] = rand(1, 5);
|
||||
if (!$btl->testRazmenblock1($id, $u2, $u1)) {
|
||||
//Попал
|
||||
$at['p'][$b]['atack'][] = [$pvr['rnd_a'], 1, 0, 1]; // 1 1 1
|
||||
} else {
|
||||
//В блок
|
||||
$at['p'][$b]['atack'][] = [$pvr['rnd_a'], 3, 0, 1]; // 2 1 1
|
||||
}
|
||||
$at['p'][$a]['atack'][$j]['yron']['used'][] = [$j_id, $uid, $pvr['used']];
|
||||
$at['p'][$a]['atack'][$j]['yron']['kill'][] = [$j_id, $uid, $pvr['kill']];
|
||||
$at['p'][$a]['priems']['kill'][$uid][$j_id] = true;
|
||||
$at['p'][$a]['atack'][$j]['priem_used'] = $id;
|
||||
if (!$btl->testRazmenblock1($id, $u2, $u1)) {
|
||||
$at = $this->yronRazmen($id, $at, true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset($pr_used_this);
|
||||
} else {
|
||||
//Действие при клике
|
||||
$this->addEffPr($pl, $id);
|
||||
}
|
||||
unset($pvr);
|
||||
?>
|
||||
@@ -114,7 +114,7 @@ if( isset($pr_tested_this) ) {
|
||||
}else{mysql_query('UPDATE `eff_users` SET `uid` = "'.$u1.'" WHERE `id` = "'.$pvr['pl']['id'].'" LIMIT 1');}*/
|
||||
|
||||
|
||||
$btl->delPriem($pvr['pl'],$btl->users[$btl->uids[$u2]],100,0,$pvr['pl']['name']);
|
||||
$btl->delPriem($pvr['pl'], $btl->users[$btl->uids[$u2]], 100, 0, $pvr['pl']['name']);
|
||||
|
||||
|
||||
//$this->addPriem($u1,$pvr['pl']['priem']['id'],''.$pvr['pl']['priem']['data2'].'',''.$pvr['pl']['priem']['data3'].'',77,5,$u1,1,''.$pvr['pl']['priem']['name'].'',0,0,1);
|
||||
|
||||
@@ -119,7 +119,7 @@ if( isset($pr_used_this) && isset($pr_moment) ) {
|
||||
($btl->hodID)
|
||||
);
|
||||
// спасение
|
||||
$btl->spaCheck($u1]);
|
||||
$btl->spaCheck($u1);
|
||||
// спасение
|
||||
}
|
||||
// -- конец приема
|
||||
|
||||
@@ -158,7 +158,7 @@ if( isset($pr_used_this) && isset($pr_moment) ) {
|
||||
($btl->hodID)
|
||||
);
|
||||
// спасение
|
||||
$btl->spaCheck($u1]);
|
||||
$btl->spaCheck($u1);
|
||||
// спасение
|
||||
$pvr['ijk']++;
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ if( isset($pr_used_this) && isset($pr_moment) ) {
|
||||
($btl->hodID)
|
||||
);
|
||||
// спасение
|
||||
$btl->spaCheck($u1]);
|
||||
$btl->spaCheck($u1);
|
||||
// спасение
|
||||
//
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ if( isset($pr_used_this) && isset($pr_moment) ) {
|
||||
$prv['priem_th'] = $btl->stats[$btl->uids[$u1]]['effects'][$prv['j_priem']]['id'];
|
||||
|
||||
//действия
|
||||
$pvr['hp'] = 20);
|
||||
$pvr['hp'] = 20;
|
||||
$pvr['hp'] = $priem->magatack( $btl->stats[$btl->uids[$u1]]['effects'][$prv['j_priem']]['user_use'], $u1, $pvr['hp'], 'тьма', 1 );
|
||||
$pvr['promah_type'] = $pvr['hp'][3];
|
||||
$pvr['promah'] = $pvr['hp'][2];
|
||||
@@ -57,7 +57,7 @@ if( isset($pr_used_this) && isset($pr_moment) ) {
|
||||
}
|
||||
//
|
||||
$pvr['hp'] = 20;
|
||||
$pvr['hp'] = $btl->testYronPriem( $btl->stats[$btl->uids[$rand_user]]['effects'][$prv['j_priem']]['user_use'], $rand_user, 12, $pvr['hp'], -1, true , false , 0);
|
||||
$pvr['hp'] = $btl->testYronPriem( $btl->stats[$btl->uids[$rand_user[array_rand($rand_user)]]]['effects'][$prv['j_priem']]['user_use'], $rand_user, 12, $pvr['hp'], -1, true , false , 0);
|
||||
//
|
||||
$pvr['rndu']['id'] = $rand_user;
|
||||
$pvr['color'] = '006699';
|
||||
|
||||
+103
-106
@@ -1,115 +1,112 @@
|
||||
<?php
|
||||
if(!defined('GAME')) {
|
||||
die();
|
||||
if (!defined('GAME')) {
|
||||
die();
|
||||
}
|
||||
/*
|
||||
Прием: Танец лезвий
|
||||
Уворот от 1-го удара и наносите контрудар
|
||||
*/
|
||||
$pvr = array();
|
||||
if( isset($pr_tested_this) ) {
|
||||
$fx_priem = function( $id , $at , $uid, $j_id ) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if( $uid == $uid2 ) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
}elseif( $uid == $uid1 ) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if( isset($at['p'][$a]['priems']['kill'][$uid][$j_id]) ) {
|
||||
mysql_query('UPDATE `eff_users` SET `delete` = "'.time().'" WHERE `id` = "'.$btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][3].'" AND `uid` = "'.$uid.'" LIMIT 1');
|
||||
unset($btl->stats[$btl->uids[$uid]]['u_priem'][$j_id]);
|
||||
}
|
||||
//
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset( $pr_used_this );
|
||||
}elseif( isset($pr_used_this) ) {
|
||||
$fx_priem = function( $id , $at , $uid, $j_id ) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if( $uid == $uid2 ) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
}elseif( $uid == $uid1 ) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if( $a > 0 ) {
|
||||
$j = 0; $k = 0; $wp = 3;
|
||||
while($j < count($at['p'][$a]['atack'])) {
|
||||
if(
|
||||
!isset($at['p'][$a]['atack'][$j]['priem_used']) &&
|
||||
( $at['p'][$a]['atack'][$j][1] > 0 )
|
||||
) {
|
||||
if(/* $btl->stats[$btl->uids[$u1]]['nopryh_act'] < 1 хуй знает для чего &&*/ $pvr['used'] == 0 && !isset($at['p'][$a]['priems']['kill'][$uid][$j_id]) ) {
|
||||
//
|
||||
//Уворот от удара выставляем
|
||||
unset($at['p'][$a]['atack'][$j]['yron']);
|
||||
$at['p'][$a]['atack'][$j][1] = 8;
|
||||
$pvr['rnd_a'] = rand(1,5);
|
||||
if( $btl->testRazmenblock1($id,$u2,$u1,$pvr['rnd_a']) == false ) {
|
||||
//Попал
|
||||
$at['p'][$b]['atack'][] = array( $pvr['rnd_a'] , 1 , 0 , 1 );
|
||||
}else{
|
||||
//В блок
|
||||
$at['p'][$b]['atack'][] = array( $pvr['rnd_a'] , 3 , 0 , 1 );
|
||||
}
|
||||
//$at = $btl->contrRestart($id,$at,true);
|
||||
//$at = $btl->priemsTestRazmen($id,$at);
|
||||
//
|
||||
$at['p'][$a]['atack'][$j]['yron']['plog'][] = '$this->deleffm(48,'.(0+$uid).','.$btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][3].');
|
||||
$this->priemAddLog( '.$id.', '.$b.', '.$a.', '.$u2.', '.$u1.',
|
||||
$pvr = [];
|
||||
if (isset($pr_tested_this)) {
|
||||
$fx_priem = function ($id, $at, $uid, $j_id) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if ($uid == $uid2) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
} elseif ($uid == $uid1) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if (isset($at['p'][$a]['priems']['kill'][$uid][$j_id])) {
|
||||
mysql_query('UPDATE `eff_users` SET `delete` = "' . time() . '" WHERE `id` = "' . $btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][3] . '" AND `uid` = "' . $uid . '" LIMIT 1');
|
||||
unset($btl->stats[$btl->uids[$uid]]['u_priem'][$j_id]);
|
||||
}
|
||||
//
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset($pr_used_this);
|
||||
} elseif (isset($pr_used_this)) {
|
||||
$fx_priem = function ($id, $at, $uid, $j_id) {
|
||||
// -- начало приема
|
||||
global $u, $btl;
|
||||
//
|
||||
//Параметры приема
|
||||
$pvr['used'] = 0;
|
||||
//
|
||||
$uid1 = $btl->atacks[$id]['uid1'];
|
||||
$uid2 = $btl->atacks[$id]['uid2'];
|
||||
if ($uid == $uid2) {
|
||||
$a = 1;
|
||||
$b = 2;
|
||||
$u1 = $uid1;
|
||||
$u2 = $uid2;
|
||||
} elseif ($uid == $uid1) {
|
||||
$a = 2;
|
||||
$b = 1;
|
||||
$u1 = $uid2;
|
||||
$u2 = $uid1;
|
||||
}
|
||||
if ($a > 0) {
|
||||
$j = 0;
|
||||
$k = 0;
|
||||
$wp = 3;
|
||||
while ($j < count($at['p'][$a]['atack'])) {
|
||||
if (
|
||||
!isset($at['p'][$a]['atack'][$j]['priem_used']) &&
|
||||
($at['p'][$a]['atack'][$j][1] > 0)
|
||||
) {
|
||||
if ($btl->stats[$btl->uids[$u1]]['nopryh_act'] < 1 && $pvr['used'] == 0 && !isset($at['p'][$a]['priems']['kill'][$uid][$j_id])) {
|
||||
//
|
||||
//Уворот от удара выставляем
|
||||
unset($at['p'][$a]['atack'][$j]['yron']);
|
||||
$at['p'][$a]['atack'][$j][1] = 8;
|
||||
$pvr['rnd_a'] = rand(1, 5);
|
||||
if (!$btl->testRazmenblock1($id, $u2, $u1)) {
|
||||
//Попал
|
||||
$at['p'][$b]['atack'][] = [$pvr['rnd_a'], 1, 0, 1];
|
||||
} else {
|
||||
//В блок
|
||||
$at['p'][$b]['atack'][] = [$pvr['rnd_a'], 3, 0, 1];
|
||||
}
|
||||
$at['p'][$a]['atack'][$j]['yron']['plog'][] = '$this->deleffm(48,' . (0 + $uid) . ',' . $btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][3] . ');
|
||||
$this->priemAddLog( ' . $id . ', ' . $b . ', ' . $a . ', ' . $u2 . ', ' . $u1 . ',
|
||||
"Танец лезвий",
|
||||
"{tm1} '.$btl->addlt($b , 17 , $btl->users[$btl->uids[$u2]]['sex'] , NULL).'",
|
||||
'.($btl->hodID + 1).' );';
|
||||
//
|
||||
$at['p'][$a]['atack'][$j]['yron']['used'][] = array($j_id,$uid,$pvr['used']);
|
||||
$at['p'][$a]['atack'][$j]['yron']['kill'][] = array($j_id,$uid,$pvr['kill']);
|
||||
//
|
||||
$at['p'][$a]['priems']['kill'][$uid][$j_id] = true;
|
||||
$at['p'][$a]['atack'][$j]['priem_used'] = $id;
|
||||
//
|
||||
if( $btl->testRazmenblock1($id,$u2,$u1,$pvr['rnd_a']) == false ) {
|
||||
$at = $this->yronRazmen($id,$at,true);
|
||||
}
|
||||
//
|
||||
}
|
||||
//
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset( $pr_used_this );
|
||||
}else{
|
||||
//Действие при клике
|
||||
$this->addEffPr($pl,$id);
|
||||
"{tm1} ' . $btl->addlt($b, 17, $btl->users[$btl->uids[$u2]]['sex'], null) . '",
|
||||
' . ($btl->hodID + 1) . ' );';
|
||||
$at['p'][$a]['atack'][$j]['yron']['used'][] = [$j_id, $uid, $pvr['used']];
|
||||
$at['p'][$a]['atack'][$j]['yron']['kill'][] = [$j_id, $uid, $pvr['kill']];
|
||||
//
|
||||
$at['p'][$a]['priems']['kill'][$uid][$j_id] = true;
|
||||
$at['p'][$a]['atack'][$j]['priem_used'] = $id;
|
||||
//
|
||||
if (!$btl->testRazmenblock1($id, $u2, $u1)) {
|
||||
$at = $this->yronRazmen($id, $at, true);
|
||||
}
|
||||
//
|
||||
}
|
||||
//
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
// -- конец приема
|
||||
return $at;
|
||||
};
|
||||
unset($pr_used_this);
|
||||
} else {
|
||||
//Действие при клике
|
||||
$this->addEffPr($pl, $id);
|
||||
}
|
||||
unset($pvr);
|
||||
?>
|
||||
@@ -95,7 +95,7 @@ if(isset($hod))
|
||||
if($this->minMana($eff['user_use'],$minmp,4)==false)
|
||||
{
|
||||
//снимаем эффект, мана закончилась
|
||||
$btl->delPriem($eff,$btl->users[$btl->uids[$eff['uid']]],2);
|
||||
$btl->delPriem($eff, $btl->users[$btl->uids[$eff['uid']]], 2);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
@@ -236,7 +236,7 @@ if(isset($hod))
|
||||
if($dell) {
|
||||
$dell['priem']['id']=$dell['id'];
|
||||
//if($dell['x']==1){
|
||||
$btl->delPriem($dell,$u->info,99);
|
||||
$btl->delPriem($dell, $u->info, 99);
|
||||
/*}else{
|
||||
$i=0;
|
||||
$e = explode('|',$dell['data']);
|
||||
|
||||
@@ -53,7 +53,7 @@ if(isset($hod))
|
||||
if($this->minMana($eff['user_use'],$minmp,1)==false)
|
||||
{
|
||||
//снимаем эффект, мана закончилась
|
||||
$btl->delPriem($eff,$btl->users[$btl->uids[$eff['uid']]],2);
|
||||
$btl->delPriem($eff, $btl->users[$btl->uids[$eff['uid']]], 2);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
@@ -479,7 +479,7 @@ if(isset($hod))
|
||||
$pwi['priem'] = mysql_fetch_array(mysql_query('SELECT * FROM `priems` WHERE `id` = "26" LIMIT 1'));
|
||||
if(isset($pwi['id']))
|
||||
{
|
||||
$btl->delPriem($pwi,$btl->users[$btl->uids[$ue['id']]],2);
|
||||
$btl->delPriem($pwi, $btl->users[$btl->uids[$ue['id']]], 2);
|
||||
}
|
||||
$this->magicAtack($ue,$hpmin,1,$pl,$eff,2,$hpmxx[$pl['id']]);
|
||||
unset($pwx,$pwi,$hpmin,$hpmxx);
|
||||
|
||||
@@ -307,7 +307,7 @@ if ($pl['id'] == 189) {
|
||||
$hpmin = $u->info['level'] * 5;
|
||||
} elseif ($pl['id'] == 271) {
|
||||
//прием Прорыв 1\3 урона оружием
|
||||
$tp_atk = $btl->weaponTx($btl->stats[$btl->uids[$u->info['id']]]['items'][$btl->stats[$btl->uids[$u->info['id']]]['wp3id']]);
|
||||
$tp_atk = $btl->weaponTx($btl->stats[$btl->uids[$u->info['id']]]['items'][$btl->stats[$btl->uids[$u->info['id']]]['wp3id']]['data']);
|
||||
|
||||
$yi_atk = $btl->weaponAt22($btl->stats[$btl->uids[$u->info['id']]]['items'][$btl->stats[$btl->uids[$u->info['id']]]['wp3id']], $btl->stats[$btl->uids[$u->info['id']]], $tp_atk);
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@ if(isset($hod))
|
||||
if($this->minMana($eff['user_use'],$minmp,3)==false)
|
||||
{
|
||||
//снимаем эффект, мана закончилась
|
||||
$btl->delPriem($eff,$btl->users[$btl->uids[$eff['uid']]],2);
|
||||
$btl->delPriem($eff, $btl->users[$btl->uids[$eff['uid']]], 2);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
@@ -458,7 +458,7 @@ if(isset($hod))
|
||||
|
||||
if($dell){
|
||||
$dell['priem']['id']=$dell['id'];
|
||||
$btl->delPriem($dell,$u->info,99,false,$pl['name']);
|
||||
$btl->delPriem($dell, $u->info, 99, 0, $pl['name']);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user