немного логики

This commit is contained in:
lopar 2022-02-12 14:25:43 +02:00
parent f12e7c8cd7
commit 0f62ee20e7
2 changed files with 123 additions and 53 deletions

View File

@ -55,9 +55,45 @@ class Travel
2702 => 'city.php' 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 откуда идём. * @param int $roomIdCurrent ID откуда идём.
*/ */
public static function toRoom(int $roomId, int $roomIdCurrent): void public static function toRoom(int $roomId, int $roomIdCurrent): void
@ -88,7 +124,9 @@ class Travel
/** /**
* Проверка можно ли перейти из комнаты в комнату. * Проверка можно ли перейти из комнаты в комнату.
*
* @param int $roomId ID комнаты * @param int $roomId ID комнаты
*
* @return array|int[] * @return array|int[]
*/ */
private static function allowedRoomMoves(int $roomId): array private static function allowedRoomMoves(int $roomId): array
@ -141,4 +179,32 @@ class Travel
} }
return $room[$roomId]; 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;
}
}
} }

View File

@ -23,56 +23,60 @@ if (User::getInstance()->getBlock()) {
exit('user blocked!'); exit('user blocked!');
} }
/* //Проверки на соответствие скрипта и комнаты, которые были натыканы по всем файлам.
* Проверки на соответствие скрипта и комнаты, которые были натыканы по всем файлам. Travel::roomRedirects(User::$current->getRoom(), User::$current->getBattle(), User::$current->getInTower());
*/
$fbattleCheckFiles = [ ///*
'c_haos_in.php', // * Проверки на соответствие скрипта и комнаты, которые были натыканы по всем файлам.
'c_haos.php', // */
'c_park.php', //$fbattleCheckFiles = [
'city.php', // 'c_haos_in.php',
'enter_cave.php', // 'c_haos.php',
'library.php', // 'c_park.php',
'atk.php', // 'city.php',
'podzem_dialog.php', // 'clan_castle.php',
'post.php', // 'enter_cave.php',
'shop.php', // 'library.php',
'tournament.php', // 'atk.php',
'vxod.php', // 'podzem_dialog.php',
'bank.php', // 'post.php',
'canalizaciya,php', // 'shop.php',
'forest.php', // 'tournament.php',
'main.php', // 'vxod.php',
'repair.php', // 'bank.php',
'towerstamp.php', // 'canalizaciya,php',
'hell.php', // 'forest.php',
'ul_clans.php', // 'main.php',
'labirint.php', // 'repair.php',
'akadem.php', // 'towerstamp.php',
'towerin.php', // 'hell.php',
'user_anketa.php', // 'ul_clans.php',
'zayavka.php', // 'labirint.php',
]; // 'akadem.php',
//Может просто отовсюду? О_о // 'towerin.php',
if (User::getInstance()->getBattle() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $fbattleCheckFiles)) { // 'user_anketa.php',
header('location: fbattle.php'); // 'zayavka.php',
exit; //];
} ////Может просто отовсюду? О_о
$towerinCheckFiles = ['main.php', 'city.php', 'tower.php']; //if (User::$current->getBattle() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $fbattleCheckFiles)) {
if (User::getInstance()->getInTower() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $towerinCheckFiles)) { // header('location: fbattle.php');
header('location: towerin.php'); // exit;
exit; //}
} //$towerinCheckFiles = ['main.php', 'city.php', 'tower.php'];
$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 (User::$current->getInTower() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $towerinCheckFiles)) {
// Если я в одной из этих комнат, // header('location: towerin.php');
// [И] Имя файла который инклюдит файл с проверкой не совпадает с именем файла локации в которой я нахожусь // exit;
// [И] Номер комнаты который я пытаюсь открыть есть в списке проверяемых //}
if (in_array(User::getInstance()->getRoom(), $roomsCheck) //$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];
&& 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; //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']))) { 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 = ?'; $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")) { //открытие if ($fp = @fopen("tmp/chat.txt", "a")) { //открытие
flock($fp, LOCK_EX); //БЛОКИРОВКА ФАЙЛА flock($fp, LOCK_EX); //БЛОКИРОВКА ФАЙЛА
fputs($fp, ":[" . time() . "]:[!sys!!]:[" . ($text) . "]:[" . $room . "]\r\n"); //работа с файлом fwrite($fp, ":[" . time() . "]:[!sys!!]:[" . ($text) . "]:[" . $room . "]\r\n"); //работа с файлом
fflush($fp); //ОЧИЩЕНИЕ ФАЙЛОВОГО БУФЕРА И ЗАПИСЬ В ФАЙЛ fflush($fp); //ОЧИЩЕНИЕ ФАЙЛОВОГО БУФЕРА И ЗАПИСЬ В ФАЙЛ
flock($fp, LOCK_UN); //СНЯТИЕ БЛОКИРОВКИ flock($fp, LOCK_UN); //СНЯТИЕ БЛОКИРОВКИ
fclose($fp); //закрытие fclose($fp); //закрытие
@ -451,7 +455,7 @@ function addchp($text, $who, $room = 0)
} }
$fp = fopen("tmp/chat.txt", "a"); //открытие $fp = fopen("tmp/chat.txt", "a"); //открытие
flock($fp, LOCK_EX); //БЛОКИРОВКА ФАЙЛА flock($fp, LOCK_EX); //БЛОКИРОВКА ФАЙЛА
fputs($fp, ":[" . time() . "]:[{$who}]:[" . ($text) . "]:[" . $room . "]\r\n"); //работа с файлом fwrite($fp, ":[" . time() . "]:[{$who}]:[" . ($text) . "]:[" . $room . "]\r\n"); //работа с файлом
fflush($fp); //ОЧИЩЕНИЕ ФАЙЛОВОГО БУФЕРА И ЗАПИСЬ В ФАЙЛ fflush($fp); //ОЧИЩЕНИЕ ФАЙЛОВОГО БУФЕРА И ЗАПИСЬ В ФАЙЛ
flock($fp, LOCK_UN); //СНЯТИЕ БЛОКИРОВКИ flock($fp, LOCK_UN); //СНЯТИЕ БЛОКИРОВКИ
fclose($fp); //закрытие fclose($fp); //закрытие