Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной

Таблица лидеров


Популярные публикации

Отображаются публикации с наибольшей репутацией на 01/15/19 во всех областях

  1. 1 балл
    123new

    BEC для DayZ [совместимо]

    В данной теме рассмотрим установку такого ПО, как Battleye Extended Controls (BEC). Что такое BEC можете почитать в одноименной теме: Скажу лишь одно, существует несколько разных версий BEC, многие из них отличаются по конфигурации, и, возможно, специфике работы. Они в большинстве своем все совместимы и с Arma 2, и с Arma 3, и с DayZ, но не написаны специально под DayZ и версии серверов x64 разрядности, отсюда есть некоторая условность в их установке. Программа работает на всех версиях игр Bohemia Interactive при условии включенного battleye на стороне сервера (В DayZ он включен поумолчанию). Для тех, кто уже знает что это такое, можно не читать, ничего нового вы тут не увидите! Это скорее помощь новичкам, начинающим осваивать азы серверостроения данной игры! Для установки потребуется: 1. Сервер игры, установленный по любому из гайдов на форуме с включенным и рабочим Battleye. Для 1.0: Для других версий есть другие разделы форума ветки DayZ! 2. Установленная базовая конфигурация Battleye. Установка рассматривалась в теме выше (ссылки в п.3, установка 2-3 инструкции указанной темы) Установка: 1. Скачиваем архив с BEC версии 1.496: bec.rar 2. Распаковываем папку bec в нужное нам место на компьютере с сервером. Можно прямо в папку с сервером. 3. По пути: bec\Config Открываем файлик config.cfg блокнотом, и правим. В строке: BePath = C:\Dayz\Steam\steamapps\common\DayZServer\profiles\BattlEye указываем путь до текущего активного config battleye, но без указания самого файла. (в случае, если у вас в параметрах запуска сервера имеется параметр -BEPatch= то укзываем этот же путь) В моем случае будет указано: E:\servers\DayZServer_1.0\Instance_2\BattlEye Здесь, как видим, папка с конфигурацией Battleye работающего сервера, о чем видна приписка active около имени файла. Наличие файла BEServer.cfg обязательно. Если его нет, создаем (содержимое на 100% идентично файлу BEServer_x64.cfg , это условность, о которой говорил выше) 4. В строке: Ip = 127.0.0.1 указываем ваш IP адрес, по которому сервер буде доступен. Для сервера на том же ПК, что и bec запущен, можно не трогать 5. В строке Port = 2302 указываем активный порт вашего сервера игры, на котором сервер запущен (указываем тот, что в параметрах запуска сервера обозначен параметром -port=) 6. В строке ServerExeName = DayZ_Server_x64.exe указываем ваш exe файл сервера игры, в случае, если он отличается от стандартного у вас. 7. Собственно, BEC готов к тестовому запуску, пробуем. запускаем сервер (если еще не запущен), запускаем Start_Bec.bat с папки bec и проверяем. Если программа соединится с сервером игры и напишет "Initializing BEC..." в чат сервера, значит все прошло удачно! 8. Далее настраиваем файл sheduler.xml в папке bec\Config. Пояснения в файле имеются, делаем строго по ним. Скажу лишь 2 вещи: 1) Если меняете количество сообщений в чат, рестартов, и т.п. соблюдайте порядок номеров в job. Начинающий номер 0, каждый последующий это +1 от предыдущего. Укажете неверно - следующие задания работать не будут. 2) Комманда: <cmd>C:\Test062Server\!Server_kill.cmd</cmd> выполняет файл, который указан. Указывайте существующий файл, иначе файл не выполнится. Поумолчанию этот файл выполнял простую операцию выключения сервера, т.е. taskkill /im {имя exe фйла сервера} Более подробную инструкцию по настройке BEC вы можете найти на форуме в разделах по Arma 2 и Arma 3, а также в ссылке, указанной вначале темы. Конфигурация у программы примерно одинаковая. Программа работает на любой версии DayZ, будь то 0.45, 0.59, 0.60-0.62, 0.63 или даже 1.0. Из отличий, могу сказать лишь одно, опция проверки ников игрока на DayZ 100% не работает!
  2. 1 балл
    elanc

    Рандомный Вайп из-за крашей

    Init.c ... class RestartFlag { void RestartFlag() { return; } void ~RestartFlag() { FileHandle fp; fp = OpenFile("$profile:restart.pid", FileMode.WRITE); if( fp ) { FPrintln(fp, "1"); CloseFile(fp); } return; } } class CustomMission: MissionServer { ref RestartFlag rf = new RestartFlag(); ... watchdog.cmd @echo off title FASGG #1 (TvTRP) Watchdog color 03 set DAYZ_LOCATION="D:\dayzserver" set BEC_LOCATION="D:\bec" goto checksv :checksv taskkill /f /im WerFault.exe >NUL timeout 1 >NUL tasklist /FI "IMAGENAME eq DayZServer_x64.exe" 2>NUL | find /I /N "DayZServer_x64.exe">NUL if "%ERRORLEVEL%"=="0" goto checkbec cls echo Server is not running.. goto killsv :checkbec tasklist /FI "IMAGENAME eq Bec.exe" 2>NUL | find /I /N "Bec.exe">NUL if "%ERRORLEVEL%"=="0" goto loopsv cls echo Bec is not running.. goto startbec :loopsv for /L %%s in (30,-1,0) do ( cls echo Server is running. Checking again in %%s seconds.. timeout 1 >nul ) goto checksv :killsv if exist D:\dayzserver\profile\restart.pid goto startsv taskkill /f /im Bec.exe taskkill /f /im DayZServer_x64.exe echo %DATE% %TIME% >> D:\crashes.txt for /f %%i in ('dir /B /AD /OD /T:C D:\dayzserver\mpmissions\fasgg.chernarusplus\Backups\') do set LAST=%%i set "LASTDB=D:\dayzserver\mpmissions\fasgg.chernarusplus\Backups\%LAST%\*.*" xcopy /E /Y %LASTDB% D:\dayzserver\mpmissions\fasgg.chernarusplus\storage_1 >D:\restore.log goto startsv :startsv del /f /q D:\dayzserver\profile\restart.pid >NUL cls echo Starting DayZ SA Server. timeout 1 >nul cls echo Starting DayZ SA Server.. timeout 1 >nul cls echo Starting DayZ SA Server... cd "%DAYZ_LOCATION%" start DayZServer_x64.exe -dologs -adminlog -freezecheck -config=serverDZ.cfg -BEpath=D:\Bec -profiles=D:\dayzserver\profile -port=2302 -cpuCount=8 -filepatching -scrAllowFileWrite for /L %%s in (45,-1,0) do ( cls echo Running server.. Wait %%s seconds to start Bec.. timeout 1 >nul ) goto startbec :startbec cls echo Starting Bec... cd "%BEC_LOCATION%" start Bec.exe -f Config.cfg --dsc goto checksv :eof backup_db.cmd @echo off for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" set "backupname=%YYYY%%MM%%DD%_%HH%%Min%%Sec%" xcopy /I /E /C /Q d:\dayzserver\mpmissions\fasgg.chernarusplus\storage_1 d:\dayzserver\mpmissions\fasgg.chernarusplus\backups\%backupname% restart.cmd @echo off if exist D:\dayzserver\profile\restart.pid goto EOF echo 1 >D:\dayzserver\profile\restart.pid echo %DATE% %TIME% %1 %2 >> d:\restarts.txt echo alert 90sec c:\usr\local\php\php.exe d:\msg.php Restart in 90 seconds! ping -n 15 -w 1000 127.0.0.1 >NUL echo alert 75sec c:\usr\local\php\php.exe d:\msg.php Restart in 75 seconds! ping -n 15 -w 1000 127.0.0.1 >NUL echo alert 60sec c:\usr\local\php\php.exe d:\msg.php Restart in 60 seconds! ping -n 15 -w 1000 127.0.0.1 >NUL echo alert 45sec c:\usr\local\php\php.exe d:\msg.php Restart in 45 seconds! ping -n 15 -w 1000 127.0.0.1 >NUL echo alert 30sec c:\usr\local\php\php.exe d:\msg.php Restart in 30 seconds! ping -n 15 -w 1000 127.0.0.1 >NUL echo alert 15sec c:\usr\local\php\php.exe d:\msg.php Restart in 15 seconds! ping -n 15 -w 1000 127.0.0.1 >NUL echo killing processes... taskkill /F /IM Bec.exe taskkill /F /IM DayZServer_x64.exe for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" echo backuping world... set "backupname=%YYYY%%MM%%DD%_%HH%%Min%%Sec%" xcopy /I /E /C /Q d:\dayzserver\mpmissions\fasgg.chernarusplus\storage_1 d:\dayzserver\mpmissions\fasgg.chernarusplus\backups\%backupname% echo finished! :EOF msg.php <?php set_time_limit(0); if( isset( $argc ) && $argc > 1 ) { $msg = ''; for( $i = 1; $i < $argc; $i++ ) { $msg .= ' ' .$argv[$i]; } $msg = ltrim($msg); $ip = "127.0.0.1"; $port = "2302"; $password = "MyPaSsWoRd"; $msgSeq = 0; function beCrc32($data) { $data = sprintf("%08x", crc32($data)); $data = array(substr($data,-2,2), substr($data,-4,2), substr($data,-6,2), substr($data,0,2)); $data = chr(hexdec($data[0])) . chr(hexdec($data[1])) . chr(hexdec($data[2])) . chr(hexdec($data[3])); return $data; } function bePacket($data) { $crc = beCrc32(chr(255) . $data); $packet = "BE" . $crc . chr(255) . $data; return $packet; } function beAuth() { global $password; $data = chr(0) . $password; return bePacket($data); } function beCmd($data) { global $msgSeq; $data = chr(1) . chr($msgSeq) . $data; $msgSeq += 1; $msgSeq %= 256; return bePacket($data); } function bePing() { global $msgSeq; $data = chr(1) . chr($msgSeq); $msgSeq += 1; $msgSeq %= 256; return bePacket($data); } function beSayAll($data) { global $msgSeq; $data = chr(1) . chr($msgSeq) . "say -1 " . $data; $msgSeq += 1; $msgSeq %= 256; return bePacket($data); } function beResponse($seq) { $data = chr(2) . chr($seq); return bePacket($data); } function doAuth() { global $sock, $ip, $port; $buf = ''; $data = beAuth(); $len = strlen($data); $sent = socket_sendto($sock, $data, $len, 0, $ip, $port); if($sent == false) { die("Failed to send login:" . socket_last_error() . PHP_EOL); } $ret = socket_recvfrom($sock, $buf, 64, 0, $ip, $port); if($ret != 9) { die("Failed recv login response"); } if(ord($buf[strlen($buf)-1]) != 1) { echo "Login failed: "; if(ord($buf[strlen($buf)-1]) == 0) { echo "wrong password" . PHP_EOL; } else { echo "unknown result" . PHP_EOL; } die("WTF"); } } $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); if(!$sock) { die("Socket create failed: " . socket_last_error() . PHP_EOL); } doAuth(); socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0)); usleep(250); $data = beSayAll($msg); $len = strlen($data); $sent = socket_sendto($sock, $data, $len, 0, $ip, $port); if($sent == false) { die("Failed to send login:" . socket_last_error() . PHP_EOL); } } ?> Да пожалуйста! Как бы не жалко.. Грязновато, конечно.. Многое хочется переделать и(ли) подчистить, но не до того сейчас.. watchdog.cmd — скрипт, следящий за падением сервера restart.cmd — скрипт, перезапускающий сервер; так же он вызывается через веб-админку для рестарта сервера backup_db.cmd — скрипт, делающий резервную копию; вызывается из планировщика задач (нужно добавить проверку на наличие файла *.journal-db, чтоб избежать копирования по время транзакции в БД игроков) msg.php — скрипт для отправки сообщения на сервер (ещё для версии 0.5x написал систему валюты на сервере, оттуда и выдрал кусок, ибо лень было переписывать, т.ч. скрипт мог быть короче и проще, но я ленивая жопа)
  3. 1 балл
    В самом верху init.c подключаешь файл с этой функцией #include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_MOD\\SpawnCars\\PlaceAllCarsToGround.c" путь меняешь на свой. ($CurrentDir - это корень/папка где расположен сервер Дейза) далее в функции main() которая в init.c вставляешь вызов функции PlaceAllCarsToGround(); вот дефолтный init.c подключением и вызовом #include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_MOD\\SpawnCars\\PlaceAllCarsToGround.c" void main() { //INIT WEATHER BEFORE ECONOMY INIT------------------------ Weather weather = g_Game.GetWeather(); weather.MissionWeather(false); // false = use weather controller from Weather.c weather.GetOvercast().Set( Math.RandomFloatInclusive(0.4, 0.6), 1, 0); weather.GetRain().Set( 0, 0, 1); weather.GetFog().Set( Math.RandomFloatInclusive(0.05, 0.1), 1, 0); //INIT ECONOMY-------------------------------------- Hive ce = CreateHive(); if ( ce ) ce.InitOffline(); //DATE RESET AFTER ECONOMY INIT------------------------- int year; int month; int day; int hour; int minute; GetGame().GetWorld().GetDate(year, month, day, hour, minute); if (((month <= 9) && (day < 20)) || ((month >= 10) && (day > 20))) { month = 9; day = 20; GetGame().GetWorld().SetDate(year, month, day, hour, minute); } PlaceAllCarsToGround(); } class CustomMission: MissionServer { void SetRandomHealth(EntityAI itemEnt) { if ( itemEnt ) { int rndHlt = Math.RandomInt(55,100); itemEnt.SetHealth("","",rndHlt); } } override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) { Entity playerEnt; playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player Class.CastTo(m_player, playerEnt); GetGame().SelectPlayer(identity, m_player); return m_player; } override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { /* player.RemoveAllItems(); EntityAI item = player.GetInventory().CreateInInventory(topsMissionArray.GetRandomElement()); EntityAI item2 = player.GetInventory().CreateInInventory(pantsArray.GetRandomElement()); EntityAI item3 = player.GetInventory().CreateInInventory(shoesArray.GetRandomElement()); */ EntityAI itemTop; EntityAI itemEnt; ItemBase itemBs; float rand; itemTop = player.FindAttachmentBySlotName("Body"); if ( itemTop ) { itemEnt = itemTop.GetInventory().CreateInInventory("Rag"); if ( Class.CastTo(itemBs, itemEnt ) ) itemBs.SetQuantity(4); SetRandomHealth(itemEnt); itemEnt = itemTop.GetInventory().CreateInInventory("RoadFlare"); SetRandomHealth(itemEnt); itemEnt = itemTop.GetInventory().CreateInInventory("StoneKnife"); SetRandomHealth(itemEnt); } rand = Math.RandomFloatInclusive(0.0, 1.0); if ( rand < 0.25 ) itemEnt = player.GetInventory().CreateInInventory("SodaCan_Cola"); else if ( rand > 0.75 ) itemEnt = player.GetInventory().CreateInInventory("SodaCan_Spite"); else itemEnt = player.GetInventory().CreateInInventory("SodaCan_Pipsi"); SetRandomHealth(itemEnt); rand = Math.RandomFloatInclusive(0.0, 1.0); if ( rand < 0.35 ) itemEnt = player.GetInventory().CreateInInventory("Apple"); else if ( rand > 0.65 ) itemEnt = player.GetInventory().CreateInInventory("Pear"); else itemEnt = player.GetInventory().CreateInInventory("Plum"); SetRandomHealth(itemEnt); } }; Mission CreateCustomMission(string path) { return new CustomMission(); }
  4. 1 балл
    Чуть переделал и учел замечание Ультимы void PlaceAllCarsToGround() { array<Object> nearest_objects = new array<Object>; array<CargoBase> proxy_cargos = new array<CargoBase>; Object object; string className; int objectcount = 0; vector mapcenter = "6250 0 9000"; int radius = 16000; vector foundcar_pos; mapcenter[1] = GetGame().SurfaceY( mapcenter[0], mapcenter[2] ); GetGame().GetObjectsAtPosition(mapcenter, radius, nearest_objects, proxy_cargos); for ( int i = 0; i < nearest_objects.Count(); i++ ) { object = nearest_objects.Get(i); className = object.GetType(); if ( GetGame().IsKindOf(className, "Car" ) ) //if ( className == "OffroadHatchback" || className == "V3SVehicle" || className == "V3SChassis" || className == "CivilianSedan") { EntityAI objectEnt = EntityAI.Cast(object); if (objectEnt) { foundcar_pos = objectEnt.GetPosition(); Print("::: PlaceAllCarsToGround() ::: Found car: " + className + ", objectEnt: " + objectEnt + ", Position: " + foundcar_pos.ToString() + ", SurfaceGetNormal: " + GetGame().SurfaceGetNormal(foundcar_pos[0], foundcar_pos[2]).ToString()); //Check surface under car /* string surface_type; int liquidType; GetGame().SurfaceUnderObject(object, surface_type, liquidType); Print("::: PlaceAllCarsToGround() ::: Found car: " + className + ", objectEnt: " + objectEnt + ", surface_type: " + surface_type + ", liquidType: " + liquidType); */ if ( foundcar_pos[1] < (GetGame().SurfaceY(foundcar_pos[0], foundcar_pos[2])) - 0.1 || foundcar_pos[1] > (GetGame().SurfaceY(foundcar_pos[0], foundcar_pos[2])) + 0.1 ) { foundcar_pos[1] = GetGame().SurfaceY(foundcar_pos[0], foundcar_pos[2]); objectEnt.SetPosition(foundcar_pos); objectEnt.SetOrientation(objectEnt .GetOrientation()); objectEnt.SetDirection(objectEnt .GetDirection()); Print("::: PlaceAllCarsToGround() ::: Position changed for car : " + className + ", objectEnt: " + objectEnt + ", Position: " + foundcar_pos.ToString()); } else { Print("::: PlaceAllCarsToGround() ::: No position change required for car : " + className + ", objectEnt: " + objectEnt); } } } } } Думаю еще проверять на чем стоит машина и в зависимости от этого корректировать ее положение, но думаю со след обновой богемы пофиксят фигню с дефолтными машинами... Изменил центр Изменил радиус
×
×
  • Создать...

Важная информация

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

Поддержка