Случайная подборка модов
Lost World Troops of Doom
4.1
ABC Inferno
3.9
Апокалипсис
4.0
NEYA Online
3.1
Возвращение Шрама
3.9
The Project Medeiros
3.7
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Модератор форума: Аdmin, Overfirst, Hardtmuth  
The FreeZone Project
Соединенные Штаты  Angry
Воскресенье, 25.09.2016, 07:23 | Сообщение # 1
Статус:
Зевака:
Сообщений: 10
Награды: 0
Регистрация: 06.12.2014


The FreeZone Project

Платформа: ЧН 1.5.10
Разработчик: FreeZone Team
Дата выхода: TBD, беты выходят по мере создания.











Сообщение отредактировал Angry - Воскресенье, 25.09.2016, 11:15
  Злобная реклама
Воскресенье, 25.09.2016, 07:23
Статус:
Сообщений: 666
Регистрация: 06.12.2014
Российская Федерация  drksnc
Понедельник, 23.10.2017, 18:06 | Сообщение # 76
xrMPE
Статус:
Гость:
Сообщений: 30
Награды: 2
Регистрация: 23.10.2017

Привет. Когда только появились первые репозитории, я сделал полностью рабочий движковый LastManStanding, в который играл время от времени с другом. Понимаю, что там делать-то нечего, но это был мой первый опыт. В общем, увидев топик, захотел поднять сервер на старом компе, чтобы можно было играть с народом. Но вот проблема - исходников оригинального 1.5.10, которые бы работали на современных студиях нигде не найти, везде свои репозитории, которые уже по сто раз правленые. Из-за этого приходится заменять всё двигло, т.к. замена одного модуля (xrGame.dll) приводит к крашу при запуске. В общем, это я всё к тому, что мне нужно будет в том числе пересобирать и выделенный сервер, который у FZ свой. Исходников тутошнего xrEngine я не нашел, поэтому прошу ткнуть носом в возможное решение.
Сообщение отредактировал drksnc - Понедельник, 23.10.2017, 18:06
  Злобная реклама
Понедельник, 23.10.2017, 18:06
Статус:
Сообщений: 666
Регистрация: 23.10.2017
Российская Федерация  Sin
Понедельник, 23.10.2017, 19:03 | Сообщение # 77
Статус:
Отмычка:
Сообщений: 77
Награды: 1
Регистрация: 15.01.2014

Цитата drksnc ()
движковый LastManStanding

Неплохо. А если скриптами? smile Впрочем, и движковый - это тоже хорошо.

Цитата drksnc ()
исходников оригинального 1.5.10

Скорее всего, по истории коммитов того же ОпенХРея на гитхабе самый первый и будет оригинальными исходниками.

Цитата drksnc ()
замена одного модуля (xrGame.dll) приводит к крашу при запуске

Ожидаемо. Если ты собираешь в другой студии, то в итоге может получиться другое ВСЁ. Например, будут использованы другие С-рантаймы, будут другие смещения в классах и структурах. Ничего хорошего из такого франкенштейна не выйдет. Если хочешь совместимый с оригинальным двигом xrGame, то придется собирать в оригинальной же для этого движка студии... Да и то не факт, что со 100%-й гарантией получится. Так что не стоит париться этим, проще сразу весь двиг подменить.
Цитата drksnc ()
выделенный сервер, который у FZ свой

