Пишу сервер LA2 C4 под Linux итог в общую шару

felex67

Знаменитый
Участник
Сообщения
30
Розыгрыши
0
Репутация
27
Реакции
15
Баллы
1 265
Всем доброго времени суток!
Не так давно я решил научится программированию на С/С++, и по ходу курса обучения дошел до стадии создания первого рабочего проекта. Долго ломал себе голову над тем что всё-так делать и решил отдать дань уважения любимой мной уже более десятка лет игре - Lineage 2.
Суть проекта заключается в написании модульного игрового сервера с возможностью расширенной настройки, которую в дальнейшем можно было бы использовать не только для LA, но и для других MMORPG. Если кому интересна такая идея, милости прошу E-mail: felexxx67@gmail.com.
На данный момент только приступаю к разработке, однозначно могу сказать что модель сервера будет примерно как и PTS, сейчас разрабатываю модель, думаю что через пару-тройку недель она будет готова, и, я предоставлю её на Ваш суд.
//небольшие выдержки из задач
1. Основная цель - рабочий сервер под клиент С4(по сути разница только в пакетах, остальное в конфигах фиксится).
2. Максимально защищенная обработка данных на валидность.
3. Само-собой разумеющееся - защита от брута, рута и прочей каки, например PacketHack(чем хорошо разрабатывать "с нуля" - можно избавиться от передачи лишней информации о статах других игроков, а также - проверять угол обзора на уровне ядра сервера, если кто не понял - нельзя будет видеть игроков через стену).
4. Автоматизированная система выявления БОТ-ов(на сколько вообще возможно).
5. Web-обвязка(слава богу на PHP и JavaScript приходилось много кодить).
6. Подробный мануал по настройке.
П.С: если у кого есть набор пакетов с описанием буду крайне благодарен, самому hLaPex-ом времени нету шнырять.
Заранее благодарен за уделенное внимание, жду коментов и мыла. Удачи!
 

И в добрый путь... Хочу сказать что такого рода ммо фреймворки уже давно реализованы на JAVA причем даже с клиентской частью на Jmonkey engine и редактором.
 
Могу быть тестером вашего проекта!
 
Вроде всё хорошо, но вроде Chronicle 4 уже вымер сразу после динозавров.
 
Могу быть тестером вашего проекта!
До теста то еще оооох как далеко =)

Вроде всё хорошо, но вроде Chronicle 4 уже вымер сразу после динозавров.
С4 потому что работал с PTS C4, и так или иначе имею представление о составе процедур и классов. Основное отличие - пакеты и характеристики NPC и предметов, но предполагается что это можно будет настраивать.

И в добрый путь... Хочу сказать что такого рода ммо фреймворки уже давно реализованы на JAVA причем даже с клиентской частью на Jmonkey engine и редактором.
Мне все равно его на С/С++ делать, этот проект, грубо говоря,- дипломная работа, от только разница в том что я учусь не в ВУЗ-е, а сам по себе.
 
Последнее редактирование модератором:
Как пожелание кросплатформенность операционных систем, добавьте минимальное и максимальное требование по железу, а так же использование всех ядер и потоков процессора и минимального и максимального обьема памяти доступное для обывателей ...
 
Это первоочередная задача, но тем не менее, пока не запустишь - не поймешь, не думаю что потребуется больше чем от обычного PTS, более того,- уверен что меньше. Что касается ядер, могу уверить, что ни одно из них не останется без дела. =)

Есть у кого алгоритмы шифрования conv.dat файлов? Не могу до конца понять метод шифрования заголовка, один и тот же квадрат имеет разные подписи и благополучно работает на разных сборках, но хотелось бы поподробней узнать об алгоритме. Заранее спасибо за помощь =)
 
боже упаси вас писать под PTSlike, пишите под ритейл.
 
а почему бы и нет? в первую очередь я стараюсь сделать так чтоб минимизировать перестройку скриптов, то самая тяжкая часть в настройке сервера. Сам по себе PTS очень даже не плох, и многие алгоритмы хорошо продуманы. Лишнего, разумеется приписывать не стану, но основные проблемы PTS можно обойти. Основная идея - написать проект который можно "допиливать" и оптимизировать на уровне кода, а не на уровне динамических библиотек. Более того, по факту получается так что и клиент на linux портировать можно, все равно весь клиент потрошить, а графических движков и на linux-e достаточно :)
П.С.: В частности можно и на базе OpenGL что-нибудь наколдовать.

