Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Search the Community

Showing results for tags 'Скрипт'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Main category
    • S-Platoon
    • Private section
    • Marketplace
    • Chatter
  • DayZ Standalone
    • Instructions
    • Help
    • Other
    • English section
  • General section
    • ARMA 3
    • DayZ mod
    • ARMA 2
    • CS: Global offensive
    • ARK: Survival Evolved
    • Minecraft
  • Product support topics
    • Claims
    • Ready Servers
    • Scripts, mods, maps etc.
    • Models
    • Software
    • Graphics
    • Other

Categories

  • Ready servers
  • Scripts, mods, files etc.
  • Vehicles
  • Software
  • Graphics
  • Other

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


VK Social


Steam


ICQ


Skype


City


Web-site


Interests

Found 70 results

  1. Много вопросов на данную тему наблюдаю от новичков, попробую прояснить немного сей вопрос. Предположим. что вы уже знаете на каких координатах вам надо спавнить определенное здание или объект\животное\бота, с каким углом поворота. И так. эта тема для вас. Если вы с расставили их с модифицированной версии Offline (Offline by Arksenor это называется), то вы получили и нашли код вида: GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13260.040039 0.0 3670.984131").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13262.756836 0.0 3645.180176").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13265.441406 0.0 3619.531982").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13268.124023 0.0 3593.995361").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13270.844727 0.0 3568.186523").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13273.514648 0.0 3542.561279").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13276.195313 0.0 3517.048828").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13278.399414 0.0 3496.097900").SetOrientation("-96.000000 0.000000 0.000000"); Здесь (по примеру первой строки) 1 значение в скобках - id постройки/объекта, 2 значение - координаты в формате X Y Z, разделенные пробелом, 3 - значение поворота примерно в том же формате. Как это делать в Offline - статья от автора Offine: https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Add-custom-objects-to-your-server-or-mission И так, инструкция: 1. Добавляем в начало init.c файла в вашей mpmissions следующий код: #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\spawn_buildings.c" 2. Создаем в папке вашей активной mpmissions файлик spawn_buildings.c и заполняем его следующей информацией. void SpawnObject( string type, vector position, vector orientation ) { private string NameBlockLog = "[CreateObject] "; private string InfoLog = ""; if(type != "") { auto obj = GetGame().CreateObject( type, "0 0 0" ); if(obj) { if ((position[0] != 0) && (position[1] != 0) && (position[2] != 0)) { obj.SetPosition( position ); obj.SetOrientation( orientation ); obj.Update(); if (obj.CanAffectPathgraph()) { obj.SetAffectPathgraph(true, false); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(GetGame().UpdatePathgraphRegionByObject, 100, false, obj); } InfoLog = "[Type: '" + obj.GetType() + "' Position: '" + obj.GetPosition().ToString() + "' Orientation: '" + obj.GetOrientation().ToString() + "']"; Write_Log(NameBlockLog + " Object has been created successfully! Info " + InfoLog); } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed position. Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed type. Info " + InfoLog); } } void Write_Log(string message) { Print(String(message)); } 3. Открываем созданный нами файл, и в конце файла дописываем следующее: void SpawnAirfeeldBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } void SpawnKrasnoBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } Где после void - название функции идет, а между открытыми скобками вызов спавна самих зданий на указанных координатах. На примере 1 строки: Land_CementWorks_ExpeditionB - id постройки (type) 13251.875000 0.0 3748.525879 - координаты в формате X Y Z -96.000000 0.000000 0.000000 - значение поворота в формате X Y Z Внимание: id постройки и координаты в примере указаны не верные и требуют подключения дополнительной модификации для корректной работы!!! Координаты не соответствуют названию функции!!! 4. открываем в MpMissions в папке с вашей активной миссией init.c и перед ЗАКРЫВАЮЩЕЙ скобкой '}' дописываем нужную нам функцию (это будет активация спавна на карте): SpawnAirfeeldBuildings(); 5. Готово, Запускайте сервер, и в scripts.log вы увидите процедуру спавна ваших зданий и увидите, спавнятся ли они на карте или нет. Можно написать конечно и более готовую, универсальную систему спавна на карте со считыванием конфигурации из файла, но я считаю это лишним. Как заполнить добавленные здания лутом на карте: вариант 1: https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Enable-loot-for-custom-placed-objects вариант 2: вручную заполнить xml-файл mapgrouppos.xml в mpmssions данными о местоположении зданий, где rpy - значение поворота здания в формате Z Y X С помощью данной статьи вы можете разместить любой элемент игры(постройку, животное, зомби, бота), доступный к спавну через любую модификацию-админ. панель. Очень полезный мод в этом смысле BuilderItems, с его помощью можно творить поистину интересные локации!
  2. Довольно тупое охлаждение жратвы и кастрюли если они оказались на земле Прикрутить охлаждение содержимого кастрюли как 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, а если это кастрюля с содержимым, то и ее содержимое Получить Т воздуха в конструкторе не выходит потому указал руками
  3. Нам понадобится: 1. Сервер DayZ Standalone (см. тему вот эту) 2. Notepad++: бесплатно на оф. сайте 3. Немного времени и настойчивости (обычно бывает в комплекте и так) И так, начинаем: 1. Открываем блокнотом mpmissions\dayzOffline.chernarusplus\init.c P.S. Имя папки dayzOffline.chernarusplus у вас может отличаться, будьте внимательны 2. В начале файла добавляем: static int time_repeat_info_players = 10; //in seconds static string file_name_info_players = "$profile:PlayersLogFile.txt"; static void WriteFile(string file_name, string text) { private FileHandle fhandle; if ( !FileExist(file_name) ) { fhandle = OpenFile(file_name, FileMode.WRITE); } else { fhandle = OpenFile(file_name, FileMode.APPEND); } if ( fhandle == 0 ) { Print("[#Запись_в_файл]: Не удалось открыть файл для записи: " + file_name); Print("[#Запись_в_файл]: [Запись]: " + text); return; } FPrintln(fhandle, text); CloseFile(fhandle); } static void WritePlayersInfo() { array<Man> players = new array<Man>; Man player; Man player_test; GetGame().GetPlayers( players ); if (players.Count() > 0) { if ( FileExist(file_name_info_players) ) { DeleteFile(file_name_info_players); } for ( int i = 0; i < players.Count(); ++i ) { player_test = players.Get(i); if( player_test ) { PlayerIdentity p_identity = player_test.GetIdentity(); private string coord_pl = player_test.GetPosition().ToString(); private string Name_P = p_identity.GetName(); private string UID_P = p_identity.GetPlainId(); WriteFile(file_name_info_players, "User name: " + Name_P + " UID: " + UID_P + " Coords: " + coord_pl); } } } else { if ( FileExist(file_name_info_players) ) { DeleteFile(file_name_info_players); } } } Где 'PlayersLogFile.txt' меняем на нужное вам имя файла, а в 'time_repeat_info_players' настраиваем время повтора проверки списка игроков для перезаписи файла 3. Находим в файле блок 'void main()' и в его конце перед закрывающей '}', поумолчанию это строка weather.SetWindFunctionParams(0.1, 0.3, 50); добавляем ниже строку: GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(WritePlayersInfo, (time_repeat_info_players * 1000), true); 4. Готово, если не допустили ошибок, при наличии хотя бы 1 игрока на сервере ваш файл с данными по игрокам будет присутствовать и заполняться информацией, а в случае их отсутствия удаляться.
  4. Описание: Простенький античит для игры Что он может обнаружить?: Aimbot Triggerbot Silent-Strafe Bhop Macro/Hyperscroll AutoShoot Instant Defuse Perfect Strafe Backtrack Elimination AHK/MSL Strafe HourChecker (Kicks Private Profiles) ProfileChecker Переменные: Настройка переменных, генерируется автоматически /cfg/CowAntiCheat/CowAntiCheat.cfg(появится после первого включение сервера с данным плагином, там же можно активировать автоматический бан, и внос данных в SourceBans)/ Команда для активации sm_bhopcheck / !bhopcheck Установка: Закинуть CowAntiCheat.smx в папку addons/sourcemod/plugins Настроить /cfg/CowAntiCheat/CowAntiCheat.cfg Следить за актуальностью античита можно тут Пример работы античита Cow-Anti-Cheat-1.15.zip
  5. Автор скрипта сообщения всем пользователям: Мизев Код функции отправки сообщения всем игрокам вставляется в OnInit () в init.c или в missionserver.c из scripts.pbo Становится глобальной серверной функцией и можно использовать где угодно на сервере (вроде бы) Что делает? Отправляет сообщение переданное в функцию всем игрокам на сервере Использование: MessageAllPlayers ("ТЕКСТ"); void MessageAllPlayers(string message) { ref array<Man> players = new array<Man>; GetGame().GetPlayers( players ); if ( players.Count() > 0 ) { for ( int i = 0; i < players.Count(); i++ ) { PlayerBase player; Class.CastTo(player, players.Get(i)); Param1<string> m_MessageParam = new Param1<string>(message); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity()); } } } Код сообщения всем игрокам на сервере о входе НОВОГО игрока вставляется в код создания персонажа, обработки его подключения или экипировки при входе - где Вам больше нравится но после того как персонаж создастся и будет помещен в переменную к которой можно обратиться В данном примере m_player исполняется в контексте конкретного персонажа Например init.c override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) { //...... //тут еще разный код playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player Class.CastTo(m_player, playerEnt); GetGame().SelectPlayer(identity, m_player); //inform all players about new player connected ref array<Man> players = new array<Man>; //define array for all players GetGame().GetPlayers( players ); //put all players in to array players if ( players.Count() > 0 ) // if players count > 0 { string Message = "NEW Player " + m_player.GetIdentity().GetName() + " connected!"; //message text MessageAllPlayers(Message); // call MessageAllPlayers function with Message param } return m_player; }
  6. Описание: Таксист на машине (AI). Когда игрок появляется в одной из трейд-зон, он может вызвать такси, которое появится за приделами трейда, подъедет к нему и будет ждать пока в неё (машину такси) не сядет игрок. Затем игрок может выбрать любое из предопределённых направлений движения машины. Как только игрок выбрал место, бот рассчитывает самый короткий путь до точки по дорогам. В любой момент времени игрок может остановить таксиста и выйти из машины. Так же! если игрок выйдет из такси не заплатив (50 едениц), водитель так же выйдет и попытается убить "зайца" при помощи пистолета. Так же в радиусе 200м от таксиста появляются ещё два бота, которые ему помогут. Особенности: Стоимость такси в 50 едениц Водитель любит честных клиентов и отстреливает "зайцев" Максимум 3 таксиста (один на главной трейд-зоне или где укажет Администратор) 4 маршрута (точки маршрута можно поменять) Сообщения от водителя игроку (можно изменить) Множество функций для запрета игроку эксплуатировать такси Изначально место появления такси установлено для карты Altis Видео-демонстрация: Инструкция: 1) Качаем архив с GitHub (или тот что приложен ниже) :smiling: NibbleGaming_Taxis-master.zip 2) Папку Taxis копируем в папку миссии 3) Компилируем .pbo из папки NibbleGaming_Taxis с тем же именем 4) Копируем NibbleGaming_Taxis.pbo в папку @epochhive\addons 5) В самый низ init.sqf добавляем это: if(isDedicated)exitWith{}; cabcost = 50; //change this to change to cost of the cab [] execVM "Taxis\player_cab.sqf"; 6) В самый низ description.ext добавляем это: class CfgNotifications { class cabtext { title = "Nibble Taxis"; iconPicture = "\A3\ui_f\data\map\mapcontrol\taskIcon_ca.paa"; color[] = {0.8,0.8,0,1}; description = "%1"; duration = 5; priority = 0; }; }; 7) В файл mission.sqm ниже закрывающей скобки (};) класса class Markers добавляем: Infistar: Убедитесь что в run.sqf все значения установлены как тут: /* Notification check */ _UNC = false; /* HandleDamage check */ _HDC = false; //perhaps not needed because it only applies to driver, which is serverside /* Remove Hit Handler */ _REH = false; //perhaps not needed because it only applies to driver, which is serverside /* Revert HandleDamage */ _RHD = false; //perhaps not needed because it only applies to driver, which is serverside /* Remove Action Plrs */ _OAP = false; /* Remove Action Objs */ _OAO = false; /* Use Anti Teleport */ _UAT = false; //can probably be true, but if server lags the taxi jumps a bit, which can be mistaken for teleport /* Check Local Markers */ _CLM = false; _UVC = false; Фильтры BattlEye: 1) Для scripts.txt: 7 "BIS_fnc_" !"call bis_fnc_showNotification" 7 removeAllActions !="RemoveAllActions _cab;" 7 setMarker !"Local" 7 createMarker !"createmarkerlocal" 7 addEventHandler !"GetIn" !"GetOut" 7 deleteMarker !"deletemarkerlocal" 2) Для publicvariable.txt: 5 "" !="\"cab1\"" !="\"cab2\"" !="\"cab3\"" Оригинал: http://epochmod.com/forum/index.php?/topic/32340-release-taxi-script-v02/
  7. Столкнулся с цикличной проблемой в лаунчере, при установке ботов A3EAI: Script @epochhive\A3EAI_config.sqf not found Оказалось, что все дело в том, что в открытом доступе лежат старые версии этого скрипта, и все кто пытается воткнуть в Epochhive, как я, данный скрипт - делают это по старой схеме, не актуальной для последних версий. Решение Скачиваем - https://yadi.sk/d/HfXeB1pEAGoRtw Устанавливаем: 1. Взять из папки архива "1. Installation Package" папку "@A3EAI" и вложить её в папку с вашим сервером; 2. Прописать скрипт в вашем запускаторе, примерно так: -servermod=@EpochHive;@A3EAI; Пример моего запускатора: @echo off start "arma3" "arma3server.exe" -servermod=@EpochHive;@A3EAI; -mod=@Epoch; -config=C:\Arma3Server\sc\server.cfg -port=2307 -profiles=sc -cfg=C:\Arma3Server\sc\basic.cfg -name=sc -autoINIT Варианты настройки, которые хранятся в самой папке @A3EAI\addons\a3eai_config в файле config.cpp.
  8. Привет всем. Пока был в отпуске от безделья установил сервер ARK EVOLVED и подсел :))) Т.к. потратил очень много времени на поиск адекватных гайдов по установке решил написать свой. http://www.playark.com/ - официальный сайт игры Почему игра зацепила. (над ней реально работают разработчики, в отличие от того же DayzSA) т.е. кол-во нововведений просто зашкаливает. Например в последнем апдейте в игру ввели биомы (времена года), разнообразный животный и растительный мир, с которым можно взаимодействовать. Система крафта тоже интересна, хотя бы тем, что без электричества и токарного станка нельзя создать оружие. Мир действительно интерактивный, очень красивый, и игрок взаимодействует просто со всем что видит. Требования к железу конечно еще те. Много наших полегло в попытках играть на настойках Epic, которые нагибают Nvidia 980 TI. Однако есть специальный режим для слабых машин, который позволяет насладиться игрой, и без наличия видеомонстров на борту. На мой взгляд это игра смесь RUST и WOW. В игре есть данжеоны, (подземные и подводные пещеры с ништяками) рейд боссы с ними же (некие альфа- динозавры, за которых дают море экспы), чем-то похожая на MORPG система крафта (зависит от уровня) при этом выживание похоже на выживание в RUST. Разнообразное оружие как холодное, так и огнестрельное, начиная от каменного топора, и заканчивая автоматическими турелями на крыше вашего металлического сейфа, или ручными растениями, которые плют в врага кислотой. возможность приручить и управлять почти всеми существами которые есть в игре. Кулинария. Рецепты и куча всего. Ну и мочить врагов на волке и кошке, либо падать на них с неба на орле или птеродактиле еще те ощущения :) Из дополнительных плюшек поддержка вирутальной реальности (Oculus Rift и DirectX 12 (обещают 20% прирост производительности на Windows 10 с Directx12). Есть и минусы - красота требует жертв, и если ваше железо или железо сервера слабовата будут лаги. Так как оптимизация пока страдает. 1) Прежде чем устанавливать сервер учтите следующие вещи: - вам понадобиться минимум 6 гб ОЗУ, чтобы более менее все крутилось (оптимизация пока не очень) это касается и сервера и клиента; (на скрине моя конфигурация которая держит 70+ человек правда когда + создается впечатление, что перестает хватать:))) . На сервер надо будет так же установить следующие вещи: direct x11, microsoft netframework 4x (обе чем выше версия тем лучше), и распространяемые библиотеки C++ (все это легко находится на сайте microsot либо с помощью гугла). - т.к. АРК-у постоянно обновляют будьте готовы к КАЖДОДНЕВНЫМ апдейтам сервера, т.е. за ним надо следить (либо писать батники для автоапдейта). - сервера с ARK очень часто ддосят, поэтому в итоге я перелез на хостинг с ддос защитой (т.к. реклама VDS тут все равно крутится, думаю ничего страшного если я про него скажу - это тариф бункер, из опыта использования - бункер выдержал 2 хороших ддос атаки, поэтому ближайшее время уходить с него я не планирую). 2) Установка выделенного сервера и его конфигурация c нуля: Шаг № 1: Итак, качаем программу steamcmd от сюда: https://developer.valvesoftware.com/wiki/SteamCMD:ru Шаг № 2: Создаем на нашем сервере папку C:\steamcmd\ и копируем в нее файл steamcmd.exe Шаг № 3: Создаем с помощью блокнота в этой же папке батник (.bat) c следующим содержимым: TaskKill /f /IM shootergameserver.exe @echo off @rem http://media.steampowered.com/installer/steamcmd.zip SETLOCAL ENABLEDELAYEDEXPANSION :: DEFINE the following variables where applicable to your install SET STEAMLOGIN=anonymous SET ArkServer=346110 :: For stable use 346110 SET ArkServerPath=C:\ark_server\ SET STEAMPATH=C:\steamcmd\ :: _________________________________________________________ echo. echo You are about to update your Ark Server echo Dir: %arkserverpath% echo Branch: %arkserver% echo. echo Key "ENTER" to proceed pause %STEAMPATH%\steamcmd.exe +login %STEAMLOGIN% +force_install_dir %arkserverPath% +"app_update %arkserver%" validate +quit echo . echo Your ARK server is now up to date echo key "ENTER" to exit start C:\ark_server\ShooterGame\Binaries\Win64\startserver.bat pause что делает этот батник? Он запускает steamcmd.exe, логинится в steam как аноним, и скачивает текущую стабильную ветку сервера в папку c:\ark_server\ после чего запускает батник с параметрами для сервера. Автоматический апдейт вам пригодиться и в будущем, для регулярных обновлений вашего сервера.(так как батника с параметрами у нас еще нет, вы получите сообщение об ошибке, ничего страшного просто игнорируем сообщение и закрываем окно автоапдейта) Шаг № 4. После запуска вы должны получить папку c:\ark_server\ с примерно следующим содержимым. листинг папки c:\ark_server\ .. Engine ShooterGame steamapps ArkServerCore.dll ArkServerGUI.exe PackageInfo.bin settings.txt steamclient.dll steamclient64.dll tier0_s.dll tier0_s64.dll vstdlib_s.dll vstdlib_s64.dll все что будет происходить дальше, будет происходить в папке ShooterGame поэтому следуем туда...затем в папку Binares и в папку Win64 (c:\ark_server\ShooterGame\Binares\Win64\ и видим следующее содержимое: .. appcache config logs msvcp110.dll msvcp120.dll msvcr110.dll msvcr120.dll officialservers.ini procdump.bat procdump.exe ShooterGame.exe ShooterGame.pdb ShooterGameServer.exe ShooterGameServer.pdb startserver.bat steam_appid.txt steamclient64.dll tier0_s64.dll vstdlib_s64.dll т.к. у вас нет файла startserver.bat создаем его.. start ShooterGameServer "TheIsland?listen?SessionName=<server_name>?ServerPassword=<join_password>?ServerAdminPassword=<admin_password>" exit тут необходимо ответить следующее, этот почему-то во всех рекомендациях которые я нашел в интернете, говорят о том, что все параметры необходимо вводить через этот батник. Что учитывая наличие файла ini файла, в котором есть другие параметры, выглядит несколько глуповато. Однако батник с параметрами нам понадобиться, для первого запуска сервера, чтобы создать эти самые файлы конфигурации правильно. Чтобы понять что там написано, надо взять на вооружение следующее правило. Все команды разделены между друг другом знаком -?- TheIsland? - название карты SessionName - название сервера которое отображается в списке серверов ServerPassword - пароль на сервере для всех игроков (просто удалите если вы хотите открыть сервер для всех ServerAdminPassword - пароль от Rcon для сервера (админский) - этот наоборот вам нужен для управления вселенной ) Запускаем батник, ждем минут 5-10 и выключаем его. Теперь файлы конфигурации созданы, батник нам понадобиться в будущем только для автозапуска сервера, поэтому из всех параметров, там можно оставить только TheIsland? start ShooterGameServer TheIsland? exit Вот так например выглядит мой... Шаг № 5. Конфигурируем сервер. Для этого нам необходимо пройти в следующую папку: c:\ark_server\ShooterGame\Saved\Config\WindowsServer\ Compat.ini DeviceProfiles.ini Engine.ini Game.ini GameUserSettings.ini Input.ini Lightmass.ini RunServer.cmd Scalability.ini UpdateServerFromCache.cmd открываем файл GameUserSettings.ini и внимательно смотрим на его содержимое :))) ищем параметр [sessionSettings] удаляем его содержимое и заменяем на [SessionSettings] SessionName= Названиевашегосерверабезпробелов ServerAdminPassword= Ваш пароль от Rcong QueryPort= 27015 - пароль для вашей базы данных RconPort=32330 - порт в который будет подключаться Rcon (Это нам архинужно для админки) MultiHome=127.0.0.1 - это тоже в основном для админки ActiveMods=490316889 - сюда мы подключаем моды через запятую (в данном случае это мод для руссификации чата без него будут писать только кирилицей о том как поставить моды будет в другой статье по умолчанию модов нет, поэтому просто уберите число после =) все не забываем удалить комментарии !!! ищем следующий параметр: [/Script/Engine.GameSession] MaxPlayers=70 в нем указывается число игроков, в данном случае это стандартный параметр поэтому так и оставляем. идем дальше! Находим: параметр [serverSettings] удаляем содержимое и заменяем на [ServerSettings] PvEDinoDecayPeriodMultiplier = 1.000000 KickIdlePlayersPeriod = 2400.000000 (кик игроков, клиент которых не отвечает с пингом больше 240 PerPlatformMaxStructuresMultiplier = 1.000000 AutoSavePeriodMinutes = 15.000000 (время автосохранения, эффект когда игрока отбрасывает чуть назад и есть момент автосохранения сервера, поэтому настраивайте индивидуально под свое железо) NightTimeSpeedScale = 2.000000 длительность ночи ( чем больше первая цифра, тем быстрее проходит ночь) TamingSpeedMultiplier = 2.000000 (рейты приручения чем выше, тем быстрее приручается дино, для PVP серверов ставим выше) ListenServerTetherDistanceMultiplier = 1.000000 MaxTamedDinos = 5000.000000 (максимальное время которое можно приручать динозавра) RCONEnabled = True (включаем возможность управления через RCON) ServerAdminPassword = ПАРОЛЬ НА RCON RconPort = 32330 (дублируем порт для RCON) ActiveMods = 490316889 (дублируем № установленного мода, если модов нет оставляем параметр пустым!) ActiveMapMod = 0 (0 - карта по умолчанию) NoTributeDownloads = True (важный параметр, если он выключен, можно как с вашего сервера, так и на ваш сервер, загрузить своего персонажа, параметр спорный, т.к. ваш сервер могут использовать банально для прокачки, чтобы потом уходить на другие, либо второй вариант, к вам может зайти клан 80+ и вынести весь ваш сервер, что на порах старта сами понимаете, приведет к глобальному вою вашего комьюнити. Так что я запретил на своем сервере такую возможность (False- разрешить перенос / True - запретить перенос) XPMultiplier = 3.000000 (рейты на экспу т.к у меня PVP сервер я сделал больше чем 1.) HarvestAmountMultiplier = 3.000000 (рейты на ресурсы тоже самое это рейты x3 стандартные x1) ResourcesRespawnPeriodMultiplier = 0.250000 (время между респавном ресурсов в данном случае x4) DifficultyOffset = 0.200000 (сложность 1 - это жесткий хардкор на 0.2 просто ноют :))) NewMaxStructuresInRange = 8000.000000 (параметр который говорит на каком расстоянии можно от вас строить здание чем меньше тем ближе можно построить - стоит по умолчанию) GlobalVoiceChat = False (можно или нельзя говорить голосом на весь сервер - лаги, баги.. вообщем я выключил) ProximityChat = False AllowThirdPersonPlayer = False (вид от третьего лица включить или выключить - почему-то игроки против, я выключил) AlwaysNotifyPlayerLeft = False (выводить сообщение о том что игрок вышел с сервера (ага счас ) DontAlwaysNotifyPlayerJoined = False (не говорить о том, что игрок подключился к серверу) ServerHardcore = False (режим хардкора PVP - отдельный режим игры) ServerPVE = False (нельзя убивать других игроков включение режима PVE) ServerCrosshair = False (показывать или нет прицел) ServerForceNoHUD = False (всегда показывать HUD (имя над игроком по умолчанию скрывается) ShowMapPlayerLocation = False (показывать положение игрока на карте) EnablePvPGamma = False (облегченная гамма для PVP режима) DisableStructureDecayPvE = False (строения не гниют) AllowFlyerCarryPvE = False Ну собственно мне этих параметров хватает, но на самом деле их очень много.... можно выставить параметры на каждого динозавра, оружие или предмет, вообщем очень тонкие настройки каждого сервера... идем дальше в параметр: [MessageOfTheDay] [MessageOfTheDay] Message=Hi ALL. This server hosted on VDS server. rate x3, night 0.5, dinotiming x2 russian chat support and +10 slots. Best regards ;) Duration=10 (если вы хотите написать в несколько строк то формат будет: [MessageOfTheDay] Welcome!\nThis is line 2.\nThis is line 3. русский язык поддерживает (при наличии мода, но криво если дело касается нескольких строк, чтобы увидеть текст в MODT На русском файл должен быть сохранен в формате KOI8) Собственно с конфигурацией почти все, если бы не порты.. в вашем файрволе надо будет пробросить порты: UDP QueryPort=27015 - порт для отображения в STEAM UDP GAME port = 7777 - порт игры TCP RconPort=32330 - порт для RCON Если все сделали правильно то ваш сервер сконфигурирован и готов к работе... Запускаем C:\ark_server\ShooterGame\Binaries\Win64\startserver.bat радуемся... NOTE!!! Следует учесть следующее: у вас должен быть реальный IP, сервер будет сначала загружаться в память (в зависимости от вашего железа 3-5 минут), затем еще 5 минут индексироваться в списке серверов, поэтому не пугайтесь, но от момента запуска батника, до появления вашего сервера в списке серверов пройдет минимум 5 минут.!!! Ежедневные обновления сервера, потребуют рестарта, содержимое обновлений (оперативное можно увидеть тут) http://steamcommunity.com/app/346110/discussions/0/594820656447032287/
  9. Немного сыроват, но работает уже на неск серверах и вроде все норм Вариант конечно не окончательный Эксперементировал с кодом и тд итп Потом лишнее уберу Упрощу и тд итп Хочу сделать универсальный Как для вайтлиста так и для блэк Конфиг простой Подключаем в init.c у меня лежит в корне миссии в папке _MOD\WhiteList #include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_MOD\\WhiteList\\Server_WhiteList_Class.c" обявляем там же ref Server_WhiteList WhiteList = new Server_WhiteList(); сам список UID (в столбик) кладем в папку _CONF в текстовый файл whiteList.lst далее используем у меня в init.c в 2х местах в классе CustomMission : MissonServer переопределил пару функций и добавил вызов в него и следом override void InvokeOnConnect(PlayerBase player, PlayerIdentity identity) { super.InvokeOnConnect(player, identity); //Если игрок в черном списке или игрока нет в белом списке или ник игрока в черном списке игрока кикнет и функция вернет false if (!Server_WhiteList.CheckWBListConnectAllow(player, identity)) { return; //IF KICK } } Файл whiteList.lst можно править на горячую, если в папке с whiteList.lst положить whitelistautoreload - то при каждом вызове проверки игрока по вайтлисту он будет перезагружаться из whiteList.lst - по задумке что бы не перзапускать каждый раз сервер но иногда если чел хотел войти, не пустило, потом внесли UID может не пустить с ошибкой Character Locked in database. Придется ждать минут 5 Либо перезапускать сервер + Читайте каменты в файлах + подтягивайтесь для доработок в первую очередь хотелось бы разобарться с залочиванием перса в базе Вобщем буду переделывать под обработку эвентов + добавлю управление белым/черным списком из админки с автокиком в случае внесения УИДа ручками вроде получилось Буду автоматизировать Обновленный вариант Server_WhiteList_Class.c
  10. Накатал по быстрому для себя и своих ребят от нефиг делать, тк в командировке и дейзить возможности нет, только удаленно ковырять сервер Внутри настройки через переменные путь к базе сервера и инстанс ид берет из конфига сервера (нужно настроить имя файла и путь в файле) Мониторит сервер по названию окна, сохранив pid При вылете в 90% случаев корректно убивает процесс При перезапуске так же При каждом старте с 0 и при перезапусках делает бэкапы баз/настроек/логов в папку !Backup в корне сервера Можно настроть кол-во хранимых бэкпов для базы сервера и логов Вобщем заглянете внутрь и все поймете Вдруг кому пригодится Закрепляю тут краний боевой вариант Что к чему - прочтите всю тему и все станет ясно Сцыл на стрницу темы с крайней версией заточенной на использование с версией 1.04 и параметром -servermod Крайняя версия
  11. Ссылка на первоисточник - 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
  12. Скрипт анимации юнита Скрипт подходит к модостроителям, при создании миссии и разных плюшек. Но все очень просто, создаем юнита и в инициализации пишем ссылку: _nil = [this,"SIT"] execVM "PLP_calmSoldier3.sqf" Анимацию вписываем _nic = [this, "Сюда"] execVM "PLP_calmSoldier3.sqf" Некоторые команды анимации: > “STAND” – стоит с винтовкой > “STAND_U” – Стоит > “GUARD” – Стоит, руки за спиной > “WATCH” – Стоит, осматривается с винтовкой > “LEAN” – Стоит, операясь на стену с винтовкой > “LEAN_ON_TABLE” – стоит, руки на столе > “LISTEN_BRIEFING” – стоит, слушает > “BRIEFING” – Брифинг > “BRIEFING_POINT_RIGHT” – Брифинг, указывает на право > “BRIEFING_POINT_LEFT” – Брифинг, указывает на лево > “BRIEFING_POINT_TABLE” – Брифинг, тычит в тоблицу > “TALKING” – Соит, говорит > “KNEEL” – стоя на колене, с винтовкой >”KNEEL_U” – стоя на колене >”EXERCICE” – стоя на колене, оглядывается > “WAMUP” – Разминка, с винтовкой > “WAMUP_KNEEL” – Разминка, стоя на колене, с винтовкой > “WAMUP_P” – Разминка, с пистолетом > “WAMUP_KNEEL_P” – Разминка, стоя на коленях, с пистолетом > “WAMUP_U” – Разминка > “WAMUP_KNEEL_U” – Разминка, стоя на коленях > “SIT” – Сидит, с винтовкой > “SIT_U” – Сидит > “SIT_LOW” – Сидит на земле, с винтовкой > “SIT_LOW_U” – Сидит на земле > “SIT_SAD” – Сидит и выглядит печально > “SIT_LOW_SAD” – Сидит на земле и выглядит печально > “SIT_HIGH1” – Сидит на на возвышенностях # 1 > “SIT_HIGH2” – Сидит на на возвышенностях # 2 > “SIT_AT_TABLE” – Сидит на стуле, руки на столе > “REPAIR_VEH_PRONE” – Лежит ремонтирует > “REPAIR_VEH_KNEEL” – Сидит ремонтирует > “REPAIR_VEH_STAND” – Соит ремонтирует > “CUFFED” – На земле, руки за спиной, может не реагировать >”KNEEL_TREAT1″ – лечение ран # 1 > “KNEEL_TREAT2” – лечение ран # 2 > “PRONE_INJURED” – Ранен, с винтовкой и не реагирует > “PRONE_INJURED_U1” – Ранение # 1 > “PRONE_INJURED_U2” – Ранение # 2 > “DEAD” – Мертвое состояние, на земле > “DEAD_AT_WALL” – Мертвое состояние, на стене PLP_calmSoldier3.sqf
  13. 1) У меня есть мод, в нём есть повязки. Требуется скрипт который бы позволил привязать повязку к определённым игрокам и другие игроки что бы её не смогли одеть 2) Цена - ваши предложения 3) Пишите сюда или в лс на сайте, там уже договоримся.
  14. *Каеф, не заметил "Изменение политики распространения InfiSTAR"* За ссылкой - в приватный раздел сайта Установка панели infistar на ExileServer - 1.0.2 "Kohlrabi" Немного информации: F1 - Стандартная кнопка меню F6 - Вылечить себя F7 - Вылечить\починить в радиусе 15М F10 - Прекратить наблюдение F11- Добавить патроны к оружию в руках SHIFT+4 - Полет SHIFT+5 - Телепорт в точку, куда смотришь (Если включено в панеле) SHIFT+F2 - Админская консоль SHIFT+I - Показать код от машины\двери SHIFT+TAB - Открыть карту Понадобится софт: Notepad++ PBO Manager Перейдем к установке: 1)В папку с сервером закидываем @infiSTAR_servermod 2)Идем в "Server\@infiSTAR_servermod\addons\a3_infiSTAR" и редактируем "EXILE_AHAT_CONFIG.sqf" (Добавляем UID администрации) 3)Конвертируем папку "a3_infiSTAR" в "a3_infiSTAR.pbo" с помощью PBO Manager 4)Модифицируем батник запуска сервера, добавив ещё один мод серверу, должно выглядеть так: "-servermod=@ExileServer;@infiSTAR_servermod" 5)Открываем MPmissions и конвертируем Exile.****.pbo в папку. (****-название вашей карты) 6)Закидываем "infiSTAR_AdminMenu.hpp" в Exile.**** 7)Открываем "description.ext" и добавляем #include "infiSTAR_AdminMenu.hpp" После #include "config.cpp" 8) Конвертируем Exile.**** обратно в Exile.****.pbo Установка завершена.
  15. Возможности: Пользовательское диалоговое окно на понятном русском языке. Не ограниченные запасы. Легко редактировать цены и товар. Скрин Качаем архив: https://github.com/GBR-Suppe/a3_epoch_HSBlackmarket Копируем из него в нашу миссию ( epoch.Altis ) папку trader и файл Stringtable.xml Дописываем в Init.sqf И в нашем description.ext в самом верху добавляем Добавление лута, техники и радактирование цен в файле mpmissions\epoch.Altis\trader\HSPricing.hpp Редактируем BE фильтры Infistar: Дописываем 9999,9980 в блок allowedDialogs Оригинал - http://epochmod.com/forum/index.php?/topic/34661-release-hs-blackmarket-15-new-trader-system-special-trader-blackmarket/
  16. Боты просто СУПЕР! Очень детальная настройка с кучей возможностей! Скачав и установив вы получите изредка появляющихся пару ботов, норовивших вас клюнуть в пятую точку! НО если вы разберете a3xai_config.pbo и откорректируете настройки в файле config.cpp, то вы получите ВООРУЖЕННЫЕ ПАТРУЛИ как пешие, дорожные, воздушные, с любым транспортом, лутом, и количеством! Рабочие на 1000% Установка! Качаем вот от сюда! 1. Распаковать скаченный архив! 2. Из A3XAI-UPLOAD-master.zip\A3XAI-UPLOAD-master\1. Installation Package копируем папку @A3XAI в корень вашего сервера. 3. И прикручиваем его в батнике, с которого вы запускаете сервер вашеимя.bat в кавычках, вот так "-mod=@Exile;@A3XAI;" Примечание: На стороне клиента его не нужно цеплять как мод! Файл перезалью еще после перевода! Покуда сток!
  17. Официальные серверные файлы DayZ Standalone 0.63. Официальная документация от Bohemia (на английском): https://forums.dayz.com/topic/239635-dayz-server-files-documentation/ Перевод (на русском): Скачать из Mega.Nz: https://mega.nz/#!VcUE2SDI!KzqEh791T_E-Iwaort4eVwkN5bbvaCwzjluhP0ZWZxw Скачать из Steam: https://store.steampowered.com/app/223350/DayZ_Server/ Запуск сервера (У некоторых с этим проблемы) У некоторых пользователей, сразу возникли проблемы с запуском, а именно: Ошибка подобного содержания. Вот вам решение проблемы: Вам нужно, создать .bat файл в директории сервера, с этим содержанием: «start "" "DayZServer_x64.exe" -port=2302 -config=!ServerSettings\serverDZ.cfg -profiles=!ServerSettings -user=!ServerSettings -name=Server -freezecheck -autoinit» Поясняю: -port=2302 — Указать ваш открытый порт. -!ServerSettings — Папка с файлами конфигурации, базой данных игроков, настройками BattleEye и файлами логов сервера. P.S. Если нужно, дописываем в конце «-adminlog» для создания дополнительного файла с логами сервера формата .ADM Далее, создаем папку в корне сервера «!ServerSettings» про ! не забываем! И в эту папку переносим файл serverDZ.cfg Все, запускать сервер через созданный нами BAT файл.
  18. В данной теме напишу простенький гайд о том, как самому на своем собственном сервере DayZ установить костомный (мой) скрипт на спавн, респавн и чистку хеликрашей. Гайд пригодится тем, кто сам делает свою сборку сервера, либо по каким-то причинам пользуется не моей сборкой сервера (где это уже сделано), а чьей-либо еще. Обращаю ваше внимание на тот факт, что часть файлов, описанных в гайде, у вас могут уже быть вынесены в другое место или названы несколько иначе (это зависит от сборки сервера, которую вы используете, например, в сборке dankdayz вся mpmissions вынесена в отдельный файл в addons сервера), гайд основывается на чистых серверных файлах игры и отталкивается от них. Гайд сделан для версий игры с серверной частью 0.60-0.62, но может быть совместим и с другими версиями игры, если файлы серверной части игры не поменяли своего текущего месторасположения и содержания. Гайд составлен по версии серверных файлов игры 0.62 чистой "девственной" и не правленой никем версии игры. Напоминаю заранее, в моих серверных файлах версий 0.60, 0.61 и 0.62 из моих гайдов на данном форуме это уже сделано и делать это не нужно!!! Нам понадобятся: 1. Notepad++ https://notepad-plus-plus.org/download/ 2. Ваши серверные файлы игры И так, приступим. 1. Первое, что нам понадобится - создать сам скрипт. Создаем по пути: "MPMissions\dayz_Auto.ChernarusPlus\" папку "scripts" , в ней папку "custom" , и в ней файл с именем "Helicarsh.sqf" . Если такие папки у вас уже имеются, просто не создавайте их, а перейдите в них. Если файл с там именем уже имеется у вас, задайте ему другое имя. 2. Вписываем в созданный файл код следующего содержания (либо скачайте его): Helicarsh.sqf diag_log format [" SpawnHeliCrashes: Reading Settings ..."]; /* Car Spawner for DayZ Standalone v 0.60.133.913 and high versions author: 123new Install: .\mpmissions\init.sqf Add in end file: init_spawn_cars = compile preprocessFileLineNumbers "scripts\custom\SpawnCars.sqf"; Call init_spawn_cars; and place this script file in: .\mpmissions\{your mission name}\scripts\custom\Helicarsh.sqf Settings: first massives: [count loot,type loot] end massive: [type car(classname), point car, selected first massive name] */ _zombs_heli_one = 15; // Maximum count zeds in one Heli _loot_heli_one = 15; // Maximum count loot in one Heli _max_distance_spawn_zeds = 25; // Maximum distance spawn zeds in one Heli _max_distance_spawn_loot = 10; // Maximum distance spawn loot in one Heli // Types HeliCrashes _HeliTypes = [ "Land_UH1Y_Wreck" ]; // SpawnPoints HeliCrashes _HeliPointsArray = [ [5738.4302,7605.0298], [6242.1201,8368.71], [4015.1001,7971.5698], [2320.3101,10217.8], [4506.8398,12748.3], [7121.3701,9646.6699], [1667.61,5293.3398], [1700.0699,2338.8501], [3563.6899,7537.1001], [4328.02,8489.7002], [5211.0698,7763.5498], [7455.7798,11574.3], [6119.3101,6631.1099], [5941.0601,6645.27], [5016.4302,6257.9199], [4781.8999,6270.2598], [4455.9302,6181.7202], [4074.98,6222.1802], [3622.3,6415.96], [3254.45,6682.6499], [2848.0601,6815.6401], [2572.1799,6781.1499], [2298.23,6513.3999], [2313.9299,6151.0498], [2461.02,5794.4102], [2028.4399,5166.5601], [1596.27,5234.5698], [3031.3401,10225.8], [3475.28,9765], [2863.99,9639.5195], [2067.3401,9272.2002], [1603.08,9231.04], [640.487,9119.4697], [4996.7798,9156.46], [5314.1802,9310.79], [5124.4502,9496.6504], [4847.1099,9867.2598], [4603.77,10245], [4454.6001,10666.2], [4696.3501,10736.4], [4174.2002,10879.6], [3904.0601,11112.5], [3453.49,10866.1], [2627.26,10443.4], [2243.21,10726.9], [1853.38,11309.6], [1949.3101,11759.8], [4832.6699,4767.9502], [3838.1101,4944.77], [3142.3401,4426.1899], [1263.8101,4081.76], [1371.08,4505.2598], [4712.8701,5869.5498], [5405.4502,5638.77], [3235.1799,8824.7598], [5928.0698,10975.5], [4661.25,11954.4] ]; // Classnames Loot HeliCrashes _arrayItemsHeli= [ ["food_canpeaches"], ["food_cansardines"], ["ghilliehood"], ["ghilliehoodtan"], ["ghilliehoodmossy"], ["ghilliehoodwoodland"], ["ghilliebushragwoodland"], ["ghilliebushragmossy"], ["ghillietoptan"], ["ghilliesuittan"], ["ghilliesuitmossy"], ["ghillietopwoodland"], ["ghilliebushragtan"], ["ttsko_pants_beige"], ["TTsKO_Jacket_Camo"], ["Ssh68Helmet"], ["tentmedium_packed"], ["tentlarge_backpack"], ["tentcar_packed"], ["Cultivation_CannabisSeeds"], ["Cultivation_CannabisSeedsPack"], ["BagAlice_Green"], ["BagAlice_Black"], ["BagAlice_Camo"], ["Fruit_Cannabis"], ["M249"], ["M_M249Box_200Rnd"], ["Ammo_556"], ["Saiga-12K"], ["Ammo_12ga_Pellets"], ["Ammo_12ga_Slug"], ["M_Saiga_5Rn"], ["M_Saiga_8Rnd"], ["M_SaigaDrum_20Rnd"], ["AKM"], ["M4A1"], ["Ammo_556_20Rnd"], ["Ammo_357_20Rnd"], ["ammo_762x39_20rnd"], ["ammo_762x39_20rnd"], ["CLIP_762_5Rnd"], ["Ammo_12ga_Pellets"], ["M_CMAG_10Rnd"], ["clip_762x39_10rnd"], ["Optics_Binoculars"], ["Optics_Rangefinder"], ["M_STANAG_30Rnd_COUPLED"], ["M_ak101_30Rnd"], ["M_Saiga_5Rnd"], ["M_ak74_30Rnd"], ["M_Vss_10Rnd"], ["M_svd_10Rnd"], ["Winchester70_Black"], ["M_Fal_20Rnd"], ["SKS"], ["b95"], ["AK101"], ["Att_Suppressor_AK"], ["Att_Optic_PSO1"], ["Att_Handguard_AK74_Camo"], ["Att_Buttstock_AK_Wood_Camo"], ["att_bayonet_ak"], ["ammobox_556_20rnd"], ["AmmoBox_9x39_20Rnd"], ["AmmoBox_308Win_20Rnd"], ["FAL"], ["Att_Optic_PUScope"], ["AmmoBox_762_20Rnd"], ["SVD"], ["Mosin9130_Green_Black"], ["CLIP_762_5Rnd"], ["magnum"], ["m_357_speedloader"], ["fnx45"], ["m_cz75_15rnd"], ["Att_Suppressor_Pistol"], ["1911_engraved"], ["cz75"], ["Att_Optic_FNP45_MRD"], ["m_fnx45_15rnd"], ["Glock19"], ["M_Glock_15Rnd"], ["MP5K"], ["Att_Optic_Reflex"], ["Att_Optic_ACOG"], ["Att_Optic_M4T3NRDS"], ["Att_Handguard_MP5_Rail"], ["Att_Buttstock_MP5_Stock"], ["M_MP5_30Rnd"], ["UMP45"], ["shotgunmp133"], ["Ammo_12ga_Pellets"], ["Ammo_556_20Rnd"], ["Ammo_357_20Rnd"], ["CLIP_762_5Rnd"], ["clip_762x39_10rnd"], ["M_STANAG_30Rnd_COUPLED"], ["vss"], ["m_ak74_30rnd_black"], ["M_Vss_10Rnd"], ["ak74"], ["m_ak74_30rnd_black"], ["m_ak74_30rnd_black"], ["m_ak74_30rnd_black"], ["m_ak74_30rnd_black"], ["M_Vss_10Rnd"], ["M_svd_10Rnd"], ["Winchester70_Black"], ["M_Fal_20Rnd"], ["SKS"], ["b95"], ["Att_Suppressor_AK"], ["Att_Handguard_AK74"], ["Att_Buttstock_AK_Wood"], ["ammobox_556_20rnd"], ["AmmoBox_9x39_20Rnd"], ["AmmoBox_308Win_20Rnd"], ["FAL"], ["Att_Optic_PUScope"], ["AmmoBox_762_20Rnd"], ["SVD"], ["Mosin9130_Black"], ["CLIP_762_5Rnd"], ["magnum"], ["m_357_speedloader"], ["b95_black"], ["sks_black"], ["ammo_762x39_20rnd"], ["m65_jacket_black"], ["att_optic_hunting"], ["m_cmag_30rnd"], ["m_cmag_40rnd"], ["m_cmag_40rnd"], ["m_cmag_40rnd"], ["attachment_optic_acog"], ["attachment_buttstock_m4oe"], ["attachment_handguard_m4ris"], ["attachment_bayonet_m9a1"], ["attachment_optic_m4t3nrds"], ["M_UMP_25Rnd"] ]; // Zombies HeliCrashes _arrayZedHeli= [ ["ZmbM_PatrolNormal_PautRev"], ["ZmbM_PatrolNormal_Autumn"], ["ZmbM_PatrolNormal_Flat"], ["ZmbM_PatrolNormal_Summer"], ["ZmbM_SoldierNormal"] ]; _Heli = DZ_COUNT_HELICRASHES; diag_log format [" SpawnHeliCrashes: Readed Settings! Start work script!"]; diag_log format [" SpawnHeliCrashes: Cleaning old HeliCrash!"]; _tmp_count_del_heli = 0; { if ((typeOf _x) in _HeliTypes) then { deleteVehicle _x; _tmp_count_del_heli = _tmp_count_del_heli + 1; }; } forEach (allMissionObjects ""); diag_log format [" SpawnHeliCrashes: Detected and deleted %1 HeliCrash",_tmp_count_del_heli]; diag_log format [" SpawnHeliCrashes: Start spawn new HeliCrash!"]; fnc_spawnHeli = { for "ii" from 1 to _Heli do { _thisHeli = _HeliPointsArray select floor(random(count _HeliPointsArray)); _thisTypeHeli = _HeliTypes select floor(random(count _HeliTypes)); _HeliCrach = NULL; _HeliCrach = createvehicle [_thisTypeHeli, _thisHeli, [], 0, "CAN_COLLIDE"]; if !(isNull _HeliCrach) then { _selected_name_heli = (typeOf _HeliCrach); _map_pos_heli = mapGridPosition _HeliCrach; // _HeliCrach setDir floor(random 360); _originalPos = getPosATL _HeliCrach; _Damage = random 0.7; _count_spawned_loot_heli = 0; _count_spawned_zed_heli = 0; for [{_j = 0}, {_j< _loot_heli_one}, {_j = _j + 1}] do { _loot_heli = NULL; _radius_heli_loot = random _max_distance_spawn_loot; _loot_heli = createvehicle [(_arrayItemsHeli select floor(random(count _arrayItemsHeli))) select 0, _originalPos, [], _radius_heli_loot, "CAN_COLLIDE"]; if !(isNull _loot_heli) then { if ((floor(random 4)) >= 2) then { _Damage_loot = random 0.7; _loot_heli setDamage _Damage_loot; }; _count_spawned_loot_heli = _count_spawned_loot_heli + 1; }; }; for [{_k = 0}, {_k < _zombs_heli_one}, {_k = _k + 1}] do { _Zomb_heli = NULL; _radius = random _max_distance_spawn_zeds; _Zomb_heli = createAgent [(_arrayZedHeli select floor(random(count _arrayZedHeli))) select 0, _originalPos, [], _radius, "CAN_COLLIDE"]; if !(isNull _Zomb_heli) then { // _Zomb_heli setDir floor(random 360); _count_spawned_zed_heli = _count_spawned_zed_heli + 1; }; }; diag_log format [" SpawnHeliCrashes: Spawned %1 in %2 with %3 loot around Heli and %4 Zeds around Heli!",_selected_name_heli,_map_pos_heli,_count_spawned_loot_heli,_count_spawned_zed_heli]; }; }; }; if (_Heli > 0) then { call fnc_spawnHeli; }; 3. Создаем по пути: "MPMissions\dayz_Auto.ChernarusPlus\" папку "scripts" , и в ней файл с именем "compiles.sqf" . Если такая папка у вас уже имеются, просто не создавайте ее, а перейдите в нее. Если файл с там именем уже имеется у вас, то не создавайте его, а допишите информацию со следующего пункта инструкции в конец файла! 4. Вставляем в файл следующую строку: init_spawn_Helicarshes = compile preprocessFileLineNumbers "scripts\custom\Helicarsh.sqf"; 5. Открываем по указанному далее пути файл в "Notepad++": "MPMissions\dayz_Auto.ChernarusPlus\init.sqf". Находим в файле строки с call compile preprocessFileLineNumbers 5. Вставляем после всех "call compile preprocessFileLineNumbers" следующее: call compile preprocessFileLineNumbers "scripts\compiles.sqf"; _Enable_SPAWNER_HELICRASHES = true; // Кастомный скрипт спавна хеликрашей (true - включить, false - выключить) DZ_COUNT_HELICRASHES = 12; // Максимальное кол-во хеликрашей при включенном кастомном скрипте их спавна 6. В этом же файле находим строки: simulWeatherSync; dbInitEconomy [true]; setTimeForScripts 0.03; 7. Добавляем после них: if (_Enable_SPAWNER_HELICRASHES) then { Call init_spawn_Helicarshes; }; Вот и все. ВАЖНО: Перед активацией скрипта отключите официальный спавнер хеликрашей сервера из официальной системы сервера игры. Инструкция есть тут: Как вы уже догадались, первой строкой мы можем включить или отключить сам скрипт без долгого копания в коде, а второй назначить нужное количество хеликрашей на сервере. _Enable_SPAWNER_HELICRASHES = true; // Кастомный скрипт спавна хеликрашей (true - включить, false - выключить) DZ_COUNT_HELICRASHES = 12; // Максимальное кол-во хеликрашей при включенном кастомном скрипте их спавна Все настройки по спавну хеликрашей есть в самом файле скрипта, который в п. 2 инструкции вы и создавали. Надеюсь, сложности с его настройкой не возникнет, пояснения там имеются.
  19. В данной теме напишу простенький гайд о том, как самому на своем собственном сервере DayZ установить костомный (мой) скрипт на спавн, респавн и чистку транспорта. Гайд пригодится тем, кто сам делает свою сборку сервера, либо по каким-то причинам пользуется не моей сборкой сервера (где это уже сделано), а чьей-либо еще. Обращаю ваше внимание на тот факт, что часть файлов, описанных в гайде, у вас могут уже быть вынесены в другое место или названы несколько иначе (это зависит от сборки сервера, которую вы используете, например, в сборке dankdayz вся mpmissions вынесена в отдельный файл в addons сервера), гайд основывается на чистых серверных файлах игры и отталкивается от них. Гайд сделан для версий игры с серверной частью 0.60-0.62, но может быть совместим и с другими версиями игры, если файлы серверной части игры не поменяли своего текущего месторасположения и содержания. Гайд составлен по версии серверных файлов игры 0.62 чистой "девственной" и не правленой никем версии игры. Напоминаю заранее, в моих серверных файлах версий 0.60, 0.61 и 0.62 из моих гайдов на данном форуме это уже сделано и делать это не нужно!!! Нам понадобятся: 1. Notepad++ https://notepad-plus-plus.org/download/ 2. Ваши серверные файлы игры И так, приступим. 1. Первое, что нам понадобится - создать сам скрипт. Создаем по пути: "MPMissions\dayz_Auto.ChernarusPlus\" папку "scripts" , в ней папку "custom" , и в ней файл с именем "SpawnCars.sqf" . Если такие папки у вас уже имеются, просто не создавайте их, а перейдите в них. Если файл с там именем уже имеется у вас, задайте ему другое имя. 2. Вписываем в созданный файл код следующего содержания (либо скачайте его): SpawnCars.sqf diag_log format [" SpawnCar: Reading Settings ..."]; /* Car Spawner for DayZ Standalone v 0.60.133.913 and high versions author: 123new Thanks for help: user BorizzK from s-platoon.ru for help and tests parts script and all community for this. Install: .\mpmissions\init.sqf Add in end file: init_spawn_cars = compile preprocessFileLineNumbers "scripts\custom\SpawnCars.sqf"; Call init_spawn_cars; and place this script file in: .\mpmissions\{your mission name}\scripts\custom\SpawnCars.sqf WARNING: add after string: dbInitEconomy CAUTION: When you are on the spawn cars in the game server with version 0.60 and higher (0.61 and 0.62 version it blocks events.xml) the transport can be re-spelled and re-spelled by the server itself, regardless of the script. For correct operation it is highly recommended to disable the official transport spawn! Info about script: This script will scan the server database for the specified transport types, push it to the server along with its parts in case of shortage, and clean the destroyed vehicles. A first massives - details for car (all details will be spawned) A second massives - possible spawn points of the technique (the spawn point will be selected randomly) A third (end) massive - configuration: specify the number of cars on writed type, a list of possible spawn points car for writed type and massive from first block with parts car. Settings format: A first massives: [count loot,type loot] A second massives: [(coordinate x),(coordinate y),(coordinate z)] A third (end) massive: [max count this type car, type car(classname) or massive types car for random select, selected second massive name, selected first massive name] If add after in 'A third (end) massive' 5 and more massives elements with details car, script will be select random details. */ // MAIN SETTINGS _enable_detect_old_ruined_cars = true; // Enable detect old ruined cars in server and delete him _enable_detect_old_cars_in_point_spawn_in_meters = true; // Enable detect old cars in point spawn in writed meters and secure him for spawn new car _meters_check_old_car_in_point_spawn = 10; // How many meters for chack old car in point spawn - wored only with _enable_detect_old_cars_in_point_spawn_in_meters = true - not recommend set up more 15 meters _check_damage_for_delete_ruined_car = 1; // How many damage for object car for delete him from server (for set up min 0.1 max 1) - wored only with _enable_detect_old_ruined_cars = true /////////////////////////// ---> A first massives <--- /////////////////////////// // (count this detail in vehicle),(type detail vehicle) _items_car_Volga = [ [4,"CivSedanWheel"], [1,"CivSedanDoors_Driver"], [1,"CivSedanDoors_CoDriver"], [1,"CivSedanDoors_BackLeft"], [1,"CivSedanDoors_BackRight"], [1,"CivSedanHood"], [1,"CivSedanTrunk"], [1,"CarRadiator"], [1,"CarBattery"], [1,"SparkPlug"], [2,"HeadlightH7"] ]; _items_car_Niva = [ [4,"HatchbackWheel"], [1,"HatchbackDoors_Driver"], [1,"HatchbackDoors_CoDriver"], [1,"HatchbackHood"], [1,"HatchbackTrunk"], [1,"CarRadiator"], [1,"CarBattery"], [1,"SparkPlug"], [1,"HeadlightH7"] ]; _items_car_Bus = [ [2,"TransitBusWheel"], [2,"TransitBusWheelDouble"], [1,"TruckBattery"], [1,"GlowPlug"], [1,"TruckRadiator"], [1,"LightBulb"], [1,"EngineBelt"] ]; _items_car_V3S = [ [4,"V3SWheel"], [4,"V3SWheelDouble"], [1,"V3SDoors_Driver"], [1,"V3SDoors_CoDriver"], [1,"V3SHood"], [1,"TruckBattery"], [2,"LightBulb"], [1,"EngineBelt"], [1,"HeadlightH7"] ]; _items_car_V3S_Blue = [ [4,"V3SWheel"], [4,"V3SWheelDouble"], [1,"V3SDoors_Driver_Blue"], [1,"V3SDoors_CoDriver_Blue"], [1,"V3SHood_Blue"], [1,"TruckBattery"], [2,"LightBulb"], [1,"EngineBelt"], [1,"HeadlightH7"] ]; _items_car_V3S_Grey = [ [4,"V3SWheel"], [4,"V3SWheelDouble"], [1,"V3SDoors_Driver_Grey"], [1,"V3SDoors_CoDriver_Grey"], [1,"V3SHood_Grey"], [1,"TruckBattery"], [2,"LightBulb"], [1,"EngineBelt"], [1,"HeadlightH7"] ]; _items_car_V3S_Orange = [ [4,"V3SWheel"], [4,"V3SWheelDouble"], [1,"V3SDoors_Driver_Orange"], [1,"V3SDoors_CoDriver_Orange"], [1,"V3SHood_Orange"], [1,"TruckBattery"], [2,"LightBulb"], [1,"EngineBelt"], [1,"HeadlightH7"] ]; /////////////////////////// ---> A second massives <--- /////////////////////////// // massives points spawn for vehicles _points_car_Volga = [ [10493.7,2348.17,0], [10150.7,1810.41,0], [11986.2,3839.67,0], [12883.2,6259.25,0], [12937.6,10185.7,0], [13845.8,13216.7,0], [4163.03,11104.75,0], [5954.25,10366.5,0], [3751.32,8858.37,0], [3048.92,7787.31,0], [2583.23,5073.8,0], [2654.09,5289.31,0] ]; _points_car_Niva = [ [13891.7,13425.6,0], [11262.4,12212.2,0], [4794.11,2539.87,0], [10740.4,10788.2,0], [10661.3,7994.43,0], [6063.77,7871.36,0], [4519.95,8291.32,0], [2182.85,3307.73,0], [3658.2,2194.58,0], [6855.9,2471.24,0], [6565.1,2547.52,0], [4262.06,11235,0], [6255.8,3256.48,0], [6682.32,3580.23,0], [13785.5,2930.17,0] ]; _points_car_Bus = [ [12275.8,9123.41,0], [11885.6,12469.2,0], [7185,7675.18,0], [4795.56,10250.1,0], [2716.53,10031.4,0], [2589.18,6355.03,0], [1672.24,3843.93,0], [1878.72,2254.03,0], [4334.19,2462.08,0], [5691.65,2579.14,0], [7805.4,3534.9,0], [12238.9,12635,0] ]; _points_car_V3S = [ [4767.29,9594.32,0], [13980.3,2931.02,0], [12238.9,12635,0], [12229.7,12590.2,0], [7216.52,7755.26,0], [3711.64,5969.98,0], [4392.4,10510.4,0], [1741.44,7930.12,0], [5590.24,2699.39,0] ]; /////////////////////////// ---> A third (end) massive <--- /////////////////////////// // (max count vehicles this type in server),(type vehicle or massive types for random select),(massive coords for spawn vehicle),(massive items for this car) // If add 5 and more massives elements with details car, script will be select random details. _types_car_V3S = ["V3S_Cargo_Orange","V3S_Cargo_Blue","V3S_Cargo_Grey","V3S_Cargo"]; /// massive types cars for random select _types_car_V3S_Chassis = ["V3S_Chassis_Orange","V3S_Chassis_Blue","V3S_Chassis_Grey","V3S_Chassis"]; /// massive types cars for random select _CarsSpawnConfig = [ [10,"CivilianSedan", _points_car_Volga, _items_car_Volga], [12,"TransitBus", _points_car_Bus, _items_car_Bus], [7,"OffroadHatchback", _points_car_Niva, _items_car_Niva], [4,_types_car_V3S, _points_car_V3S, _items_car_V3S,_items_car_V3S_Blue,_items_car_V3S_Grey,_items_car_V3S_Orange], [5,_types_car_V3S_Chassis, _points_car_V3S, _items_car_V3S,_items_car_V3S_Blue,_items_car_V3S_Grey,_items_car_V3S_Orange] ]; { if ((count _x) > 4) then { _rand = floor (random ((count _x) - 1)); while {(_rand < 4)} do { _rand = floor (random ((count _x) - 1)); }; _selected_items_car = _x select _rand; }; } foreach _CarsSpawnConfig; //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////// ---> NEXT CODE DON'T EDIT <--- /////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// diag_log format [" SpawnCar: Readed Settings! Start spawn car!"]; fnc_random_int_select = { private["_min","_max","_rand"]; _min = _this select 0; _max = _this select 1; _rand = round (random _max); if ((_rand < _min) or (_rand > _max)) then { while {(_rand < _min) or (_rand > _max)} do { _rand = round (random _max); }; }; _rand }; _massive_writed_alltypes_cars = []; _massive_writed_allcoords_cars = []; fnc_spawnCar = { _SelectedLine = _this; _selected_count_car = _this select 0; _selected_type_car = _this select 1; _selected_points_car = _this select 2; _selected_items_car = _this select 3; _count_incar_loot = 0; _count_aroundcar_loot = 0; _count_selected_type_car_in_server = 0; _count_selected_type_car_in_server = 0; if((typeName _selected_type_car) == "ARRAY") then { { _count_selected_type_car_in_server = _count_selected_type_car_in_server + (count (allMissionObjects _x)); } forEach _selected_type_car; diag_log format [" SpawnCar: %2 old cars of types '%1' has been detected on the server",_selected_type_car,_count_selected_type_car_in_server]; } else { _count_selected_type_car_in_server = count (allMissionObjects _selected_type_car); diag_log format [" SpawnCar: %2 old cars of type '%1' has been detected on the server",_selected_type_car,_count_selected_type_car_in_server]; }; if (_enable_detect_old_cars_in_point_spawn_in_meters) then { _temp_selected_points_car = _selected_points_car; { _selected_point_car = _x; { if (((typeOf _x) in _massive_writed_alltypes_cars) && (_selected_point_car in _massive_writed_allcoords_cars)) then { if (count _selected_points_car > 0) then { _selected_points_car = _selected_points_car - [_selected_point_car]; diag_log format [" SpawnCar: Detected previously spawned car in server: type '%1' at position %2 - point spawn %3 deleted from list spawn this type!",(typeOf _x),(getPos _x),_selected_point_car]; } else { diag_log format [" SpawnCar: Detected previously spawned car in server: type '%1' at position %2 - point spawn %3 can't be deleted from list spawn this type because spawnpoints this type allready <= 0!",(typeOf _x),(getPos _x),_selected_point_car]; }; }; } forEach (_selected_point_car nearObjects _meters_check_old_car_in_point_spawn); } forEach _temp_selected_points_car; }; if (_count_selected_type_car_in_server < _selected_count_car) then { _selected_count_car = _selected_count_car - _count_selected_type_car_in_server; if((typeName _selected_type_car) == "ARRAY") then { diag_log format [" SpawnCar: Required spawn %2 cars of type list '%1'",_selected_type_car,_selected_count_car]; } else { diag_log format [" SpawnCar: Required spawn %2 cars of type '%1'",_selected_type_car,_selected_count_car]; }; if (count _selected_points_car > 0) then { for "_j" from 1 to _selected_count_car do { _car_in_server = NULL; if (count _selected_points_car > 0) then { _selected_type_car_for_spawn = ""; if((typeName _selected_type_car) == "ARRAY") then { _selected_type_car_for_spawn = _selected_type_car select ([0,(count _selected_type_car)-1] call fnc_random_int_select); } else { _selected_type_car_for_spawn = _selected_type_car; }; if ((count _SelectedLine) > 4) then { _selected_items_car = _SelectedLine select ([3,(count _SelectedLine)-1] call fnc_random_int_select); diag_log format [" SpawnCar: Selected for next car massive details: %1 ",_selected_items_car]; }; _selected_point_car = _selected_points_car select ([0,(count _selected_points_car)-1] call fnc_random_int_select); _car_in_server = createvehicle [_selected_type_car_for_spawn, _selected_point_car, [], 0, "CAN_COLLIDE"]; if !(isNull _car_in_server) then { _selected_points_car = _selected_points_car - [_selected_point_car]; _car_in_server setDir floor(random 360); _selected_name_car = (displayName _car_in_server); _originalPos = getPosATL _car_in_server; _Damage = random 0.7; _map_pos_car = mapGridPosition _car_in_server; { _count_sel_loot = _x select 0; _type_sel_loot = _x select 1; for [{_i = 0}, {_i < _count_sel_loot}, {_i = _i + 1}] do { _loot_car = NULL; _loot_car = _car_in_server createInInventory _type_sel_loot; if (isNull _loot_car) then { _loot_car = createvehicle [_type_sel_loot, _originalPos, [], 5, "CAN_COLLIDE"]; if ((floor(random 4)) >= 2) then { _Damage_loot = random 0.7; _loot_car setDamage _Damage_loot; }; _count_aroundcar_loot = _count_aroundcar_loot + 1; } else { _count_incar_loot = _count_incar_loot + 1; }; }; } foreach _selected_items_car; diag_log format [" SpawnCar: Spawned %1 in %2 with %3 loot in Car and %4 loot around car ",_selected_name_car,_map_pos_car,_count_incar_loot,_count_aroundcar_loot]; } else { diag_log format [" SpawnCar: Type car '%1' is not spawned in server, because when i try spawn car in point '%2' exist errors!",_selected_type_car_for_spawn,_selected_point_car]; }; } else { if((typeName _selected_type_car) == "ARRAY") then { diag_log format [" SpawnCar: Random type car from array '%1' is not can be spawned in server, because setuped count cars this types > possible count points spawn this type!",_selected_type_car]; } else { diag_log format [" SpawnCar: Type car '%1' is not can be spawned in server, because setuped count cars this type > possible count points spawn this type!",_selected_type_car]; }; }; }; } else { if((typeName _selected_type_car) == "ARRAY") then { diag_log format [" SpawnCar: Spawn car from type list '%1' is not possible because not have possible points to spawn.",_selected_type_car]; } else { diag_log format [" SpawnCar: Spawn car type(s) '%1' is not possible because not have possible points to spawn.",_selected_type_car]; }; }; } else { if((typeName _selected_type_car) == "ARRAY") then { diag_log format [" SpawnCar: Random type car from array '%1' is not need spawn in server, because cars this types allready is max (or more max) in server!",_selected_type_car]; } else { diag_log format [" SpawnCar: Type car '%1' is not need spawn in server, because this cars allready is max (or more max) in server!",_selected_type_car]; }; }; }; if (_enable_detect_old_ruined_cars) then { _deleted_ruined_Cars = 0; { if (damage _x == _check_damage_for_delete_ruined_car) then { deleteVehicle _x; _deleted_ruined_Cars = _deleted_ruined_Cars + 1; }; } forEach (allMissionObjects "Car"); if (_deleted_ruined_Cars > 0) then { diag_log format [" SpawnCar: Deleted %1 old ruined cars from server",_deleted_ruined_Cars]; }; }; if (_enable_detect_old_cars_in_point_spawn_in_meters) then { { if((typeName(_x select 1)) == "ARRAY") then { { if (!(_x in _massive_writed_alltypes_cars)) then { _massive_writed_alltypes_cars = _massive_writed_alltypes_cars + [_x]; }; } foreach (_x select 1); } else { if (!((_x select 1) in _massive_writed_alltypes_cars)) then { _massive_writed_alltypes_cars = _massive_writed_alltypes_cars + [(_x select 1)]; }; }; { if (!(_x in _massive_writed_allcoords_cars)) then { _massive_writed_allcoords_cars = _massive_writed_allcoords_cars + [_x]; }; } foreach (_x select 2); } foreach _CarsSpawnConfig; }; { _x call fnc_spawnCar; } foreach _CarsSpawnConfig; 3. Создаем по пути: "MPMissions\dayz_Auto.ChernarusPlus\" папку "scripts" , и в ней файл с именем "compiles.sqf" . Если такая папка у вас уже имеются, просто не создавайте ее, а перейдите в нее. Если файл с там именем уже имеется у вас, то не создавайте его, а допишите информацию со следующего пункта инструкции в конец файла! 4. Вставляем в файл следующую строку: init_spawn_cars = compile preprocessFileLineNumbers "scripts\custom\SpawnCars.sqf"; 5. Открываем по указанному далее пути файл в "Notepad++": "MPMissions\dayz_Auto.ChernarusPlus\init.sqf". Находим в файле строки с call compile preprocessFileLineNumbers 5. Вставляем после всех "call compile preprocessFileLineNumbers" следующее: call compile preprocessFileLineNumbers "scripts\compiles.sqf"; _Enable_SPAWNER_CARS = true; // Кастомный скрипт спавна транспорта (true - включить, false - выключить) 6. В этом же файле находим строки: simulWeatherSync; dbInitEconomy [true]; setTimeForScripts 0.03; 7. Добавляем после них: if (_Enable_SPAWNER_CARS) then { Call init_spawn_cars; }; Вот и все. ВАЖНО: Перед активацией скрипта отключите официальный спавнер транспорта сервера из официальной системы сервера игры. Инструкция есть тут: Как вы уже догадались, этой строкой мы можем включить или отключить сам кастомный скрипт без долгого копания в коде. _Enable_SPAWNER_CARS = false; // Кастомный скрипт спавна транспорта (true - включить, false - выключить) Все настройки по спавну транспорта есть в самом файле скрипта, который в п. 2 инструкции вы и создавали. Надеюсь, сложности с его настройкой не возникнет, пояснения там имеются.
  20. Куплю скрипты на заказ + фиксы или донастройка имеющихся оплату гарантирую купля продажа того что сделаете через гаранта так безопастней оплату гаранта оплачю сам пишите в лс тут сижу редко https://vk.com/aowinbec
  21. Респавн сброса припасов Требования: Не требуется дополнительных аддонов Версия: 3.1 https://drive.google.com/open?id=1ZTFNmorIIa-qWR0PGMTAGtCJd0KuKmj0
  22. Приветствую всех. Один из тестеров сервера,гулял по просторам серверов Epoch.Воспользовавшись банкоматом,был сильно удивлен скоростью передачи денег. Немного поковыряв @Epoch и серверные файлы,мы нашли,как ускорить процесс передачи криптов. Делимся с Вами : - в папке миссии создаем файл atmPatch.sqf - Вставляем в него следующее содержимое disableSerialization; while{true} do { _gearDisplay = displayNull; waitUntil { sleep 2; _gearDisplay = findDisplay -13; !isNull _gearDisplay; }; ctrlSetText [1600, "Перевести"]; ctrlSetText [1001, "Снять"]; ctrlSetText [1002, "Положить"]; ctrlSetText [1003, "Перевести"]; ctrlSetText [1004, "Xeon fast ATM"]; buttonSetAction [1600, "if (isNull(findDisplay -13)) exitWith{};if (isNil ""EPOCH_bankTransferActive"") then {EPOCH_bankTransferActive = true;ctrlEnable[1600, false];[] spawn { ctrlSetText[1004,""Transfer started.""]; _deposit = parseNumber(ctrlText 1401) min EPOCH_playerCrypto; _withdraw = parseNumber(ctrlText 1402) min EPOCH_bankBalance; _transfer = parseNumber(ctrlText 1400) min EPOCH_bankBalance; _totalTransfer = (_deposit + _withdraw) + _transfer; _progress = 0; uiSleep 1; _transferTarget = """"; if (_transfer > 0) then { _transferTarget = lbData[21500, (lbCurSel 21500)]; }; if (_deposit > 0 || _withdraw > 0 || (_transfer > 0 && _transferTarget != """")) then { _sleep = 0.1; for ""_i"" from 0 to 100 do { if (isNull(findDisplay -13)) exitWith{}; _progress = _progress + 10; if (_progress > 100) exitWith{}; ctrlSetText[1200, format[""\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"", _progress]]; uiSleep _sleep; }; if (_progress >= 100) then { EPOCH_storeCrypto_PVS = [player, [_deposit, _withdraw, [_transfer, _transferTarget]], Epoch_personalToken]; publicVariableServer ""EPOCH_storeCrypto_PVS""; ctrlSetText[1004, ""Transfer complete.""]; uiSleep 1; closeDialog 0; } else { ctrlSetText[1004, ""Transfer failed.""]; }; }; EPOCH_bankTransferActive = nil; ctrlEnable[1600, true]; }; };"]; sleep 3; } - Сохраняем - Запаковываем миссию в .pbo и запускаем сервер p.s Возможно придется удалить Dump.rdb
  23. Описание: Старый добрый режим, который известен многим из игры Counter:Strike 1.6, перекочевал на новую версию игры, что дает возможность проверить свои навыки bhop/strafe в смертельном противостоянии CT и одного T, который использует ловушки, дабы победить в этой битве. В случае провала, террорист должен попытаться убить спецназ на испытании. Установка: 1) Распаковать архив и раскидать файлы по папкам на сервере. 2) Настроить в папке cfg/deathrun Немного картинок deathrun_2.0.dev11.zip
  24. Ищу человека который сделает данный ХУД/Цена на усмотрение скриптера. Содержание заявки: 2) Описание функционала и особенностей - сами хп сделанны гранями по типу 100% -80% -60% -40% -20% -10% 3) Цена -на усмотрение скриптера. 4) Контактная информация - в личку форума 5) Скриншоты функционала -
  25. Итак, в этой статье я расскажу как сделать статус-бар (инфо панель - кому как нравится) персонажа. То бишь панель на которой показаны жизни персонажа, возможные переломы, голод, жажда и всё в том же духе. Цвета выводимого текста можно менять. Админам к тому же показывается инфо о местоположении их персонажа в формате "world space", а так же FPS сервера. Думаю все знают о чём я Что нам понадобится: 1) Status_Bar-master.zip Инструкция: 1) Папку addons копируем в папку с вашей миссией 2) Открываем init.sqf и в самый низ добавляем строку: //Status Bar if(hasInterface) then{[] execVM "addons\Status_Bar\init_statusBar.sqf"}; Внимание: Если в вашем init.sqf уже есть секция if(hasInterface), то вместо кода выше просто добавьте этот: [] execVM "addons\Status_Bar\init_statusBar.sqf" 3) Открываем файл description.ext и в самый низ добавляем: class RscTitles { #include "addons\Status_Bar\statusBar.hpp" }; Внимание: если в файле description.ext у вас уже есть секция RscTitles, то внутрь самой секции поместите код: #include "addons\Status_Bar\statusBar.hpp 4) Открываем файл scripts.txt, который находится в папке с фильтрами BE и делаем следующие изменения: Строку 20 (примерно) изменяем таким образом: 7 playableunits !=""pto: %3 | Players: %2 | FPS: %1 ", round diag_fps, count playableUnits, EPOCH_playerCrypto, mapGridPosition player];" Строку 23 (примерно) изменяем таким образом: 7 exec !"addons\status_bar\init_statusBar.sqf" 5) Открываем файл init_statusBar.sqf и в 8 строке прописываем UID`ы админов: sb_admin_list = ["XXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXX"]; //тут uid`ы админов 6) В том же файле при помощи параметра: WSC = true/false выбираем возможность показа координат в панели админам, указанным выше. Установка завершена. Ставим плюсы в репу и наслаждаемся
×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.