Ничего подобного. FZ использует оригинальный движок версии 1.5.10. xrEngine немного подправлен для удобства внедрения dll, но это можно сделать и любым другим способом на старте сервера. Впрочем, вопрос тут не в этом.
Дело в том, что сама FZ3.0 изначально завязана на использование конкретной даже не версии, а СБОРКИ движка. Сделано это было по нескольким причинам. Основная - желание сохранить совместимость с оригинальными клиентом и сервером, а также различными утилитами а-ля Stalker Controller. Вторая - под Ганса я разработал патчинговый фреймворк srcKit, переезд на который не состоялся в свете релиза исходников, а поработать с фреймворком хотелось. Если движок пересобрать - адреса "поедут" даже при использовании того же компилятора, и серверная часть FZ станет неработоспособной.
Но тащить FZ целиком, по сути, тебе и не нужно. Ведь в твоем случае достаточно лишь только функций по загрузке мода и запуску клиента с ним. Именно для этого в FZ создан отдельный модуль - sysmsgs.dll. В нем и сосредоточена вся "магия". Тебе достаточно лишь подключить этот модуль (вызовом LoadLibrary или статически) к твоему движку, а при коннекте клиента дернуть нужные для конструирования пакета-загрузчика API из sysmsgs.dll. Все относительно просто. Пример создания пакетов можно увидеть в функции OnAttachNewClient модуля Players. DLL-"загручик" для твоей задачи, скорее всего, подойдет стандартная. Нужно лишь правильно собрать этот велосипед, и он должен поехать. Если будет полностью рабочий новый режим и какие-либо проблемы с прикручиванием - можешь спрашивать, они решаемы.
  Злобная реклама
Понедельник, 23.10.2017, 19:03
Статус:
Сообщений: 666
Регистрация: 15.01.2014
Российская Федерация  drksnc
Вторник, 24.10.2017, 08:12 | Сообщение # 78
xrMPE
Статус:
Гость:
Сообщений: 30
Награды: 2
Регистрация: 23.10.2017

Цитата Sin ()
А если скриптами?

Не умею smile
В любом случае, спасибо за разъяснения. Звучит не очень сложно. Буду пробовать.
  Злобная реклама
Вторник, 24.10.2017, 08:12
Статус:
Сообщений: 666
Регистрация: 23.10.2017
Российская Федерация  Vojlok
Суббота, 28.10.2017, 23:23 | Сообщение # 79
Статус:
Гость:
Сообщений: 63
Награды: 0
Регистрация: 15.08.2014

LastManStanding" - это режим боя такой? Очень интересно было б пойграть во что-то новенькое в мп:)
  Злобная реклама
Суббота, 28.10.2017, 23:23
Статус:
Сообщений: 666
Регистрация: 15.08.2014
Российская Федерация  Hardtmuth
Воскресенье, 29.10.2017, 07:09 | Сообщение # 80
Статус:
Ветеран:
Сообщений: 5233
Награды: 37
Регистрация: 01.03.2012

Цитата Vojlok ()
LastManStanding" - это режим боя такой? Очень интересно было б пойграть во что-то новенькое в мп:)


Не думаю что это какой-то отдельный вариант режима боя в игре. Интересно было бы услышать его рассказ о проекте. Может какой то модифицированный вариант какого то имеющегося режима в игре.

Я знаю, что LastManStanding - первая бесплатная игра в жанре "battle royale" (батл роял), представляющая уникальное сочетание высокой динамики игрового процесса, накала адреналина от постоянно уменьшающейся карты боевых действий и драйва от участия в грандиозной охоте, где сражаются за жизнь сразу 100 игроков; энтузиазм молодой студии-разработчика гарантируют регулярные обновления и постоянное совершенствование игры на основе обратной связи от игроков!

Но она 2017 года, а значит автор при создании своего проекта об этой игре и знать не знал.
Сообщение отредактировал Hardtmuth - Воскресенье, 29.10.2017, 07:12
  Злобная реклама
Воскресенье, 29.10.2017, 07:09
Статус:
Сообщений: 666
Регистрация: 01.03.2012
Российская Федерация  francyfox
Воскресенье, 29.10.2017, 09:21 | Сообщение # 81
Статус:
Гость:
Сообщений: 32
Награды: 0
Регистрация: 01.09.2013

Vojlok, https://vk.com/dealtech (не реклама) толи это он) то ли другой чувак, оба делают короче pubg из сталкера) по мне так затея не супер, есть в стиме аналог pubg это lastmanstanding и он бесплатен. Я за рп ваще)
Сообщение отредактировал francyfox - Воскресенье, 29.10.2017, 09:23
  Злобная реклама
