DrTauren

Создаём торговца драгоценными камнями

6 сообщений в этой теме

Координаты в данном скрипте настроены для карты Тавиана. Но вы можете сделать свою миссию и изменть всё под свою карту.
Скрипт создаст торговца рубинами, а так же соответствующий маркер на карте.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

 

Инструкция:
1)
Открываем файл server_traders.sqf и находим строку:

serverTraders = [

сразу под это строкой добавляем это:

"RU_Villager1"

2) Ещё ниже находим эту секцию:

/*---------------------------------------------------------------------------
NEUTRAL VENDORS
---------------------------------------------------------------------------*/

и добавляем сразу под ней этот код:

//Gems
menu_RU_Villager1 = [
[["Gemstones",700]],
[],
"neutral"
];

P.S. Если вы меняете скин торговца (или даже если нет), то обязательно проверьте что бы такого же класснейма, например RU_Villager1, не было в файле server_traders.sqf. То есть каждому торговцу должен соответствовать определённый скин.

3) Открываем базу данных вашего сервера и заходим в таблицу server_traders. Создаём там новую запись и вставляем это в соответствующие поля:

, , RU_Villager1, 13, neutral, ,Tavi Mining Company

P.S. Первые две колонки оставляем пустыми.

13 - Число соответствующее определённому острову (11=Cherno, 13=Taviana, 16=Pantera)

4) Открываем таблицу traders_data. Отсортируйте её по возрастанию что бы найти самое большое число в колонке "ID". А потом создаём строки с вещами, используя новые ID (с более высоким значением). У нас будет так:

7589,["ItemRuby",1], 250,[9,"ItemGoldBar10oz",1],[5,"ItemGoldBar10oz",1],0,700,trade_items
7590,["ItemTopaz",1], 250,[9,"ItemGoldBar10oz",1],[5,"ItemGoldBar10oz",1],0,700 ,trade_items
7591,["ItemObsidian",1], 250,[9,"ItemGoldBar10oz",1],[5,"ItemGoldBar10oz",1],0,700,trade_items
7592,["ItemSapphire",1], 250,[9,"ItemGoldBar10oz",1],[5,"ItemGoldBar10oz",1],0,700,trade_items
7593,["ItemAmethyst",1], 250,[9,"ItemGoldBar10oz",1],[5,"ItemGoldBar10oz",1],0,700,trade_items
7594,["ItemEmerald",1], 250,[9,"ItemGoldBar10oz",1],[5,"ItemGoldBar10oz",1],0,700,trade_items
7595,["ItemCitrine",1], 250,[9,"ItemGoldBar10oz",1],[5,"ItemGoldBar10oz",1],0,700,trade_items

Вы так же можете использовать командную строку и этот код, если так вам удобнее создать новые строки с вещами:

 

 

REPLACE INTO `traders_data` (`id`, `item`, `qty`, `buy`, `sell`, `order`, `tid`, `afile`) VALUES (7589, '["ItemRuby",1]', 250, '[9,"ItemGoldBar10oz",1]', '[5,"ItemGoldBar10oz",1]', 0, 700, 'trade_items');
REPLACE INTO `traders_data` (`id`, `item`, `qty`, `buy`, `sell`, `order`, `tid`, `afile`) VALUES (7590, '["ItemTopaz",1]', 250, '[9,"ItemGoldBar10oz",1]', '[5,"ItemGoldBar10oz",1]', 0, 700, 'trade_items');
REPLACE INTO `traders_data` (`id`, `item`, `qty`, `buy`, `sell`, `order`, `tid`, `afile`) VALUES (7591, '["ItemObsidian",1]', 250, '[9,"ItemGoldBar10oz",1]', '[5,"ItemGoldBar10oz",1]', 0, 700, 'trade_items');
REPLACE INTO `traders_data` (`id`, `item`, `qty`, `buy`, `sell`, `order`, `tid`, `afile`) VALUES (7592, '["ItemSapphire",1]', 250, '[9,"ItemGoldBar10oz",1]', '[5,"ItemGoldBar10oz",1]', 0, 700, 'trade_items');
REPLACE INTO `traders_data` (`id`, `item`, `qty`, `buy`, `sell`, `order`, `tid`, `afile`) VALUES (7593, '["ItemAmethyst",1]', 250, '[9,"ItemGoldBar10oz",1]', '[5,"ItemGoldBar10oz",1]', 0, 700, 'trade_items');
REPLACE INTO `traders_data` (`id`, `item`, `qty`, `buy`, `sell`, `order`, `tid`, `afile`) VALUES (7594, '["ItemEmerald",1]', 250, '[9,"ItemGoldBar10oz",1]', '[5,"ItemGoldBar10oz",1]', 0, 700, 'trade_items');
REPLACE INTO `traders_data` (`id`, `item`, `qty`, `buy`, `sell`, `order`, `tid`, `afile`) VALUES (7595, '["ItemCitrine",1]', 250, '[9,"ItemGoldBar10oz",1]', '[5,"ItemGoldBar10oz",1]', 0, 700, 'trade_items');

 

 

