<?php use Core\Db; require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'autoload.php'; /** * Скрипт отвечает за чистку пещер которые не используются игроком в течении 3 часов * при учете что пещере больше 5 часов от времени создания. * * Запуск раз в минуту. * (3 часа оффлайна на 5 часов существования, зачем тут поминутка?) */ # Выбираем пещеру (ИД, ГОРОД), где: # Игрок в пещере # Игрок оффлайн более 3х часов # Пещера запущена более 3х часов назад # Время пещеры вышло (?!) # ??? bsid $dungeons = Db::getRows( ' select dungeon_now.city, dungeon_now.id as did from dungeon_now left join users on dungeon_now.id = users.id left join stats on dungeon_now.id = stats.id where stats.dnow > 0 and users.online < unix_timestamp() - 10800 and dungeon_now.time_start < unix_timestamp() - 10800 and dungeon_now.time_finish = 0 and dungeon_now.bsid = 0 group by dungeon_now.id order by dungeon_now.id desc ' ); foreach ($dungeons as $dungeon) { if (!$dungeon['did'] || $dungeon['did'] === 15) { continue; } # [1] Выкидываем игроков с подземелья и перемещаем его в `382` подвальное помещение $podvalRoom = 382; if ($dungeon['city'] === 'capitalcity') { $podvalRoom = 321; } elseif ($dungeon['city'] === 'angelscity') { $podvalRoom = 242; } Db::sql('update stats set dnow = 0 where id in (select id from stats where dnow = ? limit 10)', [$dungeon['did']]); # Выбросили игрока с подземелья и переместили в подвальное помещение Db::sql( 'update users set room = ? where id in (select id from stats where dnow = ? limit 10)', [$podvalRoom, $dungeon['did']] ); # Выбрасываем пещерные предметы у игрока Db::sql( 'update items_users set `delete` = unix_timestamp() where dn_delete = 1 and uid in (select id from stats where dnow = ? limit 10)', [$dungeon['did']] ); # [2] Удаляем объекты. Db::sql('delete from dungeon_obj where for_dn = 0 and dn = ?', [$dungeon['did']]); # [3] Удаляем монстров. Db::sql('delete from dungeon_bots where for_dn = 0 and dn = ?', [$dungeon['did']]); # [4] Удаляем предметы. Db::sql('delete from dungeon_items where for_dn = 0 and dn = ?', [$dungeon['did']]); # [5] Удаляем действия (actions) Db::sql('delete from dungeon_actions where dn = ?', [$dungeon['did']]); # [6] Закрываем Подземелье Dungeon_Now - time_finish = time(); Db::sql('update dungeon_now set time_finish = unix_timestamp() where id = ?', [$dungeon['did']]); }