room['file'] != 'dungeon_enter_all') { return; } $error = ''; // Собираем ошибки. $dungeonGroupList = ''; // Сюда помещаем список Групп. $dungeonGo = 1; // По умолчанию, мы идем в пещеру. $dungeon = Db::getRow('select id as room, city, dungeon_room as d_room, shop, dungeon_id as id, dungeon_name as name from dungeon_room where id = ?', [$u->room['id']]); $zv = []; $dunname = [ 12 => ['capitalcity', 'Пещера Тысячи Проклятий'], 3 => ['demonscity', 'Катакомбы'], 101 => ['angelscity', 'Бездна'], 16 => ['sandcity', 'Пещеры Мглы'], 9 => ['emeraldscity', 'Потерянный вход'], //108 10 => ['suncity', 'Грибница'], 1 => ['dreamscity', 'Водосток'], 13 => ['abandonedplain', 'Гора Легиона'], 31 => ['devilscity', 'Туманные Низины'], 109 => ['izlom16', 'Излом Хаоса'], 444 => ['eastcity', 'Тропа Инквизиции'], ]; if ($u->isAdmin()) { $dunname[999] = ['capitalcity', 'Тестовая локация']; } $roomSection = isset($_GET['rz']) ? 1 : 0; // Собираем группу для похода // Для названий репутаций в переменных $u->rep[rp_*]... $dungeon['list'] = Db::getColumn('select city from dungeon_room where city is not null and active = 1'); if ($u->info['dn'] > 0) { $zv = Db::getRow('select dungeon_zv.*, dungeon_room.dungeon_name from dungeon_zv left join dungeon_room on dungeon_room.dungeon_id = dun where dungeon_zv.id = ?', [$u->info['dn']]); if (empty($zv['id'])) { Db::sql('update stats set dn = 0 where id = ?', [$u->info['id']]); $u->info['dn'] = 0; } } $dungeon_timeout = $u->testAction('`uid` = "' . $u->info['id'] . '" AND `vars` = "psh0" AND `time` > ' . (time() - 60 * 60 * 2) . ' LIMIT 1', 1); if ($u->isAdmin()) { unset($dungeon_timeout); } // $dungeon_timeout - задержка на посещение пещеры. if (isset($dungeon_timeout['id'])) { // Кто-то передумал и не пойдет в пещеру, так-как уже там был. $dungeonGo = 0; if (isset($_GET['start'])) { $error = 'До следующего похода осталось еще: ' . Conversion::secondsToTimeout(60 * 60 * 2 - time() + $dungeon_timeout['time']); } } if (isset($_GET['start']) && $zv['uid'] == $u->info['id'] && $dungeonGo == 1) { //перемещаем игроков в пещеру $dungeon['room'] = 321; $dungeon['id'] = $zv['dun']; // Db::sql('insert into dungeon_now (uid, id2, name, time_start) values (?,?,?,unix_timestamp())', [$zv['uid'], $zv['dun'], $zv['dungeon_name']]); $zid = Db::lastInsertId(); Db::sql('delete from dungeon_zv where id = ?', [$zv['id']]); //обновляем пользователей $uids = Db::getColumn('select id from stats where dn = ?', [$zv['id']]); $map_locs = []; foreach (Db::getRows('select x, y from dungeon_map where id_dng = ?', [$zv['dun']]) as $pos) { $map_locs[] = [$pos['x'], $pos['y']]; } $pxd = 0; foreach ($uids as $uid) { $pxd++; $u->addAction(time(), 'psh0', $uid, $uid); if (date('w') == 0 || date('w') == 6 || date('w') == 1) { StatsModel::addRepexpById($uid, 5); //Репутация +5 } //Добавляем квестовые обьекты для персонажей $sp = mysql_query('SELECT * FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `room` = ' . $dungeon['room'] . ' AND `vars` LIKE "%start_quest%" AND `vals` = "go" LIMIT 100'); while ($pl2 = mysql_fetch_array($sp)) { $pl = mysql_fetch_array(mysql_query('SELECT * FROM `quests` WHERE `id` = "' . (str_replace('start_quest', '', $pl2['vars'])) . '" AND `line` = "' . $dungeon['id'] . '" LIMIT 1')); if (isset($pl['id'])) { $act = explode(',', $pl['act_date']); $i = 0; while ($i < count($act)) { $act_date = explode(':|:', $act[$i]); foreach ($act_date as $key => $val) { $val = explode(':=:', $val); $actdate[$val[0]] = $val[1]; } //Сбор ресурсов if (isset($actdate['tk_itm']) && $actdate['tk_itm'] != '') { $xr2 = explode('=', $actdate['tk_itm']); if ($xr2[2] == 0) { if (isset($actdate['tk_itm_fromY']) && isset($actdate['tk_itm_toY'])) { $actdate['tk_itm_fromY'] = (integer)$actdate['tk_itm_fromY']; $actdate['tk_itm_toY'] = (integer)$actdate['tk_itm_toY']; } $ml_arr = []; foreach ($map_locs as $ml) { // tk_itm_fromY tk_itm_toY - отсеиваем позицию для дропа предметов. if ((isset($actdate['tk_itm_fromY']) && isset($actdate['tk_itm_toY'])) or (!isset($actdate['tk_itm_fromY']) && isset($actdate['tk_itm_toY']))) { if ($ml[1] > $actdate['tk_itm_fromY'] && $actdate['tk_itm_toY'] > $ml[1] || !isset($actdate['tk_itm_fromY']) && $actdate['tk_itm_toY'] > $ml[1]) { $ml_arr[] = $ml; } } else { $ml_arr[] = $ml; } } if (empty($ml_arr)) { $ml_arr = $map_locs; } //Добавляем обьект для юзера $j = 0; while ($j < $xr2[1]) { $cord = $ml_arr[rand(0, count($ml_arr) - 1)]; if ($cord[0] != 0 || $cord[1] != 0) { mysql_query( 'INSERT INTO `dungeon_items` (`dn`,`user`,`item_id`,`time`,`x`,`y`,`onlyfor`,`quest`) VALUES ( "' . $zid . '","' . $u->info['id'] . '","' . $xr2[0] . '","' . time( ) . '","' . $cord[0] . '","' . $cord[1] . '","' . $u->info['id'] . '","' . $pl['id'] . '" )' ); } $j++; } } else { //Предмет находится в конкретном месте mysql_query( 'INSERT INTO `dungeon_items` (`dn`,`user`,`item_id`,`time`,`x`,`y`,`onlyfor`,`quest`) VALUES ( "' . $zid . '","' . $u->info['id'] . '","' . $xr2[0] . '","' . time() . '","' . $xr2[2] . '","' . $xr2[3] . '","' . $u->info['id'] . '","' . $pl['id'] . '" )' ); } } $i++; } } } } Db::sql('update stats left join users on users.id = stats.id set s = 1, dnow = ?, room = 405 where users.id in (?) limit ?', [$zid, implode(',', $uids), $zv['team_max'] + 1]); //Добавляем ботов и обьекты в пещеру $zid с for_dn = $dungeon['id'] //Добавляем ботов $botarray = []; $dbots = Db::getRows('select * from dungeon_bots where for_dn = ?', [$zv['dun']]); foreach ($dbots as $bot) { if ($bot['id_bot'] == 0 && $bot['bot_group'] != '') { $bots = explode(',', $bot['bot_group']); $bot['id_bot'] = (int)$bots[rand(0, count($bots) - 1)]; } if ($bot['id_bot'] > 0) { $botarray[] = [$zid, $bot['id_bot'], $bot['colvo'], $bot['items'], $bot['x'], $bot['y'], $bot['dialog'], intval($bot['items']), $bot['go_bot'], $bot['noatack']]; } } $addbots = Db::prepare('insert into dungeon_bots (dn, id_bot, colvo, items, x, y, dialog, atack, go_bot, noatack) values (?,?,?,?,?,?,?,?,?,?)'); foreach ($botarray as $b) { $addbots->execute($b); } //Добавляем обьекты $objarray = []; $dobjects = Db::getRows('select * from dungeon_obj where for_dn = ?', [$zv['dun']]); foreach ($dobjects as $object) { $objarray[] = [$zid, $object['name'], $object['img'], $object['x'], $object['y'], $object['action'], $object['type'], $object['w'], $object['h'], $object['s'], $object['s2'], $object['os1'], $object['os2'], $object['os3'], $object['os4'], $object['type2'], $object['top'], $object['left'], $object['date']]; } $addobjects = Db::prepare('insert into dungeon_obj (dn, name, img, x, y, action, type, w, h, s, s2, os1, os2, os3, os4, type2, top, `left`, date) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'); foreach ($objarray as $o) { $addobjects->execute($o); } exit(''); } elseif (isset($_POST['go'], $_POST['goid']) && $dungeonGo == 1) { if (!isset($zv['id'])) { $zv = mysql_fetch_array(mysql_query('SELECT * FROM `dungeon_zv` WHERE `city` = "all" AND `id`="' . mysql_real_escape_string($_POST['goid']) . '" AND `delete` = "0" LIMIT 1')); if (isset($zv['id']) && $u->info['dn'] == 0) { if ($zv['pass'] != '' && $_POST['pass_com'] != $zv['pass']) { $error = 'Вы ввели неправильный пароль'; } elseif ($u->info['level'] > 7 && $zv['dun'] != 1) { $row = 0; if (5 > $row) { $upd = mysql_query('UPDATE `stats` SET `dn` = "' . $zv['id'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); if (!$upd) { $error = 'Не удалось вступить в эту группу'; unset($zv); } else { $u->info['dn'] = $zv['id']; } } else { $error = 'В группе нет места'; unset($zv); } } elseif ($zv['dun'] == 1) { //Канализация $row_max = 5; if ($u->info['level'] == 4) { $row_max = 4; } elseif ($u->info['level'] == 5) { $row_max = 3; } elseif ($u->info['level'] == 6) { $row_max = 2; } elseif ($u->info['level'] >= 7) { $row_max = 1; } $row = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `stats` WHERE `dn` = "' . $zv['id'] . '" LIMIT 1')); $row1 = mysql_fetch_array(mysql_query('SELECT * FROM `stats` WHERE `dn` = "' . $zv['id'] . '" LIMIT 1')); $row2 = mysql_fetch_array(mysql_query('SELECT * FROM `users` WHERE `id` = "' . $row1['id'] . '" LIMIT 1')); $row = $row[0]; if ($row2['level'] != $u->info['level']) { $error = 'Вы не подходите по уровню'; } elseif ($row_max > $row) { $upd = mysql_query('UPDATE `stats` SET `dn` = "' . $zv['id'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); if (!$upd) { $error = 'Не удалось вступить в эту группу'; unset($zv); } else { $u->info['dn'] = $zv['id']; } } else { $error = 'В группе нет места'; unset($zv); } } elseif ($u->info['level'] < 4 && $zv['dun'] == 104) { //Шахты $row_max = 3; if ($u->info['level'] > 3) { $row_max = 1; } $row = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `stats` WHERE `dn` = "' . $zv['id'] . '" LIMIT 1')); $row1 = mysql_fetch_array(mysql_query('SELECT * FROM `stats` WHERE `dn` = "' . $zv['id'] . '" LIMIT 1')); $row2 = mysql_fetch_array(mysql_query('SELECT * FROM `users` WHERE `id` = "' . $row1['id'] . '" LIMIT 1')); $row = $row[0]; if ($row2['level'] != $u->info['level'] && $u->info['level'] > 3) { $error = 'Вы не подходите по уровню'; } elseif ($row_max > $row) { $upd = mysql_query('UPDATE `stats` SET `dn` = "' . $zv['id'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); if (!$upd) { $error = 'Не удалось вступить в эту группу'; unset($zv); } else { $u->info['dn'] = $zv['id']; } } else { $error = 'В группе для вас нет места'; unset($zv); } } else { $error = 'Вы не подходите по уровню'; unset($zv); } } else { $error = 'Заявка не найдена'; } } else { $error = 'Вы уже находитесь в группе'; } } elseif (isset($_POST['leave']) && isset($zv['id']) && $dungeonGo == 1) { if ($zv['uid'] == $u->info['id']) { //ставим в группу нового руководителя $ld = mysql_fetch_array(mysql_query('SELECT `id` FROM `stats` WHERE `dn` = "' . $zv['id'] . '" AND `id` != "' . $u->info['id'] . '" LIMIT 1')); if (isset($ld['id'])) { $zv['uid'] = $ld['id']; mysql_query('UPDATE `dungeon_zv` SET `uid` = "' . $zv['uid'] . '" WHERE `id` = "' . $zv['id'] . '" LIMIT 1'); mysql_query('UPDATE `stats` SET `dn` = "0" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); $u->info['dn'] = 0; unset($zv); } else { //удаляем группу целиком mysql_query('UPDATE `dungeon_zv` SET `delete` = "' . time() . '" WHERE `id` = "' . $zv['id'] . '" LIMIT 1'); mysql_query('UPDATE `stats` SET `dn` = "0" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); $u->info['dn'] = 0; unset($zv); } } else { //просто выходим с группы mysql_query('UPDATE `stats` SET `dn` = "0" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); $u->info['dn'] = 0; unset($zv); } } elseif (isset($_POST['add']) && $u->info['level'] > 1 && $dungeonGo == 1) { if ($u->info['dn'] == 0) { $dun5 = $dungeon['id']; // if (isset($_POST['rpmg1'])) { if ($_POST['rpmg1'] == 2) { $dun5 = 101; //Бездна } elseif ($_POST['rpmg1'] == 8) { $dun5 = 12; //ПТП } elseif ($_POST['rpmg1'] == 10) { $dun5 = 1; //Водосток } elseif ($_POST['rpmg1'] == 16) { $dun5 = 16; //Пещера Мглы } elseif ($_POST['rpmg1'] == 4) { $dun5 = 3; //Катакомбы } elseif ($_POST['rpmg1'] == 5) { $dun5 = 9; //Потерянный вход } elseif ($_POST['rpmg1'] == 444) { $dun5 = 444; //Тропа Инквизиции } elseif ($_POST['rpmg1'] == 6) { $dun5 = 10; //Грибница } elseif ($_POST['rpmg1'] == 11) { $dun5 = 13; //Гора легиона } elseif ($_POST['rpmg1'] == 106) { $dun5 = 31; //Низины } elseif ($_POST['rpmg1'] == 999) { $dun5 = 999; //Тестовая локация } elseif ($_POST['rpmg1'] == 9) { $dun5 = 9; //Потеряный вход } else { $dun5 = 12; //ПТП } } else { $dun5 = 12; //ПТП } // $ins = mysql_query( 'INSERT INTO `dungeon_zv` (`city`,`time`,`uid`,`dun`,`pass`,`com`,`lvlmin`,`lvlmax`,`team_max`) VALUES ("all","' . time() . '","' . $u->info['id'] . '","' . $dun5 . '", "' . mysql_real_escape_string($_POST['pass']) . '", "' . mysql_real_escape_string($_POST['text']) . '", "8", "21", "5")' ); if ($ins) { $u->info['dn'] = mysql_insert_id(); $zv['id'] = $u->info['dn']; $zv['uid'] = $u->info['id']; mysql_query('UPDATE `stats` SET `dn` = "' . $u->info['dn'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'); $error = 'Вы успешно создали группу'; } else { $error = 'Не удалось создать группу'; } } else { $error = 'Вы уже находитесь в группе'; } } //Генерируем список групп $sp = mysql_query('SELECT * FROM `dungeon_zv` WHERE `city` = "all" AND `delete` = "0" AND `time` > "' . (time() - 60 * 60 * 2) . '"'); while ($pl = mysql_fetch_array($sp)) { $dungeonGroupList .= '