Ошибки и исправления в движке Z-War

gerrok

Команда форума
Модератор
Репутация
241 / 237
Все же решился и потихоньку буду развивать ветку движка Z-War.
По мере накопления решений буду прикреплять к первому сообщению. Пока буду писать просто в сообщениях.

В. Для чего эта тема?
О. Здесь планируется публиковать выявленные ошибки в скрипте а также методы их исправления. (Поясню - что я не претендую на звание "ТруПрогЁР 2014" и поэтому не всегда решение будет наиболее оптимальным и красивым в плане оформления и реализации - я буду писать фиксы банально и интуитивно просто, чтобы читающий понял суть проблемы - а уж красивый код и оптимизацию напишет каждый себе сам. "Я лишь укажу дверь, войти ты должен сам...."(С) "МатриЦо.

В. Результат, которого хочу добиться от переделки?
О. Внешне: перерисовать графику сайта под официальный сайт игры
Скриптово: оптимизировать под большинство "человеческих" браузеров и максимально вычистить код от бэков, багов.
База-данных: оптимизация баз данных и сокращение числа запросов в базе и количества хранимых данных в базе.

Главная страница
411c65e8ebca.jpg

В игре
692e784585d4.jpg

В игре v.1.1
1e58c516dbbb.jpg

Страница Персонажа
a3a99e76470f.jpg
ПЛАНЫ и ИДЕИ ( по русски - над чем сейчас работаю...)
в данный момент тружусь над восстановлением форума проекта ( с восстановлением всех таблиц в базе, стремясь обновить версию самого форума SMF хотя бы до 1.1.20 ну или если совсем повезет - 2.0.9), а также переписываю регистрации и восстановление пароля.
Также переверстывается дизайн в соответствии с картинками и прочим с офф.сайта и форматированием страниц при помощи table, с полным уходом от такого понятия как div блок.
 
Последнее редактирование:
Ошибка №1 – Неверное отображение рейтинга противоборствующих сторон в игре (Зомби и выжившие). В частности отсутствует проверка на 0 значение в базе users.
Решение: ищем основной файл index.php в нем ищем блок, отвечающий за рейтинг и меняем на:

 
Последнее редактирование:
Ошибка №2 – Отсутствует проверка на расу и разница между внесением записей в базу данных в зависимости от рассы.
По-русски: в файле registration/index.php после 254 строки, где определяются статы персонажа сразу же идет запись в базу всех переменных, и получается что у персонажа при расе – выживший – статы в базе и на выжившего и на зомби. Проверено много раз.
Решение и оптимизация: со строки 232 в файле registration/index.php меняем код статов и запросов в базу на следующий:
 
Последнее редактирование:
Модернизация №1 – при входе на главную страницу и вводу неверных данных, попытке инъекции и т.п. выкидывается новое окно с текстом ошибки и если повезет кнопкой Назад, а иногда и без нее - непорядок Однако.

Решение и оптимизация – реализовать поле вывода ошибок при входе в игру и не переводить на новую страницу, а оставлять на главной и вывести ошибку пользователю.

В файле index.php корневой директории
В удобном месте html верстки вставляем:
 
Последнее редактирование:
Ошибка №3 – в связи с оптимизацией таблицы игроков мы изъяли полностью разграничение статов по выжившим и зомби, но везде по коду эта проверка все еще есть.

Решение:
Вот часть найденных ошибок:
functions/char_info_functions.php в районе строки №963 ищем следующее:
 
Последнее редактирование:
Ошибка №4 – В настройке персонажа в выборе аватара есть возможность установить аватар как выжившего, так и зомби, без разницы какая расса у персонажа:
 
Последнее редактирование:
Ошибка №5 – В связи с тем что мы решили оптимизировать БД в некоторых функциях скрипта есть запросы на на уже не существующие строки таблицы users, в частности сейчас мы обсудим блок отображения информации о предметах персонажа и его аватаре на главной странице игры.

На будущее в исправлениях планирую полностью исключить разницу выживших и зомби, и сократить до максимума таблицу users, убрав такие переменные как
level_inf
killed_humans_inf
killed_zombies_inf
skill_points_inf
 
Последнее редактирование:
Чистка №1 – Проверка на рассу (выживший или зомби) в настройках профиля.
Переходим в файл: player_room/index.php примерно 146 строка:
 
Последнее редактирование:
Для информации - В первой теме также добавлен Спойлер: "Скриншоты в игре", касательно текущего состояния модернизации игры.
 
Я вернулся после праздников на форум.*russian* Я не терялся- просто времени было мало писать сюда. В данный момент скрипт продолжает видоизменяться и настраиваться. Сейчас я переписываю и модернизирую административную панель и восстанавливаю отсутствующий, либо криво реализованный присутствующий функционал. по мере "допиливания" до определенного стабильного состояния- продолжу описывать сюда исправления и модернизации. Постепенно буду заливать новые изображения игры в связи с доработкой интерфейса. Милости просим смотреть и завидовать "белой" завистью. :ah:
 
Последнее редактирование:
Ошибка №6 – Отсутствие проверки на рассу при регистрации персонажа и присвоении ему стартовых квестов.
Переходим в файл registration/index.php в районе 281 строк:
Ищем следующий код:
PHP:
mysql_query("INSERT INTO users_quests (user_id, quest_id, accepted, quest_type, `condition`, race, finished)
                       VALUES('$ind',1,1,2,'npc_speak','human',0)", $ServerLink);
mysql_query("INSERT INTO users_quests (user_id, quest_id, accepted, quest_type, `condition`, race, finished)     
                       VALUES('$ind',30,1,2,'npc_speak','infected',0)", $ServerLink);
Заменяем на это:
PHP:
if ($race = 'human')
   {
    mysql_query("INSERT INTO users_quests (user_id, quest_id, accepted, quest_type, `condition`, race, finished)
                           VALUES('$ind', '1', '1', '2', 'npc_speak', 'human', '0')");
}
elseif ($race = 'infected')
   {
    mysql_query("INSERT INTO users_quests (user_id, quest_id, accepted, quest_type, `condition`, race, finished)
                           VALUES('$ind', '30', '1', '2', 'npc_speak', 'infected', '0')");
}
 
Последнее редактирование:
Ошибка №7 – Ключевой проблемой, с которой сталкивается любой, кто запускает в первый раз этот (да и не в первый тоже) проект – проблема времени суток и ее неверное отражение, и записывание в базу в таблице MySQL в таблице day_night
Подпроблема №1 – Как и многих наверно, бесит что время хранится в формате bigint(20) – для понятности меняем тип поля – на time т.е. формате ch_time станет таким - 00:00:00.

Подпроблема №2 – запрос на проверку времени оформляется из многих файлов – насколько мне хватило ума найти начало проблемы – суть кроется в файле show_map_header.php
Рекомендации по решению:
Решения данной проблемы с кусками кода, что и на что заменить давать не буду, распишу только общую логику условий которую нужно соблюсти. Если же совсем лень – то могу продать готовое решение. (О покупке строго в ЛС).
Логика:

В таблице day_night начальное значение может быть:
1) Задано
то
1.1)Считываем показатель day_night и если он возвращает 0 – у нас день

1.2)Считываем показатель day_night и если он возвращает 1 – у нас ночь

2) Не задано
то
2.1)Вставляем значение в базу данных при 0 – день

