game/_incl_data/crons/dungeon_clear.php
2023-07-31 20:06:51 +03:00

74 lines
2.7 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
# Это не пещера №15 (было захардкодено)
$dungeons = Db::getRows(
'
select
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 and
dungeon_now.id != 15
group by dungeon_now.id order by dungeon_now.id desc
'
);
$arr = [];
foreach ($dungeons as $dungeonid) {
$arr[] = $dungeonid;
}
$dungeonids = implode(',', $arr);
$stats = Db::getRows('select id from stats where dnow in (?)', [$dungeonids]);
$arr2 = [];
foreach ($stats as $statid) {
$arr2[] = $statid;
}
$statids = implode(',', $arr2);
# [1] Выкидываем игроков с подземелья и перемещаем его в `321` портал
Db::sql('update stats set dnow = 0 where id in (?)', [$statids]);
Db::sql('update users set room = 321 where id in (?)', [$statids]);
Db::sql('update items_users set `delete` = unix_timestamp() where dn_delete = 1 and uid in (?)', [$statids]);
# [2] Удаляем объекты.
Db::sql('delete from dungeon_obj where for_dn = 0 and dn in (?)', [$dungeonids]);
# [3] Удаляем монстров.
Db::sql('delete from dungeon_bots where for_dn = 0 and dn in (?)', [$dungeonids]);
# [4] Удаляем предметы.
Db::sql('delete from dungeon_items where for_dn = 0 and dn in (?)', [$dungeonids]);
# [5] Удаляем действия (actions)
Db::sql('delete from dungeon_actions where dn in (?)', [$dungeonids]);
# [6] Закрываем Подземелье Dungeon_Now - time_finish = time();
Db::sql('update dungeon_now set time_finish = unix_timestamp() where id in (?)', [$dungeonids]);