Обучение #39
No reviewers
Labels
No Label
дизайн и верстка
ошибка
критическая
ошибка
локальная
ошибка
опасность
разработка
новинка
разработка
ремонт
No Milestone
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Blocks
#26 Обучение
new-combats/game
Reference: new-combats/game#39
Loading…
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?
45fc2f51b4
35c0b6825fНу как-то так пока что.
@ -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 @@
<?php
ini_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();
И эта штука один раз отработала и дальше будет вхолостую колбаситься на каждое сообщение в чате?
Я не знал как по другому, может не додумал