WIP: перед введенимем класса Fighter.php

This commit is contained in:
2024-01-06 00:14:35 +02:00
parent 07f905ef64
commit a2c658166d
67 changed files with 5555 additions and 7135 deletions
+898 -1898
View File
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
<?php
namespace Battle;
class Fighter
{
}
+36 -45
View File
@@ -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;
}
}
+493 -1
View File
@@ -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 грамм',
'сказав &quot;БУ!&quot;',
'показав противнику кукиш',
'в отчаянном рывке',
'показав сразу два пальца',
],
[
'о<вырезано цензурой>ный',
'точнейший',
],
[
'погиб!',
'повержен!',
'мертв!',
'убит!',
'проиграл бой!',
],
[
'пропустил свой ход',
'потратил свой ход на магию',
'потратил свой ход на прием',
],
[
'использовал',
],
[
'{u1}, вспомнив слова своего сэнсея, из последних сил применил прием &quot;{pr}&quot;.',
'Кроличья лапка, подкова в перчатке и прием &quot;{pr}&quot; помогли {u1} продержаться ещё немного.',
'{u1}, пораскинув мозгами по земле, сообразил, что его выручат или прием &quot;{pr}&quot; или вмешательство Мусорщика.',
'{u1} выкрикнув: &quot;А ещё я вот так могу!&quot;, применил прием &quot;{pr}&quot;.',
'{u1} понял, пропустив очередной удар в голову, что поможет ему только прием &quot;{pr}&quot;.',
'{u1} сам не поняв зачем, применил прием &quot;{pr}&quot;.',
'{u1} нетрезво оценив положение, решил, что его спасение это прием &quot;{pr}&quot;.',
],
[
'{u1}, вспомнив слова своего сэнсея, из последних сил применил прием &quot;{pr}&quot; на {u2}.',
],
[
'{u1}, победив страх, решил поразить {u2} заклятьем &quot;{pr}&quot;',
'{u1} наконец сфокусировал свое внимание на поединке и наколдовал &quot;{pr}&quot; на {u2}',
'{u1} нарисовав вокруг себя несколько рун, призвал заклятье &quot;{pr}&quot; на {u2}',
'{u1} догадавшись, что пришло время показать себя, произнес заклятье &quot;{pr}&quot; на {u2}',
'{u1} с испугу произнес, первое пришедшее на ум, заклятье &quot;{pr}&quot; на {u2}',
'{u1} впал в транс и начал бормотать заклятие &quot;{pr}&quot; на {u2}',
'{u1} очнулся от медитации, и призвал заклятье &quot;{pr}&quot; на {u2}',
],
[
'{u1} пытался наколдовать ужасающее заклятие &quot;{pr}&quot; на {u2}, но ничего не вышло',
'{u1} не смог сфокусировать и наколдовать &quot;{pr}&quot; на {u2}, но ничего не вышло',
'{u1} с испугу произнес ошибочное заклятие &quot;{pr}&quot; на {u2} и ничего не вышло',
'{u1}, потеряв концентрацию, не смог наколдовать &quot;{pr}&quot; на {u2} и ничего не вышло',
'{u1} <вырезано цензурой> от перенапряжения, вследствие чего не смог наколдовать &quot;{pr}&quot; на {u2}',
'{u1} пытался превратить {u2} в табуретку при помощи заклинания &quot;{pr}&quot;... но ничего не вышло',
],
[
'{u1}, победив страх, решил поразить всех и наколдовал &quot;{pr}&quot;',
'{u1} наконец сфокусировал свое внимание на поединке и наколдовал &quot;{pr}&quot;',
'{u1} нарисовав вокруг себя несколько рун, призвал заклятье &quot;{pr}&quot;',
'{u1} догадавшись, что пришло время показать себя, произнес заклятье &quot;{pr}&quot;',
'{u1} с испугу произнес, первое пришедшее на ум, заклятье &quot;{pr}&quot;',
'{u1} впал в транс и начал бормотать заклятие &quot;{pr}&quot;',
'{u1} очнулся от медитации, и призвал заклятье &quot;{pr}&quot;',
],
],
[ // жен.
[],
[
'вспомнила что-то важное',
'высморкалась',
'задумалась',
'замешкалась',
'засмотрелась на <вырезано цензурой>',
'кашлянула',
'ковырялась в зубах',
'обернулась',
'осмотрелась',
'почесалась',
'пошатнулась',
'пришла в себя',
'пыталась сконцентрироваться',
'пыталась увернуться',
'пыталась что-то сказать',
'расплылалась в улыбке',
'расстроилась',
'растерялась',
'удивилась',
'чесала <вырезано цензурой>',
'пыталась отойти покурить',
'поправляла прическу',
],
[
', и за это ',
', а ',
', но в это время ',
', и тут ',
', но вдруг неожиданно ',
', и вдруг ',
', но ',
', и внезапно ',
', но неожиданно ',
', и в этот момент ',
', и в ту же секунду ',
', и в этот миг ',
],
[
'обезумевшая',
'расстроенная',
'неустрашимая',
'продвинутая',
'расстроенная',
'страшная',
'задумчивая',
'взъерошенная',
'бесстрастная',
'разъяренная',
'смелая',
'безумная',
'восхитительная',
'жестокая',
'злобная',
'мужественная',
'непобедимая',
'наглая',
'хитрая',
'храбрая',
'отважная',
'железная',
'могучая',
'сильнейшая',
'крепкая',
'великая',
'бесстрашная',
],
[
'случайно ',
'отчаянно ',
'проснувшись ',
'мимоходом ',
'разбежавшись ',
'сдуру ',
'со скуки ',
'не помня себя от испуга ',
'улыбаясь ',
'прослезившись ',
'пошатнувшись ',
'проснувшись ',
'беспричинно ',
'опрометчиво ',
'разбежавшись ',
'зевнув ',
'сделав двойное сальто ',
'не подумав ',
'хихикая ',
'ласково ',
'с испугу ',
],
[
'влепила ',
'вломила ',
'саданула ',
],
[
'грубый',
'наглый',
'красивый',
],
[
'тычок',
'тычок',
'рубящий удар',
'разбивающий удар',
'рассекающий удар',
'обжигающий удар',
'удар электричеством',
'обмораживающий удар',
'удар магией земли',
'удар светлой магией',
'удар тёмной магией',
'удар серой магией',
'неизсветный удар',
'удар',
],
[
'не контролировала ситуацию',
'обманулась',
'старалась провести удар',
'думала о <вырезано цензурой>',
'испугалась',
'потеряла самоконтроль',
'потеряла момент',
'была слишком самоуверенна',
'пыталась провести удар',
'поскользнулась',
'не думала о бое',
'не рассчитала свои силы',
'промахнулась',
'оступилась',
'думала не о том',
],
[
', и потому ',
' и ',
', но ',
', вследствие чего ',
', потому ',
],
[
'остановила',
'поставила блок на',
'блокировала',
'отбила',
],
[
'ушла вправо от удара',
'ушла влево от удара',
'увела удар',
'уклонилась от удара',
'увернулась от удара',
],
[
'приняв боевые 100 грамм',
'сказав &quot;БУ!&quot;',
'показав противнику кукиш',
'в отчаянном рывке',
'показав сразу два пальца',
],
[
'о<вырезано цензурой>ный',
'точнейший',
],
[
'погибла!',
'повержена!',
'мертва!',
'убита!',
'проиграла бой!',
],
[
'пропустила свой ход',
'потратила свой ход на магию',
'потратила свой ход на прием',
],
[
'использовала',
],
[
'{u1}, вспомнив слова своего сэнсея, из последних сил применила прием &quot;{pr}&quot;.',
'Кроличья лапка, подкова в перчатке и прием &quot;{pr}&quot; помогли {u1} продержаться ещё немного.',
'{u1}, пораскинув мозгами по земле, сообразила, что её выручат или прием &quot;{pr}&quot; или вмешательство Мусорщика.',
'{u1} выкрикнув: &quot;А ещё я вот так могу!&quot;, применила прием &quot;{pr}&quot;.',
'{u1} поняла, пропустив очередной удар в голову, что поможет ей только прием &quot;{pr}&quot;.',
'{u1} сама не поняв зачем, применила прием &quot;{pr}&quot;.',
'{u1} нетрезво оценив положение, решила, что её спасение это прием &quot;{pr}&quot;.',
],
[
'{u1}, вспомнив слова своего сэнсея, из последних сил применила прием &quot;{pr}&quot; на {u2}.',
],
[
'{u1}, победив страх, решила поразить {u2} заклятьем &quot;{pr}&quot;',
'{u1} наконец сфокусировала свое внимание на поединке и наколдовала &quot;{pr}&quot; на {u2}',
'{u1} нарисовав вокруг себя несколько рун, призвала заклятье &quot;{pr}&quot; на {u2}',
'{u1} догадавшись, что пришло время показать себя, произнесла заклятье &quot;{pr}&quot; на {u2}',
'{u1} с испугу произнесла, первое пришедшее на ум, заклятье &quot;{pr}&quot; на {u2}',
'{u1} впала в транс и начала бормотать заклятие &quot;{pr}&quot; на {u2}',
'{u1} очнулась от медитации, и призвала заклятье &quot;{pr}&quot; на {u2}',
],
[
'{u1} пыталась наколдовать ужасающее заклятие &quot;{pr}&quot; на {u2}, но ничего не вышло',
'{u1} не смогла сфокусировать и наколдовать &quot;{pr}&quot; на {u2}, но ничего не вышло',
'{u1} с испугу произнесла ошибочное заклятие &quot;{pr}&quot; на {u2} и ничего не вышло',
'{u1}, потеряв концентрацию, не смогла наколдовать &quot;{pr}&quot; на {u2} и ничего не вышло',
'{u1} <вырезано цензурой> от перенапряжения, вследствие чего не смогла наколдовать &quot;{pr}&quot; на {u2}',
'{u1} пыталась превратить {u2} в табуретку при помощи заклинания &quot;{pr}&quot;... но ничего не вышло',
],
[
'{u1}, победив страх, решила поразить всех и наколдовала &quot;{pr}&quot;',
'{u1} наконец сфокусировала свое внимание на поединке и наколдовала &quot;{pr}&quot;',
'{u1} нарисовав вокруг себя несколько рун, призвала заклятье &quot;{pr}&quot;',
'{u1} догадавшись, что пришло время показать себя, произнесла заклятье &quot;{pr}&quot;',
'{u1} с испугу произнесла, первое пришедшее на ум, заклятье &quot;{pr}&quot;',
'{u1} впала в транс и начала бормотать заклятие &quot;{pr}&quot;',
'{u1} очнулась от медитации, и призвала заклятье &quot;{pr}&quot;',
],
],
];
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;
}
+78
View File
@@ -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();
}
}
+580
View File
@@ -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;
}
}
-3
View File
@@ -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>';
}
-2
View File
@@ -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; //кр за хаоты
+13
View File
@@ -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);
}
}
+29 -22
View File
@@ -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;
+23 -2
View File
@@ -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;
}
}
+48
View File
@@ -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
View File
@@ -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} утратил здоровье от &quot;{pr}&quot; ';
@@ -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) {
+5 -8
View File
@@ -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
View File
@@ -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-ой уровень требуется &quot;<strong>Кристалл Вечности [6]</strong>&quot;.","Black","1","1","0"]);</script>';
} else {
mysql_query(
'UPDATE `items_users` SET `delete` = "' . time() . '" WHERE `id` = "' . $itm['id'] . '" LIMIT 1'
);
$text = 'Предмет &quot;<strong>Кристалл Вечности [6]</strong>&quot; был успешно использован.';
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']]
);
}
+1 -1
View File
@@ -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]),
];
}
+23
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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);
//
//Добавляем прием
+1 -1
View File
@@ -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);
//
//Добавляем прием
+1 -1
View File
@@ -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
View File
@@ -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>Вы успешно использовали прием &quot;Магический Барьер [4]&quot;</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>Вы успешно использовали прием &quot;Магический Барьер [4]&quot;</b></font>';
$this->addEffPr($pl, $id);
}
unset($pvr);
?>
+96 -107
View File
@@ -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);
?>
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -119,7 +119,7 @@ if( isset($pr_used_this) && isset($pr_moment) ) {
($btl->hodID)
);
// спасение
$btl->spaCheck($u1]);
$btl->spaCheck($u1);
// спасение
}
// -- конец приема
+1 -1
View File
@@ -158,7 +158,7 @@ if( isset($pr_used_this) && isset($pr_moment) ) {
($btl->hodID)
);
// спасение
$btl->spaCheck($u1]);
$btl->spaCheck($u1);
// спасение
$pvr['ijk']++;
}
+1 -1
View File
@@ -161,7 +161,7 @@ if( isset($pr_used_this) && isset($pr_moment) ) {
($btl->hodID)
);
// спасение
$btl->spaCheck($u1]);
$btl->spaCheck($u1);
// спасение
//
+2 -2
View File
@@ -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
View File
@@ -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);
?>
+2 -2
View File
@@ -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']);
+2 -2
View File
@@ -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);
+1 -1
View File
@@ -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);
+2 -2
View File
@@ -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']);
}
}