diff --git a/classes/Battles/Travel.php b/classes/Battles/Travel.php index 8376ab1..ae88e2a 100644 --- a/classes/Battles/Travel.php +++ b/classes/Battles/Travel.php @@ -55,9 +55,45 @@ class Travel 2702 => 'city.php' ]; + private static array $fbattleCheckFiles = [ + 'c_haos_in.php', + 'c_haos.php', + 'c_park.php', + 'city.php', + 'clan_castle.php', + 'enter_cave.php', + 'library.php', + 'atk.php', + 'podzem_dialog.php', + 'post.php', + 'shop.php', + 'tournament.php', + 'vxod.php', + 'bank.php', + 'canalizaciya,php', + 'forest.php', + 'main.php', + 'repair.php', + 'towerstamp.php', + 'hell.php', + 'ul_clans.php', + 'labirint.php', + 'akadem.php', + 'towerin.php', + 'user_anketa.php', + 'zayavka.php', + ]; + private static array $towerinCheckFiles = [ + 'main.php', + 'city.php', + 'tower.php' + ]; + private static array $roomsCheck = [22, 23, 27, 29, 30, 31, 37, 38, 39, 40, 41, 45, 53, 61, 401, 402, 600, 601, 602, 621, 650, 1051, 1052]; + /** * Перемещение по комнатам. - * @param int $roomId ID куда идём. + * + * @param int $roomId ID куда идём. * @param int $roomIdCurrent ID откуда идём. */ public static function toRoom(int $roomId, int $roomIdCurrent): void @@ -88,7 +124,9 @@ class Travel /** * Проверка можно ли перейти из комнаты в комнату. + * * @param int $roomId ID комнаты + * * @return array|int[] */ private static function allowedRoomMoves(int $roomId): array @@ -141,4 +179,32 @@ class Travel } return $room[$roomId]; } + + /** Проверки на соответствие скрипта и комнаты, которые были натыканы по всем файлам. + * @param int $inRoom + * @param int $inBattle + * @param int $inTower + * + * @return void + */ + public static function roomRedirects(int $inRoom, int $inBattle, int $inTower) + { + if ($inBattle && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], self::$fbattleCheckFiles)) { + header('location: fbattle.php'); + exit; + } + if ($inTower && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], self::$towerinCheckFiles)) { + header('location: towerin.php'); + exit; + } + // Если я в одной из этих комнат, + // [И] Имя файла который инклюдит файл с проверкой не совпадает с именем файла локации в которой я нахожусь + // [И] Номер комнаты который я пытаюсь открыть есть в списке проверяемых + if (in_array($inRoom, self::$roomsCheck) + && pathinfo(debug_backtrace()[0]['file'])['basename'] != self::$roomFileName[$inRoom] + && in_array(array_search(pathinfo(debug_backtrace()[0]['file'])['basename'], self::$roomFileName), self::$roomsCheck)) { + header('location: main.php'); + exit; + } + } } \ No newline at end of file diff --git a/functions.php b/functions.php index 0f41943..7057804 100644 --- a/functions.php +++ b/functions.php @@ -23,56 +23,60 @@ if (User::getInstance()->getBlock()) { exit('user blocked!'); } -/* - * Проверки на соответствие скрипта и комнаты, которые были натыканы по всем файлам. - */ -$fbattleCheckFiles = [ - 'c_haos_in.php', - 'c_haos.php', - 'c_park.php', - 'city.php', - 'enter_cave.php', - 'library.php', - 'atk.php', - 'podzem_dialog.php', - 'post.php', - 'shop.php', - 'tournament.php', - 'vxod.php', - 'bank.php', - 'canalizaciya,php', - 'forest.php', - 'main.php', - 'repair.php', - 'towerstamp.php', - 'hell.php', - 'ul_clans.php', - 'labirint.php', - 'akadem.php', - 'towerin.php', - 'user_anketa.php', - 'zayavka.php', -]; -//Может просто отовсюду? О_о -if (User::getInstance()->getBattle() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $fbattleCheckFiles)) { - header('location: fbattle.php'); - exit; -} -$towerinCheckFiles = ['main.php', 'city.php', 'tower.php']; -if (User::getInstance()->getInTower() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $towerinCheckFiles)) { - header('location: towerin.php'); - exit; -} -$roomsCheck = [22, 23, 25, 27, 29, 30, 31, 37, 38, 39, 40, 41, 45, 53, 61, 401, 402, 600, 601, 602, 621, 650, 1051, 1052]; -// Если я в одной из этих комнат, -// [И] Имя файла который инклюдит файл с проверкой не совпадает с именем файла локации в которой я нахожусь -// [И] Номер комнаты который я пытаюсь открыть есть в списке проверяемых -if (in_array(User::getInstance()->getRoom(), $roomsCheck) - && pathinfo(debug_backtrace()[0]['file'])['basename'] != Travel::$roomFileName[User::getInstance()->getRoom()] - && in_array(array_search(pathinfo(debug_backtrace()[0]['file'])['basename'], Travel::$roomFileName), $roomsCheck)) { - header('location: main.php'); - exit; -} +//Проверки на соответствие скрипта и комнаты, которые были натыканы по всем файлам. +Travel::roomRedirects(User::$current->getRoom(), User::$current->getBattle(), User::$current->getInTower()); + +///* +// * Проверки на соответствие скрипта и комнаты, которые были натыканы по всем файлам. +// */ +//$fbattleCheckFiles = [ +// 'c_haos_in.php', +// 'c_haos.php', +// 'c_park.php', +// 'city.php', +// 'clan_castle.php', +// 'enter_cave.php', +// 'library.php', +// 'atk.php', +// 'podzem_dialog.php', +// 'post.php', +// 'shop.php', +// 'tournament.php', +// 'vxod.php', +// 'bank.php', +// 'canalizaciya,php', +// 'forest.php', +// 'main.php', +// 'repair.php', +// 'towerstamp.php', +// 'hell.php', +// 'ul_clans.php', +// 'labirint.php', +// 'akadem.php', +// 'towerin.php', +// 'user_anketa.php', +// 'zayavka.php', +//]; +////Может просто отовсюду? О_о +//if (User::$current->getBattle() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $fbattleCheckFiles)) { +// header('location: fbattle.php'); +// exit; +//} +//$towerinCheckFiles = ['main.php', 'city.php', 'tower.php']; +//if (User::$current->getInTower() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $towerinCheckFiles)) { +// header('location: towerin.php'); +// exit; +//} +//$roomsCheck = [22, 23, 25, 27, 29, 30, 31, 37, 38, 39, 40, 41, 45, 53, 61, 401, 402, 600, 601, 602, 621, 650, 1051, 1052]; +//// Если я в одной из этих комнат, +//// [И] Имя файла который инклюдит файл с проверкой не совпадает с именем файла локации в которой я нахожусь +//// [И] Номер комнаты который я пытаюсь открыть есть в списке проверяемых +//if (in_array(User::$current->getRoom(), $roomsCheck) +// && pathinfo(debug_backtrace()[0]['file'])['basename'] != Travel::$roomFileName[User::$current->getRoom()] +// && in_array(array_search(pathinfo(debug_backtrace()[0]['file'])['basename'], Travel::$roomFileName), $roomsCheck)) { +// header('location: main.php'); +// exit; +//} if (!empty($_GET['goto']) && !empty($_GET['tStamp']) && !empty($_GET['vcode']) && $_GET['vcode'] == md5(sha1($_GET['goto'] . $_GET['tStamp']))) { $query = 'update users u, online o set u.room = ?, o.room = ? where user_id = id and user_id = ?'; @@ -436,7 +440,7 @@ function addch($text, $room = 0) } if ($fp = @fopen("tmp/chat.txt", "a")) { //открытие flock($fp, LOCK_EX); //БЛОКИРОВКА ФАЙЛА - fputs($fp, ":[" . time() . "]:[!sys!!]:[" . ($text) . "]:[" . $room . "]\r\n"); //работа с файлом + fwrite($fp, ":[" . time() . "]:[!sys!!]:[" . ($text) . "]:[" . $room . "]\r\n"); //работа с файлом fflush($fp); //ОЧИЩЕНИЕ ФАЙЛОВОГО БУФЕРА И ЗАПИСЬ В ФАЙЛ flock($fp, LOCK_UN); //СНЯТИЕ БЛОКИРОВКИ fclose($fp); //закрытие @@ -451,7 +455,7 @@ function addchp($text, $who, $room = 0) } $fp = fopen("tmp/chat.txt", "a"); //открытие flock($fp, LOCK_EX); //БЛОКИРОВКА ФАЙЛА - fputs($fp, ":[" . time() . "]:[{$who}]:[" . ($text) . "]:[" . $room . "]\r\n"); //работа с файлом + fwrite($fp, ":[" . time() . "]:[{$who}]:[" . ($text) . "]:[" . $room . "]\r\n"); //работа с файлом fflush($fp); //ОЧИЩЕНИЕ ФАЙЛОВОГО БУФЕРА И ЗАПИСЬ В ФАЙЛ flock($fp, LOCK_UN); //СНЯТИЕ БЛОКИРОВКИ fclose($fp); //закрытие