5) Открываем файл mission.sqm в папке с вашей миссией и ищем эту строку:

class Markers {

после этого вы увидите:

items=число;

Какое бы число не было бы выше, прибавьте к этому числу 1. То есть было, например, 27, а стало 28.

Находим конец секции с маркерами и вставляем туда это:

class Item27
{
position[]={6054.33,5,7704.25};
name="TaviMiningCompany";
text="Tavi Mining Company";
type="mil_dot";
colorName="ColorBlack";
};

Число 27 тут тоже изменяем на то что мы написали выше, отняв от него 1. Всё это делается потому что отсчёт классов начинается с нуля, а не с единицы. То есть если вначале мы написали, что классов будет всего 28, то номер последнего должен быть 27. (Арма такая Арма :D )

6) Открываем файл init.sqf и находим там эту строку:

​if (isServer) then {

а ниже вставляем эту:

execVM "custom\Gem_Trader.sqf";

В итоге секция должна приобрести примерно такой вид:

 

if (isServer) then {
call compile preprocessFileLineNumbers "\z\addons\dayz_server\missions\DayZ_Epoch_13.Tavi\dynamic_vehicle.sqf"; //Compile vehicle configs
 
// Add trader citys
_nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_13.Tavi\mission.sqf";
_serverMonitor = [] execVM "\z\addons\dayz_code\system\server_monitor.sqf";
execVM "custom\Gem_Trader.sqf";
};

 

 

7) В папке миссии создаём папку custom и там создаём файл Gem_Trader.sqf со следующим содержимым:

 

 

_unit_1337 = objNull;
if (true) then
{
  _this = createAgent ["RU_Villager1", [6054.33,7704.25,0.1], [], 0, "CAN_COLLIDE"];
  _unit_1337 = _this;
  _this setDir 29;
  _this setVehicleInit "this allowDammage false; this disableAI 'FSM'; this disableAI 'MOVE'; this disableAI 'AUTOTARGET'; this disableAI 'TARGET'; this setBehaviour 'CARELESS'; this forceSpeed 0;  ";
  _this setUnitAbility 0.60000002;
_this allowDammage false; _this disableAI 'FSM'; _this disableAI 'MOVE'; _this disableAI 'AUTOTARGET'; _this disableAI 'TARGET'; _this setBehaviour 'CARELESS'; _this forceSpeed 0;_this enableSimulation false;
};
 
_vehicle_0 = objNull;
if (true) then
{
  _this = createVehicle ["MAP_bouda_plech", [6056.0205, 7702.5825, 6.1035156e-005], [], 0, "CAN_COLLIDE"];
  _vehicle_0 = _this;
  _this setDir 90.66597;
  _this setPos [6056.0205, 7702.5825, 6.1035156e-005];
};
 
_vehicle_9 = objNull;
if (true) then
{
  _this = createVehicle ["MAP_stanek_3B", [6054.7871, 7705.0747], [], 0, "CAN_COLLIDE"];
  _vehicle_9 = _this;
  _this setDir 118.30024;
  _this setPos [6054.7871, 7705.0747];
};
 
_vehicle_16 = objNull;
if (true) then
{
  _this = createVehicle ["MAP_Misc_WoodPile", [6061.7505, 7702.2954, -3.0517578e-005], [], 0, "CAN_COLLIDE"];
  _vehicle_16 = _this;
  _this setPos [6061.7505, 7702.2954, -3.0517578e-005];
};
 
_vehicle_29 = objNull;
if (true) then
{
  _this = createVehicle ["MAP_Barels", [6055.0283, 7700.7544], [], 0, "CAN_COLLIDE"];
  _vehicle_29 = _this;
  _this setDir 6.0406318;
  _this setPos [6055.0283, 7700.7544];
};
 
