Платформа: ЧН 1.5.10 Разработчик: FreeZone Team Дата выхода: TBD, беты выходят по мере создания.
S.T.A.L.K.E.R. - одна из игр, которые живут на протяжении уже многих лет. Во многом (если не полностью) таким долгожительством игра обязана широкими возможностями по модифицированию и сравнительно большим модмейкерским коммьюнити. Не одна сотня модов увидела свет с момента выхода игры. Кажется, что все ее составляющие уже изучены модмейкерами вдоль и поперек. Однако, в игре осталась одна область, которая за все время существования игры так и соталась недооцененной. Мультиплеер. По сранению с синглплеерной составляющей, мультиплеерная многим могла показаться ущербной. Отсутствие ИИ, множество багов, нестабильность сервера, читеры... Но все равно, когда-то давно, в начале этого десятилетия, сетевая в сталкере, как ни странно, была достаточно популярной. Сервера не стояли пустыми. Но время шло, а игра оставалась прежней. Игрокам надоедало играть в одно и то же, неизменное на протяжении многих лет. В то же время, игра оказалась без поддержки своих разработчиков. Синглплеерная составляющая продолжала держаться на плаву за счет модмейкеров, но в мультиплеерной этого не происходило. Хотя МП сталкера также можно было модифицировать, но немногочисленные попытки создания мультиплеерных модов останавливались на распространении контента. Установить мод (да даже и обычную мультиплеерную карту) можно было только скачав вручную. Установка более-менее серьезного мода одновременно с этим лишила бы игрока возможности заходить на другие сервера (с перспективой получить бан). Для этого бы мод потребовалось снова удалить самостоятельно. Понятно, что такие процедуры мало кому могли показаться приятными. Попытки создания подобных модов были обречены на провал.
Именно на таком безрадостном фоне и произошло появление проекта FreeZone.
FreeZone представляет собой достаточно серьезную переделку движка выделенного сервера игры. Основной (и единственной на данный момент) платформой является ЧН версии 1.5.10. Почему именно ЧН, возникнет вопрос, ведь это самая непопулярная у модмейкеров часть игры? Дело в том, что с точки зрения модифицирования мультиплеера именно эта часть является наилучшей. В ней было исправлено достаточно много багов по сравнению с ТЧ, появилась возможность проверки игроков на читерство. Стабильность самого сервера была также повышена. Но тогда почему не ЗП, ведь там это все есть так же, плюс внесены другие улучшения? Этому есть несколько причин. Во-первых, в ЗП были вырезаны некоторые интересные классы, позволяющие создавать скриптовые режимы игры. Во-вторых, ЗП оказался почти похоронен после закрытия GameSpy. Да, игроки там сейчас есть... Но их меньше, чем в остальных частях.
Итак, с этим разобрались. Но что ждет нас внутри самого FreeZone? В этом плане, проект движется по пути исправления ошибок оригинального движка и расширения его возможностей. Большая их часть направлена на удобство администрирования, однако есть две немаловажные именно для модмейкеров особенности. Во-первых, это автоматическая загрузка карт клиенту. В это может быть сложно поверить, но это так. Игроку достаточно иметь только сам свежеустановленный ЧН версии 1.5.10, не требуется никаких дополнительных надстроек. Он просто присоединяется к серверу - и начинаются скачивание и установка карты. Да, это именно то, что не хватало игре все время ее существования. А во-вторых - как многие уже наверно догадались, это возможность загрузки на клиента модов. Да, на данный момент есть некоторые ограничения в возможности их создания, плюс, некоторые моменты в создании модов для FreeZone специфичны... Но оно есть и оно работает. При этом, каждый сервер может иметь собственный мод. При соединении клиент загрузит (предварительно скачав, если требуется) именно тот мод, который установлен на сервере, к которому игрок присоединяется.
Любой желающий теперь может начать создание своей своей Зоны отчуждения, сделать удовлетворяющий его самого мод и запустить с ним свой сервер. Присоединяйтесь!
Не особо представляю, какие именно скриншоты можно приложить, исходников, разве что Но раз требуется... Покажу админскую панель управления
А вот так выглядит экран игрока в процессе загрузки мода:
Вы можете увидеть описанные возможности FreeZone в работе, установив ЧН 1.5.10 и зайдя на сервер [setitagila.ru]Free. Вы увидите, как сначала будет скачана карта, затем мод... А затем вы попадете на сервер. Да, изменений в моде на данный момент не так много - но это просто демонстрация. Демонстрация того, что подобное в принципе возможно.
Вы можете скачать бета-версию FreeZone по ссылке ниже: https://yadi.sk/d/IpTRnJlOuXSXt При создании мода не забудьте прочитать в прилагаемом описании требования. Без их учета мод может работать некорректно!
Если вдруг что-то идет не так, как планировалось, вылетает, глючит - сохраняйте спокойствие и оставляйте сообщения в теме. От вас требуется описание проблемы, лог вылета, дамп и freezone.dll, с которой произошел вылет.
Сообщение отредактировал Angry - Воскресенье, 25.09.2016, 11:15
Привет. Когда только появились первые репозитории, я сделал полностью рабочий движковый LastManStanding, в который играл время от времени с другом. Понимаю, что там делать-то нечего, но это был мой первый опыт. В общем, увидев топик, захотел поднять сервер на старом компе, чтобы можно было играть с народом. Но вот проблема - исходников оригинального 1.5.10, которые бы работали на современных студиях нигде не найти, везде свои репозитории, которые уже по сто раз правленые. Из-за этого приходится заменять всё двигло, т.к. замена одного модуля (xrGame.dll) приводит к крашу при запуске. В общем, это я всё к тому, что мне нужно будет в том числе пересобирать и выделенный сервер, который у FZ свой. Исходников тутошнего xrEngine я не нашел, поэтому прошу ткнуть носом в возможное решение.
Сообщение отредактировал drksnc - Понедельник, 23.10.2017, 18:06
Неплохо. А если скриптами? Впрочем, и движковый - это тоже хорошо.
Цитата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-"загручик" для твоей задачи, скорее всего, подойдет стандартная. Нужно лишь правильно собрать этот велосипед, и он должен поехать. Если будет полностью рабочий новый режим и какие-либо проблемы с прикручиванием - можешь спрашивать, они решаемы.
LastManStanding" - это режим боя такой? Очень интересно было б пойграть во что-то новенькое в мп:)
Не думаю что это какой-то отдельный вариант режима боя в игре. Интересно было бы услышать его рассказ о проекте. Может какой то модифицированный вариант какого то имеющегося режима в игре.
Я знаю, что LastManStanding - первая бесплатная игра в жанре "battle royale" (батл роял), представляющая уникальное сочетание высокой динамики игрового процесса, накала адреналина от постоянно уменьшающейся карты боевых действий и драйва от участия в грандиозной охоте, где сражаются за жизнь сразу 100 игроков; энтузиазм молодой студии-разработчика гарантируют регулярные обновления и постоянное совершенствование игры на основе обратной связи от игроков!
Но она 2017 года, а значит автор при создании своего проекта об этой игре и знать не знал.
Сообщение отредактировал Hardtmuth - Воскресенье, 29.10.2017, 07:12
Vojlok, https://vk.com/dealtech (не реклама) толи это он) то ли другой чувак, оба делают короче pubg из сталкера) по мне так затея не супер, есть в стиме аналог pubg это lastmanstanding и он бесплатен. Я за рп ваще)
Сообщение отредактировал francyfox - Воскресенье, 29.10.2017, 09:23
drksnc, Hardtmuth, режим battleroyal предумали еще при arma2, он не является чем это иновационым и придуман давно. pubg результат отделения от движка arma3 с режимом выживания одного игрока.
Добавлено (29.10.2017, 09:33) --------------------------------------------- Hardtmuth, автор сказал что будет делать pubg. Просто нафига то напихал все из сзон)) я хз
sin, спасибо за помощь в личке. Не знаю работают ли там bb-коды, поэтому все таки пощу свой кривой код здесь. Вылетает при попытке подключения клиента, если убрать проверку на локального игрока и запустить невыделенный сервер, то багтрап показывает что последняя вызванная функция была GetModuleVer.
Хм... На самом деле, в ДЛЛ сейчас заметил пару APIных неоднозначностей, которые надо бы пофиксить. Имей в виду их пока: 1) Размер enum'a - на разных платформах и компиляторах он может быть разным; не очень понятно, байт или двойное слово сейчас нужно. 2) boolean - скорее всего, там будет байт, но выравнивание может испортить жизнь
Теперь по коду: using FZSysMsgSender = void*; - с ним так не прокатит, это колбэк, который будет дернут ДЛЛкой для отправки пакета; не забудь про соглашение о вызове, когда будешь его писать (stdcall, он же winapi).
void(*DLLFunc) - это вообще что? Для получения из длл SendSysMessage? Тогда смотри внимательнее на аргументы: вторым идет указатель, а не структура. Более того, структуры там могут передаваться разные в зависимости от того, какие требует первый аргумент. Последний аргумент - также указатель.
myCppProc(payload, moddllinfo, sndr, userdata); - в payload передается указатель на процедуру, тебе нужно передать на FZSysMsgsProcessClientModDll; moddllinfo - вместо нее самой надо указатель; sndr - вообще неинициализированное нечто, хотя там должен быть указатель на колбэк, отправляющий клиенту пакет; userdata - надо указатель.
сейчас заметил пару APIных неоднозначностей, которые надо бы пофиксить
Исправлено в последнем коммите. Теперь вместо enum'ов явно используются 4-байтовые целые, а структуры имеют атрибут packed (то есть, выровнены по байту). Просьба обратить внимание, что кроме этих двух моментов была расширена структура FZDllDownloadInfo.