EmissionRP - уникальный (?) мод с нуля
EmissionRP // dev_log
// INTRO
Приветствую игроков данного форума!
Данной темой я бы хотел анонсировать разработку уникального (?) игрового РП режима написанного с нуля - EmissionRP.
Я программист, который еще совсем недавно был достаточно далеким от мира SAMP'a. Я играл, но абсолютно ничего не знал о том как устроены сервера внутри, на чем они пишутся. Не знал pawno, не знаю паттернов и подходов к разработке...
И вот в один момент я понял, что мне стало абсолютно невыносимо от качества и однообразности большинства модов. Разработчики нагло врут игрокам о том, что тратят неимоверные время и усилия, но при этом выпуская раз в месяц сомнительные обновления, реализующие пару фич, разработка которых в действительности займет не больше дня.
Я захотел сделать свой мод, с блекджеком и... ну вы поняли. Я захотел доказать себе, что все эти люди ленятся и не хотят делать нормально, доказать, что делать нормально возможно!
Я уверен, что даже без знания pawno и без опыта разработки под SAMP у меня получится хороший проект. Я осознанно ни разу не смотрел исходные коды каких либо проектов, чтобы не засорять себе мозг и быть более независимым в вопросах проектирования архитектуры.
Что, опять?... Резонно! Но нет
Это не очередной мод, который будет заброшен через пять минут.
Это не очередной мод от человека, который не знает как программировать.
Это не очередной мод, который планирует быть безыдейный копиркой.
Это не очередной мод, основанный на копипастах других - я не видел код других модов.
Я уверен что мне хватит мотивации и сил, чтобы доделать этот мод. Надеюсь их хватит и моему напарнику, и мы пройдем этот пусть вместе!
Дальнейшая судьба мода неизвестна. Может быть он останется нашим личным детищем, может быть мы выложим его в паблик, может быть мы переедем в "проекты" и откроем собственный сервер. Для меня сейчас это загадка.
Мы делаем мод с желанием создавать собственные механики, но посчитали что будет слишком фатально трогать важные и привычные всем вещи. Все основные механики из других модов ИЗНАЧАЛЬНО будут присутствовать в нашем. Далее, если мы все же решим поднять проект и получим аудиторию, то мы продолжим гнуть свою "линию", и постепенно заменять привычный всем, но кривой функционал на более продуманный и соответствующий миру РП.
Еще один важный принцип нашей разработки заключается в том, что мы хотим по максимуму учесть все нюансы возможных абузов и нарушений, чтобы сделать мод максимально комфортным. Наша задача дать игрокам как можно меньше шансов что-либо нарушить, и предоставить автоматические РП наказания в случаях нарушений.
// TEAM
В настоящий момент я уже нашел себе единомышленника, который так же только встает на путь изучения pawno. Разработку всего мы ведем вдвоем. Если он захочет, то назовет себя в этой теме, или попросит меня.
Андрей, напиши мне, или сам в эту тему
// TECH
Технический мод реализуется не так, как большинство существующих модов. Вместо использования mysql, файлов и прочего мною было решено использовать отдельный сервер для работы с данными, так называемый бэкэнд.
Все операции по сохранению, обработке, просчитыванию и прочему выполняются им (бэкэндом), тем самым экономя ресурсы игрового сервера.
Второй очевидный плюс - все данные вынесены за пределы сервера, что позволяет легко использовать их где угодно еще. Например - панель администрирования, из которой можно делать практически все действия, которые можно делать с сервера.
Третий плюсом является более удобный язык (C#), позволяющий разрабатывать проще, быстрее и приятнее, чем это происходит с устаревшим pawno. Это особенно актуально при работе с данными, ведь в C# мы имеет великолепные EntityFramework и LINQ.
В настоящий момент для получения данных используется модуль HTTP, и по скорости он вроде бы как устраивает, работает более чем быстро. В прочем, я задумываюсь о том, чтобы в будущем написать C++ плагин, который будет являться мостом между сервером и бэкэндом, пересылая сообщения на более низком сокетовом уровне, нежели это делает HTTP.
Панель администрирования будет так же реализована после завершения некоторой основной части функционала мода. Она будет как для игроков, так и для админов. Хочу открыть все данные, все логи: сделать все доступным. Сделать карту с проверкой домов, машин - идей на тему админки очень много, но я пока не занимался их систематизацией и не записывал их, поэтому в данный момент не способен выдать что-то более конкретизированное.
Мод разбит на файлы. Я тут читал, что многие так не делают... Я в шоке=)))
Мод разбит на модули, которые могут быть включены или выключены.
Мод старается следовать правилам наименования и единой архитектуре модулей. Пока написано достаточно мало код, то сложно однозначно трактовать удобность архитектуры, это будет понятно только с увеличением сложности мода и количеством кода. Думаю, что архитектура со временем будет сильно меняться, и придет к чему-то совершенному.
Мод будет использовать переводы и настройки, подцеляемые из веб панели. Разумеется, они будут применяться без перезагрузки. Если не делать так - лучше не делать вообще. Единственная сложность это непрогнозируемый размер строк (решения пока нет).
Мод будет активно использовать продвинутые инклюды от Y_Less'a (YSI), тем самым еще больше улучшая свою архитектуру и функциональность, благодаря возможностям динамический хукать функции и т.д..
Мод написан с осознанием того, что делается. Например, каждая функция не является public или stock, как в 50% туториалов, разбросанных по русскому сегменту.
// Summary
Зачем эта тема? Мы видим в ней несколько причин:
1) Мы хотим делится проделанной работой, чтобы повышать мотивацию и получать отклик (советы) от других людей.
2) Мы хотим проводить опросы, иметь некую аудиторию, с которой можем советоваться.
3) Мы хотим приносить вдохновение другим разработчикам, показывать что можно делать нормально и круто, и вовсе не обязательно следовать шаблонным гайдам (помним: я не видел ни одного исходного кода существующих модов)
4) Мы хотим общаться и обсуждать идеи, проблемы и решения с другими разработчиками. Наш опыт павна - одна неделя. Да, зная другие языки этого хватило чтобы начать уверенно писать на нем, но всегда могут возникать спорные вопросы или ситуация, в которых требуется знание "внутренностей" языка.
Старт разработки - 13.07.2017
Мы следуем системе еженедельных спринтов, поэтому крупные посты об обновлениях будем стараться писать раз в неделю.
Так же мы подняли простой сайт, который агрегирует коммит-логи с наших репозиториев. Там вы можете следить за работой в лайв-режиме - http://emission-samp.ru/ (не допилен)
Change Log #2 (от 31.07.2017)
*Change Log #2 (от 31.07.2017)
Привет. Это западавший чейжлог №2.
Пока достаточно сложно держаться графика, и выпускать недельные чейнжлоги вовремя, но я буду стараться как можно меньше отклоняться недельного графика.
На этой неделе, к сожалению, было достаточно мало времени для работы над проектом, из-за основной работы, на которой в настоящий момент сильная загруженность.
*WEB
На этой неделе мы начали работу над редактором сокращений, и планирование блога.
Редактор сокращений это достаточно бесполезная штука, которая просто пришла к нам в голову. Мы стараемся не ограничивать себя рамками, и позволять некий фан и творчество в разработке. Если нам хочется потратить время на разработку какой-то не сильно нужной системы, которая кажется нам интересной, то мы делаем это. Просто потому, что нам это нравится.
Суть идеи проста: мы заметили, что сокращенные имена некоторых наших разработок достаточно плохо читаются, и теоретическим читателям нашего блога (ниже об этом) или чейнжлога может быть сложно понять о чем идет речь. Редактор сокращений призван решить данную проблему, позволив нам добавлять в БД сокращения и их расшифровки, выводя их потом в виде поп-апов.
Блог. Мы просто поняли, что нам нужно иметь какое-то место, где мы можем писать наши чейжлоги, чтобы в перспективе размещать их на разных источниках. Намного удобнее выносить обсуждения на источники, а исходный текст держать в одном месте, ведь так проще править и следить за ним. Да, это могла бы быть группа ВК, или мы могли бы использовать существующий блоговый движок.. Но я, например, ни разу не писал своего блога. Пора исправлять :)
*SAMP
На этой неделе я занялся созданием экрана создания персонажа.
Там у нас предполагается распределение статов, как это например сделано в небезызвестном фоллауте. Но не успев дойти до момента создания TextDraw'a для распределения скиллов я наткнулся на проблему с анимацией камеры. По плану у нас на экране выбора скинов камера движется по разным районам, показывая Actor's в разных скинах. Я сделал это через функции интерполяции камеры, но сразу понял, что это совершенно неудобно для меня, и хранить позиции камеры, настройки и скорости переходов и прочее в исходном коде... ну совсем не хочется.
В результате я решил создать редактор для создания кинематографических (cinematic) камер, которые могут переключаться друг на друга динамический, в зависимости от значения флагов, переменных (внутренних, тех которые созданы для этих камер).
Достаточно сложно описать свою идею детально, в ближайшие дни завершу и предоставляю видео-демку, так будет проще и понятнее.
На эту неделю все. Мотивация пока не покидает, проект развивается, но если признаться, то по сравнению с первыми этапами разработки мы потеряли некую системность, и позволяем себе двигать наши внутренние сроки, что я считаю уже достаточно плохой тенденцией.
Change Log #3 (от 9.08.2017)
*Change Log #3 (от 9.08.2017)
Да-да, это в очередной раз запоздавший чейджлог №3.
Когда-нибудь я смогу следовать недельному графику.
*Mental
Решил добавить новую "рубрику", в которой можно писать о моральном состоянии, о трудностях мотивации, о тайм-менеджменте. Опять же повторюсь: если это никому не интересно это совершенно не беда. Эти заметки дублируются ко мне в Evernote, и писать их имеет смысл как минимум для личного контроля и мониторинга себя, своей производительности, своего настроя и т.д..
В настоящее время из-за большой занятости сложно выделять достаточно времени на разработку.
Код в последнее время пишется без тестирования в игре. Максимум - через консоль сервера. Сейчас имеется уже около 1.5-2 тыс. строк кода, которые я не смотрел в игре вообще.
С одной стороны это интересный и полезный для любого программиста опыт, ведь очень сильно развивает и задействует абстракцию. Но с другой... велик шанс, что при тестировании в игре функции начнут выдавать непредсказуемый результат которого я не ожидал, и в лучшем случае это приведет к правкам кода.
В выходные в последнее время не занимаюсь проектом вообще: стараюсь выделять их под отдых, чтобы не перегорать от большого кол-ва работы.
Из другого интересного опыта: заметил что обещания (даже если в пустоту) довольно сильно мотивируют. Когда вспоминаешь о них, то ощущаешь внутренний пинок, мотивирующий работать усерднее чтобы успеть в срок. Смею заметить, что скорее всего это актуально далеко не для всех. Есть люди которые без зазрения совести могут нарушать сроки и обещания, поэтому данный опыт скорее всего субъективен.
*SAMP
В ходе разработки нашей системы "умных" камер CMT я понял, что нужен какой-то инструмент для админов, который может выделять объекты, двигать их, задавать позиции, вращения...
Так родилась идея админ-тула, или админ-палочки. Это специальный инструмент, который поддерживает различные режимы (неограниченное число, он имеет удобное API чтобы расширяться без изменения собственного кода). Каждый режим позволяет выделять и манипулировать различными объекта (здесь под понятием объект не 3д модель, а сущность: пикап, дома из системы домов, редактирование ЗЗ, создание рекламных щитов и т.д.).
Данный админ-тул будет центральным инструментов для манипуляции структурами сервера, позволив работать более визуально, и частично абстрагироваться от команд и запоминания ID объектов или элементов различных систем сервера.
Все наши системы будут использовать данный инструмент (если он им нужен, разумеется).
===========================================================================
На данную неделю все. К сожалению пока мало визуала который можно показать, но надеемся через месяц (а может и меньше) мы уже начнем демонстрировать скриншоты и гифки систем.
Здесь, как и в разработке любого другого ПО справедлив закон Парето. Сейчас у нас те самые сложные 20% результата и 80% работы, которые отвечают за основную программную базу сервера :)