_vehicle_30 = objNull;
if (true) then
{
  _this = createVehicle ["MAP_barrel_water", [6056.3247, 7703.3833, -3.0517578e-005], [], 0, "CAN_COLLIDE"];
  _vehicle_30 = _this;
  _this setPos [6056.3247, 7703.3833, -3.0517578e-005];
};
 
_vehicle_31 = objNull;
if (true) then
{
  _this = createVehicle ["MAP_P_pipe_small", [6059.0938, 7700.5908, 3.0517578e-005], [], 0, "CAN_COLLIDE"];
  _vehicle_31 = _this;
  _this setDir 3.4072633;
  _this setPos [6059.0938, 7700.5908, 3.0517578e-005];
};
 
_vehicle_32 = objNull;
if (true) then
{
  _this = createVehicle ["Land_Fire_barrel", [6062.4844, 7704.5562], [], 0, "CAN_COLLIDE"];
  _vehicle_32 = _this;
  _this setDir 203.54425;
  _this setPos [6062.4844, 7704.5562];
};

 


В этот файл закидываются здания, то есть база (рынок) где будет стоять торговец, а так же сам торговец. Имейте ввиду, что класснейм скина торговца в этом файле должен совпадать с класснеймом в базе данных, о чём я уже говорил.

Ну а на этом всё, надеюсь что помог :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Забронировать это рекламное место


по мне проще было добавить на геройскую и бандитскую (напф). а за гайд +

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возник вопросик, а как узнать координаты того места, куда хочешь поставить трейдера? Нужно для карты Чернорусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возник вопросик, а как узнать координаты того места, куда хочешь поставить трейдера? Нужно для карты Чернорусь.

