Платформа: ЧН 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" - это режим боя такой? Очень интересно было б пойграть во что-то новенькое в мп:)
Не думаю что это какой-то отдельный вариант режима боя в игре. Интересно было бы услышать его рассказ о проекте. Может какой то модифицированный вариант какого то имеющегося режима в игре.
Я знаю, что LastManStanding - первая бесплатная игра в жанре "battle royale" (батл роял), представляющая уникальное сочетание высокой динамики игрового процесса, накала адреналина от постоянно уменьшающейся карты боевых действий и драйва от участия в грандиозной охоте, где сражаются за жизнь сразу 100 игроков; энтузиазм молодой студии-разработчика гарантируют регулярные обновления и постоянное совершенствование игры на основе обратной связи от игроков!
Но она 2017 года, а значит автор при создании своего проекта об этой игре и знать не знал.
Сообщение отредактировал Hardtmuth - Воскресенье, 29.10.2017, 07:12
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.
Указатель на данные, которые надо отправить клиенту вызовом SendTo_LL; len - длина этих данных.
Цитатаdrksnc ()
давать указатель
Да. Только прототип не совсем соответствует требуемому. Во-первых, соглашение о вызове stdcall. Во-вторых, колбэк не должен быть членом класса (или быть статическим членом, если очень хочется). В третьих - странно выглядит FZSysMsgSendCallbackData* userdata, тут достаточно xrServer* же передать.