Может кому-то и полезно будет...
Зверек по имени GeoData:
рассмотрим файл геоданных, при открытии его в HEX режиме смотрим на первые 2 байта, именно они обозначают номер квадрата. и, поскольку они занимают 2 байта, разумно предположить, что максимальный размер игрового мира может быть в размерах 255 * 255 квадратов (ух-ух, офигеть можно, гЫ).
Вслед за ними идут 4 байта (как я понял с флагами). Не активные квадраты имеют маску: 80 00 10 00(1000 0000 0000 0000 0001 0000 0000 0000). Разумно предположить(исходя из опыта игры - эти флаги отключают геодвижок, яркий тому пример - Tower of Insolence),и, действительно, если прикинуть сколько там слоев, то это очень разумный шаг. если посчитать примерные затраты памяти то имеем следующее(моё понятие устройства, это не точная копия полей класса, но полагаю крайне к тому близка, по крайней мере, исходя из файлов pathnode и _conv.dat):
struct _cell {
short z_nswe;
};
struct cell {
_cell* subs;
char layers;
};
struct block {
node* pnmap;
cell* cells;
short x, y;
char type
};
Далее, как я полагаю:
struct map {
long long flags;
short world_offset;
block* blocks;
};
ИТОГО:
просто для создания карты - 8 + 2 + 8 = 18 байтов.
карта без камаэлей и прочих: 11 * 16 + 4 = 175 квадратов (175 * 18 байтов, всего - 3150 байт).
для создания одного блока: 8 + 8 + 4 + 1 = 21 байт.
а теперь перемножим на количество блоков, которое составляет 65 635 на карту: 65 635 * 21 = 1 376 256 (байт);
а теперь еще посчитаем количество ячеек(разумеется, если блоки разбиты и имеют слои): 64 * 65 635 * 2 = 8 401 280;
итак, что мы имеем:
абсолютно пустая карта(только 1 слой, без маркеров): 3 150 + 1 376 256 = 1 379 406 (байт, это примерно 1,3164 МБ);
карта с маркерами(1 слой): примерно 8,012 МБайт.
Посчитаем пустой мир: 175 * 1,3164 ~ 230,37 МБайт.
Мир в 1 слой: 175 * 8,012 ~ 1 402,1 МБайт ~ 1,3692 ГБайт данных.

Теперь стоит отметить интересный подход кодирования, всё четко, ни одного лишнего бита =), к примеру,
вот так кодируется высота и направление(Z - значение высоты, NSWE - разрешенное направление) всего в 2-х байтах(двоичное представление):
ZZZZ ZZZZ ZZZZ NSWE
соответственно таким образом можно хранить диапазон от -2 000 до 2 000, что без проблем позволяет нам закодировать достаточно много значений. Также при таком кодировании очень легко проверить направление выполнив всего одну операцию: z_nswe & nsweMask;
далее если движение возможно остается только определить на какую именно точку перейти(только при многослойности) к примеру, при помощи подобного цикла
short d1, d2;
for(char i = 0; i < cell->layers; i++) {
if (cell->_cell.z_nswe > this->z_nswe);
else
break;
}
/* далее проверяем верхний и нижний край и ищем ближайшую точку, если это необходимо */
...
применяем смещение, если оно возможно... и т.д.
собственно, вот и весь геодвижок.
Самое интересное начнется когда мы наткнемся на препятствие, но, об этом потом =)
Всем спасибо, спокойной ночи...!
 
Последнее редактирование модератором:
PTS - Public Test Server, коим являлся слитый с1.
что за предрассудки.
 
Знаю я, что такое PTS, он не слитый, а восстановленный из дизассемблированного машинного кода. а называется он Public Test Server с целью исключения гонения со стороны NCSoft и UnrealEngine.
 
Знаю я, что такое PTS, он не слитый, а восстановленный из дизассемблированного машинного кода. а называется он Public Test Server с целью исключения гонения со стороны NCSoft и UnrealEngine.
пляяя... это типа прикол?
PTS (Public test server) это тестовый сервер, который позволяет играть в последнюю версию игры еще до ее релиза, что дает возможность игрокам и разработчикам взаимодействовать и исправлять множество багов и проблем до выхода релиза.
 
