game/_incl_data/crons/dungeon_clear.php
2023-01-10 18:30:35 +02:00

81 lines
3.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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']]);
}