Обучение #39
2 Participants
Notifications
Due Date
No due date set.
Blocks
#26 Обучение
new-combats/game
Reference: new-combats/game#39
Reference in New Issue
Block a user
No description provided.
Delete Branch "maksym"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
45fc2f51b435c0b6825fНу как-то так пока что.
@@ -45,3 +50,16 @@ spl_autoload_register(function (string $classname) {require_once $file;});Перенося - переноси. в загрузчике классов незачем выполнять игровую логику. 🤔
не знаю только куда, есть какие то файлы/классы которые на каждой странице есть?
А зачем тебе каждый возможный файл проекта?
@@ -0,0 +6,4 @@class SecondStep extends StepFactory{Тест - так и задумано?
это нужно с Евгением говорить чтобы написал тексты, но в целом да
@@ -91,0 +99,4 @@return $data->$short_name;}private function generateToken($length = 16)Вроде как полностью дублирует метод PassGen::new().
не знал о таком, но посмотрю
@@ -94,3 +119,3 @@{if(!$this->database_records) {$this->database_records = Db::run('SELECT * FROM user_training WHERE user_id = ?', [$this->user_id])$data = Db::run('SELECT * FROM user_training WHERE user_id = ?', [$this->user_id])Если нет особой необходимости, лучше использовать стандартный Db::getRows(), для единообразия.
Выбрал этот путь, потому что только одна запись там должна быть.
Тогда Db::getRow
@@ -103,0 +137,4 @@$this->database_records->data->$short_name = $this->firstRecordData()->$short_name;Db::run('UPDATE user_training SET data = ? WHERE user_id = ?', [Db:sql()
А смысл, если этот метод все равно вызывает run?)
run изначально приватный медод, который cтал публичным потому что где-то в паре мест понадобился доступ к PDOStatement.
@@ -4,2 +7,4 @@* @var object $step*/$short_name = 'first_step';basename($_SERVER['PHP_SELF'], '.php')не?@@ -0,0 +7,4 @@* @var object $step*/$short_name = 'second_step';basename($_SERVER['PHP_SELF'], '.php')не?заменю
@@ -0,0 +1,16 @@<?phpТочно классы вызовутся без загрузчика?
этот файл инклудится, чтобы не дублировать код вынес в отдельный файл
Почему ChatFirstStep.php, ChatSecondQuest.php, ChatThirdQuest.php, MyUserFirstQuest.php, MyUserFirstStep.php, MyUserFourthQuest.php, MyUserFourthStep.php, MyUserSecondQuest.php, MyUserSecondStep.php, MyUserThirdQuest.php, MyUserThirdStep.php - это набор классов с константами, а не статический массив, например, или не записи в базе? 11 классов, которые вообще ничего не делают вот совсем - выглядит очень нехорошо.
По ходу они созданы, чтобы таки стать тупыми элементами массива. Что-то ты тут сильно перемудрил, товарищ.
@@ -0,0 +22,4 @@return [];}public function getShortName(): stringЭто методы, возвращающие.. константу?
Это добавляет гибкости. Захочешь ты для определённого задания сделать логику отличную от других, сможешь спокойно это сделать, плюс я уже убедился что это хорошое решение, когда решил переписать логику трейнинга.
@@ -6,2 +14,4 @@use DarksLight2\Training\Steps\MyUserThirdStep;use DarksLight2\Traits\Singleton;use PassGen;use PDO;Прямая зависимость от PDO? Где? Как?
ого, я даже не заметил, без понятия как оно туда попало)
@@ -22,1 +46,4 @@} catch (TrainingException $e) {}$this->user_id = $user_id;Я бы от греха подальше проверил бы хотя бы на
> 0, а в идеале на валидное значение. Прилетит некондит, привет "всё сломалось".В идеале в айдишнике юзера не должно быть значения
<= 0Просто подумай, как такое вообще должно работать, если туда куда не надо попадают не те значения?) и все же я думаю что эта проверка должна быть уровнем высше, чтобы не засорять код глупыми
if($u->info['id'] > 0)У нас есть класс User на 12 тысяч строк. Можем сначала полностью переделать его, чтобы id точно, гарантированно, никогда не мог быть невалидным. Рефакторинг старого кода, он такой.
Я говорю по своему опыту, что запросто встречал случаи, когда
$u->infoвообщеNULL. И в данном случае код вернёт FATAL ERROR и полностью остановится. Я же предлагаю исключительно на время, пока всё хреново, сделать вариант, когда метод вернёт false и ругнётся не останавливая все процессы.@@ -99,2 +151,3 @@return $this->database_records;Db::run('UPDATE user_training SET api_token = ? WHERE user_id = ?', [$token,Так ты если запрос сюда перенёс, то и переменную хорони, которую ты создаёшь в памяти и без изменений пишешь в базу. :)
@@ -0,0 +63,4 @@case 'go_back':$training->previousStep();$training->store();die(json_encode(['status' => 'ok', 'message' => 'Вы указал не верный ответ!']));Тут либо "вы указали" либо "ты указал". :)
Ну проебался чутка)
@@ -33,3 +36,4 @@}use Core\{Config, Database, Db};use DarksLight2\Training\TrainingException;Нужны ли игроку технические исключения?
Солгасен, тупанул
@@ -36,0 +39,4 @@use DarksLight2\Training\TrainingException;use DarksLight2\Training\TrainingManager;$training_manager = TrainingManager::getInstance(User::start()->info['id']);На
dcc6a1337c/main.php (L59)вызывается инстанс User. Зачем вызывать ещё один на 20 строк выше?Не обратил внимание)
@@ -146,210 +148,228 @@ if (isset($_GET['loc'])) {) . '" AND `city` = "' . $u->info['city'] . '" LIMIT 1'));$tr_pl = mysql_fetch_array(Куча замен ниже, это тоже про обучение? Костыли, увечья, хаосники, турниры..
Я не понимаю почему это добавилось, наверное потому что я обернул в условие. Я хз
@@ -441,6 +444,11 @@ $tma = '';WHERE`id` = '" . (int)$u->info['id'] . "';")) {TrainingManager::getInstance()А если человек поднимет не стат, а навык или особенность? Он пройдёт квест так и не подняв стат.
упс, не заметил, я думал там только ability меняется
@@ -3,4 +4,3 @@{die();}require_once('/home/newcom1/public_html/_incl_data/__config.php');Убирая где-то
__config.phpи__db_connect.phpнадо вместо них вызыватьConfig::init()иDatabase::init(). Первое подтягивает настройки, второе подтягивает функцииmysql_.Я же убирал галочку (
@@ -0,0 +1,42 @@<?phpini_set('display_errors', 1);Не надо такое прописывать в отдельных файлах, чтобы потом общие настройки игнорировались и перезаписывались.
Я для себя ставил и забыл убрать(
@@ -0,0 +16,4 @@$manager = TrainingManager::getInstance();$step = $manager->getRegistered()[$short_name];$button_text = 'Продолжить';Если это константа, тогда зачем нужна переременная? Сразу в скрипт её.
Я там думал менять текст при вопросах, квестах и просто информационных блоках, но забыл)
@@ -265,6 +266,18 @@ if (isset($_POST['msg']) && str_replace(' ', '', $_POST['msg']) != '') {mysql_query("UPDATE `chat` SET `delete` = 1 WHERE `login` = '" . $u->info['login'] . "' LIMIT 1000");$_POST['msg'] = 'Я спамер ' . $u->info['login'] . ' и меня нужно заблокировать https://new-combats.com/info/' . $u->info['id'] . '';$training_manager = TrainingManager::getInstance();И эта штука один раз отработала и дальше будет вхолостую колбаситься на каждое сообщение в чате?
Я не знал как по другому, может не додумал