Инфистар дебагом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Торгаш спавнится один в одном через какой то промежуток времени. К рестарту их на точке около 30 штук, куда нажать чтоб вылечить?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: 123new
      Здравствуйте, дорогие друзья и посетители сайта. В данной теме я распишу как создать свой "чистый" сервер на основе первых официальных серверных файлов игры, доступных каждому в steam для тех, кто приобрел эту замечательную игру. Для тех, кто не приобретал ее, не расстраивайтесь, добавлю зеркала на файлы.
      И так, приступим.
       
      Нам понадобятся:
      1. Официальные серверные файлы игры со steam ссылки на файлы имеются в теме:
      Копия Server Files от меня на момент публикации статьи (версия сервера игры 1.0.149923):  https://mega.nz/#!Pu50WKaY!K2LlvflSsHJj3-xWvoyMxYd4Prt-IPbO5Hy7YErZBBU
      Копия Server Tools от меня на момент публикации статьи (версия сервера игры 1.0.149923): https://mega.nz/#!7ugEkCZb!2sVV5n9Qssyd2NlUj4491bp8-NNXNAY9itY7GiAnCtQ
      Скачать можно и через SteamCMD:

      2. Официальный клиент игры из steam:
      https://store.steampowered.com/app/221100/DayZ/
      Зеркало на DayZ Client версию клиента игры 1.0.149923 на момент публикации: https://mega.nz/#!C3AHlAjK!5FOv8ZeXB8pS085ff1jkCoFQCr4uAr7bMs827u95Dls
      3. "Настроенная конфигурация серверной части игры" и батник для старта сервера:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      4. Notepad++ https://notepad-plus-plus.org/download
      И так, приступим.
      1. Распаковываем скачанные серверные файлы игры в отдельную папку
      2. Распаковываем архив с "Настроенной конфигурацией серверной части игры" в папку с серверными файлами
      Получим что-то типа такого

      Если вам необходимо, настраиваем cfg-файлы сервера вручную сами, как вам необходимо, информация по его настройке есть в теме во 2 ее сообщении
      Открывать cfg файлы через Notepad++.
      Ккомментарии по CFG файлам Battleye ниже:
      где 12345678 - rcon-пароль сервера
      500 - максимальный пинг, разрешенный battleye на сервере игры (не уверен, что работает)
      RestrictRCon 0 - подключение с rcon-клиентов с правами кика и бана игроков(например, dart и bec)(0 - разрешено все, 1 - запрещен кик и бан, только отправка в чат)
      По остальным настройкам и файлам читайте комментарии в файлах и в теме:
      3. Запускаем !!!Start_server.bat и наш сервер запустится
      4. Запускаем клиент игры со steam, находим наш сервер вручную по ip и порту, либо имени сервера.
      Если сервер запущен на том же компьютере, где и игра, и на стандартном порту 2302, то поумолчанию поиск выполняется по 127.0.0.1:2302
      Если сервер запущен на другом компьютере, то вместо 127.0.0.1 будет ip адрес компьютера, где запущен сервер, или его доменное имя. Например, myserver.com:2302 или 178.123.22.12:2302
      ВАЖНО: если сервер запущен на другом компьютере, отличном от компьютера где запущена игра, то для доступа на сервер игроков необходимо иметь "внешний" выделенный ip-адрес и открытый порт сервера!
      5. Для выключения сервера рекоммендуется пользоваться !!!Server_kill.bat файлом, созданным в соответствии с рекоммендациями разработчиков игры и официальной документацией.
       
      Для совсем "ленивых" запаковал уже настроенный сервер в архив с версией игры 1.0.149923:
      https://mega.nz/#!W3QhECTR!4m0hf8KGrL6a36Vo-6GY93vXCNfrbDraSIv3FrPgcrM
       
      Настраивайте лишь config сервера, battleye и bat-файл запуска сервера, и можете играть.
       
      Crack SmartSteamEmu v. 1.4.3 данной версии клиента игры и сервера:
      Скачать с Zippyshare.com: https://www64.zippyshare.com/v/mHmPweqg/file.html
      Скачать с Mega.nz: https://mega.nz/#!rnZBXK4b!KRrJm6obcJjUlzMpEPNQ3R8sy2z0pP-0Myb_ao4TVhg
      Скачать с yandex.disk: https://yadi.sk/d/4xSF1dSt6XN41g
      Инструкция по установке есть в архиве, дублирую:
       
      Для работы Battleye используйте ip-адрес и порт сервера, и любой rcon-клиент с паролем из BEServer_x64.cfg
      Для работы BEC делайте Battleye config файл BEServer.cfg идентичным по содержанию BEServer_x64.cfg иначе программа не будет работать!
      База данных (storage) теперь хранится по пути: mpmissions\dayzOffline.chernarusplus\storage_{номер instance с cfg сервера}
      В базе данных также хранится файл с сохранениями игроков на сервере с именем players.db
       
      Вот и все, приятной игры на сервере!
       
       
    • Автор: 123new
      В данной теме я распишу возможность создания серверного мода для сервера на свобственном примере и объясню как его собрать.Работающий на момент публикации статьи на версии сервера игры 1.4.152050.
       
      Нам понадобятся:
      1. Сервер игры актуальной версии, не ниже патча 1.04. Как установить можно узнать тут:
      До версии 1.04 параметра servermod у сервера игры не существовало!!!
      2. Программа 'PBO manager' с состава инструментария армы из сети: https://www.armaholic.com/page.php?id=16369
      Зеркало: https://yadi.sk/d/_gmzoNSDpNJTt
      Еще зеркало:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      4. Notepad++ https://notepad-plus-plus.org/download P.S. Вместо 'PBO manager' можно использовать DayZ Tools, но как им пользоваться разбираемся сами ;)
       
      И так, приступим:
      1. Предположим, что у нас имеется свой некий набор скриптов, который необходимо добавить серверу, но не на уровне миссии сервера, а на более ранних уровнях его загрузки. Например, добавить свой killfeed, модифицировать или изменить какой-либо из родных скриптов сервера игры, либо вовсе модификации, подключенной у вас.
      Для примера в этой теме и данного гайда я взял вот этот набор скриптов, собранный непосредственно для данной темы за 5 минут, и не изменяющий в сервере ровным счетом ничего. Он может послужить базой для создания своих модов, функций, переменных или классов. Данный гайд будем описывать, исходя из этого архива.
      Архив:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      2. Создаем папку с нашим модом. Для примера, это будет папка '@My_Server_Mod'. В созданной нами папке создаем папку 'Addons', а в ней папку 'My_Server_Mod'.
      3. Помещаем содержимое распакованного архива в папку 'My_Server_Mod'. Должно получиться так:

      4. В папке 'My_Server_Mod' создаем файлик 'config.cpp' и заполняем его следующими данными (советую использовать Notepad++ для этого):
      class CfgPatches // требуется обязательно { class My_Server_Mod // требуется обязательно, совпадает с именем мода { units[]={}; // may be not worked weapons[]={}; // may be not worked requiredVersion=0.1; // may be not worked requiredAddons[]={}; /* requiredAddons[]= { "DZ_Data", // Перечисляем требуемые и используемые модом аддоны (pbo-файлы игры и модов по их внутренним скриптовым именам) }; */ }; }; class CfgMods // // требуется обязательно, совпадает с именем мода { // https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation class My_Server_Mod { dir = "My_Server_Mod"; // Имя папки мода, совпадает с именем мода picture = ""; // Картинка в описании мода action = ""; // Ссылка, например вот так: action = "https://dayz.com/"; hideName = 1; // Не уверен, что этот параметр работает hidePicture = 1; // Не уверен, что этот параметр работает name = "My_Server_Mod"; // Имя мода (а также его внутреннее скриптовое имя) logoSmall = "Mods/TestMod/modlogosmall.tga"; // значок рядом с именем мода, если описание не развернуто logo = "Mods/TestMod/modlogo.tga"; // логотип под меню игры logoOver = "Mods/TestMod/modlogohover.tga"; // при наведении курсора мыши на логотип tooltip = "tooltip"; // подсказка при наведении курсора мыши overview = "My Server Mod"; // Описание credits = "123new"; // credits author = "123new"; // author authorID = "0"; // author steam ID version = "1.0"; // version extra = 0; // Не уверен, что этот параметр работает type = "mod"; // требуется обязательно, остается неизменным // inputs = "mods\testmod\inputs\my_new_inputs.xml"; // необязательно, при использовании пользовательских inputs dependencies[]={"Core","GameLib","Game","World","Mission"}; // необязательно, если необходимо установить зависимость класса class defs { class engineScriptModule { value=""; // если значение пустое, используется функция ввода по умолчанию files[]={"My_Server_Mod/scripts/1_Core"}; // вы можете добавить любое количество файлов или каталогов, и они будут скомпилированы вместе с оригинальными скриптами игрового модуля }; class gameLibScriptModule { value=""; files[]={"My_Server_Mod/scripts/2_GameLib"}; }; class gameScriptModule { //value="CreateGameMod"; // когда значение заполнено, имя функции ввода модуля скрипта по умолчанию перезаписывается им value = ""; files[]={"My_Server_Mod/scripts/3_Game"}; }; class worldScriptModule { value=""; files[]={"My_Server_Mod/scripts/4_World"}; }; class missionScriptModule { value=""; files[]={"My_Server_Mod/scripts/5_Mission"}; }; }; // Если какой-то из разделов скриптинга вам не нужен и вы не сибираетесь его паковать, сотрите необходимый блок с ним выше и в массиве dependencies }; }; Пояснения в файле оставил. Файл готовый:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Как видите, в 'deffs' названия классов и путей соответствуют родным из 'scripts.pbo', но с допиской имени мода. Имя мода в данном случае и есть идентификатор для обращения к своему моду извне. А в 'dependencies' перечисляются используемые классы оригинальных скриптов без дописки номера секции. Количество используемых 'dependencies' и блоков 'deffs' должно быть идентично.
      Пояснения есть также и в официальной документации от разработчика: https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation
      5. Запаковываем нашу папку 'My_Server_Mod' в pbo-файл 'My_Server_Mod.pbo' через 'PBO manager', как на скриншоте ниже:

      Можно использовать и другие способы запаковки, если знаете их или привычны вам.
      6. Добавляем в параметры запуска сервера параметр:
      "[email protected]_Server_Mod;" -FilePatching 7. Радуемся, наш серверный мод готов. Пример готового серверного мода:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      P.S. Создавать bikey файл для мода и bisign подписи для него не требуется, иначе это может привести к неработоспособности серверной модификации (возможно, недоработка сервера игры разработчиком)
       
      Отмечу сразу, что данный способ подходит для модификации и переписывания оригинальных классов скриптов сервера от разработчиков и модификации чужих модов с помощью моддинга, применяется исключительно на стороне сервера игры и клиент игры не затрагивает. Распространять такой мод игрокам НЕ НУЖНО!
      Изменение оригинальных скриптов, для которых не предусмотрена операция 'modded class' в движке игры, а также классов и функций, которые защищены языком и движком игры от такого рода действий через серверные моды не получится. Если вы столкнулись с этим, вам проще распаковать scripts.pbo и поместить папку scripts в корень сервера игры, добавить в параметры запуска сервера параметр -FilePatching и изменять напрямую в папке необходимые вам файлы. (правда из-за ошибки разработчиков на патче 1.04 данный метод не работает корректно)
       
      P.P.S. Процедура создания своего собственного клиент-серверного мода на основе скриптов работает таким же образом. В случае создания такого мода, файл 'config.cpp' может быть для стандартного мода более разнообразным, а также после требуется обязательная подпись такого мода в bisign и создание bikey файлов. Более подробно это освещать требуется отдельно!
    • Автор: 123new
      Собственно, в шапке темы написано все. Давайте в этой теме обсуждать вопрос создания 'нормальной' (привычной для всех, в том числе и для редактирования) базы данных персонажей сервера. Возможно, даже с возможностью мультисерверной работы (что крайне лишним не было бы).
       
    • Автор: 123new
      В данной теме мы с вами научимся создавать простой скрипт, который позволит выводить в чат объявления, которые вы захотите сами.
       
      Нам понадобится:
      1. Сервер DayZ 1.0, сделанный по одному из гайдов:
      2. Notepad++
      3. Немножечко трезвого ума
       
      Приступим:
      1. Открываем Mpmissions - dayzOffline.chernarusplus - init.c
      2. В самом начале файла добавляем:
      #include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\InfoMessages.c" Находим функцию
      void main() и перед ее закрывающей скобкой "}"добавляем:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(CustomInformation, TIME_Information_Repeat, true); пример:

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      3. Помещаем в папку файл  Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Либо создаем вручную этот файл с именем "InfoMessages.c" и заполняем его следующим текстом:
      int TIME_Information_Repeat = 60000; //in ms (60 seconds = 60000) ref TStringArray Messages = {"Welcome to My Server!", "This is server DayZ 1.0 Stable version!", "Our ip adress: ....", "Our site: ....", "Good day and big Loot for all!"}; void CustomInformation() { //GetGame().GetWorld().GetPlayerList(m_Players); array<Man> players = new array<Man>; GetGame().GetPlayers( players ); private int numbOfplayers = players.Count(); if( numbOfplayers > 0 ) { // GetGame().ChatPlayer(0,Messages.GetRandomElement()); foreach(Man player: players) { InfoMessages_SendPersonalMessage(Messages.GetRandomElement(), player); } } } void InfoMessages_SendPersonalMessage(string message, Man player) { if(( player ) && (message != "")) { Param1<string> m_GlobalMessage = new Param1<string>(message); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); } } 4. Настраиваем файл как нам нужно. Т.е. в строке
      int TIME_Information_Repeat = 60000; //in ms (60 seconds = 60000) указываем время повтора вывода сообщений в чат (поумолчанию стоит минута)
      и сами сообщения в переменной
      ref TStringArray Messages = {"Welcome to My Server!", "This is server DayZ 0.63 Experimental!", "Our ip adress: ....", "Our site: ....", "Good day and big Loot for all!"}; Важно: в конце последней строки обязательно должна быть скобка и точка с запятой, иначе сервер не запустится!
       
      P.S. Если сообщения вам не видны, включите их видимость в настройках вашего клиента игры для себя!
       
       
       
    • Автор: 123new
      В данной теме я распишу мой вариант установки сейвзоны, работающий на момент публикации статьи на версии сервера игры 1.0.150000.
       
      Установка
      1. Открываем 'init.c' в  'MpMissions' вашей.
      2. Вверху файла добавляем 1 строкой:
      #include "$CurrentDir:\\mpmissions\\dayzoffline.chernarusplus\\Scripts\safezone.c" ref SafeZone_PlugIn SafeZone = new SafeZone_PlugIn(); Где 'dayzoffline.chernarusplus' - имя папки с активной 'MpMissions' вашей.
      Пример:

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      3. В этом же файле находим блок начала класса 'CustomMission: MissionServer' и в его начале после открытия класса добавляем
      bool Activate_SafeZone_PlugIn = true; // safezone on (true) or off (false) override void TickScheduler(float timeslice) { GetGame().GetWorld().GetPlayerList(m_Players); if( m_Players.Count() == 0 ) return; for(int i = 0; i < SCHEDULER_PLAYERS_PER_TICK; i++) { if(m_currentPlayer >= m_Players.Count() ) { m_currentPlayer = 0; } PlayerBase currentPlayer = PlayerBase.Cast(m_Players.Get(m_currentPlayer)); if (Activate_SafeZone_PlugIn) { SafeZone_PlugIn.CheckingPosition(currentPlayer); } //Check if player is near safezone currentPlayer.OnTick(); m_currentPlayer++; } } Пример:

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      4. Создаем папку 'Scripts' в корне 'MpMissions' вашей, а в ней создаем файл с именем 'safezone.c' следующего содержания:
      class SafeZone_PlugIn { protected static vector SAFEZONE_LOACTION = "15145.1 32.9793 13919.0"; //Map coords (position of the safe zone) protected static float SAFEZONE_RADIUS = 100; //In meter protected static string SAFEZONE_ENTRY_MESSAGE = "Welcome to The SafeZone! Godmode ENABLED!"; protected static string SAFEZONE_EXIT_MESSAGE = "You Have Left The SafeZone! Godmode DISABLED!"; //Runs every tick (Stat time tick!) IMPORANT: Does reduce about 120 FPS when server is High-Full Pop! static void CheckingPosition(PlayerBase player) { private float SAFEZONE_distance; private string SAFEZONE_ZoneCheck, SAFEZONE_UID_PLAYER, SAFEZONE_NAME_PLAYER; SAFEZONE_NAME_PLAYER = player.GetIdentity().GetName(); SAFEZONE_UID_PLAYER = player.GetIdentity().GetPlainId(); //Steam 64 private Param1<string> SAFEZONE_Msgparam; private vector SAFEZONE_pos_player = player.GetPosition(); private vector SAFEZONE_LOCATION_FIXED = CorrectToGroundPosY(SAFEZONE_LOACTION); private string name_mesage_profile = "GodModeEnabledFor:" + SAFEZONE_UID_PLAYER; SAFEZONE_distance = vector.Distance(SAFEZONE_pos_player,SAFEZONE_LOCATION_FIXED); if (SAFEZONE_distance <= SAFEZONE_RADIUS) //Player Inside Zone { SAFEZONE_ZoneCheck = ""; GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck); if (SAFEZONE_ZoneCheck == "true") //Already in zone { return; } else { GetGame().SetProfileString(name_mesage_profile,"true"); Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Enter in safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString()); SendPersonalMessage(SAFEZONE_ENTRY_MESSAGE, player); } } else if (SAFEZONE_distance > SAFEZONE_RADIUS) //Player Outside of Zone { SAFEZONE_ZoneCheck = ""; GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck); if (SAFEZONE_ZoneCheck == "false") { return; } else { if (SAFEZONE_ZoneCheck != "") { GetGame().SetProfileString(name_mesage_profile,"false"); Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Left safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString()); SendPersonalMessage(SAFEZONE_EXIT_MESSAGE, player); } else { return; } } } } static vector CorrectToGroundPosY(vector pos) { private float pos_x = pos[0]; private float pos_z = pos[2]; private float pos_y = GetGame().SurfaceY(pos_x, pos_z); private vector tmp_pos = Vector(pos_x, pos_y, pos_z); return tmp_pos; } static void SendPersonalMessage(string message, PlayerBase casted_player) { Man player; Class.CastTo(player, casted_player); if(( player ) && (message != "")) { Param1<string> m_GlobalMessage = new Param1<string>(message); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); } } } Ну или скачиваем его отсюда в готовом виде:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Здесь:
       'SAFEZONE_LOACTION' - координаты точки центра сейвзоны.
      'SAFEZONE_RADIUS' - радиус от указанного центра севзоны, на котором действует защита
      'ENTRY_MESSAGE' - сообщение о входе в зону (не рекоммендуется указывать русский язык, может не отображаться)
      'EXIT_MESSAGE' - сообщение о выходе из зоны (не рекоммендуется указывать русский язык, может не отображаться)
      5. Распаковываем в папку с сервером в корень вот этот архив:
      6. В параметры запуска сервера добавляем:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      -mod=ModdedScripts -FilePatching 7. Запускаем сервер и проверяем.
       
      Для совсем ленивых готовая миссия сервера с настроенной сейвзоной. 
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
        Пункты 5-7 из инструкции выше после этого необходимо повторить, иначе годмод работать не будет!!!  
      P.S. Если у вас в корне сервера лежала папка scripts и она читалась сервером, после этого она может перестать считываться!
      P.P.S. Да, да, за основу взята сборка от DaOne, и по тому же принципу сделана и safe-zone с незначительными изменениями. За что ему огромное спасибо. Более корректной реализации метода God-Mode не встречал.