\n"; var_dump($vars); echo "\n"; if ($d) { exit(); } } Database::init(); define('IP', UserIp::get()); $magic = new Magic(); $u = User::start(); $filter = new Filter(); $q = new Quests; $code = PassGen::intCode(); //для ссылок вида ?rnd=XXXXXX, вроде как-то борется с кешированием, но это не точно. //$training_manager = TrainingManager::getInstance($u->info['id']); /** Восстанавливаем всем ботам, которые не в бою здоровье до максимума. */ Db::sql( 'update stats set hpnow = hpall, mpnow = mpall where id in (select id from users where bot = 2 and battle = 0)' ); if ($u->info['banned'] > 0) { header('location: /index.php'); die(); } if ($u->info['bithday'] == '01.01.1800' && $u->info['inTurnirnew'] == 0) { unset($_GET, $_POST); } #--------для общаги, и позже для почты $sleep = ActionModel::getOne(["uid = {$u->info['id']}", 'vars = sleep'], 'id'); if ($u->room['file'] != "room_hostel" && $u->room['file'] != "an/room_hostel" && !empty($sleep)) { Db::sql('update actions set vars = ? where id = ?', ['unsleep', $sleep]); } if ($u->room['file'] == "room_hostel" || $u->room['file'] == "post") { $trololo = 0; } else { $trololo = 1; } #--------для общаги, и позже для почты if (($u->info['online'] < time() - 60 || $u->info['afk'] != '')) { $filter->setOnline(0, $u->info['id']); Db::sql( 'update users set online = unix_timestamp(), timemain = unix_timestamp(), afk = ? where id = ?', ['', $u->info['id']] ); } elseif ($u->info['timeMain'] < time() - 60 || $u->info['afk'] != '') { Db::sql( 'update users set online = unix_timestamp(), timemain = unix_timestamp(), afk = ? where id = ?', ['', $u->info['id']] ); } if (!isset($u->info['id']) || ($u->info['joinIP'] == 1 && $u->info['ip'] != $_SERVER['HTTP_X_REAL_IP']) || $u->info['banned'] > 0) { die(Config::get('exit')); } //Показываем системку и заносим данные if ($u->info['battle_text'] != '' && $u->info['last_b'] > 0) { Db::sql( 'insert into battle_last (battle_id, uid, time, act, lvl, align, clan, exp) values (?,?,unix_timestamp(),?,?,?,?,?)', [ $u->info['last_b'], $u->info['id'], $u->info['last_a'], $u->info['level'], $u->info['align'], $u->info['clan'], $u->info['exp'], ] ); } $act = -2; $act2 = 0; $u->stats = $u->getStats($u->info['id'], 0); $u->aves = ItemsModel::inventoryWeightAndItemQuantity(); if (!isset($u->stats['act'])) { $u->stats['act'] = 0; } if ($u->stats['act'] == 1) { $act = 1; } $u->rgd = $u->regen($u->info['id'], 0, 0); //Проверка уровня $ul = $u->testLevel(); if (isset($_GET['atak_user']) && $u->info['battle'] == 0 && $_GET['atak_user'] != $u->info['id']) { if ($u->room['noatack'] == 0) { $clan = Db::getValue('select clan from users where id = ?', [(int)$_GET['atak_user']]); $cruw = Db::getRow( 'select id, type from clan_wars where ((clan1 = ? and clan2 = ?) or (clan1 = ? and clan2 = ?)) and time_finish > unix_timestamp() limit 1', [ $clan, $u->info['clan'], $u->info['clan'], $clan, ] ); unset($clan); if (isset($cruw['id'])) { $cruw = $cruw['type']; } else { $cruw = 0; } $ua = Db::getRow( 'select * from users left join stats on users.id = stats.id where (atack > unix_timestamp() or atack = 1 or 1 = ? or 2 = ?) and stats.id = ?', [ $cruw, $cruw, (int)$_GET['atak_user'], ] ); $check = Db::getValue( 'select id from eff_users where id_eff = 478 and uid = ? and `delete` = 0 order by overtype desc limit 1', [$u->info['id']] ); $check2 = Db::getValue( 'select id from eff_users where id_eff = 479 and uid = ? and `delete` = 0 order by overtype desc limit 1', [$ua['id']] ); $check3 = Db::getValue( 'select id from battle_last where uid = ? and battle_id = ? limit 1', [$u->info['id'], $ua['battle']] ); if ($ua['no_ip'] == 'trupojor' && $ua['level'] == 9 && $u->info['level'] > 9) { $u->error = 'Нельзя нападать на монстра этого уровня!'; } elseif ($ua['no_ip'] == 'trupojor' && $ua['level'] == 10 && $u->info['level'] < 10) { $u->error = 'Нельзя нападать на монстра этого уровня!'; } elseif ($ua['no_ip'] != 'trupojor' && $ua['level'] != $u->info['level']) { $u->error = 'Нападать можно на персонажей только своего уровня!'; } elseif (isset($check3)) { $u->error = 'Нельзя вмешаться, вы уже были в этом поединке.'; } elseif ($ua['no_ip'] == 'trupojor' && isset($check)) { $u->error = 'Нельзя нападать на монстра чаще одного раза в 3 часа!'; } elseif (isset($check2)) { $u->error = 'Персонаж имеет защиту от нападения!'; } elseif (isset($ua['id']) && $ua['online'] > time() - 520) { $usta = $u->getStats($ua['id'], 0); // статы цели $minHp = floor($usta['hpAll'] / 100 * 33); // минимальный запас здоровья цели при котором можно напасть if ($ua['battle'] > 0) { $uabt = Db::getRow( 'select id, type, invis from battle where id = ? and team_win = -1 limit 1', [$ua['battle']] ); if (!isset($uabt['id'])) { $ua['battle'] = 0; } } if ($ua['battle'] == 0 && $minHp > $usta['hpNow']) { $u->error = 'Нельзя напасть, у противника не восстановилось здоровье'; } elseif (isset($uabt['id']) && $uabt['type'] == 500 && $ua['team'] == 1) { $u->error = 'Нельзя сражаться на стороне монстров!'; } elseif (isset($uabt['id']) && $uabt['invis'] > 0) { $u->error = 'Нельзя вмешиваться в невидимый бой!'; } elseif ($magic->testTravma($ua['id'], 3)) { $u->error = 'Противник тяжело травмирован, нельзя напасть!'; } elseif ($magic->testTravma($u->info['id'], 2)) { $u->error = 'Вы травмированы, нельзя напасть!'; } elseif ($ua['room'] == $u->info['room'] && ($minHp <= $usta['hpNow'] || $ua['battle'] > 0)) { if ($ua['type_pers'] == 0) { if ($cruw == 2) { $ua['type_pers'] = 99; } else { $ua['type_pers'] = 50; } } if ($ua['no_ip'] == 'trupojor') { $ua['type_pers'] = 500; } Db::sql( 'update stats set hpnow = ?, mpnow = ? where id = ?', [ $usta['hpNow'], $usta['mpNow'], $usta['id'], ] ); $goodt = $magic->atackUser( $u->info['id'], $ua['id'], $ua['team'], $ua['battle'], $ua['bbexp'], $ua['type_pers'] ); $sx = $u->info['sex'] ? 'a' : ''; if ($cruw == 2) { $rtxt = '[img[items/pal_button9.gif]] "' . $u->info['login'] . '" совершил' . $sx . ' кровавое нападение по метке на персонажа "' . $ua['login'] . '".'; } else { $rtxt = '[img[items/pal_button8.gif]] "' . $u->info['login'] . '" совершил' . $sx . ' нападение по метке на персонажа "' . $ua['login'] . '".'; } if ($goodt > 0) { $chatDto = new ChatMessage(); $chatDto->setCity($u->info['city']); $chatDto->setRoom($u->info['room']); $chatDto->setText($rtxt); $chatDto->setType(6); $chatDto->setTypeTime(1); (new Chat())->sendMsg($chatDto); } unset($goodt); header('location: main.php'); die(); } else { if ($ua['room'] != $u->info['room']) { //Персонаж в другой комнате $u->error = 'Персонаж находится в другой комнате'; } else { $u->error = 'Персонаж имеет слишком малый уровень жизней.'; } } } else { //На персонажа нельзя напасть $u->error = 'Персонаж не в игре, либо на нем нет метки'; } } else { $u->error = 'Вам запрещается атаковать без разрешения...'; } } if ($ul == 1) { $act = 1; } /*-----------------------*/ if ($u->info['battle'] == 0) { $btl_last = Db::getRow( 'select id, battle from battle_users where uid = ? and finish = 0 limit 1', [$u->info['id']] ); } if ($magic->youuse > 0) { $act = 1; } //Получение статов if ($act != -2) { $u->stats = $u->getStats($u->info['id'], 0, 1); $u->aves = ItemsModel::inventoryWeightAndItemQuantity(); if (empty($sleep)) { $act2 = $u->testItems($u->info['id'], $u->stats, 0); } if ($act2 != -2 && $act == -2) { $act = $act2; } } //Проверяем квесты на готовность if (in_array( $u->room['file'], ['dungeon_enter', 'dungeon_enter_all', 'enterbezdna', 'entercat', 'enterdrago', 'entergrib', 'enternizin', 'enterptp', 'house_belaun', 'dungeon'] )) { $q->testquest(); } echo ""; $iloc = ''; $iloce = ''; $img = Config::img(); $sp = Db::getRows( 'select * from items_local where (room = ? or room = -1) and `delete` = 0 and user_take = 0 and tr_login = ?', [$u->info['room'], $u->info['login']] ); foreach ($sp as $pl) { $itmo = Db::getRow('select id, name, img from items_main where id = ?', [$pl['item_id']]); if (isset($itmo['id'])) { $tk = 1; $glid = 0; // if ($pl['room'] != -1 && $pl['room'] != $u->info['room']) { if (isset($_GET['take_loc_item']) && $_GET['take_loc_item'] == $pl['id']) { $iloce = 'Вы находитесь в другой комнате...'; } $tk = 0; } elseif ($pl['tr_login'] != '0' && $pl['tr_login'] != $u->info['login']) { if (isset($_GET['take_loc_item']) && $_GET['take_loc_item'] == $pl['id']) { $iloce = 'Данный предмет для другого персонажа...'; } $tk = 0; } elseif ($pl['tr_sex'] != -1 && $pl['tr_sex'] != $u->info['sex']) { if (isset($_GET['take_loc_item']) && $_GET['take_loc_item'] == $pl['id']) { $iloce = 'Данный предмет для противоположного пола...'; } $tk = 0; } if ($pl['time'] + 86400 < time()) { //Не успели поднять $glid = 1; Db::sql('update items_local set `delete` = unix_timestamp() where id = ?', [$pl['id']]); } elseif (isset($_GET['take_loc_item']) && $_GET['take_loc_item'] == $pl['id']) { // if ($u->info['battle'] > 0 && $tk == 1) { $iloce = 'Вы не можете поднять предмет, завершите поединок...'; } elseif ($tk == 1) { $iloce = 'Вы успешно подняли предмет "' . $itmo['name'] . '" в локации "' . $u->room['name'] . '".'; Db::sql( 'update items_local set `delete` = unix_timestamp(), user_take = ? where id = ?', [$u->info['id'], $pl['id']] ); //выдаем предмет $glid = 1; if ($pl['data'] == '0') { ItemsModel::addItem( $pl['item_id'], $u->info['id'], '|from_loc_id=' . $pl['id'] . '|from_loc=' . $u->info['room'] ); } else { ItemsModel::addItem( $pl['item_id'], $u->info['id'], '|from_loc_id=' . $pl['id'] . '|from_loc=' . $u->info['room'] . '|' . $pl['data'] ); } } } if ($glid == 0) { if ($tk == 1 && $pl['tr_login'] == '0') { $tk = 2; } $whoCanPickUp = '\n' . match (true) { $pl['tr_login'] => "Предмет для игрока {$pl['tr_login']}", $pl['tr_sex'] == 0 => 'Предмет для мужчин', $pl['tr_sex'] == 1 => 'Предмет для женщин', default => 'Предмет может подобрать каждый' }; $iloc .= <<