Воскресенье, 29.10.2017, 09:21
Статус:
Сообщений: 666
Регистрация: 01.09.2013
Российская Федерация  Hardtmuth
Воскресенье, 29.10.2017, 09:31 | Сообщение # 82
Статус:
Ветеран:
Сообщений: 5233
Награды: 37
Регистрация: 01.03.2012

Цитата francyfox ()
оба делают короче pubg из сталкера


Это не пабг из сталкера. Это проект, который делает сеттинг СО в ЗП.
  Злобная реклама
Воскресенье, 29.10.2017, 09:31
Статус:
Сообщений: 666
Регистрация: 01.03.2012
Российская Федерация  francyfox
Воскресенье, 29.10.2017, 09:33 | Сообщение # 83
Статус:
Гость:
Сообщений: 32
Награды: 0
Регистрация: 01.09.2013

drksnc, Hardtmuth,
режим battleroyal предумали еще при arma2, он не является чем это иновационым и придуман давно. pubg результат отделения от движка arma3 с режимом выживания одного игрока.

Добавлено (29.10.2017, 09:33)
---------------------------------------------
Hardtmuth, автор сказал что будет делать pubg. Просто нафига то напихал все из сзон)) я хз

  Злобная реклама
Воскресенье, 29.10.2017, 09:33
Статус:
Сообщений: 666
Регистрация: 01.09.2013
Российская Федерация  Hardtmuth
Воскресенье, 29.10.2017, 09:34 | Сообщение # 84
Статус:
Ветеран:
Сообщений: 5233
Награды: 37
Регистрация: 01.03.2012

Цитата francyfox ()
Hardtmuth, автор сказал что будет делать pubg. Просто нафига то напихал все из сзон))

Я сейчас с ним общаюсь на эту тему. Проект меняет сеттинг CoP На сеттинг S-Online. Но есть камера, приближенная к Pubg
  Злобная реклама
Воскресенье, 29.10.2017, 09:34
Статус:
Сообщений: 666
Регистрация: 01.03.2012
Коста Рика  Jargon
Воскресенье, 29.10.2017, 10:04 | Сообщение # 85
X-Ray Multiplayer Extension
Статус:
Бывалый:
Сообщений: 1078
Награды: 3
Регистрация: 24.06.2012

Цитата francyfox ()
автор сказал что будет делать pubg. Просто нафига то напихал все из сзон)) я хз

Автор сказал что есть настройки камеры приближающие её к камере pubg.
  Злобная реклама
Воскресенье, 29.10.2017, 10:04
Статус:
Сообщений: 666
Регистрация: 24.06.2012
Российская Федерация  drksnc
Пятница, 03.11.2017, 17:46 | Сообщение # 86
xrMPE
Статус:
Гость:
Сообщений: 30
Награды: 2
Регистрация: 23.10.2017

sin, спасибо за помощь в личке. Не знаю работают ли там bb-коды, поэтому все таки пощу свой кривой код здесь. Вылетает при попытке подключения клиента, если убрать проверку на локального игрока и запустить невыделенный сервер, то багтрап показывает что последняя вызванная функция была GetModuleVer.

*.h файл


Кусок из xrServer_connect.cpp, вставил в конец AttachNewClient()
Сообщение отредактировал drksnc - Пятница, 03.11.2017, 19:49
  Злобная реклама
Пятница, 03.11.2017, 17:46
Статус:
Сообщений: 666
Регистрация: 23.10.2017
Российская Федерация  Sin
Суббота, 04.11.2017, 14:01 | Сообщение # 87
Статус:
Отмычка:
Сообщений: 77
Награды: 1
Регистрация: 15.01.2014

Хм... На самом деле, в ДЛЛ сейчас заметил пару APIных неоднозначностей, которые надо бы пофиксить. Имей в виду их пока:
1) Размер enum'a - на разных платформах и компиляторах он может быть разным; не очень понятно, байт или двойное слово сейчас нужно.
2) boolean - скорее всего, там будет байт, но выравнивание может испортить жизнь

