Пишу свою сборку с нуля

PowerPuffLove

Путник
Участник
Сообщения
19
Розыгрыши
0
Репутация
0
Реакции
2
Баллы
3
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
Vasyan.NET
Всем привет! Я вот уже 12 лет занимаюсь кодингом пять дней в неделю по 8 часов в день и решил попробовать ради эксперимента написать свою сборку.
В качестве ЯП буду использовать C# на .NET фреймворке. В помощь себе беру Claude c подпиской за 200 баксов и этот форум как источник костылей и велосипедов, информации о багах/дюпах. В качестве интереса готов ответить на все ваши вопросы и поделиться всей инфой по архитектуре ядра. Буду признателен если вы задушите меня техническими вопросами и будете меня критиковать на каждом шагу, чтобы я смог использовать вашу критику для улучшения будущей сборки. По поводу раздачи исходников я пока не решил - на данный момент исходники показывать не буду, но возможно после получения того или иного результата, поменяю свое мнение.

По плану в MVP хочу сделать серверную сборку для IL хроник, но с возможностью дальнейших расширений под любые будущие хроники. Я понимаю, что механики сильно меняются от хроники к хронике, некоторые кардинально, это будет учтено в архитектуре ядра. Такую дельту между хрониками планирую реализовывать в виде подключаемых и отключаемых плагинов.

Проанализировав код расшаренных Java сборок, я сделал вывод, что многопоточная архитектура с блокировками несет большой риск дэдлоков и гонок, приводящих к дюпам, поэтому я думаю сделать сборку на тиковой системе. Условно положим тик сервера = 100мс.

За время одного тика сервер буферизирует все приложенные к нему пакеты и в конце тика делает транзакционную запись в БД. Таким образом, если пользователь выкинул что-то из инвентаря на пол, операция удалить предмет из инвентаря и положить предмет на пол будет атомарна и выполнена в транзакции - если что-то пошло не так, то откатятся оба действия.

Также тиковый подход исключит любые гонки и блокировки потоков, но не запретит параллельную обработку буфера. В текущих ява сборках при PVP удар игрока по другому игроку может обработаться сервером не последовательно во времени, а по порядку, который определила ОС при обработке потоков. Мне кажется это нифига не честно

Тиковый подход строго сортирует пакеты по времени прихода на сервер и буфер гарантирует обработку в нужном порядке - если ты ударил соперника раньше, то и сервер обработает это по-честному.

Также я откажусь от использования ООП для работы с игровыми объектами, чтобы исключить лишние аллокации и не загружать сборщик мусора. Но об этом я расскажу в следующем посте, если соберу позитивный фидбек от вас. Спасибо, что прочитали.
 
понимаешь в чем дело. на этом форуме сидят супер олд админы\разработчики\программисты со огромным стажем, и они без тебя в курсе как сейчас происходит разработка с помощью ИИ
не понимаю, с чего ты взял что твоя история будет кому то здесь интересна или полезна
 
Я не собираюсь рассказывать про разработку с помощью ИИ. Я собираюсь рассказывать про архитектурные решения, которые я не видел ни в одной сборке, соберу такую сборку (или не соберу, потому что оно не соберется) и дам сравнительную характеристику в конце по разным параметрам или в конце напишу, почему сфейлилось. В этом интерес и польза.

Я смогу за каждую строчку кода пояснить, во-первых, во вторых я их все вычитывать собираюсь скрупулезно. ИИ мне нужен только как инстурмент для экономии времени. Опять же, все сценарии, юнит тесты, решения по структурам данных, алгоритмам, паттернам проектирования, сценарии тестирования, всю эту лабуду буду делать лично я. Если подписка кончится, я куплю еще одну, не беда

Вот, к примеру диаграмма обработки тика хайлевельная:



Из того, что тут нарисовано естественно возникает ряд вопросов:

1. Будет ли процессор справляться со всем этим за один тик
2. Не упрусь ли я в базу данных из-за I/O операций.
3. Как считать видимость соседей по графу чтобы не уйти в O(n^2)
 
PowerPuffLove, я бы посоветовал пул делать а не эту ступень на картинке, которая каждые 100 мссекунд на реактивной тяге будет приближать ваш (или иной) ПК к галактике пегас.
 
Это мода какаета пошла писать то на Go, то на typescript .....
Вы доведите на l2j уже до конца
сборки по 10-15 лет пилили, но они как были кривые такими и остаются
и на счет тиков пиков гонки запросов это прекрасно решается в L2J,
смысл переносить одно говно с одного языка на другой не вижу смысла вообще
 
А откуда мне взять референсные значения? Информацию о механиках и формулах, и т.п. Я её собираю сразу изо всех источников и делаю сравнение. Почему мне не должно быть все равно на то, на каком языке написана логика того или иного скилла или механики? Мне надо воспроизвести ожидаемое поведение, а не ограничения какого-то языка.
 
Потому что там все денные взяты с потолка и написаны бездарем, где в добавок ничего не работает. Данные можно брать из слитого птс, но не как ни с явы.
Ты просто перенесешь эмулятор явы на шарп. Какой вообще в этом смысл.
 
В теории оно будет более стабильным, держать очень большую нагрузку и недорогим по ресурсам. Также я сделаю плагинную систему где механики можно будет запиливать не трогая по 100500 мест в коде как это сделано во всех слитых исходниках, которые мне удалось найти. Все сборки с точки зрения проектирования программных систем это полнейшее унылое костыльное говно. Я хочу из этого хаоса собрать что-то красивое и стабильное. Первое что я хочу убрать это гонки и дедлоки и аллокацию огромного числа тяжелых объектов в куче, из-за которых сборщик мусора джава машины валит производительность всего сервера.
 
Я придумаю что-то, надо переспать с этой мыслью. Может паблик репозиторий выложу. Может в награду за помощь скину. Пока не буду делить шкуру неубитого медведя. Если у меня что-то дельное получится, крысить не буду, поделюсь
 
Я понял ваш настрой, я вернусь, когда будет, что показать. Так трепаться это бессмысленно.
 
Ничего вы не покажете. Уже был энтузиаст который пилил на С#, но по какой-то причине он пришёл к выводу что это не возможно написать сервер на с#. В общем только время потерял, проект слил в шару. Можете взять как основу. проси у админов, они объяснят почему это утопия, в общем они это и объяснили человеку.
 
Не обращай внимания, тут такой форум, что 90% начинаний сталкиваются с критикой и "наездами".
Если ты и правда разработчик с опытом, и хочешь в это поковыряться, то, как сказали выше, возьми на разбор PTS модели, которые есть в свободном доступе. Посмотри, как это изначально задумывалось, как реализовали они - и поищи более интересные решения, например. Понятное дело, что это скорее всего для себя, хобби - но смотреть на оригинальный продукт лучше, чем на пережеванный кусок пиццы (мобиус или что-то подобное).
Сам, когда начал ковырять PTS, механики, аишки, и то, что мне было интересно, сильно удивился - что несмотря на то, что это в свободном доступе - используют это далеко не все, возможно потому, что это им и не нужно.
Ну и это игра в долгую, почти не монетизируемая, поэтому - подумай хорошеенько - а надо ли тебе это вообще?) А так, удачи в ковырянии)
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…