Может и прикол, я думаю в меру своей испорченности, а как думают остальные - не имею ни малейшего понятия. Наверное просто люди, которые работают на офф сервера целенаправленно "сливают" их в шару =)
 
felex67, ну покажите нам слив выше гф и уж темболее хроник год.
 
felex67, ну покажите нам слив выше гф и уж тем более хроник год.
Я поставил перед собой задачу разработать проект который можно будет рихтовать на уровне кода, более того - открытого кода, мне не жалко(под "рихтовать" имеется ввиду дополнять, L2 - это культ, пускай NCSoft работают над своими проектами, а я хочу чтоб каждый фанат л2 мог принять участие в "становлении" новых хроник, развитии мира и игрового процесса). Почему я выбрал C++: это более эффективно чем Java, как с точки зрения ресурсов ОЗУ, так и с точки зрения процессорного времени. Как ни крути, а Java - это байт-код которому нужен интерпретатор(JVM).

Единственное что мне мешает - отсутствие опыта и недостаток времени. через месяц-два-год, я все равно закончу этот проект и пускай он принесет много радости :)
П.С.: это относится не только к Л2, а ко всем ММОРПГ, да и играм вообще...
 
Последнее редактирование модератором:
В итоге будет как и всегда: пол года-год попилишь.
Если твой скил останется на том же уровне, то мб и дольше.
Когда поднимешь скил, найдешь мб работу или т.п. поймешь что оно нах тебе не надо, и забросишь.
Не кричи много заранее
 
  • Мне нравится
Реакции: RM+
Я уже очень много интересного почерпнул, к примеру, вы задавались когда-нибудь вопросом почему мир имеет не только положительные но и отрицательные координаты, как они вычисляются, почему шаг 8, и почему по большей сторне - 15 квадратов по Y максимальная и минимальная координаты равны?
Ответ банально прост, так графическому движку проще считать угол обзора камеры, каждый кадр сначала рисуется меню, потом считается угол перспективы и только затем выставляется камера в нужную позицию. Или еще одна интересность - почему "Heading" имеет значения от 0 до 32000 а не до 360? Применение именно такого подхода изрядно уменьшает нагрузку на граф движок и серве, т.к. и тому и другому не приходится делать лишних операций.

В итоге будет как и всегда: пол года-год попилишь.
Если твой скил останется на том же уровне, то мб и дольше.
Когда поднимешь скил, найдешь мб работу или т.п. поймешь что оно нах тебе не надо, и забросишь.
Не кричи много заранее
Если так подходить к вещам, то, по моему лучше вообще никогда ничего не начинать ))))
Оптимистом надо быть!!! Всё будет ХОРОШО!!!
К стати, на счет опыта - а последнюю пару месяцев я ооооооочень много полезного узнал )

Еще одна очень знаменательная вещь - касается геодаты. Весь мир представляется простым массивом ячеек, а не блок/ячейка. разница только в том что у одних ячеек есть слой, а у других только высота и направление. блоки, их типы и прочее нужны только для её разбора при загрузке, потом затраченные мегабайты освобождаются. В каждом файле заранее казан размер дополнительной памяти на "слоеные" ячейки. Ячейка вычисляется по формуле: (posX >> 4) - minX, (posY >> 4) - minY(не факт, конечно, я еще не смотрел пакеты отвечающие за передачу координат, но я так полагаю что они передаются именно знаковыми, в основном с целью проверки направления движения).
 
Последнее редактирование модератором:
Если так подходить к вещам, то, по моему лучше вообще никогда ничего не начинать ))))
Оптимистом надо быть!!! Всё будет ХОРОШО!!!
К стати, на счет опыта - а последнюю пару месяцев я ооооооочень много полезного узнал )
От того что ты начнешь, будет только +, так как будет тебе возможность поднять скил.
Просто работы овердохрена, и поэтому до конца довести будет сложно.
 
От того что ты начнешь, будет только +, так как будет тебе возможность поднять скил.
Просто работы овердохрена, и поэтому до конца довести будет сложно.

... одному
 
Назад
Сверху Снизу