Теперь по коду:
using FZSysMsgSender = void*; - с ним так не прокатит, это колбэк, который будет дернут ДЛЛкой для отправки пакета; не забудь про соглашение о вызове, когда будешь его писать (stdcall, он же winapi).

void(*DLLFunc) - это вообще что? smile Для получения из длл SendSysMessage? Тогда смотри внимательнее на аргументы: вторым идет указатель, а не структура. Более того, структуры там могут передаваться разные в зависимости от того, какие требует первый аргумент. Последний аргумент - также указатель.

myCppProc(payload, moddllinfo, sndr, userdata); - в payload передается указатель на процедуру, тебе нужно передать на FZSysMsgsProcessClientModDll; moddllinfo - вместо нее самой надо указатель; sndr - вообще неинициализированное нечто, хотя там должен быть указатель на колбэк, отправляющий клиенту пакет; userdata - надо указатель.

Добавлено (04.11.2017, 14:01)
---------------------------------------------

Цитата Sin ()
сейчас заметил пару APIных неоднозначностей, которые надо бы пофиксить

Исправлено в последнем коммите. Теперь вместо enum'ов явно используются 4-байтовые целые, а структуры имеют атрибут packed (то есть, выровнены по байту). Просьба обратить внимание, что кроме этих двух моментов была расширена структура FZDllDownloadInfo.
  Злобная реклама
Суббота, 04.11.2017, 14:01
Статус:
Сообщений: 666
Регистрация: 15.01.2014
Российская Федерация  drksnc
Суббота, 04.11.2017, 21:08 | Сообщение # 88
xrMPE
Статус:
Гость:
Сообщений: 30
Награды: 2
Регистрация: 23.10.2017

Цитата Sin ()
указатель на колбэк

Насколько я понимаю, коллбэк - обычная процедура, поэтому могу использовать typedef, так?
Код
typedef void(__stdcall *FZSysMsgSender)(char* msg, unsigned int len, FZSysMsgSendCallbackData* userdata);
  Злобная реклама
Суббота, 04.11.2017, 21:08
Статус:
Сообщений: 666
Регистрация: 23.10.2017
Российская Федерация  Sin
Воскресенье, 05.11.2017, 03:57 | Сообщение # 89
Статус:
Отмычка:
Сообщений: 77
Награды: 1
Регистрация: 15.01.2014

drksnc, ну да, как-то так.
  Злобная реклама
Воскресенье, 05.11.2017, 03:57
Статус:
Сообщений: 666
Регистрация: 15.01.2014
Российская Федерация  drksnc
Среда, 08.11.2017, 02:14 | Сообщение # 90
xrMPE
Статус:
Гость:
Сообщений: 30
Награды: 2
Регистрация: 23.10.2017

Я так понял что мне нужен этот коллбэк на С++. А что такое msg:pointer?
Код
procedure SysMsg_SendCallback(msg:pointer; len:cardinal; userdata:pointer); stdcall;
var
  data:pFZSysMsgSendCallbackData;
begin
  data:=pFZSysMsgSendCallbackData(userdata);
  //DPNSEND_IMMEDIATELLY + DPNSEND_GUARANTEED + DPNSEND_PRIORITY_HIGH
  IPureServer__SendTo_LL.Call([data.srv, data.cl_id.id, msg, len, $100+$8+$80, 0]);
end;

Код
void xrServer::SysMsg_SendCallback(void* msg, unsigned int len, FZSysMsgSendCallbackData* userdata)
{
    userdata->srv->SendTo_LL(userdata->cl_id, msg, len, DPNSEND_IMMEDIATELLY + DPNSEND_GUARANTEED + DPNSEND_PRIORITY_HIGH, 0);
}

И в FZSysMsgsSendSysMessage давать указатель на этот метод?
Сообщение отредактировал drksnc - Среда, 08.11.2017, 03:34
  Злобная реклама
Среда, 08.11.2017, 02:14
Статус:
Сообщений: 666
Регистрация: 23.10.2017
Поиск: