Need help?
Create a topic in the appropriate section
Don't write everything in the chat!Take a look at the marketplace
There you can buy
everything related to game serversDon't want a ban?
Please read our rules
Don't disturb the order!Sell or buy?
Use services of the guarantor
We will make your deal safe



-
Similar Content
-
By BorizzK
В эксперементалке 1.08 если сбросить предмет находясь на машине (крыше, багажнике, капоте в кузове) предмет проваливается сквозь машину на землю или оказывается в ее текстурах
Тикет
https://feedback.bistudio.com/T152071
ответ богемии поразителен - сейчас нет простого решения
А ниже что? Проще не бывает...
Собственно код фикса (Автор Я)
Code ``` modded class ItemBase extends InventoryItem { override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc) { super.EEItemLocationChanged(oldLoc,newLoc); if (newLoc.GetType() == InventoryLocationType.GROUND) { if (oldLoc.GetParent()) { PlayerBase player = PlayerBase.Cast(oldLoc.GetParent()); if (player) { FixPositionIfDropOnCar(player); } } } } void FixPositionIfDropOnCar(PlayerBase player) { vector m_RayStart; vector m_RayEnd; m_RayStart = player.GetPosition(); m_RayStart[1] = m_RayStart[1] + 0.5; m_RayEnd = m_RayStart; m_RayEnd[1] = m_RayEnd[1] - 1; RaycastRVParams m_RayCastInput = new RaycastRVParams(m_RayStart, m_RayEnd, this, 0.05); array<ref RaycastRVResult> m_RayCastResults = new array<ref RaycastRVResult>; m_RayCastInput.with = player; m_RayCastInput.flags = CollisionFlags.FIRSTCONTACT; if (DayZPhysics.RaycastRVProxy(m_RayCastInput, m_RayCastResults)) { if (m_RayCastResults.Count() > 0) { Car car; if (Class.CastTo(car, m_RayCastResults[0].obj) || Class.CastTo(car, m_RayCastResults[0].parent)) { this.SetPosition(m_RayCastResults[0].pos + (player.GetDirection() * 0.1)); } } } } } ``` Наверное имеет смысл чуть приподнять предмет над поверхностью, но необходимость этого зависит от типа предмета, потому не стал этого делать
чуть откорректировал код
-
By 123new
Многие новички часто спрашивают 'А как установить моды? Я пытаюсь, но у меня не выходит! Как это делать правильно?'. Я был крайне сильно удивлен тем, что многие люди, в том числе и мои знакомые, до сих пор не научились это делать и прибегают к помощи за деньги, хотя казалось бы, что это основа для серверостроения любого администратора.
Что же господа, давайте проясни этот вопрос окончательно, пишу еще один гайдик от моего имени в коллекцию сайта 😃
Отмечу сразу, что для бывалых, кто уже держит свои сервера, данную тему можно не читать, нового вы ничего не узнаете!
Типы модификаций? Их разница и специфика:
Есть всего 2 типа модификаций у данной игры:
клиент-серверные (на разговорном их клиентскими называют, т.к. игроку их также нужно ставить), т.е. модификации, которые необходимо ставить и на клиенте игры у игрока и на сервере игры для нормальной работы серверные, т.е. модификации, которые достаточно установить лишь на стороне сервера для их нормальной работы (игроку не требуются). При этом, если их установить и на клиентскую сторону (сторону игрока), то работать они также будут нормально. Сразу отмечу, что модификаций, не обязательных к установке игроку (клиенту) не бывает. Т.е. либо только обязательные для всех, либо только серверные!
Также, бывают модификации разделенные на 2 части, среди которых 1 клиент-серверная (клиентская проще говоря), 2 серверная. Такие как правило в свободном доступе не встречаются и обычно либо продаются, либо ставятся индивидуально на чьих-то серверах. Выявить такие можно с описания по ним обычно.
Для стандартной установки любого мода (клиент-сtрверного) необходимо:
1. Иметь настроенный сервер 'поумолчанию', готовый к работе.
2. Подписаться на нужную нам модификацию в Мастерской Steam (требуется наличие игры на аккаунте и ПК)
3. Запустить DayZ в Steam, дождаться появления лаунчера игры, и закрыть его
4. Включить отображение скрытых файлов и папок в Windows
5. Открыть папку с вашей игрой. Далее зайти в папку !Workshop и найти одноименную папку с вашей модификацией
6. Скопировать папку в папку с вашим сервером игры (именно саму папку модификации, не ее содержимое, папка с модификацией в папке сервера должна быть отдельно)
7. Открыть папку с модификацией, найти файлик формата .bikey и скопировать в папку keys внутри сервера игры
8. Открыть параметры запуска сервера
9. Убедиться, что в параметрах запуска сервера имеется предопределенная строка:
"-profiles=Instance" где вместо Instance может быть указана любая папка в папке сервера.
Для пояснения - эта строка добавляет указание на расположение системной поддиректории сервера $profile
10. Убедиться, что в параметрах запуска сервера имеется предопределенная строка.
"-mod=@MyMod1;@MyMod2;" Где @MyMod1 и @MyMod2 - имена папок с модами, которые могут быть переименованы в любое ваше название. (символ @ не обязателен). Несколько модов отделяются через точку с запятой (точка с запятой в конце строки не обязательна, работает и так и так), порядок указания модов - в зависимости от требований кода для других модификаций (см. п. 11)
11. Открыть страницу модификации, посмотреть, не требует ли она какие-либо модификации для своей работы дополнительно, и если требует, то повторить п. 1-10 для них всех.
12. Открыть конфигурационный файл сервера (тот где название сервера указывали) и установить параметры запуска сервера в параметре:
verifySignatures = 2; где режим 2 - проверка соответствия между сервером и клиентом игры на соответствие .pbo файлов (аддонов) модификации и самой игры с файлами .bisign (цифровой подписью аддонов) и с файлов .bikey модификации на сервере (ключем модификации).
Если стоит 2 - для входа на сервер будет требоваться четкое соответствие файлов модификации клиента игры и сервера, т.е. файлы модификаций и их количество должно быть таким же.
Если выставите 0, проверки не будет, и люди без модификации смогут заходить к вам, но и смогут удалять с папки игры траву. здания, и играть без них.
Рекоммендую оставлять параметр 2.
13. Запустить сервер
14. Запустить DayZ в Steam, дождаться появления лаунчера игры, включить те же самые модификации в нем, запустить игру и войти на свой сервер!
ВАЖНО! Это лишь базовая установка любой модификации на сервера, которая требуется любой модификации! Она не добавляет предметы или другие новшества в спавн или в торговца, она лишь добавляет указание серверу и игре на наличие в игре тех или иных предметов и возможностей, которые, например, могут быть отспавнены сручную (скриптом например или модом-админкой).
Для некоторых модификаций этого будет достаточно, для многих других потребуется сделать какие-то дополнительные действия, о которых обычно авторы модификаций пишут на страницах своих модификаций в Steam, или в обсуждениях там же. Часть информации об дополнительной 'сложной' установке модификаций раскрывается пользователями нашего форума в разделе ниже, за что им отдельная благодарность!
https://s-platoon.ru/forum/236-mody-iz-masterskoy-steam/
Серверные модификации:
Установка серверной модификации от клиент-серверной не отличается ничем, как правило, кроме того, что на стороне клиента (игрока) она не требуется. Т.е. игроку не нужно предпринимать никаких действий для входа на сервер с такой установленной модификацией! А вот на стороне сервера модификация ставится.
Инструкция по установке аналогична указанной выше, с пометками, что описаны тут, но еще и с одной лишь разницей - в п. 10 инструкции будет параметр такой:
"-servermod=@MyMod1;@MyMod2;" В остальном все полностью совпадает.
И еще, в большинстве случаев серверные модификации это какие-либо скриптовые модификации, т.е. наверняка они имеют какую-либо конфигурацию, которая настраивается дополнительно после запуска сервера в директории, обозначенной параметром запуска сервера -profiles=. Как правило, информация об этом поставляется автором модификации.
Темы, связанные с данной тематикой, которые могут быть вам интересны:
-
By BorizzK
Довольно тупое охлаждение жратвы и кастрюли если они оказались на земле
Прикрутить охлаждение содержимого кастрюли как 2 байта сами знаете что
Сделать охлаждение после снятия с костра и тп вобщем то же не проблема
Просто код и ничего лишнего
Комментарии к коду добавлю позже
Логгирование в коде закомментировано - раскомментируйте, что бы наблюдать за процессом
Для жратвы убавление температуры раз в 10 сек на 1 градус
Для кастрюли на 2 градуса
Охлаждается до дневной температуры воздуха далее охлаждение прекращается
У бгемотов есть 2 температуры воздуха - дневная и ночная
Идиотизм? Однозначно
Я пытался в погоде сделать ее плавное изменение в зависимости от Overcast, Rain и тп, но забил - потом как-нибудь
Есть вопросы, задавайте, отвечу если будет время.
Вобщем как-то так:
//08.05.2020 modded class ItemBase extends InventoryItem { ref Timer m_TemperatureDecrease; private float m_InitTemperature; private float m_DecreaseTempTime = 10; private float m_TempDecreaseCoef = -1; void ItemBase() { m_InitTemperature = 12; //g_Game.GetMission().GetWorldData().GetDayTemperature(); // Не работает ((( какого художника - я хз if ( IsInherited(Pot) /* GetInventory().GetCargo() */ ) { m_TempDecreaseCoef = -2; } } override void AfterStoreLoad() { super.AfterStoreLoad(); if (!IsInherited(FireplaceBase)) TryToStartTempDecrease(); } private void TryToStartTempDecrease() { if (GetTemperature() > GetInitTemperature()) { if (!GetHierarchyParent()) { if (!m_TemperatureDecrease) { Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: Init: TryToStartTempDecrease: this: " + this + ": GetHierarchyParent(): " + GetHierarchyParent() + ": GetTemperature(): " + GetTemperature()); StartTemperatureDecrease(); } } } } override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc) { super.EEItemLocationChanged(oldLoc,newLoc); //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: " + this + ": newLoc.GetType(): " + newLoc.GetType() + ": newLoc.GetParent(): " + newLoc.GetParent() + ": GetTemperature(): " + GetTemperature()); if (GetTemperature() > GetInitTemperature()) { if (!newLoc.GetParent() || newLoc.GetType() == InventoryLocationType.GROUND) { if (!m_TemperatureDecrease) { Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: " + this + ": Begin decrease temperature: GetTemperature(): " + GetTemperature()); StartTemperatureDecrease(); } } } else { if (m_TemperatureDecrease) { Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: " + this + ": End decrease temperature: GetTemperature(): " + GetTemperature()); StopTemperatureDecrease(); } } } private void StartTemperatureDecrease() { m_TemperatureDecrease = new Timer( CALL_CATEGORY_SYSTEM ); m_TemperatureDecrease.Run(m_DecreaseTempTime, this, "DecreaseTemperature", NULL, true); } private void StopTemperatureDecrease() { m_TemperatureDecrease.Stop(); m_TemperatureDecrease = NULL; } void DecreaseTemperature() { if (GetTemperature() > GetInitTemperature()) { AddTemperature(GetTempDecreaseCoef()); if ( IsInherited(Pot) /* GetInventory().GetCargo() */) { DecreaseCargoTemperature(); } Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseTemperature: this: " + this + ": Decrease: GetTemperature(): " + GetTemperature()); } else { SetTemperature(GetInitTemperature()); StopTemperatureDecrease(); Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseTemperature: this: " + this + ": Stop decrease: GetTemperature(): " + GetTemperature()); } } void DecreaseCargoTemperature() { ItemBase item; int item_count = GetInventory().GetCargo().GetItemCount(); for (int i = 0; i < item_count; i++) { item = ItemBase.Cast(GetInventory().GetCargo().GetItem(i)); if (item) { if (item.GetTemperature() > item.GetInitTemperature()) { item.AddTemperature(item.GetTempDecreaseCoef()); Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseCargoTemperature: this: " + this + ": Decrease: item: " + item + ": item.GetTemperature(): " + item.GetTemperature()); } else { item.SetTemperature(item.GetInitTemperature()); Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseCargoTemperature: this: " + this + ": Stop decrease: item: " + item + ": item.GetTemperature(): " + item.GetTemperature()); } } } } float GetInitTemperature() { return m_InitTemperature; } float GetTempDecreaseCoef() { return m_TempDecreaseCoef; } } Немного переделал код
Теперь охлаждается все если оно имеет Т выше 12, а если это кастрюля с содержимым, то и ее содержимое
Получить Т воздуха в конструкторе не выходит потому указал руками
-
By DrTauren
Что нам понадобится:
1) Архив
2) Notepad
Инструкция:
1) Качаем архив и копируем из него папку custom в вашу папку с миссией
2) Открываем init.sqf и ищем такие строки:
if (!isDedicated) then { 0 fadeSound 0; waitUntil {!isNil "dayz_loadScreenMsg"}; dayz_loadScreenMsg = (localize "STR_AUTHENTICATING"); _id = player addEventHandler ["Respawn", {_id = [] spawn player_death;}]; }; 3) Перед закрывающей скобкой }; прописываем это:
_nil = [] execVM "custom\JAEM\EvacChopper_init.sqf"; 4) Выбираем одно из двух, выполняем действия указанные ниже:
Если у вас нет своего variables.sqf в папке с миссией:
Если у вас есть свой variables.sqf в папке с миссией:
5) Копируем файлы remoteexec.txt, waypointcondition.txt, waypointstatement.txt в вашу папку с фильтрами BattlEye (\instance_11_Chernarus\BattlEye)
Настройка параметров:
Открываем файл EvacChopper_init.sqf (custom\JAEM\EvacChopper_init.sqf), находим нужную строку, редактируем по своему усмотрению:
evac_chopperPrice = 3; Цена вашего спасения евреями. По умолчанию 3 Брифкейса
evac_needRadio = 0; Обязательно ли радио для того, что бы вызвать хапуг? (0-не нужно, 1-таки извольте)
evac_zoneMarker = 0; Дымовая граната на месте эвакуации (0-не надо, 1-таки не увидим мы без дыма)
evac_minDistance = 500; Дословно: минимальное расстояние, что бы вызвать евреев. Меньше 500 не ставить!
-
By Serdce
Ссылка на первоисточник - https://github.com/BrettNordin/Exile
Я всего лишь перевёл
Собственно переходим по ссылке, и скачиваем архив.
Для тех, кто не знает как качать с хаба скрин
И так, едем дальше
Скачанный архив распаковываем в удобное место для работы,
Идём в ваш @ExileServer, там нас интересуют файлы - extDB2.dll , extDB2.so , extDB2-conf.ini , XM8.dll , XM8.so Удаляем эти файлы
Далее идём в @ExileServer которую мы скачали, всё её содержимое копируем в аналогичную папку на сервере.
Теперь идём в вашу MPmissions и там распаковываем вашу миссию "Exile.название карты",
Туда мы копируем содержимое папки Exile.MapName из архива,
Далее открываем ваш config.cpp и ищем там class CfgExileCustomCode
В него мы добавляем - #include "CfgExileCustomCode.cpp"
Должно получится так
Запаковываем обратно)
Ну и теперь из архива мы копируем tbbmalloc.dll, tbbmalloc_x64.dll в папку расположения вашего Arma3_server.exe
Не забываем поменять в вашем файле запуска сервера с arma3server.exe на arma3server_x64.exe
Ну и финишная прямая, открываем вашу базу данных ( желательно с название exile ) и добавляем файл Exile_Database_Update_64x.sql
Далее настройте под себя ваш extdb3-conf.ini
-
-
Our picks