Сведения для разработчиков, желающих модифицировать код Проекта "СуперНова"
Код в СуперНове делится на несколько частей. Каждая из них имеет свое происхождение, свою идеологию и свою структуру
В движке СН (как и в любом программном продукте) есть баги. Я стараюсь тщательно тестировать все обновления, однако наличие говнокода и его взаимодействие с нормальным кодом вносит свои коррективы.
Не стоит путать "баги" с "особенностями". Я с самого начала открещивался от оффа. Копировать чужое мне неинтересно. Кроме того, отдельные аспекты оффа вызывали недоумения, вопросы и лично мне портили удовольстви от игры. Я завязал играть на оффе, когда выяснил, что вышедшего из нуб-зоны игрока может атаковать топ-1. Естественно, у меня защита новых и слабых игроков реализована иначе - по примеру XNova.
Я меняю те части игры, которые не нравятся лично мне, на те, которые мне нравятся. Т.е. я делаю игру, в которую лично мне интересно играть. Все пожелания и предложения рассматриваются именно в таком ключе - будет ли мне интересно играть в игру с такими изменениями? Например, мне (за небольшим исключением) нравится текущая система расчета боя. Система оГейма мне кажется крайне нелогичной, неинтуитивной и неинтересной. Поэтому я буду доделывать свою систему, а не ориентироваться на офф.
Вообще, статус проекта, как такового - "Альфа". Это значит, что отдельные аспекты игры в ходе разработки могут быть полностью изменены. Планы изменений есть в исходниках - желающие могут с ними ознакомиться.
Начиная с августа 2010 года, я стараюсь следовать phpBB3 Coding Guidelines (далее - PCG) с одним исключением: табуляция расширяются в два пробела и заменяются по возможности на пробелы. Выделяются два уровня совместимости: PCG или PCG0 - код отформатирован в соответствии с PCG; PCG1 - включает PCG0, а так же означает, что переменные названы в соответствии с PCG и правильно расставлены одинарные и двойные кавычки
Предопределенные функции и пакеты
ИД | Подсистема | Что относится к подсистеме |
---|---|---|
adm | admin | Администрирование сервера |
ali | alliances | Альянсы: создание и управление |
bud | buddy | Система Друзей |
cht | chat | Чат |
coe | combat | Боевой движок: обсчет боя между флотами, обсчет ракетных атак, симулятор боя |
eco | economic | Экономика (расчет начисления ресурсов) |
eco_bld | building | Строительство и покупка юнитов (включая офицеров, исследования и работу верфей) |
flt | fleet | Флоты: отправка флотов, обработка флотов в полете, обработка небоевых миссий |
int | interface | Интерфейсные функции |
log | logs | Система встроенных логов |
msg | message | Система сообщений |
qst | quest | Подсистема квестов |
reg | registration | Работа с незарегестрированными пользователями: логин, регистрация, восстановление пароля |
rpg | rpg | Ролевая система (опыт, уровни, начисление ТМ, Чёрный Рынок итд) |
sys | system | Системные функции |
uni | universe | Вселенная (планеты, луны, поля обломков) |
sn | supernova | Функции, не относящиеся к какому-либо из вышеперечисленных блоков |
Идентификаторы широко используются в названиях файлов, функций, переменных и так далее для облегчения навигации в коде
СуперНова состоит из двух взаимосвязанных компонентов: базы данных MySQL и PHP-движка. Версионирование каждого из компонентов осуществляется отдельно.
В БД СуперНовы в таблце config
в записи с ключом `config_name` = 'db_version'
хранится её текущая версия.
Версия БД - число, которое увеличивается каждый раз при изменении структуры БД.
Версия движка СуперНовы хранится в файле /includes/constants.php
в константе SN_VERSION
.
Номер релиза хранится в том же файле в константе SN_RELEASE
.
Движок версионируются строкой <release><stage>[<edition>][r<revision>]
, где
<release>
- релиз СуперНовы. Увеличивается при одноразовом значительном изменении в
коде движка (новая фишка, переписывание целой подсистемы итд), при накоплении большого числа мелких правок или
при изменении версии БД.<stage>
- этап текущей версии. Строчная буква английского алфавита, увеличивающаяся при переходе на
следующий этап работы над движком. Может принимать следующие значения:
a
- "alpha" - предварительная "скелетная" версия. На публике появляется в качестве "proof of conception"
и используется для оценки востребованности изменения, предварительной демонстрации возможностей, поиска грубых ошибок в
логике работы итд. Обычно не уходит дальше тестового сервера. Крайне нежелательно устанавливать куда-либо кроме
сервера, предназначенного специально для тестированияb
- "beta" - версия для открытого тестирования. Рекомендуется для установки тем, кто хочет пораньше
ознакомиться с новыми фишками и желает помочь в отлове багов. Качество таких версий может колебаться от "чуть лучше альфы" до
"почти релиз". Желательно ставить на отдельную тестовую вселенную, которой не страшны вайпыc
- "candidate" - пре-релиз. Версия, в которой устранены все известные ошибки и вылизан интерфейс. Установка
такой версии на production сервер относительно безопасна и очень желательна для поиска особо хитрых багов, проявляющихся только
под большими нагрузками или в особых условияхd
- "deployment" - стабильная версия для развертывания на production серверах, релизe
- "extra" - пост-релиз с небольшими изменениями. Это может быть обновленный дамп БД, изменения в документации,
поправки в локализации, тюнинг интерфейса, а так же косметические багфиксы. Устанавливать этот релиз необязательноf
- "fixes" - пост-релиз с фиксами внезапно обнаруженных в релизе критических багов или проблем с внутриигровым балансом.
Объема добавленного кода недостаточно для выпуска следующего полноценного релиза, однако апгрейд до этой версии крайне рекомендуется
<edition>
- редакция очередного этапа текущей версии. Необязательный параметр. Изменяется при необходимости
отметить модификацию кода на текущем этапеr<revision>
- ревизия движка. Необязательный параметр. Изменяется автоматически системой контроля версии.
Добавляется, когда необходимо различать редакции СуперНовы в процессе разработки
В движке вместе с номером его версиии хранится так же требуемая версия БД (константа DB_VERSION
в
/includes/constants.php
). Если движок запустится на версии БД выше, чем та, с которой может работать, он аварийно
прекратит свою работу с сообщением об ошибке. В нормальных условиях такого произойти не должно.
Такое может произойти, например, при восстановлении бэкапа более новой версии БД на старый движок. Данный механизм призван блокировать
возможные повреждения структуры БД в случае ошибок администратора сервера, сбоев в скрипте резервирования/восстановления, хакерской
атаки итд.
В движок встроен автоапдейтер структуры БД. Поэтому если более новая версия движка будет запущена на старой версии БД, он автоматически производет необходимые изменения в структуре базы (включая все необходимые перерасчеты). Поэтому в случае необходимости можно восстанавливать старые бэкапы БД на новую версию движка.
Начиная с версии 26 описание коммитов в GIT-репозиториях стандартизировано. Они имеют следующий формат:
<type>-<subsystem_affected>[-version]: <comment>
Начиная с ревизии 34a8.1 описание коммитов в GIT-репозиториях изменилось. Теперь они имеют следующий формат:
<subsystem_affected>-<type>-version: <comment>
Обращаю внимание, что параметр version
стал обязательным и контролируется git-хуком
Расшифровка переменных:
type
- тип коммита. Может принимать следующие значения:
release
- релиз движка. В комментарии указывается тэг, по которому можно получить данный релизcrit
- устранена критическая ошибка в коде или уязвимость. Необходимо срочно установить это обновлениеfix
- устранена ошибка в коде. Крайне желательно установить это обновлениеfeat
- обновление добавляет новую небольшую фичу в движок (большая фича меняет номер версии). Можно поставить это
обновление, можно дождаться очередного релизаmisc
- мелкое изменение, не влияющее на игру. Например - изменение форматирования для соответствия PCG1, переименование
переменных, небольшие изменения в алгоритмах и т.д.doc
- изменение в документацииwork
- промежуточный рабочий коммит. Обычно делается что бы зафиксировать работу над текущими изменениями в проекте, переключиться в другую ветку
итд. Серия таких коммитов закрывается одним из вышеперечисленных типов.
git
, а так же все коммиты без префиксов - технические коммиты, связанные с использованием GIT: внесение изменений в конфигурацию GIT,
изменение тэгов, разделение/слияние веток итдsubsystem_affected
- список кодов подсистем, которые затрагивает этот коммит. Если их несколько, то ранее они разделялись знаком "+".
Теперь упоминается только та подсистема, изменения в которой наиболее значительны
version
- версия движкаcomment
- краткое описание коммитаДвижок использует phpBB3 Tepmlate Engine (далее - PTE). PTE доработан до полной обратной совместимости со старым template-движком XNova, а так же для совместимости с моими новвоведениями. Из основных отличий можно отметить следующие:
Подробнее о формате темплейтов можно узнать в PCG и из документации phpBB3.
Шаблоны хранятся в каталоге /design/templates/<имя шаблона>
. В
настоящее время имеют расширение .TPL.HTML, а не .HTML, как в оригинальном PTE
СуперНова имеет встроенную систему логов для облегчения работы администрации сервера
0 | Код по умолчанию |
---|---|
100 | Информационные коды |
102 | Изменение количества Тёмной Материи |
103 | Изменение структуры БД |
104 | Переименование объекта Вселенной |
105 | Пользователь отменил премиум аккаунт |
190 | Запуск обновления статистики игроков |
191 | Сообщения системы обновления статистики |
192 | Обновление статистики игроков выполнено успешно |
2xx | Операция завершена успешно |
200 | OK |
3xx | Предупреждения системы логов |
300 | Общий код по умолчанию |
301 | Возможный багоюз. Когда-то данное действие пользователя приводило к ошибке, дающей ему неоправданное преимущество в игре (удвоение флота, бесплатная или моментальная постройка итд), т.е. являлось хаком. Сейчас эта ошибка устранена, но стоит присмотрется к пользователю - возможно он багоюзер или хакер. |
302 | Попытка взлома. Пользователь передал серверу данные, не совпадаю реальными (например - другой ID пользователя вместо своего, другой ID альянса, вместо своего итд). Обычно это означает попытку взлома. Очень редко это может означать о наличии ошибки в коде игры |
303 | Пользователь не найден в системе. Это может означать, что пользователь на странице логина или регестрируется. Или это может означать ошибку |
304 | Колонизация с несколькими кораблями |
305 | Попытка взлома. Пользователь передал отрицательное количество ресурсов на странице Чёрный Рынок->Торговец ресурсами. В нормальных условиях это сделать невозможно. До фикса это приводило к увеличению ресурса на указанную величину. |
306 | Попытка взлома. Пользователь передал в списке кораблей на странице Чёрный Рынок не-корабль. В нормальных условиях это сделать невозможно. |
307 | Попытка взлома. Пользователь передал отрицательное количество кораблей на странице Чёрный Рынок. В нормальных условиях это сделать невозможно. |
399 | Запись системы слежения за игроками |
4xx | Ошибки при запросе клиента |
401 | Unauthorized. Пользователь попытался получить доступ к части сайта, не доступной для его уровня доступа |
402 | Ошибка изменения количества Тёмной Материи |
403 | Forbidden. Попытка взлома - пользователь попытался выполнять отдельный файл вне нормального хода операции. Например - попытался выполнить файл, предназначенный только для include |
500 | Ошибки сервера - сбой в БД или ошибки в коде движка |
501 | У игрока отрицательное количество ресурсов |
502 | Ошибка записи пользователя: у пользователя в качестве родного мира назначена несуществующая планета |
503 | У планеты нет хозяина |
504 | Таймаут менеджера флотов |