2.2) Вставляем значение в базу данных при 1 – ночь

В качестве информации к размышлению не забываем, что у нас всегда можно спокойно вызвать текущее значение времени и присвоить функции :
$function_test = date(“H:i:s”);

Таким образом мы получим текущее значение времени в формате: ЧЧ:ММ:СС

Также не забываем, что хорошо бы везде проверять значение day_night и сравнивать с текущим значением времени и если оно перегибает определенный установленный временной лаг – делать

UPDATE day_night
WHERE day_night = ‘’, ch_time = ‘’;

Также в том же файле у тех, кто смог ухватить нить моей идеи возникнет проблема с переменной $hours_left, которая должна показывать, сколько осталось времени до смены времени суток.

Побеждается это условиями проверки с показателем текущего времени ($function_test) и временными границами и в случае,
- если текущее время попало в границы от ‘a’ до ‘b’ то рассчитывать $hours_left нужно по следующее формуле,
- если текущее время попало в границы от ‘b’ до ‘c’ то рассчитывать $hours_left нужно по следующее формуле,
- если текущее время попало в границы от ‘c’ до ‘a’ то рассчитывать $hours_left нужно по следующее формуле,
- если же текущее время равно границе ‘a’ или границе ‘b’ или границе ‘c’ то рассчитывать $hours_left нужно по следующее формуле.

Для всех остальных файлов, где ранее скрипт ругался на неверные запросы к времени суток проекта стоит указать банальные запросы в базу с вытаскиванием переменных $day_nightи $ch_time.
 
По первому вопросу ( Почему не отображается капча) - открывай registration/index.php и проверяй правильность полдкючения файла и его проверку.
По второму вопросу - тупо открываем index.php и ручками правим верстку и картинки. В твоем случае неверно указан адрес (возможно через css) к картинке. А именно вот к этой - index_files/down.jpg
 

Похожие темы

Сверху