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

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

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

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

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

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


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

Отображаются публикации с наибольшей репутацией начиная с 26.12.2013 во всех областях

  1. 28 баллов
    И так, ребятки, вот вам небольшая 'полезняшка' от меня, и совершенно бесплатно! Описание: Скрипт, добавляющий админу сервера возможность указывать для каждого игрока индивидуальный скин спавна, его персональную точку спавна и один из имеющихся на сервере стартовых наборов с лутом, которые можно составить самим. Если указано несколько точек спавна и/или наборов лута, то будет выбран один из предложенных вариантов рандомно. Также, любой из названных параметров можно отключить в скрипте и сделать его стандартным, как он есть поумолчанию на сервере. Дополнительно - есть возможность назначить свой набор стартового лута для всех игроков на сервере не из списка скрипта! Нам понадобится: 1. Сервер DayZ 1.0, сделанный по одному из гайдов: 2. Notepad++ 3. Немножечко трезвого ума и понимания того, что мы делаем, и как прописывается лут на новом языке enfusion Установка: Перед установкой: Обратите внимание, что имя 'стандартной' миссии сервера при загрузки со Steam называется: 'dayzOffline.chernarusplus'. На хостингах имя этой папки может отличаться. Если это так, то вам в информации ниже необходимо заменить 'dayzOffline.chernarusplus' на имя вашей папки миссии сервера, иначе вы не сможете запустить сервер игры! 1. По пути: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\ создать папку 'CustomSpawnPlayerConfig' и поместить в созданную нами папку 3 файла из следующего архива CustomSpawnPlayerConfig.rar или создать их самим со следующим содержанием: Script.c /* Описание: Скрипт выдачи индивидуального стартового лута, скина игрока и точек спавна Автор: 123new Установка: 1. По пути: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\ создать папку 'CustomSpawnPlayerConfig' и поместить в нее 3 файла скрипта: Script.c Sets.c init_mod.c 2. В файле: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c в самом верху файла добавить: #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c" 3. В папке, обозначенной параметром запуска сервера '-profile=', поместить файл с именем CustomSpawnPlayerConfig.txt и заполнить его данными по следующему формату: UID|Skin_player|sets_numbers|points_spawns где UID - это steam64id от профиля игрока в steam Skin_player - точный id скина игрока (можно указать 0 для отключения опции) sets_numbers - номер сета со стартовым лутом (можно указать несколько через ';', указать один всего, либо указать 0 для отключения опции) points_spawns - координаты спавна игрока на карте в формате 'x y z' (можно указать несколько через ';', указать всего одну точку, либо указать 0 для отключения опции) Пример: 76561198141889254|SurvivorM_Oliver|1|12955.091797 16.115206 7993.588379 76561198141889256|SurvivorM_Oliver|1;2|14791.965820 76.481781 14041.661133;12029.079102 196.356125 7274.689941 76561198141889253|SurvivorM_Oliver|0|0 4. В файле Sets.c в папке: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\ настроить стартовый лут для ваших игроков и написать собственные сеты ВАЖНО: количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше) Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет! P.S. Прикрепить к соспавненному оружию магазин не получится, рабочего кода я не смог найти!! Если у вас папка активной миссии сервера отличается от dayzOffline.chernarusplus то переименуйте ее в строке, вписываемой в: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c */ class CustomSpawnPlayerConfig { private string Location_Directory_config = "$profile:"; // Расположение папки с конфигом скрипта private string Location_filename_config = "CustomSpawnPlayerConfig.txt"; // имя файла с конфигом скрипта private string default_log_block_name = "[CustomSpawnPlayerConfig] "; // Стандартный блок скрипта для идентификации с script.log private string disable_read_parameter = "0"; // Стандартное значение (без кавычек) для обозначения в файле конфига скрипта неиспользование параметра private string block_split_parameters_config = "|"; // Символ, обозначающий разделение параметров при чтении файла конфига private string block_split_multi_parameters_config = ";"; // Символ, обозначающий перечисление в одной ячейке параметра нескольких параметров при чтении файла конфига private bool enabled_loading_custom_spawnpoints = true; // Параметр, включающий и отключающий возможность использования приватной точки спавна для каждого игрока. В случае отключения кастомная точка спавна будет отключена для всех поумолчанию, вне зависимости от данных в конфиге! private bool enabled_loading_custom_sets = true; // Параметр, включающий и отключающий возможность использования приватного сета для каждого игроков. В случае отключения выдача сетов будет отключена для всех поумолчанию, вне зависимости от данных в конфиге, будет выдаваться только сет для всех игроков! private bool enabled_loading_custom_skins = true; // Параметр, включающий и отключающий возможность использования индивидуального стартового скина игрока для каждого игрока. В случае отключения эта возможность будет отключена для всех поумолчанию, вне зависимости от данных в конфиге! // ------------------------------------------------------------ // ---------------- NEXT CODE DON'T EDIT ----------------- // ------------------------------------------------------------ ref map<string, ref array<vector>> players_spawnpoints = new map<string, ref array<vector> >; ref map<string, ref array<int>> players_sets = new map<string, ref array<int> >; ref map<string, string> players_skins = new map<string, string>; private bool enabled_loaded_successfull_config = false; string Log_CustomSpawnPlayerConfig_GetDateTime() { private int year, month, day, hour, minute, second; GetYearMonthDay(year, month, day); GetHourMinuteSecond(hour, minute, second); string returned_message = "[" + day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2) + " - " + hour.ToStringLen(2) + "." + minute.ToStringLen(2) + "." + second.ToStringLen(2) + "] "; return returned_message; } bool Check_coords_disable(vector coord) { private bool ret_zn = false; private float pos_x = coord[0]; private float pos_y = coord[1]; private float pos_z = coord[2]; if ((pos_x == 0.0) & (pos_y == 0.0) & (pos_z == 0.0)) { ret_zn = true; } return ret_zn; } vector Set_Read_coords_disable() { return Vector(0.0, 0.0, 0.0); } void CustomSpawnPlayerConfig() { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + "CustomSpawnPlayerConfig initialize start!"); Read_Update_Config(); } void ~CustomSpawnPlayerConfig() { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + "CustomSpawnPlayerConfig work end, class closed!"); } void Read_Update_Config() { private string name_block_work = "[ReadAndUpdateSettings] "; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + " Started Reading config!"); private array<string> readed_lines_config = ReadFileConfig(); private bool check_normal_read = AnaliseFileConfig(readed_lines_config); if (check_normal_read) { LoadFileConfig(readed_lines_config); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "config readed successfull!"); enabled_loaded_successfull_config = true; } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "config read failed, work script disabled for players!"); enabled_loaded_successfull_config = false; } } array<string> ReadFileConfig() { private string name_block_work = "[ReadFileConfig] "; private array<string> readed_lines_config = new array<string>; readed_lines_config.Clear(); if (FileExist ( (Location_Directory_config + Location_filename_config) ) ) { private string line_content; FileHandle file = OpenFile((Location_Directory_config + Location_filename_config), FileMode.READ); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Open file config: " + (Location_Directory_config + Location_filename_config)); if (file != 0) { while ( FGets( file, line_content ) > 0 ) { readed_lines_config.Insert( line_content); } CloseFile(file); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! CAN'T OPEN FILE CONFIG : " + (Location_Directory_config + Location_filename_config)); } //readed_lines_config.Debug(); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! CAN'T FOUND FILE CONFIG OR DIRECTORY: " + (Location_Directory_config + Location_filename_config)); } return readed_lines_config; } bool AnaliseFileConfig(array<string> readed_lines_config) { private bool return_zn = true; private string name_block_work = "[AnaliseFileConfig] "; if (readed_lines_config.Count() > 0) { foreach (string line : readed_lines_config) { if (line.Contains(block_split_parameters_config)) { private array<string> splited_line = new array<string>; line.Split( block_split_parameters_config, splited_line ); if (splited_line.Count() == 4) { private string UID_player = splited_line.Get(0); private string default_skin_player = splited_line.Get(1); private string sets_numbers_player = splited_line.Get(2); private string points_spawn_player = splited_line.Get(3); if ((UID_player == "") || (default_skin_player == "") || (sets_numbers_player == "") || (points_spawn_player == "")) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Lines in Readed file is not correct, please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Readed file is have incorrect count parameters with a tag '" + block_split_parameters_config + "', please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Readed file can't have a tag '" + block_split_parameters_config + "', please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Config file is empty, fix your config script!"); return_zn = false; } return return_zn; } void LoadFileConfig(array<string> readed_lines_config) { private string name_block_work = "[LoadFileConfig] "; players_spawnpoints.Clear(); players_sets.Clear(); players_skins.Clear(); foreach (string line : readed_lines_config) { private array<string> splited_line = new array<string>; splited_line.Clear(); line.Split( block_split_parameters_config, splited_line ); private string UID_player = splited_line.Get(0); private string default_skin_player = splited_line.Get(1); private string sets_numbers_player = splited_line.Get(2); private string points_spawn_player = splited_line.Get(3); private array<vector> temp_players_spawnpoints = new array<vector>; temp_players_spawnpoints.Clear(); array<int> temp_players_sets = new array<int>; temp_players_sets.Clear(); array<string> temp_players_spawnpoints_string = new array<string>; temp_players_spawnpoints_string.Clear(); array<string> temp_players_sets_string = new array<string>; temp_players_sets_string.Clear(); if (points_spawn_player.Contains(block_split_multi_parameters_config)) { points_spawn_player.Split( block_split_multi_parameters_config, temp_players_spawnpoints_string ); } else { temp_players_spawnpoints_string.Insert(points_spawn_player); } foreach (string line_spawnpoint : temp_players_spawnpoints_string) { if (line_spawnpoint == disable_read_parameter) { temp_players_spawnpoints.Insert(Set_Read_coords_disable()); } else { temp_players_spawnpoints.Insert(line_spawnpoint.ToVector()); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Generated massive for " + UID_player + " with " + temp_players_spawnpoints.Count().ToString() + " spawnpoints."); if (sets_numbers_player.Contains(block_split_multi_parameters_config)) { sets_numbers_player.Split( block_split_multi_parameters_config, temp_players_sets_string ); } else { temp_players_sets_string.Insert(sets_numbers_player); } foreach (string line_set : temp_players_sets_string) { if (line_set == disable_read_parameter) { temp_players_sets.Insert(0); } else { temp_players_sets.Insert(line_set.ToInt()); } } if (default_skin_player == disable_read_parameter) { default_skin_player = "0"; } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Generated massive for " + UID_player + " with " + temp_players_sets.Count().ToString() + " sets."); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Detected for " + UID_player + " skin " + default_skin_player); players_spawnpoints.Insert(UID_player,temp_players_spawnpoints); players_sets.Insert(UID_player,temp_players_sets); players_skins.Insert(UID_player,default_skin_player); } } vector Load_And_Check_Spawnpoints(PlayerIdentity identity, vector pos_default) { private string name_block_work = "[Load_And_Check_Spawnpoints] "; private vector retun_pos = pos_default; if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_spawnpoints) { if ((players_spawnpoints.Count() > 0) && (enabled_loaded_successfull_config)) { if (players_spawnpoints.Contains(UID_P)) { private array<vector> readed_lines_config = new array<vector>; readed_lines_config = players_spawnpoints.Get(UID_P); private vector retun_pos_check = readed_lines_config.GetRandomElement(); if (Check_coords_disable(retun_pos_check)) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private spawn point. Will be used default spawn point!"); } else { retun_pos = retun_pos_check; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private spawn point: " + retun_pos.ToString()); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private spawnpoint for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private spawnpoints is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal spawnpoints from config file script!"); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn point: " + retun_pos.ToString()); return retun_pos; } string Load_And_Check_SpawnSkin_Player(PlayerIdentity identity, string characterName) { private string name_block_work = "[SelectStartSkinPlayer] "; private string retun_skin = characterName; if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_skins) { if (players_skins.Count() > 0) { if (players_skins.Contains(UID_P)) { private string readed_skin = players_skins.Get(UID_P); if (readed_skin == "0") { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private skin setting, will be used default setting game!"); } else { retun_skin = readed_skin; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private skin setting: " + retun_skin); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private skin setting for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private skin setting is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal skin player settings from config file script!"); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used skin: " + retun_skin); return retun_skin; } void Load_And_Check_StartLoadout(PlayerBase player) { private string name_block_work = "[SelectStartSetPlayer] "; private int use_set_id = -1; private PlayerIdentity identity = player.GetIdentity(); if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_sets) { if ((players_sets.Count() > 0) && (enabled_loaded_successfull_config)) { if (players_sets.Contains(UID_P)) { private array<int> readed_lines_config = new array<int>; readed_lines_config.Clear(); readed_lines_config = players_sets.Get(UID_P); private int chek_use_set_id = readed_lines_config.GetRandomElement(); if (chek_use_set_id == 0) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private set numbers. Will be used default set player! "); } else { use_set_id = chek_use_set_id; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private set number is: " + use_set_id.ToString()); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private sets for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private sets is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal loadout sets player settings from config file script! Will be used default loadout!"); } if (use_set_id >= 0) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn set with number is: " + use_set_id.ToString()); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn default start set without number. "); } StartSetsPlayers.StartSetsPlayer(player, use_set_id); } } private array<EntityAI> GetItemListinobject(PlayerBase player,EntityAI item, bool check_player) { array<EntityAI> EntityAI_list_items = new array<EntityAI>; EntityAI_list_items.Clear(); int attIdx = 0; int attCount = 0; EntityAI item_in_object; if ((player) && (check_player)) { attCount = player.GetInventory().AttachmentCount(); for (attIdx = 0; attIdx < attCount; attIdx++) { item_in_object = player.GetInventory().GetAttachmentFromIndex(attIdx); if ( item_in_object.IsItemBase() ) { EntityAI_list_items.Insert(item_in_object); } } } if ((item) && !check_player) { attCount = item.GetInventory().AttachmentCount(); for (attIdx = 0; attIdx < attCount; attIdx++) { item_in_object = item.GetInventory().GetAttachmentFromIndex(attIdx); if ( item_in_object.IsItemBase() ) { EntityAI_list_items.Insert(item_in_object); } } } return EntityAI_list_items; } void RemoveAllItems (PlayerBase player) { private array<EntityAI> ItemListPlayer = new array<EntityAI>; private array<EntityAI> ItemsForDelete = new array<EntityAI>; private EntityAI itemInHands_player = player.GetHumanInventory().GetEntityInHands(); if (itemInHands_player != NULL) { if (player.CanDropEntity(itemInHands_player) && player.GetHumanInventory().CanRemoveEntityInHands()) { // Print("ItemForDelete: " + itemInHands_player.ToString()); ItemsForDelete.Insert(itemInHands_player); } } ItemListPlayer = GetItemListinobject(player,NULL,true); if (ItemListPlayer.Count() > 0) { foreach(EntityAI ItemPlayer: ItemListPlayer) { private array<EntityAI> ItemInItemInInventory = GetItemListinobject(NULL,ItemPlayer,false); private CargoBase cargo = ItemPlayer.GetInventory().GetCargo(); if(cargo) { if (cargo.GetItemCount() > 0) { for (int f = 0; f < cargo.GetItemCount(); f++) { if(cargo.GetItem(f)) { ItemsForDelete.Insert(cargo.GetItem(f)); } } } } if (ItemInItemInInventory.Count() > 0) { foreach(EntityAI items_temp: ItemInItemInInventory) { if(items_temp) { ItemsForDelete.Insert(items_temp); } } } if(ItemPlayer) { ItemsForDelete.Insert(ItemPlayer); } } } if (ItemsForDelete.Count() > 0) { foreach(EntityAI item_temp: ItemsForDelete) { if(item_temp) { GetGame().ObjectDelete(item_temp); } } } } }; Sets.c class StartSetsPlayersConfig { void StartSetsPlayer(PlayerBase player,int use_set_id) { EntityAI itemCreated = NULL; EntityAI itemCreated1 = NULL; ItemBase itemCasted = NULL; switch( use_set_id ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1) { case 1: //Set with number 1 (Сет с номером 1) { My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку itemCreated = player.GetInventory().CreateInInventory("CoyoteBag_Green"); // Выдаем рюкзак и записываем в переменную itemCreated if (itemCreated) // Проверяем, создался ли рюкзак. Если он создался, переменная itemCreated будет не пуста и проверка пройдет { SetRandomHealthItem(itemCreated); // Выдаем рюкзаку рандомное качество itemCreated1 = itemCreated.GetInventory().CreateInInventory("Apple"); // Добавляем в инвентарь созданного рюкзака яблоко и записываем в переменную itemCreated1 if (itemCreated1) // Проверяем, создалось ли яблоко в рюкзаке, яблоко у нас с переменной itemCreated1 { SetRandomHealthItem(itemCreated1); // Выдаем яблоку рандомное качество } itemCreated1 = NULL; // Обнуляем значение переменной после работы с ней, чтобы следующая проверка прошла корректно itemCreated1 = itemCreated.GetInventory().CreateInInventory("Rag"); // Выдаем игроку бинты в рюкзак и записываем в переменную itemCreated1 if (itemCreated1) // Проверяем, создались ли бинты в рюкзаке, они у нас с переменной itemCreated1 { itemCasted = ItemBase.Cast(itemCreated1); // Выполняем преобразование в другой класс для работы с нужной нам функцией, поскольку в классе EntityAI нет нужной нам функции SetQuantity, а в подклассе ItemBase она есть. Предмет при этом так и остается один и тот же! itemCasted.SetQuantity(4); // Определяем количество для созданных бинтов как 4 штуки SetRandomHealthItem(itemCreated); // Выдаем бинтам рандомное качество, функция работает с классом EntityAI (см. в конфе файла) } } // переменную itemCreated не обнуляем далее, поскольку мы ее не используем в проверке ниже. itemCreated = player.GetInventory().CreateInInventory("TTSKOPants"); // Выдаем игроку штаны itemCreated = player.GetInventory().CreateInInventory("TTsKOJacket_Camo"); // Выдаем игроку куртку itemCreated = player.GetInventory().CreateInInventory("CombatBoots_Black"); // Выдаем игроку обувь //itemCasted = ItemBase.Cast(itemCreated); // Строка не нужна, закоментирована. используется для изменения класса EntityAI в ItemBase (чтобы нужные операции были доступны) itemCreated = player.GetInventory().CreateInInventory("CombatKnife"); // Выдаем игроку ножик в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("FNX45"); // Выдаем игроку FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); // Выдаем игроку магазины к FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); // Выдаем игроку магазины к FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); // Выдаем игроку магазины к AKM в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); // Выдаем игроку магазины к AKM в любой свободный слот в инвентаре itemCreated = NULL; // Обнуляем значение переменной после работы с ней, нужно если мы будем использовать ее далее itemCreated = player.GetHumanInventory().CreateInHands("akm"); // Выдаем игроку AKM в руки if (itemCreated) // Проверяем, создался ли АКМ { itemCreated.GetInventory().CreateAttachment( "PSO11Optic" ); // Выдаем игроку на AKM оптику ПСО 11 и крепим itemCreated.GetInventory().CreateAttachment( "AK_WoodBttstck" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим itemCreated.GetInventory().CreateAttachment( "AK_WoodHndgrd" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим itemCreated.GetInventory().CreateAttachment( "AK_Suppressor" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим } break; } case 2: //Set with number 2 (Сет с номером 2) { break; } case 3: //Set with number 3 (Сет с номером 3) { break; } case 4: //Set with number 4 (Сет с номером 4) { break; } case 5: //Set with number 5 (Сет с номером 5) { break; } case 6: //Set with number 6 (Сет с номером 6) { break; } default: //Default starting spawn set (Сет поумолчанию для всех игроков, если хотите назначить - добавляйте здесь!) { //My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку DefaultSets(player); // Для выдачи своих сетов по рандому всем игрокам, не прописанным в скрипте, раскомментировать эту строку break; } } } void SetRandomHealthItem(EntityAI itemCreated) // Функция генерирует и применяет для предмета рандомное значение здоровья! { if ( itemCreated ) { private int rndHlt = Math.RandomInt(55,6); itemCreated.SetHealth("","",rndHlt); } } void DefaultSets(PlayerBase player) // Функция выдает сеты игрокам, не прописанным в конфигурации скрипта!!! { EntityAI itemCreated = NULL; EntityAI itemCreated1 = NULL; ItemBase itemCasted = NULL; // ниже пример, если вам нужно задать свои точки спавна для всех игроков. Этот код можно также использовать и для каждого сета индивидуально! // Код закомментирован, если это надо - раскомментируйте! // начало кода точек спавна игрока /* private array <vector> spawnpoints = {"7500 0 7500", "7500 0 7500","7500 0 7500", "7500 0 7500"}; private vector selected_spawnpoint = spawnpoints.GetRandomElement(); player.SetPosition(selected_spawnpoint); */ // конец кода точек спавна игрока private int random_set_number = Math.RandomIntInclusive(1,6); // генерируем рандом номер сета от 1 до 6 включительно (по значениям блоков case ниже) switch( random_set_number ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1) { case 1: //Set with number 1 (Сет с номером 1) { break; } case 2: //Set with number 2 (Сет с номером 2) { break; } case 3: //Set with number 3 (Сет с номером 3) { break; } case 4: //Set with number 4 (Сет с номером 4) { break; } case 5: //Set with number 5 (Сет с номером 5) { break; } case 6: //Set with number 6 (Сет с номером 6) { break; } default: //Default starting spawn set (Сет поумолчанию для всех игроков, в случае если ни один из сетов выше не выпал. { //My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку break; } } } } init_mod.c #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\Script.c" #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\Sets.c" ref CustomSpawnPlayerConfig My_Custom_Spawn_Parameters = new CustomSpawnPlayerConfig(); ref StartSetsPlayersConfig StartSetsPlayers = new StartSetsPlayersConfig(); modded class CustomMission { override void OnInit () { super.OnInit(); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(My_Custom_Spawn_Parameters.Read_Update_Config, 120000, true); // Обновление настроек скрипта кастомных спавнов, 1 минута = 60000 } override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) { pos = My_Custom_Spawn_Parameters.Load_And_Check_Spawnpoints(identity, pos); characterName = My_Custom_Spawn_Parameters.Load_And_Check_SpawnSkin_Player(identity, characterName); super.CreateCharacter(identity, pos, ctx, characterName); return m_player; } override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { super.StartingEquipSetup(player, clothesChosen); My_Custom_Spawn_Parameters.Load_And_Check_StartLoadout(player); } } 2. В файле: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c в самом верху файла добавить: #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c" Чтобы получилось примерно так 3. В папке, обозначенной параметром запуска сервера '-profile=', поместить файл с именем CustomSpawnPlayerConfig.txt и заполнить его данными по следующему формату: UID|Skin_player|sets_numbers|points_spawns где UID - это steam64id от профиля игрока в steam Skin_player - точный id скина игрока (можно указать 0 для отключения опции) sets_numbers - номер сета со стартовым лутом (можно указать несколько через ';', указать один всего, либо указать 0 для отключения опции) points_spawns - координаты спавна игрока на карте в формате 'x y z' (можно указать несколько через ';', указать всего одну точку, либо указать 0 для отключения опции) Пример: CustomSpawnPlayerConfig.txt 76561198141889254|SurvivorM_Oliver|1|12955.091797 16.115206 7993.588379 76561198141889256|SurvivorM_Oliver|1;2|14791.965820 76.481781 14041.661133;12029.079102 196.356125 7274.689941 76561198141889253|SurvivorM_Oliver|0|0 4. В файле Sets.c в папке: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\ настроить стартовый лут для ваших игроков и написать собственные сеты ВАЖНО: количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше) Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет! Поумолчанию в функции default вызывается функция DefaultSets, позволяющая рандомно выбирать любой из сетов для игроков, которым сет не задан в конфигурации скрипта. Принцип составления сетов такой же, как и выше. Если будете пользоваться этим, обратите вниманием на строку: private int random_set_number = Math.RandomIntInclusive(1,6); Эта функция генерирует число от 1 до 6 включительно. Соответственно если сетов будет больше 6, то число надо корректировать и тут тоже! P.S. Прикрепить к соспавненному оружию магазин не получится, рабочего кода я не смог найти!! Если у вас папка активной миссии сервера отличается от dayzOffline.chernarusplus то переименуйте ее в строке, вписываемой в: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c Благодарности: Товарищу Mizev за его первоначальные гайды в группе VK при появлении в сети серверной части игры
  2. 28 баллов
    paranoyk

    Спавн лута-вынос мозга.

    ©(краткая ода как я выносил себе мозг с помощью лута) Настроить лут на сервере постарались сразу после релиза ибо многое "не там и не тут".... Первая фигура Марлезонского балета. Файлов которые отвечают за лут прямым и коственным образом,судя по всему мнго,но настройки которые нам доступны сосредоточены в папке mpmissions\dayzOffline.chernarusplus и mpmissions\dayzOffline.chernarusplus\db cfglimitsdefinition.xml -файл в котором обозначены категории лута, тэги спавна, классы объектов для спавна и зоны спавна.(если я правельно понял,в информатике это называеться "заданием классов" или как то так). Даллее с чем я экспериментировал. <category name="......."/> Спавнящийся лут имеет (а может и не иметь) определенную категорию и только одну. Сюда можно вписать свою категорию и давать её предметам.(в файле тайпс) Тэги... в ванили <tag name="floor"/> <tag name="shelves"/> <tag name="ground"/> Лут может иметь или не иметь, для более точного "определения" что и где должно спавнится. Можно вводить свои и потом в mapgroupproto.xml вставлять в нужном мест. Если нет-спавнятся везде, если для лута есть тэг, только в тех местах где тэг присутствует .("пол"," полка","земля"-всего лишь для удобства и понимания, можно назвать тэг хоть "мистер питкин", без кирилицы ебстестенно, вводится в другом файле о чём ниже) Классы объектов для спавна <usage name="......."/> Стационарные объекты имеют в своём обозначении один или несколько таких классов имён. Легко можно прописать свой и дать его категории стационарных объектов или объекту. (правда уникальных объектов на карте-раз,два и обчёлся). Опять таки используется в тайпс. Лут может иметь или нет. (насчёт нескольких-не проверял, но не советую). Прописав свой к примеру "MyBox"....и потом в mapgroupproto.xml у военных контейнеров убрав все классы и оставив только этот, в нём будут спавниться только те предметы которым вы в "тайпс" пропишите данную категорию. Так же есть на карте СЕ в виде пятен, минус в том что нанесены они небрежно, результат-спавн к примеру медпредметов в машинах и киосках больницы Черногорска. Любой объект попавший в ореол получит спавн только обозначенного ореола. (после патча 1.20 стало проблематично сразу ввести новый класс, мгновенно ломается вся экономика. Приходится несколько раз пробовать с разными именами) Зоны спавна <value name="....."/> Тиры и иже с ними. Глобальные зоны на карте для определения спавна. Лут может иметь несколько или ни одного. Будет спавнится только там, если не оговорено особые условия. см опис. тайпс) И как они нанесены на карту-опять таки СЕ редактор... (картинка устаревшая). Они могут накладыватся друг на друга. Так же их можно редактировать в редакторе СЕ. mapgrouppos.xml - Файл в котором определяться координаты точки "карты" лута для каждого обьекта.(мдя,чего я счас сморозил то) То есть указывает спавнеру "в этой точке будет спанится лут по "сетке" из файла mapgroupproto " и если там ЕСТЬ описание. Это не место спавна лута конкретно, а место спавна массива координат по которым спавнится лут. Проще всего это понять если у вас есть нормальный маппинг со спавном....и убрать маппинг-лут будет спавнится в старых местах и даже висеть в воздухе. (получить все точки для "спавна" можно с помощью команд в init ) Пример: <group name="Land_Misc_FeedShack" pos="80.255409 113.792282 4422.158691" rpy="-0.000000 0.000000 -70.013718" a="160.013718" /> Land_Misc_FeedShack - название обьекта из файла mapgroupproto ,его ID...Можно написать хоть "Мой генимальный спавн". И спавнер если найдёт в mapgroupproto объект с таким названием-заспавнит лут по сетке. (вот ещё способ как модифицировать спавн лута). pos="80.255409 113.792282 4422.158691" rpy="-0.000000 0.000000 -70.013718" - координаты центра "карты" лута для этого обьекта, совпадают с координатами обьекта формат записи X-Y-Z завал,наклон,поворот. a="........" Вектор поворота карты лута обьекта относительно самого обьекта. Как он определяется - экспериментально выяснил в принципе....(угол поворота объекта - 90)х(-1)...как то там ещё можно возиться переводить с +360, но я просто пишу полученное значение и всё работает. Да-да,именно тут прописывается что в вашей точке появляется лут и если он имеет прописанную сетку лута в mapgroupproto .(имееться ввиду в оффлайн редакторе поставив "француз"-тут вы пропишите в него лут,как прописать в он-лайн сам обьект-другая история под названием "возврат водяных колонок"). Сам объект НЕ НУЖЕН даже. Он всего лишь декорация карты и для спавна ка видите НЕ НУЖЕН. mapgroupproto.xml - Файл в котором прописана "карта" лута для объекта. Вначале идёт описание для "дефолта" ,то есть деревьев и растений,а также камней! (тут я не понял,но ...это нам и не нужно,яблоки падают и хорошо..) Пример: <group name="Land_Tisy_Barracks"> - название обьекта, ID ИЛИ придуманный вами обьект. <usage name="Military" /> - класс имени обьекта,может быть не один. (а если вы ввели свои-писать именно сюда) <container name="lootFloor" lootmax="8"> - имя "контейнера" и максимальное количество лута которое может там появиться.(количество лута может быть и не обозначено,но если есть-никогда не будет больше чем количество точек спавна что ниже. НЕ РАБОТАЕТ- можно даже не мучатся, есть подозрения что количество лута ни как не изменить именно этой переменной для обьекта. ) <category name="tools" /> - класс лута который будет спавниться в данном "контейнере" ,может быть не один. <tag name="ground" /> - тэг лута который будет спавнится.(может быть несколько). Спавн лута с этим тэгом. Если у лута нет тэга-спавн ТОЖЕ. <point pos="-2.429444 -3.799637 3.698242" range="1.199951" height="2.000000" flags="32" /> - точка спавна лута, расстояние по X-Y-Z от центральной точки "карты лута" (где она,можно выяснить только эксперементально для каждого обьекта или в редакторе или...с помощью мода). range="......." радиус спавна от заданной точки, то есть в этом "круге" будет спавниться лут.(не точно,если обьект имеет большие линейные размеры-не заспанится) height="........."-высота объекта спавна,как я понял....(не точно,если обьект имеет большие линейные размеры-не заспавнится) flags="32" - указание что спавн лута будет на уровне земли игнорируя координаты по высоте. Грубо говоря к примеру если спавн вокруг елки рождественской -весь лут будет лежать на земле. Вокруг ёлки. Или округ "воображаемой точки", если надо. ниже всё тоже самое, но для своего "контейнера" данном здании.То есть обьект может иметь несколько контейнеров. </container> <container name="lootshelves" lootmax="8"> <category name="tools" /> <category name="containers" /> <category name="clothes" /> <tag name="shelves" /> <point pos="0.968751 -3.434326 7.507324" range="0.581250" height="0.532341" /> .................................................. </container> <container name="lootweapons" lootmax="8"> <category name="weapons" /> <category name="explosives" /> <point pos="3.985354 -3.434326 6.267576" range="0.478125" height="0.533684" /> ................................................... </container> </group> cfgrandompresets.xml - Файл в котором мы найдём так называемые "грузы"-группы предметов спавнящихся в предметах,зомби и тому подобное....(судя по всему сделано для удобства) <cargo chance="0.35" name="foodVillage"> - шанс появления и его название. Тут маленькое отступление. Поначалу я тоже думал что это какие то проценты, да так легче воспринимать. Но таки и немного не так. Просто опишу как спавнер "думает". "Обьект имеет спавна внутри, получаем псевдослучайное число от 0 до 1. Сравниваем. Псевдочисло больше-нет спавна, иначе-спавн есть". Будем привычно называть его "шанс" и обозначим его как проценты, но ещё раз это НЕ ПРОЦЕНТЫ в прямом смысле. <item name="SodaCan_Cola" chance="0.11" /> - название (ID) предмета и его шанс выпадения ....................................................................... <item name="SpaghettiCan" chance="0.11" /> <item name="BakedBeansCan" chance="0.11" /> </cargo> То есть "груз" foodVillage может выпасть в 35% случаев, если условее истинно,то может выпасть предмет из списка с вероятностью которая задана для предмета или ,если ни один предмет не прошёл-то опять таки ничего не выпадет. Выпадает только один предмет из списка, так и не выяснил,влияет ли очерёдность списка предметов или нет. То есть возможностей настройки тут-море,кто хорошо разбираеться в теорией вероятности поймёт данный раздел влёгкую. Дополненно. Судя по всему спавнер не перебирает все предметы,а выбирает "случайно" какой тоодин и проверяет его. Можно создавать свои собственные "миксы"....к примеру. </cargo> <cargo chance="1.0" name="mixOptics"> <item name="PUScopeOptic" chance="0.33" /> <item name="PSO1Optic" chance="0.33" /> <item name="HuntingOptic" chance="0.3" /> </cargo> То есть "микс" появиться стопроцентно в объекте из него может выпасть....с вероятностью 33% ...перечисленные вещи. Важно помнить,что если размер "контейнера" маленький (к примеру мишка),то в нём ни как не заспавниться ПСО-1. Размер имеет значение. cfgspawnabletypes.xml - Список тех вещей, "контейнеры" в которых спавняться наборы из прошлого файла. Так же можно прописать спавн в контейнер отдельной вещи. И самое важное! Именно тут можно указать степень износа заспавненых вещей по отдельности, если степень износа не указана-вещь будет иметь износ зданный в файле globals.xml, это строчки: "LootDamageMax" и "LootDamageMin" . Но это не относится что спавнится в них, то есть наборы грузов, аттачменты и сами грузы в контейнере всегда будут "идеальны".....(но контейнером может стать и обычная вещь!) Тут же прописывается аттачменты если они есть и вы хотите заспавнитьвещь с прикреплёным аттачем. <type name="ammobox"> - название (ID) вещи-контейнера. <damage min="0.0" max="0.0" /> - этой строчки может и не быть, тогда износ будет взят из "глобалс". Означает что лут будет иметь при спавне не меньше едениц урона и не больше. То есть если выствите min=0.2 то лут всегда будет всегда иметь при спвне 20% урона. Не меньше, максимальный урон это max, поставите к примеру 0,9 то вещи даже заруиненые будут спавнится. Пороги когда вещь считается неповреждённой,а когда поношеной и тк.дл.-в другом файле и меняется уже сервер модом. <cargo preset="optics" /> -название набора который может появиться внутри с шансом( как было описано выше).... ........................................ <cargo preset="ammoArmy" /> </type> То есть можно прописать несколько наборов и если из каждого заспавниться вещь,то ограничение только "размер" контейнера и вещей. Так же тут есть наборы аттачей для зомби, о них ниже, собраны примерно также. Вторая фигура Марлезонского балета. <type name="ZmbM_PatrolNormal_Autumn"> <cargo preset="foodArmy" /> <cargo preset="ammoArmy" /> </type> Вот вам и первый "ходячий" контейнер.....Увеличив к примеру в cfgrandompresets.xml шанс выпадения данных наборов-получите "доставщиков пиццы на дом". Но не в каждом зомби такой набор и опять таки,вы можете их менять,добавлять,убирать.... А так же для зомби тут прописано что них может быть одето в виде аттачей. Не все зомби такое могут,смотреть нужно по ванильным файлам. Пример: <type name="ZmbM_HunterOld_Winter">-наш подопытный <cargo preset="foodHermit" />-набор лута в зомби <cargo preset="toolsHermit" />-набор лута в зомби <attachments preset="glassesVillage" />-какой набор может прирепится на местоаттача (очки в данном случае) <attachments preset="hatsFarm" />-какой набор может прирепится на местоаттача (кепка в данном случае) <attachments preset="bagsHunter" />-какой набор может прирепится на местоаттача (рюкзак в данном случае) <attachments preset="vestsHunter" />-какой набор может прирепится на местоаттача (разгрузка\броник в данном случае) </type> (очки ни когда не прописывайте-не работают) А дальше-оружие...(так,дышите глубже) <type name="CZ61"> - ID оружия <attachments chance="0.10"> -Шанс что на нём будет прикреплён аттачмент 10% <item name="AK_Suppressor" chance="1.00" /> - шанс появления самого аттачмента 100% (не факт что так и надо,просто так проще высчитыывать процент появления аттачементов на оружии) </attachments> <attachments chance="0.30"> -то же самое и для другого аттачмента,обратите внимание,что мы не смешиваем в одну кучу "глушители и магазины"... <item name="Mag_CZ61_20Rnd" chance="1.00" /> </attachments> </type> А если хочется "АКМ" что бы мог спавниться в полном обвесе? А легко... <type name="AKM"> <damage min="0.0" max="0.5" /> <attachments chance="1.00"> <item name="AK_WoodBttstck" chance="0.80" /> <item name="AK_PlasticBttstck" chance="0.30" /> <item name="AK_FoldingBttstck" chance="0.40" /> </attachments> <attachments chance="1.00"> <item name="AK_WoodHndgrd" chance="0.80" /> <item name="AK_PlasticHndgrd" chance="0.30" /> <item name="AK_RailHndgrd" chance="0.10" /> </attachments> <attachments chance="0.30"> <item name="Mag_AKM_30Rnd" chance="1.00" /> </attachments> <attachments chance="0.30"> <item name="AK_Suppressor" chance="0.50" /> </attachments> Видим что он может появляться с разными прикладами, цевьями, может с глушителем или без,с магазином или без....(хотите,можете и ПСО ему прописать). Как видитев в этом файле нет многих вещей, тут нет ни ИЖ18,ни МП133....и они,гады спавняться всегда как прописано в globals.....Стоит добавить <type name="Izh18"> <damage min="0.0" max="0.2" /> </type> .....и ИЖ18 будет спавниться с дамагом который вы установили! Думаете это всё?....Индейское жилище-фигвам! Машины!.... <type name="OffroadHatchback"> <attachments chance="1.00"> <item name="HatchbackWheel" chance="0.60" /> </attachments> <attachments chance="1.00"> <item name="HatchbackWheel" chance="0.60" /> </attachments> <attachments chance="1.00"> <item name="HatchbackWheel" chance="0.40" /> </attachments> <attachments chance="1.00"> <item name="HatchbackWheel" chance="0.40" /> </attachments> <attachments chance="1.00"> <item name="HatchbackWheel" chance="0.20" /> </attachments> <attachments chance="1.00"> <item name="CarRadiator" chance="0.20" /> </attachments> <attachments chance="1.00"> <item name="CarBattery" chance="0.30" /> </attachments> <attachments chance="1.00"> <item name="HeadlightH7" chance="0.40" /> </attachments> <attachments chance="1.00"> <item name="HeadlightH7" chance="0.40" /> </attachments> <attachments chance="1.00"> <item name="HatchbackDoors_Driver" chance="0.30" /> </attachments> <attachments chance="1.00"> <item name="HatchbackDoors_CoDriver" chance="0.30" /> </attachments> <attachments chance="1.00"> <item name="HatchbackHood" chance="0.20" /> </attachments> <attachments chance="1.00"> <item name="HatchbackTrunk" chance="0.20" /> </attachments> </type> Это он так выглядит сейчас вроде...раньше было всё намного хуже...Машина стандартно спавнилась с ОДНИМ колесом. Можете изменить аттачментам шансы хоть до "1.00" что бы машина спавнилась сразу собранная.(залить в неё жидкости-знает Боррзик,описывал на форуме,ищите). Правда мы подло могЁм положить в машину.....бензин,масло...можно и ремкомплект. <attachments chance="1.00"> <item name="SparkPlug" chance="0.6" /> </attachments> <attachments chance="1.00"> <item name="EngineOil" chance="0.5" /> </attachments> <attachments chance="1.00"> <item name="EngineOil" chance="0.5" /> </attachments> <attachments chance="1.00"> <item name="EngineOil" chance="0.5" /> </attachments> (в этом же файле,ПОЗЖЕ,появились и рождественские наборы...но было уже поздно-бегемоты должны быть повешаны!) Дальше мы можем мелочь привесть к предметам,обычно это батарейка Но можно и "предмет в предмете"! Поле для извращений-огромно. Как пример: <type name="PersonalRadio"> <attachments chance="0.30"> <item name="Battery9V" chance="1.00" /> </attachments> </type> <type name="GPSReceiver"> <attachments chance="0.30"> <item name="Battery9V" chance="1.00" /> </attachments> </type> Файлы с названием по типу mapgroupcluster.xml -это тот же mapgrouppos для камней, грибов,яблок и прочего. Глыбжее,ширее,нижее. Преходим в папку db events.xml - файл в котором описаны "случайные" события,такие как зомби,полицейская волга, хеликраш, адми...тоесть петух!, ну и прочие коровы и звери. Например <event name="AnimalCow"> -название ивента. Можно прописывать свои НО! Название ивента может начинатся ТОЛЬКО строго определенно. аnimal - события с животными. static - для спавна статичных ивентов типа Ми-8 или дома... item - Для различных игровых предметов,как пример в ванили - блок досток. Infected-зомби Trajectory - спавн грибов,ягод и прочих камней <nominal>10</nominal> - Колличество ивентов на карту единомоментно.То есть сразу. Именно ИВЕНТОВ. Десять машин, десять СТАЙ волков, десять ТОЧЕК спавна зомби....(может и меньше если невозможно заспавнить ивент из-за других условий, к примеру наличие игрока на спавне) <min>6</min> - минимальное количество дочерних объектов указанных в <children> в ивенте <max>15</max> - максимальноеколичество дочерних объектов указанных в <children> в ивенте (обычно для стай волков и прочих живых организмов) Причем от 6 до 15 ВСЕХ вписанных <children>. А вот сколько конкретно каждого,это уже в них настраивается <lifetime>180</lifetime> - "время жизни" события Именно СОБЫТИЯ. То есть заспавнаня ивентом машина-пока стоит на точке спавна-это СОБЫТИЕ,как только вы отехали-это уже лут и время её жизни будет считыватся с (не кночи будет помянут сей файл) тайпса. <restock>0</restock> - на сколько будет отложен спавн ивента до номинала, когда остальные условия для начала ивента выполнены. Думате если два хеликраша они исчезнут и заспавнятся одновременно? Ага,счасЗъ. Тут зависит от много,даже от взаимодействия с ними игрока. <saferadius>200</saferadius> - это расстояние от позиции игрока, на котором может возникнуть это событие.(поставте для интреса 50 для зомби:))) <distanceradius>0</distanceradius> - минимальное расстояние от другого события.(очень актульно для машин, решать вам) <cleanupradius>0</cleanupradius> - это расстояние от позиции игрока, на котором событие исчезнет после того, как время жизни закончится. (добвлено- для хеликрашей имхо лучше ставить ОЧЕНЬ большое,с хороший километр) <secondary>InfectedArmy</secondary> - это имя другого события, которое вы хотите вызвать одновременно с этим событием, например, чтобы вызвать зомби вокруг здания или предмета. Настраивается в дочернем событии.(можно создать свой, но смешать зомбей с волками-не получится, генетика не та) <flags deletable="0" init_random="0" remove_damaged="1" sec_spawner="0"/> -флаги настройки deletable 1/0 - ивент удалятеся согласно параметрам самого события или по истечению времени в тайпс (не точно)...ИМХО init_random 1/0 - ??? remove_damaged 1/0 - будет ли событие удаляться если достигла состояния "уничтожено" или останется лежать до истечения срока события.(актуально для машин...но ТОЛЬКО НА ТОЧКЕ СПАВНА!) sec_spawner="0" - сорри не знаю, а чего не знаю-не меняю. <position>fixed</position> <position>player</position> - позиция будет выбираться из зафиксированых в файле cfgeventspawns.xml или событие срабатывает "на игрока". <limit>.......</limit> - может быть следующии custom - относится к внешнему файлу, например, для территорий животных. child - событие будет обращатся к атрибутам min и max каждого дочернего элемента parent - lотносятся к минимальным и максимальным атрибутам самого события mixed - будет учитыватся и дочерние и собсвенное min-max события <active>1/0</active> - включение и выключение события.(Вот она кнопка!) <children> <child lootmax="0" lootmin="0" max="3" min="0" type="Animal_BosTaurusF_Brown"/> lootmax="0" lootmin="0" ....если предмет имеет сетку лута или контейнер -колличество лута при спавне (а теперь фокус, если в ивенте есть <secondary> с зомбями то их колличество будет равно.... мин + макс) max="3" min="0" ......минимальное и максимальное колличество дочерних обьектов. (к примеру-коров данного типа в стаде) types.xml-великий и ужасный.Содержит в себе данные о всём спавнещемся луте и контейнерах (хеликраши,машины,зомби-по сути-контейнеры). Всякий лут должен быть в этом файле иначе-нет его спавна на карте. Также и синтаксическая ошибка в этом файле приводит к исчезновению всего лута с карты. Если из него убрать что-то,(но этот предмет останеться лежать на земле до истечения срока)....и игрок его поднимет-краш.Так что файл требует трезвого ума и терпения. <type name="Canteen"> - Название ID предмета <nominal>30</nominal> -номинальное колличество спавна на карте к которому стремиться "спавнер". <lifetime>7200</lifetime> - время "лежания" предмета после спавна ( а также судя,по всему-время после падения на землю с игрока).в сек. (на параметр не влияет ускорение времени на сервере, но влияет параметр из скриптс-"колличество тактов в секунду") <restock>0</restock> - на сколько будет отложен спавн предмета до номинала, когда остальные условия для начала спавна выполнены. "задержка спавна". <min>20</min>- минимальное колличество предмета на карте после которого начинаеться работа спавнера. <quantmin>-1</quantmin> - если предмет "бутылка-магазин"-степень его наполнения минимальная - Для остальных значение -1 <quantmax>-1</quantmax> - если предмет "бутылка-магазин"-степень его наполнения минимальная - Для остальных значение -1 (теперь это значение работает и для оружия у котрого нет "сьёмного" магазина, типа СКС или 133 ружжа) <cost>100</cost> - приоритет спавна грубо говоря. чем меньше-тем ниже будет вещь в очереди. <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> -Флаги спавнера, они указывают в каких типах объектов считать nominal и min значения: count_in_cargo - считает все предметы в контейнерах, ящики, рюкзаки, включая автомобили count_in_hoarder - будет считаться в таких вещах как закопанные предметы, бочки, сундуки и всевозможные палатки count_in_map - объекты, размещенные на карте (здания) count_in_player - внутри инвентаря игроков, исключая руки (учёт для игроков онлайн, проверяется) crafted - указывает на то, что данный предмет может быть закрафчен игроками deloot - указывает что это объекты для спавна на динамических ивентах (событиях). (хеликрашыи, крушения поездов, дтп и прочее) <category name="food"/> -категория лута ,может быть ТОЛЬКО одна. <tag name="shelves"/> - тэги для настройки точек спавна <usage name="Military"/> - класс лута может быть не один. <value name="Tier2"/> - Зоны в каких будет спавниться лут <value name="Tier3"/> <value name="Tier4"/> </type> Если по простому,то "фляжка" будет спавниться в колличестве 30 штук постоянно в зонах 2-3-4 на военных обектах где возможно появление еды с использованием тэга shelves, то есть если в объекте совпадает в начале описания в mapgroupproto.xml,класс,категория,тэг -то предмет заспаниться в точке спавна,которые в этом же файле,для обьекта на карте из файла mapgrouppos.xml <type name="ACOGOptic"> <nominal>20</nominal> <lifetime>7200</lifetime> <restock>1800</restock> <min>15</min> <quantmin>-1</quantmin> <quantmax>-1</quantmax> <cost>100</cost> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> <category name="weapons"/> <usage name="Military"/> </type> <type name="AgaricusMushroom"> <lifetime>900</lifetime> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/> </type> как видите,есть даже грибы,которые спавняться динамически. И на закуску... (если вещевые или другие моды перезаписывают эти файлы,то следите за тем что бы они сливались в экстазе,а не выпихивали друг друга) По идее-ничего сложного,даже я разобрался.....почти. Третья фигура Марлезонского балета.... Пара примеров.... <type name="StartKitIV"> <nominal>50</nominal> <lifetime>7200</lifetime> <restock>0</restock> <min>40</min> <quantmin>-1</quantmin> <quantmax>-1</quantmax> <cost>100</cost> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> <category name="tools"/> <tag name="shelves"/> <value name="Tier1"/> <value name="Tier2"/> <value name="Tier3"/> <value name="Tier4"/> </type> Это "квадратик" или....гхм!. Что видим?Лут из категории "инструменты",спавниться постоянно в местах с тэгом,по всей карте....А какой он категории?А ни какой,вот и спавниться,хоть на лодках на берегу,хоть на вышке. Добавляем категорию... <type name="StartKitIV"> <nominal>50</nominal> <lifetime>7200</lifetime> <restock>0</restock> <min>20</min> <quantmin>-1</quantmin> <quantmax>-1</quantmax> <cost>100</cost> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> <category name="tools"/> <tag name="shelves"/> <usage name="Medic"/> <value name="Tier1"/> <value name="Tier2"/> <value name="Tier3"/> <value name="Tier4"/> </type> Всё,теперь только на обьектах с классом "медик"-как и положено. (бегемоты должны быть повешаны!).... Обьект радиовышка,кто лазил на неё,тот помнит что на ней спавнился полецейский лут. Почему? А смотрим mapgroupproto.xml <group name="Land_Tower_TC1"> <usage name="Village" /> <usage name="Industrial" /> <usage name="Police" /> <container name="lootFloor"> <category name="tools" /> <category name="containers" /> <category name="clothes" /> <category name="weapons" /> <category name="books" /> <category name="explosives" /> <point pos="-0.454809 14.404877 0.712779" range="0.314223" height="0.785558" /> <point pos="-0.582537 14.404785 0.034267" range="0.375000" height="0.913483" /> <point pos="0.773581 14.405716 0.067886" range="0.375000" height="0.915054" /> <point pos="-0.448550 14.404892 1.860424" range="0.432076" height="1.080190" /> <point pos="0.641068 14.405640 1.884647" range="0.512500" height="1.279480" /> <point pos="-1.132879 -1.965958 1.837671" range="0.581250" height="1.453125" /> <point pos="0.925214 -1.964554 -0.245559" range="0.821875" height="1.996796" /> <point pos="-0.880515 -1.965805 -0.105441" range="0.821875" height="2.000610" /> <point pos="0.998695 -1.964493 1.724339" range="0.890625" height="1.996490" /> </container> Лут категории "инструмент","контейнер"...."оружие" классов ...Да,"Полиция".....Удаляем нафинг полицию! <group name="Land_Tower_TC1"> <usage name="Village" /> <usage name="Industrial" /> <container name="lootFloor"> <category name="tools" /> <category name="containers" /> <category name="clothes" /> <category name="weapons" /> <category name="explosives" /> <point pos="-0.454809 14.404877 0.712779" range="0.314223" height="0.785558" /> <point pos="-0.582537 14.404785 0.034267" range="0.375000" height="0.913483" /> <point pos="0.773581 14.405716 0.067886" range="0.375000" height="0.915054" /> <point pos="-0.448550 14.404892 1.860424" range="0.432076" height="1.080190" /> <point pos="0.641068 14.405640 1.884647" range="0.512500" height="1.279480" /> <point pos="-1.132879 -1.965958 1.837671" range="0.581250" height="1.453125" /> <point pos="0.925214 -1.964554 -0.245559" range="0.821875" height="1.996796" /> <point pos="-0.880515 -1.965805 -0.105441" range="0.821875" height="2.000610" /> <point pos="0.998695 -1.964493 1.724339" range="0.890625" height="1.996490" /> </container> </group> Теперь в лучшем случае дробаш там будет. Ну,как то так.... Запрещено копирование данной статьи без соглосование с Администрацией и автором на другие ресурсы. All Rights Reserved
  3. 17 баллов
    NeonMurdered

    NM_KAMAZ

    Версия 1.1.0

    956 скачиваний

    Полностью рабочие модели КАМАЗа прямиком из Arma 2: Рабочая подвеска Рабочее освещение Дополнительные слоты под пассажирские места Дополнительные слоты под запасное колесо Разные вариации кузова со своими особенностями Разные расцветки на каждый тип кузова Соответствующие звуки двигателя и темп езды Этот аддон находится под лицензией DayZ Public License (DPL) и как таковой не должен быть распакован и распространен без соблюдения строгих руководящих принципов, изложенных в этом документе, доступном здесь: Тык Fully working KAMAZ models straight from Arma 2: Working suspension Working lighting Additional slots for passenger seats Additional slots for the spare wheel Different variations of the body with its own characteristics Different colors for each body type Appropriate engine sounds and driving pace This addon is under the DayZ Public License (DPL) and as such should not be unpacked and distributed without following the strict guidelines set out in this document, available here: Poke

    Бесплатно

  4. 17 баллов
    Yuki

    Настройка модовых types.

    И так, вышел 1.08 и я узнал одну замечательную вещь, про которую тут ещё не писали. Она поможет вам разгрузить ваш ванильный types от модовых вещей и ещё больше раскидать их по категориям. Идём в cfgeconomycore.xml, там вписываем следущее: <!-- Mod CENTRAL ECONOMY --> <ce folder="Mod_ce"> <file name="MVS_types.xml" type="types" /> </ce> Дальше мы создаём папку Mod_ce, в которой создаём ваш модовый types, в моём случае, это сделано под мод MVS, так что я назвал его MVS_types.xml. И всё, таких types может быть хоть сотни. Ваш основной файл types перестанет иметь 50к строк и не будет лагать при листании. Пример того, как оно может выглядеть в конечном счёте. Если где-то ошибся, то буду рад услышать исправление проблемы. <!-- NewDawnRangers mods types --> <ce folder="modstypes"> <file name="arma2weaponpack_types.xml" type="types" /> <file name="cannabisplus_types.xml" type="types" /> <file name="cheytac_types.xml" type="types" /> <file name="cl0udsmilitarygear_types.xml" type="types" /> <file name="codelock_types.xml" type="types" /> <file name="crsk_types.xml" type="types" /> <file name="massmanyitemoverhaul_types.xml" type="types" /> <file name="mosinscope_types.xml" type="types" /> <file name="mungharditempack_types.xml" type="types" /> <file name="opbaseitems_types.xml" type="types" /> </ce>
  5. 16 баллов
    CryRUS

    DayZ 1.05 Спавн лута в кастомных зданиях

    Здравствуйте! Этот гайд для тех кто хочет включить спавн лута в Домах, контейнерах и тд, где есть изначальная возможность спавна лута (так сказать по ванили). Также будет рассказано как "спавнить" здания и постройки которые есть в игре на данный момент. ВНИМАНИЕ Все мы должны понимать что основная масса людей этого сайта, это администраторы серверов или просто "модеры", я создал этот гайд для новичков те кто знает некую базу как ставить моды и тд. В данной теме я расскажу вам как заставить экономику сервера "видеть" новые здания и постройки в которых лут может спавнится. Пожалуйста не говорите что тема "баян" и тд, я помочь решил тем кому лень искать и тд. Начинаем! Для начала нам потребуется : 1. Чистая версия игры "DayZ" желательно лицензия (данный способ работает как на лицензии так и на нелегальной копии игры) 2. Чистый сервер игры "DayZ" тоже желательно лицензия. 3. Данная миссия "DayZCommunityOfflineMode" скачать ее можно тут источник официальный (- ТЫК -) весит 5.4 mb. 4. Программа "NotePad++" скачать ее можно на ЭТОМ сайте источник официальный. 5. Желание и настрой на чтение и тд. Часть 1 В этой части гайда мы сервер не трогаем вообще! Для начала нам надо установить модифицированную миссию игры, в ваш DayZ! 1. Скачайте архив "DayZCommunityOfflineMode", распакуйте его в удобное для вас место (будто рабочий стол или любая другая папка). 2. В распакованном архиве найдите папку "DayZCommunityOfflineMode.ChernarusPlus" и переместите в папку "Missions" в директории вашей игры. 3. Запустите батник "DayZCommunityOfflineMode.bat" модифицированной миссии, он находится в папке "DayZCommunityOfflineMode.ChernarusPlus". 4. У вас должна была запустится модовская миссия "COM" (CommunityOfflineMode) вы заспавнитесь с оружием и шмотом. Часть 2 1. Далее нам надо активировать режим полёта (кнопка Insert) что бы переместится в то место где требуется поставить новое здание. 2. Что бы все нормально прорисовалось вам надо телепортировать вашего персонажа рядом с вашей будущей постройкой для этого нажмите (End). 3. Теперь когда вы определились куда вам надо ставить постройки нажмите Y для открытия меню. 4. В меню выберите вкладку OB в ней нажмите на Buildings, и у вас появится список построек доступных на данный момент. 5. Далее выберите здание и нажмите кнопку "Cursor" в строке "Spawn Type :" . 6. Если здание надо передвинуть то не беда, нажмите на Кнопку , и перетащите постройку мышкой, также там можно изменить наклон и тд, с этим уже сами разбирайтесь я вам основы разбираю. 7. Далее вам нужно сохранить все ваши постройки в буфер обмена для этого вам надо нажать кнопку . 8. Содержимое буфера сохраните в любом текстовом файле, и главное не забудь куда ты здание впендюрил) Часть 3 1. Чтобы новые постройки появились в игре вам потребуется файл init.c он находится в паке DayZCommunityOfflineMode.ChernarusPlus. 2. В открытом init.c вставляйте данные из буфера обмена на моём примере! 3. У меня init.c с одной кастомной постройкой на берегу, у вас построек может быть больше а значит и строк SpawnObject тоже. 4. Отредактируйте init.c как в моём примере : 5. Сохраните ваш результат и снова запустите игру чер bat файл, здание должно появится на том месте где вы его ставили. Часть 4 Спавн лута в ваших зданиях Теперь когда вы научились ставить постройки или уже умели это делать вам надо будет заставить экономику "видеть" эти здания!!! 1. Для этого в init.c нам потребуется добавить строку " Hive myHive = CreateHive(); " в самое начало void main () { 2.Также потребуется добавить строку в самом конце void main " GetCEApi().ExportProxyData( "7500 0 7500" , 10000 ); " она нам нужна для того что бы у нас появился обновлённый файл экономики спавна лута в зданиях! 3. Далее сохраним наш init.c и запускаем игру. 4. После запуска в папке storage_1 которая находится в миссии DayZCommunityOfflineMode.ChernarusPlus должна появится папка export! 5. В папке export находится обновлённый с учётом новых зданий файл : mapGroupPos.xml 6. Этот файл копируем в DayZCommunityOfflineMode.ChernarusPlus ! 7. Идём в init.c и комментируем строку таким образом " //GetCEApi().ExportProxyData( "7500 0 7500" , 10000 ); " ---> // <--- это комментирует вашу строку что бы при запуске игры снова не создавался новый файл " mapGroupPos.xml "! 8. Запускаем игру, идём в наше новое здание и наблюдаем там появление нового лута! Что бы это появилось на сервер просто делаем тоже самое только при этом редактируем серверный init.c! Надеюсь я смог кому то помочь, это мой первый (в жизни) гайд, так что не кидайте палки))) Если кому то с этим нужна помощь обращайтесь!) Мой дискорд если что
  6. 14 баллов
    gruperpro93

    Discord BOT - Мониторинг онлайна сервера DayZ

    Гайд по созданию своего бота с мониторингом онлайна. Заходим на сайт https://discord.com/developers/applications (Если не авторизованы, авторизовываемся) Справа сверху жмем "New Application" Вводим имя приложению (Любое) и жмем "Create" Слева выбираем раздел "Bot" Жмем "Add Bot" в правом верхнем углу и жмем "Yes, do it!" По надобности корректируем имя бота и выбираем ему аватарку (Просто кликните на дефолтную автарку) Жмем на синюю кнопку "Copy" (под Token) Желательно записать заранее Переходим в раздел слева "oauth2" и жмем как на скрине 1, после открываем эту ссылку в новой вкладе и выбираем наш дискорд сервер, после даем ему роль что бы видели его) Скачиваем этот архив https://yadi.sk/d/I8O754PUXZDuOA Открываем файл bot.js через notepad++ или другим удобным способом Строка 12, заменяем слово token на то - что мы копировали ранее на пункте 7 На строке 5 заменяем слово тутИП на ваш IP сервера, слово тутПорт заменяем на QueryPort сервера Переходим на https://nodejs.org/en/ и качаем LTS версию. Устанавливаем по стандартному пути (Галочки не ставим) Запускаем Start.bat в папке с ботом. Хотите больше функционала? Мой товар на маркете https://s-platoon.ru/files/file/68-discord-bot-multifunkcional/ Enjoy!
  7. 11 баллов
    Warcat06

    [DayZ Modding] видеотуториалы для начинающих

    Без лишних преамбул. Видеогайды для тех, кто хочет заняться моддингом под DayZ SA. Шаг за шагом. Последовательно. Лаконично. На истину в последней инстанции не претендую, просто делюсь опытом. P.S.ссылки на основные приложения/файлы/проекты я выкладываю либо в описание под видео, либо в своем дискорде в разделе туториалов. ================================================= Почему тебе не стоит этим заниматься: Как установить рабочее пространство и потом не страдать: Коротко о DayZ Tools Object Builder и его настройка О том, что такое лоды, селекшены и неймд пропертиз Текстуры и их постфиксы, RVMAT О config.cpp. Как работает и как им пользоваться О ретекстуре вещей Required Addons Запаковка PBO и проверка в Offline Mod Делаем оружие Здания: введение Здания: мультиматериалы Буду добавлять ссылки на видео по мере их выхода в общий доступ
  8. 11 баллов
    Ivlar

    Антидюп рюкзаков от ivlar.net Обновлен 17.05.15!

    Выкладываю рабочий скрипт противодействия дюпу! Обновлен 17.05.15 Описание: Скрипт удаляет раздюпанные рюкзаки (рюкзаки с одинаковым id, можно так сказать) Особенности: Скрипт активируется при открытии инвентаря и проверяет на уникальность рюкзаки игроков в радиусе 10-ти метров. Если найден раздюпанный рюкзак, то этот рюкзак удаляется. Установка: Закинуть в ВашуМиссию.pbo скрипт InventoryOpened.sqf с содержимым: // @file Author: Ivlar.net [] spawn { while {1 == 1} do { waitUntil {!isnull (findDisplay 602)}; { if ((isPlayer _x && _x != player) && (alive _x)) then { _backpack=backpackContainer player; _backpack_x=backpackContainer _x; if(_backpack==_backpack_x)then{ hint "Не дюпайся!"; removeBackpack player; }; }; } forEach nearestObjects [player, ["Epoch_Male_F","Epoch_Female_F"], 10]; sleep 1; }; }; и добавить в init.sqf if (hasInterface) then { [] execVM "InventoryOpened.sqf"; }; Забрал скрипт? Поставь + в репутацию
  9. 10 баллов
    123new

    [Enscript] Учимся основам скриптинга

    И снова здравствуйте, товарищи и коллеги! Уже не один день наблюдаю среди многих из читающих такую проблему, как непонимание того, что написано в том или ином гайде, скрипте, теме форума по DayZ Standalone. А понимать бы это все это ой как бы не плохо было бы, да, товарищи? Ну хотя бы так, для себя, для осознания происходящего и упрощения своей жизни. Не все же за вас делать постоянно, как считаете? Что же, решил я вот для вас завести такую темку, полезную. В ней мы не будем рассматривать установку чего-либо или сборку мода. Мы попробуем разобраться в основах языка игры, а именно - написании своего кода, чтении кода игры, данного разработчиком, или чужим модом в мастерской. Разумеется, надеюсь я и на вашу бескорыстную помощь и поддержку, а также на помощь знатоков и экспертов скриптинга игры, ведь один я не справлюсь в написании этой безмерно полезной для многих и большой темы. А помощь ой как понадобится, чувствую затылком. Ну ладно, утомил я вас, начнем, пожалуй, согласны? Оговорюсь сразу, в данной теме мы затронем лишь скриптовую составляющую игры. Т.е. вопросы изменения модов, игры, создания собственных интерфейсов, игровых вещей и прочего освещаться не будут. Темы к ознакомлению, схожие с данным материалом: https://s-platoon.ru/topic/8622-enscript-delaem-skript-dlya-moda-i-osnovnye-principy-skriptinga-modov/ https://s-platoon.ru/topic/7838-sozdaem-svoy-servernyy-mod-dayz-14-to-discontined https://s-platoon.ru/topic/8859-enscript-rodnye-funkcii-v-kode-igry-opisanie-nahozhdenie/ Официальная документация, связанная с данным материалом (спасибо BorizzK😞 https://community.bistudio.com/wiki/DayZ:Enforce_Script_Syntax https://community.bistudio.com/wiki/Category:DayZ:Editing Начнем мы, пожалуй, с общего. Введение. Скрипты. Скрипты - важная часть функционирования игры, создания модов и модификации как игры, так и сервера. Они позволяют делать чудные модификации, создавать новые опции, настраивать или изменять в игре по своей задумке практически любой аспект и функционал, заданный разработчиками, дополнять его и разнообразить. Алгоритм Ваша первая задача при написании скриптов - определить, какие шаги надо предпринять, чтобы решить какую-либо проблему. Последовательность таких шагов - это и будет алгоритм. Например, намерение - передать другу ваш рюкзак. Значит необходимо выполнить следующие действия: Но тут у нас встает вопрос - игрок же вызывает какое-то меню или опцию, которая будет выполнять данные действия. Как это реализовать? Ведь игра - это лишь набор комманд, которые выполняются по одной за раз, как правильно объединить все и сделать корректно? Сделать это все можно именно посредством скриптинга в данной игре с использованием скриптов. Интерпретатор Когда вы составили алгоритм, вам нужно что-то, что может его исполнить. У нас есть компьютерная игра, которая может это сделать. В игре есть игроки, объекты которые могут выполнять те или иные действия, например, получение данных, создание объектов, открытие дверей и т.п. Все имеет свою комманду и результат выполнения. Иными словами, игра сама интерпретирует ваши скрипты и их код в рабочий вид в игре. Исходный код (Скрипт) Исходный код (скрипт) - это алгоритм, написанный на каком-либо языке программирования, который преобразуется в машинный код программы и будет выполнен в том или ином случае. В случае в нашей игрой это код, который игра преобразует в понятные для нее комманды и выполняет их. Скриптинг Скриптинг - какие-либо действия по написанию скриптов для своих работ\модов\игры. Скриптинг в DayZ в основном основывается на том, что уже имеется в игре. Т.е. на базовом функционале игры, который задан разработчиком. В DayZ вся скриптовая часть, написанная авторами игры, располагается в файлике "scripts.pbo" в папке "dta", который мы можем распаковать через "PBO Manager", например, и поглядеть. Любые скрипты могут содержать как набор из функций, так и набор из разных классов с функциями, которые могут вам понадобиться. Enforce Script Enforce Script (EnScript по простому)- это язык сценариев (интерпретации скриптинга), разработанный для движка игры DayZ "enforce Engine" компанией Bohemia Interactive Studio . Все скрипты EnScript, основные игровые логики находятся в "scripts.pbo" в папке "dta" каталога "DayZ" или "DayZ Server". Именно этот файл и будет нам полезен для выяснения того, как работают некоторые вещи (пока, наконец, не появится достойная ссылка на API от разработчиков игра, будь они прокляты). Основные принципы скриптинга на EnScript: Любая комманда, строка в функции должна завершаться на ; (точку с запятой) Тело любой функции/класса/структуры должно быть заключено в {} (фигурные скобки) Язык крайне чувствителен к регистру, т.е. MyPeremennaya и Myperemennaya будут 2 разными объектами для игры. Язык, крайне схожий с синтаксисом и коммандами C++, C# и JavaScript, для тех, кто знает эти языки хотя бы на любительском уровне, работать и писать свои скрипты будет проще в разы Структура скриптовой части игры Распаковав "scripts.pbo" (файл есть в клиенте игры и сервере, он одинаковый) мы увидим несколько папок, таких как "1_Core", "2_GameLib", "3_Game", "4_World", "5_Mission", "data", "editor" а также файлики "$PREFIX$", "$PRODUCT$","$VERSION$","config.bin","profile_fixed.cfg", "staticDefinesDoc.c". Из того, что мне известно, и что нам пригодится при написании скриптов, я отмечу лишь файлик "config.bin", который составляет основную конфигурацию pbo-файла и включенных в него файлов скриптов (по нему 'компилируются' при запуске игры в скрипты в определенные разделы кода запуска игры). А также папки "1_Core", "2_GameLib", "3_Game", "4_World", "5_Mission". Сам "config.bin" разбирать мы не будем, это сделано уже ранее в теме вот этой. Каждая из указанных ранее папок обозначает раздел инициализации кода игры. Например, в "1_Core", "2_GameLib" подгружается основной синтаксис всех функций и переменных игры (то как они будут объявляться в коде, вызываться, какие значения возвращать и принимать). В "3_Game" основной функционал самой игры, обозначающий используемые классы и базовые функции этих классов. В "4_World" все остальные классы, функции и параметры, которые будут исполняться в игре в зависимости от того, какие объекты окружения будут в ней будут и как будут функционировать. В "5_Mission" будет описываться функционал, относящийся к экранам загрузки, меню, их действиям и вызовам. На основе этих разделов и строится основной принцип скриптинга любого мода и функционирования игры в целом. Если вы откроете любой из модов, который имеет хотя бы 1 скрипт, увидите часть этой структуры. Основные разделы скриптов также взаимодействуют друг с другом, но только в порядке, в котором они выполняются и описываются. Например, из "5_Mission" вы можете вызывать классы и функции, описанные в "4_World", а из "4_World" вызвать функции в "5_Mission" не получится, поскольку игра их еще не знает на том этапе запуска и 'компиляции кода скрипта'. Функции Функции - это набор команд (действий) и параметров(переменных). Для ее вызова используется стандартный формат вида: {имя функции}({параметры функции}); Тело любой функции/класса/структуры должно быть заключено в "{}" (фигурные скобки) Функции могут быть как заданные разработчиками игры в каких-либо классах, так и написанные вами вручную собственные. Иногда для ее вызова хватает лишь одной лишь команды, например "MyFunction();". Но чаще в синтаксисе вызова функции присутствует один и более параметров, например "MyFunction("my text");" . Параметры функции могут не содержать значений, а могут иметь 1 или несколько значений, разделенных запятой, например: void MyFunction(int MyChislo, string text1, text2, bool value); У каждой команды может быть свой список данных, которые она может использовать в своем выполнении(например, как было в последнем примере), а также может быть и список данных, которые она вернет. Будут ли эти данные требоваться от функции зависит от автора, который эту функцию пишет (т.е. от разработчиков игры, если это скрипт родной игры, или от вас, если этот скрипт вы пишете сами) Функции с возвращаемыми данными (имеют тип значения, который они возвращают) могут вызываться как вот так: int chislo = MyFunction("my text"); т.е. переменная chislo пример значение, которое функция возвратила либо так: MyFunction("my text"); т.е. функция вернет значение, но оно не будет записано, и не будет использоваться далее. Функции без возврата значений (имеют тип void) могут вызываться только вот так: MyFunction("my text"); Функции могут иметь несколько типов. Например, void MyFunction() { } функция без возврата значения. А функция int MyFunction() возвратит значение типа int (число). Соответственно, функции без возврата значений будут содержать лишь код своих вычислений, а функции с возвратом обязаны иметь комменду return {значение} . Пример функции без возврата значений и принимаемых переменных: void MyFunction() { Print(" ---TEST--- "); } Функция запишет в script.log текст: " ---TEST--- " Пример вызова в коде: MyFunction(); Пример функции с возвратом значений и принимаемыми переменными: string MyFunction(string MyText) { Print(" ---TEST--- " + MyText); return "[" + MyText + "]"; } Пример вызова в коде: string MyTXT1 = MyFunction("TEXT FOR TEST"); Функция запишет в script.log текст: " ---TEST--- TEXT FOR TEST " и запишет в переменную MyTXT1 значение [MyText] Параметров, которые могут передаваться в функцию, может быть несколько, но не рекоммендую их делать более 10. Переменные и их типы Переменные - это типы данных, используемые в коде скриптов игры. Типы переменных обозначаются классами, заданными в игре. Это могут быть как заданные разработчиками поумолчанию типы данных, так и собственные классы, написанные вами. Обозначаются переменные общим видом так: {тип переменной} {название переменной} Строка с обозначением любой переменной или заданием ее значением должно быть закончено точной с запятой на конце! Например: int chislo, string text, bool value; или string text = "TEST"; Каждый тип означает, какие типы данных может принимать данная переменная, и какой объем в памяти игры она займет. Базовое количество типов схоже с c++ и c#, но есть и типы, обозначаемые заданными классами в игре. Стоит понимать, что объявленная 1 раз переменная в функции или классе не может быть объявлена в ней же еще раз, но ей может быть присвоено новое значение, например : void MyFunction() { string myperemennaya="text1"; // тут какие-то вычисления myperemennaya="text2"; } Список используемых типов переменных в игре можно прочитать тут (на немецком): https://germandayz.de/forum/thread/19551-guide-dayz-standalone-scripting-enforce-scripting/ Остальные имеют стандартный тип, используемый в том же с++ и c# Модификаторы функций и переменных. Также, переменные могут иметь модификаторы доступности данных в функциях. Например: public: делает переменную открытой к доступу в других функциях private: делает переменную закрытой к доступу в других функциях protected: ограничивает доступ к переменной только для дружественных и дочерних классов. static - переменная, которая сохраняется в памяти игры даже после удаления экземпляра функции (класса) или переменной из памяти (как в C++). native - Функция или переменная, реализованная игровым движком, не может быть перезаписана. В исходном коде движка такие функции отмечены со смещением. Невозможно изменить модами и сприптами, только использовать их сами. ref - ссылка на свой тип класса или переменной, ref - сокр. referal, т.е. ссылка в переводе Модификаторы также описаны по ссылке выше, и могут быть использованы не только в переменных, но и в функциях игры! Классы Классы - это структуры, которые могут содержать определенные функции и переменные, заданные автором скрипта. У классов может быть много функций, переменных, а каждый класс в свою очередь может быть задан и записан в отдельные переменные по нескольку раз. Т.е. это своего рода свой тип переменной, которая может содержать свои данные внутри себя. Отдельная переменная своего класса или одного из классов игры (например Playerbase) воспринимается как единичный некий экземпляр-объект данного класса, и чем больше таких переменных, тем больше экземпляров одного и того же класса существует в памяти игры. Например: PlayerBase player = NULL; Также, в классах можно обращаться к переменным и функциям, находящимся внутри классов через символ точки (это как вызов и получение результата функции или переменной). Т.е. для экземпляра класса: class MyClass { string MyText = ""; int Chislo = 0; void MyFunction() { Prnt("TEST"); } } ref MyClass Peremennaya = new ref MyClass(); создается переменная, и ее можно вызывать так: string MyResult = Peremennaya.MyText; и значение My Text будет записано в MyResult. Также можно и вызвать функцию или результат ее выполнения (если функция возвращает значение): Peremennaya.MyFunction() выполнит запись в script.log текста TEST. Переменные, объявляемые вне функций в классе одном будут доступны во всех функциях этого класса. Но переменные, заданные в классе, будут индивидуальны для каждого экземпляра этого класса. Т.е. если мы создаем свой класс, например, такого содержания: class MyClass { string MyText = ""; int Chislo = 0; } затем создаем экземпляры этого класса в памяти игры, коммандами ref MyClass Peremennaya = new ref MyClass(); ref MyClass Peremennaya2 = new ref MyClass(); то у Peremennaya и у Peremennaya2 будут свои данные в MyText и Choislo, не связанные между собой: Peremennaya.Text = "MyText1"; Peremennaya.Chislo = 2; Print("Peremennaya.Text = " + Peremennaya2.Text + " Peremennaya.Chislo = " + Peremennaya.Chislo.ToString()); Print("Peremennaya2.Text = " + Peremennaya2.Text + " Peremennaya2.Chislo = " + Peremennaya2.Chislo.ToString()); То мы получим в scriptlog: "Peremennaya.Text = Peremennaya.Text = MyText1 Peremennaya.Chislo = 2" "Peremennaya2.Text = Peremennaya2.Text = Peremennaya2.Chislo = 0" Т.е. в Peremennaya2.Text будет пусто. Обязательно для созданных собственных классов переменных указание ссылочности типов - ref (ref - сокр. referal, т.е. ссылка в переводе) - от этого зависит доступность данных в классах и функциях. Также, из классов можно вызывать и функции, и обращаться к переменным. Разумеется, если они не защищены функцией или модификатором. Например, создадим класс: Class ClassTest { string MyText1 = "123"; private string MyText2 = "456"; void MyFunction1 (string text) { string MyText3 = "789"; Print("!!!Used MyFunction:" + text); } int MyFunction2 () { return 2; } } и создадим экземпляр данного класса, и попробуем к нему обратиться: ref ClassTest Peremennaya3 = new ref ClassTest(); Print("Text1 = " + Peremennaya3.Text1); // В script.log будет Text1 = 123 Print("Text2 = " + Peremennaya3.Text2); // не запустится игра, так как модификатор private не позволит обратиться к переменной внутри класса Print("Text3 = " + Peremennaya3.MyFunction1 ("TEXT")); // В script.log будет Text3 = !!!Used MyFunction:TEXT Peremennaya3.MyFunction2(); // Выолнит функцию MyFunction2 и возвратит значение 2, но оно не будет записано А вот MyText3 из MyFunction1 не получить, так как она содержится внутри функции в классе. Моддинг Классов Классы, в свою очередь, можно менять модами, если они не являются 'нативными', либо не защищены движком игры разработчиков от изменений. Для этого применяют приписку "Modded" перед именем класса с сохранением его имени, например: Modded class PlayerBase { } Моддинг Функций в классах Функции в классах также можно перезаписывать. Для этого используется модификатор "override" перед тем, как задать эту функцию, а в теле самой этой функции можно (и крайне рекоммендуется, но не обязательно) использовать вызов "super." с дальнейшим вызовом этой функции и передачей оригинальных параметров функции. Например: Modded class PlayerBase { override void OnConnect() { Print("Test1"); // Эта строка выполнится до вызова оригинальной функции super.OnConnect(); // вызов оригинальной функции с сохранением ее параметров Print("Test2"); // Эта строка выполнится после вызова оригинальной функции } override string GetPlayerClass() { string returned_original = super.GetPlayerClass(); // вызов оригинальной функции с сохранением ее параметров и значения в переменную if(returned_original == "Bad Type") // Проверка значения { returned_original = "Good Type"; // Замена значения на нужное нам } return returned_original; // Возврат значения функцией } override void EEKilled( Object killer ) { super.EEKilled( killer ); // вызов оригинальной функции с сохранением ее параметров Print("Test3"); // Эта строка выполнится после вызова оригинальной функции } } Как видим, функции перепишутся с вызовом оригинального значения и допиской нужных или коррекцией. Можно делать и так, но крайне не рекоммендуется: Modded class PlayerBase { override void OnConnect() { Print("Test1"); // Эта строка выполнится до вызова оригинальной функции Print("Test2"); // Эта строка выполнится после вызова оригинальной функции } } Но в таком случае, если утеряно оригинальное выполнение кода игры и наследование функций, игра/сервер могут сломаться. Да и моды, которые параллельно с вашим, будут использовать эту функцию, могут перестать работать. Моддинг и скриптинг - Разница? Собственно, если вы осилили все. что описано выше, вы освоили базовую часть скриптинга в данной игре, а значит вас можно поздравить: Теперь вы готовы к написанию собственных скриптов и модов! Самой по себе разницы между скриптами и модами нету. Скрипты - это составляющая большинства современных модов в DayZ, т.е. непосредственная часть мода. Те же самые скрипты могут быть и в mpmissions и в моде, но с одной разницей - то что есть в mpmissions может быть в подключено в моде, а то что подключено в моде не всегда может быть подключено в mpmissions. А смысл как раз в том, что игра загружает скрипты последовательно, т.е. сначала оригинальный код игры с dta, потом моды, и только потом mpmission. Сама же "Mpmission" является частью, заданной в классе "5_Mission" в оригинальных скриптах игры, и делится на 2 файла в зависимости от типа запускаемой игры. Для клиента игры это "missionGameplay.c" а для сервера это "missionServer.c", откуда уже и читаем mpmission сервера. Иными словами, на момент чтения mpmission у нас по сути уже считаны и организованы все структуры разделов кода игры, и доступа к изменениям кодов и классов в "mpmissions" у нас нет. Т.е. то, что вносится в Mpmissions можно вносить в свой мод, но никак не наоборот. Сами же скрипты по своей стркутуре и особенностям такие же. Примечание: Что же касается модификаторов, типов переменных, функций, классов, используемых в игре в скриптах и модах, можно пока почитать вот тут на немецком: https://germandayz.de/forum/thread/19551-guide-dayz-standalone-scripting-enforce-scripting/ Позже будем пытаться создавать свою тему с данным описанием Что касается информации о родных функциях и классах, используемых в игре и на сервере - этой информации найти не смог. Но ее вы можете найти сами так: распаковываем весь scripts.pbo в папку, запускаем Notepad и используем поиск в папке по тексту (Ctrl+F вкладка №3), ищем по кусочкам нужных фраз на английском и смотрим как называется функция, ее расположение в классе. Также, предлагаю всем, кто заинтересован в облегчении поиска информации о таких функциях, помочь друг другу и составить этот список самим в вот этой теме на форуме: Поиск по форуму поможет остальным найти интересующую нас информацию 😉
  10. 10 баллов
    Борьба с читерством в играх, когда стандартные средства не помогают из песочницы Бывают ситуации, когда читерство в сетевых играх переходит границу стандартной защиты и становится на первый взгляд непреодолимой проблемой. Но даже в таких ситуациях можно найти выход. В этой статье пойдет речь о не очень популярной игре ARMA 2 и не совсем обычных методах борьбы с читерами. Тематика (игровое администрирование) довольно необычная для хабра, но она также имеет отношение к IT, и я считаю, вполне заслуживает внимания. Предисловие За долгое время, сколько я читаю хабр, я ни разу не встретил ни одной статьи по администрированию обычных сетевых игр, но ведь такие администраторы тоже есть. Они, как и другие администраторы собирают железо, ставят на него linux или windows, устанавливают apache, nginx, занимаются веб сервисами, читают хабр и т.д., но основная цель всего этого — поддержка игровых серверов, которые тоже имеют свои особенности в настройке. В этой статье я не буду писать про настройку игровых серверов, а как я уже написал выше, хочу лишь обратить внимание на то, как можно бороться с читерами (на примере игры ARMA 2) если стандартная защита не справляется с этой задачей. Описание и особенности игры ARMA 2 Данная игра имеет особую атмосферу, которая притягивает особенную аудиторию, любителей непростых игр. Играют в нее, по сравнению с популярными хитами, довольно мало людей. И дело тут не только в некоторых багах, которые мешают играть, но и в довольно сложном геймлее. Ведь не с проста эта игра позиционируется как военный симулятор, а не простой 3D экшен. Кроме уникального геймлея, самая большая особенность ARMA 2 в том, что она имеет очень гибкую систему скриптов, которая позволяет сделать из нее совсем не похожую на оригинал игру. Например, можно сделать сетевой режим с элементами РПГ! В основном все зависит от навыков и фантазии тех, кто делает миссии для данной игры. Так же эта игра имеет огромную базу аддонов — техника, модели солдат, оружие, звуки и т.д. Но ее самая большая особенность является и ее самой большой проблемой в плане уязвимости. Читеры в ARMA 2 могут творить все что угодно, начиная от создания любых предметов на карте, бессмертия, бесконечных патронов и заканчивая исполнением команд для управления сервером. В такой ситуации даже официальная защита начинает проигрывать эту борьбу. И кажется, что уже ничего кроме постоянного наблюдения за игрой не может помочь в поимке читеров. Но зная особенности игры все же можно предпринять некоторые меры! Борьба с нарушителями Для борьбы с читерами в ARMA 2 применяется официальный античит BattlEye. И в связи с тем, что игра имеет очень много аддонов, в том числе и тех, которые могут дать преимущество в сетевой игре, в ней реализована возможность пускать на сервер игроков только с одобренными аддонами «verifySignatures=1;» — аддоны проверяются по уникальной подписи. Но все это не помогает. Если читер захочет, он может найти средства для обхода проверки уникальных сигнатур и попасть на сервер с читерским аддоном. К счастью не все читеры достаточно умные и иногда в логах могут засветиться такие записи: 10:49:46 Player Dimt: Wrong signature for file expansion\addons\darky.pbo В таких случаях администратору самому приходиться углубляться в знания читов и тогда будет очевидно, что название аддона darky.pbo указывает на его принадлежность к читерскому. простейший скрипт: #!/bin/sh DETECTED="/usr/games/a2_bans/cheater.log" DETECTEDTK="/usr/games/a2_bans/teamkill.log" WRONGSIG="/usr/games/a2_bans/wrongsig.log" echo "Последнее обновление (каждые 30 минут): `date "+%d.%m.%Y %H:%M:%S"` \n" > $DETECTED grep GameHack /usr/games/arma2*/arma2_server_console.log >> $DETECTED echo "Последнее обновление (каждые 30 минут): `date "+%d.%m.%Y %H:%M:%S"` \n" > $WRONGSIG grep 'Wrong signature for file' /usr/games/arma2*/arma2_server_console.log >> $WRONGSIG echo "Последнее обновление (каждые 30 минут): `date "+%d.%m.%Y %H:%M:%S"` \n" > $DETECTEDTK grep teamkill /usr/games/arma2*/log.23* >> $DETECTEDTK Соответственно, прописал его в крон исполняться каждые 30 минут. Это очень помогает и мне и другим администраторам наших серверов. Но в плане эффективной борьбы с читерами это все равно практически бесполезно. И тут в дело вступает самый интересный и основной метод — анализ трафика! Wireshark в борьбе с читерами Администрирование игровых серверов это далеко не всегда простое включение определенного серверного приложения. Здесь тоже помогают знания, которые напрямую к играм не имеют никакого отношения. Так получилось и в данной ситуации. На помощь пришел анализатор трафика Wireshark. Я не буду углубляться в подробности использования этой программы — к ней прилагается хорошая документация. Сбор трафика на наших серверах ARMA 2 осуществляется очень просто: dumpcap -i 1 -f "udp port 2302 and dst x.x.x.x" -w /var/log/dumpcap/arma2co_1/a2co1.pcap -b duration:1800 filesize:200000 Собранная информация позволяет увидеть применение тех самых читерских команд, которые создают технику, убивают других игроков и т.д. Нужно лишь предположить, какой код может быть использован читерским приложением, или же самому скачать некоторые читы, чтобы проанализировать их работу. В итоге, когда уже знаешь по каким ключевым словам искать, можно обнаружить такую картину: 0040 00 00 0a 92 8f c5 00 68 45 78 65 63 43 6f 64 65 .......hExecCode 0050 00 3c 06 00 00 00 53 54 52 49 4e 47 22 4c 61 6e .<....STRING"Lan 0060 64 52 6f 76 65 72 5f 43 5a 5f 45 50 31 22 20 63 dRover_CZ_EP1" c 0070 72 65 61 74 65 56 65 68 69 63 6c 65 20 28 70 6f reateVehicle (po 0080 73 69 74 69 6f 6e 20 70 6c 61 79 65 72 29 sition player) Как видно от игрока на сервер была отправлена команда hExecCode с кодом, который создает (createVehicle) автомобиль LandRover. Разумеется, в данной ситуации без дополнительных средств (читов) такой код применить нельзя. После этого уже не составит труда вычислить все необходимые данные для блокировки нарушителя. В итоге мы имеем хоть и не автоматическую защиту моментального действия, но достаточно эффективную в плане распознавания читерского кода. Скачать - https://www.wireshark.org/#download Альтернативная ссылка - https://www.wireshark.org/#download
  11. 9 баллов
    paranoyk

    Ставим Елку с подарками на сервер

    Это очень сложно на пальцах обьяснить, тут нужен помошник-гомо цапус. Так вот, берём этхо помошника и абучаем азам компуктера. После оного действа и понятия "как остановить поезд, машину и сервер"-стреножим сервер. Можна аглоблей. По блоку. Или по камню. Радуемся сему и продолжаем медленно поварачивая отвертку м мозгу пошника направляем его цепкие грабалки в папку где лежит сокровенная девичья тайна сервера. Ломаем её...То есть открываем. (сиё есть C:\Program Files (x86)\Steam\steamapps\common\DayZServer\ для примеру....) Буркалами смотрим на благодать файлов открымшыюся и множество непонятных папок..или мамок,в зависимости от контужености. Ищем пеапку по фамилии mpmissions Открываем, а там аки иглу в жопе утки ещё одну папку dayzOffline.chernarusplus Думали кончилось жопой утки, не теперь ещё одно яйцо....папка db Итого (это не фамилия) вам нужно пройти по пути если кратнко и по ванили C:\Program Files (x86)\Steam\steamapps\common\DayZServer\mpmissions\dayzOffline.chernarusplus\db (это если вы из тех кто хранит все яйца в корзине стима) Вот тут мы видим нам нужный файлик....котрый обзывается events.xml Даёте помошнику в руки открывашку или лом...что привычней и открываете его, кстати фомка "Нотепад++" годиться. Если не знаете англицкой мовы -хана вам, там одни буржуйскиек словеса и букффы. Вам шашечки или ехать? Всмысле деревья или санки? Деревья это <event name="StaticChristmasTree"> <nominal>13</nominal> <min>0</min> <max>0</max> <lifetime>43200</lifetime> <restock>0</restock> <saferadius>1000</saferadius> <distanceradius>1000</distanceradius> <cleanupradius>1000</cleanupradius> <flags deletable="0" init_random="0" remove_damaged="1"/> <position>uniform</position> <limit>child</limit> <active>0</active> <children> <child lootmax="15" lootmin="10" max="13" min="13" type="ChristmasTree"/> </children> </event> Санки это <event name="StaticSantaCrash"> <nominal>3</nominal> <min>0</min> <max>0</max> <lifetime>2100</lifetime> <restock>0</restock> <saferadius>1000</saferadius> <distanceradius>1000</distanceradius> <cleanupradius>1000</cleanupradius> <secondary>InfectedSanta</secondary> <flags deletable="1" init_random="0" remove_damaged="0"/> <position>fixed</position> <limit>child</limit> <active>0</active> <children> <child lootmax="15" lootmin="10" max="3" min="1" type="SantasSleigh"/> </children> </event> Допустим нам нужны только деревья... Берм ручку и записываем в <nominal>13</nominal> (не меняйте на большее, нет смысла,можно урезать) <min>10</min> -минимальное колличество ёлок <max>13</max> максимальное колличество ёлок (это для примера) И строчку.... <active>0</active> на <active>1</active> Сохраняем, закрываем...можно на ключ, задвижку и кручочек. Открываем рядом файлик types.xml (внимание! прямой просмотр этого файла может нанести вред психике ваших санитаров) Ищем строчку с GiftBox_Large_1 за нумером 666(!)4 Выглядет енто так, <type name="GiftBox_Large_1"> <nominal>0</nominal> <lifetime>7200</lifetime> <restock>0</restock> <min>0</min> <quantmin>-1</quantmin> <quantmax>-1</quantmax> <cost>100</cost> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> <category name="containers"/> <tag name="floor"/> <tag name="shelves"/> <usage name="Town"/> <usage name="Village"/> <usage name="SeasonalEvent"/> </type> Отодвигаете помошника от экрана, сдаёте его в психушку ибо всего этого он уже наверное мычит аки теля..... Теперь, всё просто, задаёте себе вопрос "что делать?" Спавнить подарки ТОЛЬКО под колючим деревом или как на ванили "в домах и весях" и под деревом? ДОПУСТИМ решили "только колючее дерево достойно подарков"...Решаем сколько подарков GiftBox_Large_1 будет в спавне под ВСЕМИ деревьями по всей Черноруссии совокупно...Решили? вот и переписываем это в (для примера, идея зарегестрирована в палате мер и весов у городе парижу) <type name="GiftBox_Large_1"> <nominal>10</nominal> <lifetime>7200</lifetime> <restock>1800</restock> <min>8</min> <quantmin>-1</quantmin> <quantmax>-1</quantmax> <cost>100</cost> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> <category name="containers"/> <tag name="floor"/> <tag name="shelves"/> <usage name="SeasonalEvent"/> </type> По этому же подобию и с той же идеей меняем ВСЕ GiftBox_ Предупреждаю. МАЛЕЙШАЯ ошибка в данном файле приведёт к отсутсвию присутсвия спавна лута. Думаете всё?...ага, счазззз Переходим на уровень выше, то есть в папку dayzOffline.chernarusplus и вскрываем файл mapgroupproto.xml.(патологоанатом пользителен, бо тоже многа букафф) Ищем строчку аки иголку в стоге конопли с ChristmasTree (внезапно она имеет номер 15608) И переделываем её в его....тоесть теперь должно быть так <group name="ChristmasTree" lootmax="10"> <usage name="SeasonalEvent" /> <container name="lootFloor" lootmax="10"> <category name="containers" /> <tag name="floor" /> <tag name="shelves" /> <point pos="2.621 1 -3.694" range="0.30" height="1" /> <point pos="-2.043 1 -3.967" range="0.30" height="1" /> <point pos="-2.616 1 -3.121" range="0.30" height="1" /> <point pos="-3.926 1 -2.848" range="0.30" height="1" /> <point pos="-4.417 1 -1.566" range="0.30" height="1" /> <point pos="-1.880 1 3.781" range="0.30" height="1" /> <point pos="-0.243 1 3.917" range="0.30" height="1" /> <point pos="0.957 1 4.190" range="0.30" height="1" /> <point pos="2.621 1 3.644" range="0.30" height="1" /> <point pos="3.494 1 2.662" range="0.30" height="1" /> <point pos="4.313 1 1.817" range="0.30" height="1" /> <point pos="4.667 1 0.753" range="0.30" height="1" /> <point pos="4.777 1 -0.366" range="0.30" height="1" /> <point pos="4.449 1 -1.593" range="0.30" height="1" /> <point pos="4.013 1 -3.367" range="0.30" height="1" /> <point pos="1.066 1 -3.585" range="0.30" height="1" /> <point pos="-0.543 1 -3.912" range="0.30" height="1" /> <point pos="-4.771 1 0.725" range="0.30" height="1" /> <point pos="-4.144 1 3.808" range="0.30" height="1" /> </container> </group> Запускаем сервер.....всё. Коротенько так. (необходим вайп ивента, как сиё колдунство провести без наркоза и удара ломом по чайнику или самовару-искать на форуме)
  12. 9 баллов
    DrTauren

    Готовая сборка DayZ Standalone 0.63 от DaOne v0.2

    Ниже можно бесплатно скачать сборку сервера DayZ Standalone 0.63, о которой мечтает каждый новичок или просто ленивый админ Практически все основные функции уже есть тут и вы можете легко их изменять Особенности сборки: Включение\отключение сообщений о входе\выходе игроков на сервер (файл Settings.C) Включение\отключение кастомного стартового лута для игроков Эта функция позволяет настроить спавны с предустановленным рандомным снаряжением. Для настройки типа предметов для спавна используйте папку "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/LoadOuts". Каждая категория в отдельном .txt-файле. Если вы хотите удалить элемент или добавить, убедитесь, что вы следуете тому же макету кода, что и в файле. Скрипт будет случайным образом выбирать элемент из каждой категории. Если вы хотите удалить определенную категорию, просто оставьте файл пустым или удалите его. Вы можете изменять стартовый лут во время работы сервера! После внесения правок просто войдите в игру как администратор и используйте команду администратора /Update Loadouts Включение\отключение спавна сразу с оружием Эта функция позволяет дать оружие при появлении. Для редактирования типов оружия, зайдите в следующий файл: "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/DayZSurvival.C" (строка 352). Эта функция является рандомизатором. Это может быть полезно: SpawnGunIn( PlayerBase player, string ClassName, bool isPrimary, TstringArray Attachments, TstringArray Extras). Примечание: значение типа bool isPrimary стоит выставлять как 'true' если вы желаете сделать оружие основным Включение отключение усталости (стамины) В строку запуска добавьте -DisableStamina чтобы отключить усталость Кастомные сейфзоны с бессмертием Эта функция позволяет разместить безопасную зону в любом месте на карте с радиусом, который вы хотите. Для изменения сейфзон вам нужен этот файл: "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/SafeZoneFunctions" Возможность добавлять свои здания на карту Эта функция - простой способ разместить свой собственный код зданий в определённом месте, а не в главном блоке, дабы его не засорять. Редактировать это дело в файле: "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/BuildingSpawner.c".Не имеет значения, как вы создаете свои здания или устанавливаете их направление и т. д. Просто убедитесь, что скрипт находится внутри Void (), чтобы он выполнялся при запуске сервера. Хороший способ получить импортированные здания - использовать COM (Community Offline Mode). Вы можете размещать здания и извлекать их информацию. Админка через чат Просто добавьте свой steam64ID в файл "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/Admins.txt". Установить пароль администратора сервера в файле server.cfg, в игре войти в систему, используя пароль. #login myPassword Система отслеживания очков игроков и трекер активности убийств с временными метками Эта функция создает два файла в профиле сервера (если вы используете командную строку -instance, она будет размещена там), профиль сервера находится в папке Documents по умолчанию (там, где находятся ваши логи). Эта фича обеспечивает подробный журнал убийств и записывает статистику игроков, такую как общее количество смертей и общее количество убийств на сервере. Данная функция реализована в рамках мода. Сообщения об убийствах и смертях в чате Свои сообщения при входе Случайные предустановленные сообщения всплывающие для всех игроков. Для изменения сообщений используйте файл "mpmissions/DayZSurvival.chernarusplus/ScriptedMods/MOTDMessages.c" Установка: 1) Качаем архив: DZMods-master.zip 2) Открываем папку с сервером и создаём в ней папку с любым вашим названием 3) Открываем папку mpmissions и копируем туда файл DayZSurvival.chernarusplus из архива. Если вы изменяли xml файлы с лутом, то убедитесь что вы заменили те, что в DayZSurvival.chernarusplus на свои. Папка db не содержит модифицированных файлов 4) Конфиг сервера serverDZ.cfg находится в корневой папке, скопируйте его в папку, созданную в первом шаге установки. Открываем конфиг и в самом низу видим: dayzOffline.chernarusplus. Заменяем на DayZSurvival.chernarusplus и сохраняем файл. 5) Копируем файл ModdedScripts из архива в корневую папку сервера (где .exe файл). 6) Добавляем в командную строку сервера это: -mod=ModdedScripts -config=NameOfFolderFromStep1\serverDZ.cfg -profiles=NameOfFolderFromStep1 -name=myServerName Параметр -name меняет название сервера и выводит его в чате когда игрок умирает\заходит\выходит, а также в прочих сообщениях. Если вы хотите активировать любые другие моды, указанные в списке функций, просто добавьте командную строку к тому, что запускает ваш сервер. На этом всё Не забываем про + Таким образом бесплатно получаете сборку сервера, в то время как за практически то же самое люди требуют деньги. https://github.com/Da0ne/DZMods
  13. 8 баллов
    ZigoFrend

    ID Объектов.

    DrTauren https://docs.google.com/spreadsheets/d/1sUITFdMsriex8_urZRlIPTULGUhkYFxchBmgPdec4SY/edit?usp=sharing как и обещал
  14. 7 баллов
    Armor

    Multi quest System

    Версия 1.0.4

    183 скачивания

    Система позволяющая вводить в игру задания. На данный момент типов заданий 6, это: 1 : Убийство кого-либо - Можно установить конкретное оружие для выполнения цели. 2 : Доставка предметов (При завершении задания целевые предметы удаляются) 3 : Поиск предметов (При завершении задания целевые предметы НЕ удаляются, например - Задание: заработать 100.000 рублей) 4 : Крафт предметов 5 : Ловля на удочку чего-либо (Рыбалка) 6 : Сорвать растение (Садоводство, растение не должно быть сгнившим) 7 : Разведка 8 : Действие Система настройки заданий довольно гибкая, вы можете настроить: Цепочки заданий (нельзя взять задание, если не выполнены предыдущие) Установка лимита по времени на выполнение, либо бессрочные задания. Установка интервала повторного выполнения задания (Если интервала нет, квест можно выполнить лишь 1 раз) Установка целей Установка наград за задание Более подробное ознакомление с возможностями системы в файле с инструкцией A system that allows you to enter tasks into the game. At the moment, there are 6 types of tasks, these are: 1: Killing someone - You can set a specific weapon to complete the target. 2: Delivery of items (At the end of the task, the target items are deleted) 3 : Search for items (At the end of the task, the target items are NOT deleted, for example-Task: earn 100,000 rubles) 4 : Crafting items 5: Fishing for something (Fishing) 6 : Pluck the plant (Gardening, the plant should not be rotten) 7 : Exploration 8 : Action The task setup system is quite flexible, you can configure: Task chains (you can't take a task if the previous ones are not completed) Setting a time limit for completing or perpetual tasks. Setting the interval for repeated task completion (If there is no interval, the quest can be completed only once) Setting goals Setting task rewards For a more detailed introduction to the system's capabilities, see the instruction file

    7 000,00 ₽

  15. 7 баллов
    Skar713

    Установка мутантов FS (FIDOv STALKER) и других

    Пару раз в неделю вижу темы " FS (FIDOv STALKER) помогите поставить мутантов" И в большей части тем я помогал.. но хватит. Прочел? Помог? Поставь + И так. Обучать я буду только по одному типу тварей основанных на скелете волков. Какие файлы будем править. 1. events.xml 2. wolf_territories.xml 3. types.xml 4. cfgenvironment.xml Поехали 1 Изменяем евент волков на нужных нам тварей (пример слепыши) <event name="AnimalWolf"> <waves>0</waves> <nominal>50</nominal> <min>2</min> <max>4</max> <lifetime>180</lifetime> <restock>0</restock> <saferadius>200</saferadius> <distanceradius>0</distanceradius> <cleanupradius>0</cleanupradius> <flags deletable="0" init_random="0" remove_damaged="1"/> <position>fixed</position> <limit>child</limit> <active>1</active> <children> <child lootmax="0" lootmin="0" max="2" min="1" type="FS_SlepDog_red"/> <child lootmax="0" lootmin="0" max="2" min="1" type="FS_SlepDog_Bronza"/> <child lootmax="0" lootmin="0" max="2" min="1" type="FS_SlepDog_Zmb"/> <child lootmax="0" lootmin="0" max="2" min="1" type="FS_SlepDog_White"/> <child lootmax="0" lootmin="0" max="1" min="1" type="FS_PseDOG"/> <child lootmax="0" lootmin="0" max="1" min="1" type="FS_WolfZmb_black"/> </children> <min>2</min> - минимальное количество в стае <max>4</max> - максимальное количество в стае max="2" min="1" -количество особей в стае На этом настройка файла event.xml окончена. 2. wolf_territories.xml <territory color="4289111595"> <zone name="Rest" smin="0" smax="0" dmin="0" dmax="0" x="7642.5" z="6180" r="50"/> <zone name="Water" smin="0" smax="0" dmin="0" dmax="0" x="7712.22" z="6416.39" r="50"/> <zone name="HuntingGround" smin="0" smax="0" dmin="0" dmax="0" x="7866.11" z="6142.5" r="50"/> </territory> Просто впиши свои координаты и все. не нужно больше не чего делать, 3. Пропиши мутантов в тайпс (Тайпса под рукой нет позже скину что вставить в тайпс нужно) 4. cfgenvironment.xml <file path="env/domestic_territories.xml" /> Добавляем новый путь Вайпай карту и проверяй. Есть способ куда проще и цивильнее о нем я опишу позже.
  16. 7 баллов
    paranoyk

    Спавн лута в обломках УАЗ,V3S.

    Делается это немного нудно,но сравнительно просто (когда есть точки спавна). При спавне Land_Wreck_Uaz с помощью оффлайнера получим строку следующего вида. SpawnObject( "Land_Wreck_Uaz", "14348.268555 4.133186 13191.887695", "0.000000 0.000000 0.000000" ); Нам необходимо задать точку для спавна "сетки лута". Для этого мы в файл по mapgrouppos.xml прописываем координаты взятые из строчки для спавна объекта (выше). <group name="Land_Wreck_Uaz" pos="14348.268555 4.133186 13191.887695" rpy="0.000000 0.000000 0.000000" a="0.000000" /> group name="Land_Wreck_Uaz" pos="14348.268555 4.133186 13191.887695 - координаты запавненого УАЗика. rpy="0.000000 0.000000 0.000000" - числовые значения Yaw,Pitch,Roll соответственно. Берём их из всё той же строчки, но важно помнить что они там записаны в обратном порядке. a="0.000000"- угол порота сетки относительно угла поворота......короче! (Yaw-90) х (-1) Уже писал,что можно играться с 360 градусами,но пишу всегда полученное значение,проблем нет. И главное "сетка лута". Изначально её УАЗик не имеет, пишем её сами в файл mapGroupProto.xml . <group name="Land_Wreck_Uaz" lootmax="11"> <usage name="...класс вещей для спавна" /> <usage name="...класс вещей для спавна" /> <container name="lootfloor" lootmax="5"> -"контейнер" для описания спавна, максимальное колличество в спавне. <category name="...категория вещей для спавна" /> (возможен тэг- <tag name="floor" /> или <tag name="shelves" /> ) <point pos="0.511211 -0.372110 0.0254000" range="0.244141" height="0.513353" />-левое сиденье <point pos="-0.320921 -0.387334 -0.400000" range="0.310141" height="0.610353" />-правое переднее седение полик <point pos="-0.000921 -0.383194 0.301000" range="0.400186" height="0.590424" />-место за кпп середина <point pos="-0.211211 0.228620 -0.698000" range="0.360231" height="0.520142" />-правая часть капота возле стекла <point pos="0.681211 0.216190 -1.358000" range="0.262781" height="0.621102" />левая часть капота впереди </container> <container name="lootshelves" lootmax="3"> -"контейнер" для описания спавна, максимальное колличество в спавне. <category name="...категория вещей для спавна" /> (возможен тэг- <tag name="floor" /> или <tag name="shelves" /> ) <point pos="-0.406211 -0.098190 -1.131250" range="0.246819" height="0.620459" />-правое переднее крыло <point pos="0.306211 -0.436570 -1.651250" range="0.424141" height="0.810353" />- центр переднего бампера <point pos="0.906211 -0.359570 -1.664250" range="0.124141" height="0.100353" />-слева на бампере </container> <container name="lootweapons" lootmax="3">-"контейнер" для спавна длинногоствольного оружия, максимальное колличество в спавне, патронов и гранат. <category name="weapons" /> <category name="explosives" /> (возможен тэг- <tag name="floor" /> или <tag name="shelves" /> ) <point pos="0.256211 -0.372050 1.264250" range="0.724141" height="1.313353" /> -центр багажника <point pos="0.868211 -0.138190 1.398000" range="0.293625" height="0.605487" />-заднее левое крыло <point pos="-0.506211 -0.108190 1.431250" range="0.250879" height="0.582143" />-заднее правое крыло </container> </group> Вставляем нужные категории,классы и тэги,это практически конструктор. К примеру у меня пока выглядит так - <group name="Land_Wreck_Uaz" lootmax="11"> <usage name="Military" /> <usage name="Industrial" /> <usage name="Office" /> <container name="lootfloor" lootmax="5"> <category name="food" /> <category name="clothes" /> <point pos="0.511211 -0.372110 0.0254000" range="0.244141" height="0.513353" /> <point pos="-0.320921 -0.387334 -0.400000" range="0.310141" height="0.610353" /> <point pos="-0.000921 -0.383194 0.301000" range="0.400186" height="0.590424" /> <point pos="-0.211211 0.228620 -0.698000" range="0.360231" height="0.520142" /> <point pos="0.681211 0.216190 -1.358000" range="0.262781" height="0.621102" /> </container> <container name="lootshelves" lootmax="3"> <category name="tools" /> <category name="vehiclesparts" /> <point pos="-0.406211 -0.098190 -1.131250" range="0.246819" height="0.620459" /> <point pos="0.306211 -0.436570 -1.651250" range="0.424141" height="0.810353" /> <point pos="0.906211 -0.359570 -1.664250" range="0.124141" height="0.100353" /> </container> <container name="lootweapons" lootmax="3"> <category name="weapons" /> <category name="explosives" /> <point pos="0.256211 -0.372050 1.264250" range="0.724141" height="1.313353" /> <point pos="0.868211 -0.138190 1.398000" range="0.293625" height="0.605487" /> <point pos="-0.506211 -0.108190 1.431250" range="0.250879" height="0.582143" /> </container> </group> Также можно даже исключить полностью строчку lootmax="...". Большой разницы я не заметил. Сразу скажу,баги стандартные -длинноствол в багажнике может пробить ствол,иногда возможна "левитация" предметов. Во общем как то так. (возможно позже вылож сетку и для обломков V3S и С130. Решение для "заброшенной колонны" на севере-тоже в процессе.Кому надо-пишите)
  17. 7 баллов
    //AUTHOR: BORIZZ.K //Version 20.12.2018.0011 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 = "7500 0 7500"; int radius = 20000; 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); } } } } } Добавить код в init.c (ВНЕ КЛАССА) Вызывать в конце функции main() Просто вставив в конце PlaceAllCarsToGround(); P.S. Поправил код, + учел рекомендации Ультимы У меня на сервере с машинами все ок
  18. 7 баллов
    Экономика сервера - общая документация: Этот пакет включает в себя стандартную многопользовательскую миссию DayZ с использованием автономной базы данных. Использование этого типа миссии означает, что все персонажи сохраняются только на вашем сервере - при использовании автономной базы данных нет возможности использовать одного и того же персонажа на нескольких серверах. Информация о персонаже хранится в файле player.db, расположенном в папке dayz.chernarusplus\storage_X (удаление файла приведёт к вайпу персонажей). Эта папка также содержит папку data, которая в основном является хранилищем информации о состоянии центральной экономики и служит для сохранения различного рода объектов во время рестарта сервера (удаление этой папки приводит к сбросу состояния центральной экономики, что означает, например, удаление появившегося лута). Mpmissions - папка миссии сервера, содержащая в себе очень много интересного. Можно заметить папку db, 13 XML файлов, spawnpoints_players.bin (хранит координаты всех возможным мест спавна игрока) и файл init.c. Все xml файлы в папке миссии - конфигурационные файлы, отправляющие параметры серверу, чтобы он понимал как много лута генерировать, как много машин спавнить, а так же координаты каждого объекта на карте, плюс разные другие функции. Эти переменные можно легко изменить и настроить различные параметры сервера под себя events.xml (динамические события спавна объектов\предметов на карте) globals.xml (общие настройки центральной экономики) types.xml (спавн и сохранение лута по карте) cfgeventspawns.xml (точки спавна для динамических событий из events.xml) cfgplayersspawnpoints.xml (настройка точек спавна игроков на карте) cfgrandompresets.xml (конфигуратор прессетов для использования в других xml-конфиграциях сервера) cfgspawnabletypes.xml (конфигуратор спавна предметов в предметах\объектах) mapgroupclusterxxxxxx.xml (объекты на карте) init.c (настройка стартового лута, спавн машины для теста, прочий скриптинг)
  19. 7 баллов
    sks762

    Немножко дейз-Эротики (18+)

    Все знают, сколь губительны в Дейзе перегревы-оверхитинги. Скольких персов мы потеряли на этом!.. Для профилактики нам советуют носить на себе поменьше одежды, но это помогает не всегда - бывает, что и в трусах запреешь. А что, если вообще без трусов бегать? Так вот, в целях борьбы с перегревом, дадим персам возможность ходить голышом. Не распутства окаянного ради, а для прохлады и заради идеалов нудизма. Начнем с прекрасной половины человечества (им - все самое лучшее в жизни!). Труд будет нелегок. Да простят меня разрабы за правду, но их 3d-модели не способны показать все глубины женской красоты. Творим собственную версию женщины-мечты, которой не придется краснеть за свое раздетое тело. ЧутОк маланим - чтоб не заморачиваться с кучей мелких селекшнов, руки-ноги оставляем родные, а все силы бросаем на то, что между ними. Cутками напролет долбим мрамор заготовки зубилом редактора, а после не жалеем самых дорогостоящих красок Фотошопа при создании nude-скина. Впрочем, широкой публике не интересны технические детали... Смотрим результат. БОГИНЯ!!! Венера и Афродита в одном флаконе!! ..Вы повстречаете ее на закате дня у околицы Камышово - голодную и изнемогающую от жажды. С первого же взгляда отдадите все свои харчи и воду. Наевшись фасоли, она из благодарности уступит вашим просьбам, разденется и пять минут позволит глядеть на себя в отблесках костра. Вы заключите выживальщицкий союз, но раздеваться при дневном свете она откажется наотрез из девичьей стеснительности. И у вас созреет коварный план... Напоивши просроченным квасом и забродившей Пипсиколою, вы разденете ее, бессознательную, и до заката будете любоваться ее упоительной красотою. Придя в себя и осознав случившееся, она поймет бессмысленность дальнейшего стеснятельства и с этой поры будет изредка (за особые ваши заслуги) демонстрировать себя и под лучами солнца. А дальше появится он - здоровенный губатый негр из Арканзаса и потребует богиню себе. Право на самку будет решаться в смертельном поединке на мотыгах. Не ссать! Даешь победу! Окровавленный и рычащий, вы приблизитесь к богине и бросите к ее стопам добычу - снятый с негра рюкзак. Ахнув, она признает в вас своего Повелителя и с этого момента станет раздеваться по первому же вашему требованию. Так вы обретете свою идиллию. ..Слышу робкие просьбы дейзисток: "А нам бы мущин с пиписками..." Милые дамы, ваши желания - закон для нас. Получайте своих кавалеров! С пиписками! Ах, вам негра бы хотелось... Так что же вы так сразу не сказали?? Ладно, будет вам и негр через недельку...
  20. 7 баллов
    voralex

    Решаем вопрос с консервами

    Как известно в текущей версии сервера имеется беда. Открываешь консерву и она улетает в космос. Поэтому : 1.Берем мой файл ниже. 2.Заменяем файл Корень_севера\mpmissions\dayz_Auto.ChernarusPlus\scripts\events файл event_openCan.sqf на мой. Буду рад плюсикам,двигает на создание гайдиков :) event_openCan.sqf
  21. 6 баллов

    Версия 1.14

    375 скачиваний

    Мод добавляет дополнительные объекты для постройки (узкие двери, широкие ворота, баррикады для окон). Работает так же как и обычное строительство. Совместимо с "codelock". Киты изготавливаются из коротких палок и веревок. Файл types.xml находится в архиве с модом. Дополнительно требуется BuildAnywhere или подобный мод который позволяет строить объекты внутри зданий, и дверных проемах. The mod adds additional objects to build (narrow doors, wide gates, barricades for windows). It works the same way as normal construction. Compatible with "codelock". Whales are made of short sticks and ropes. File types.xml located in the archive with the mod. Additionally, you need BuildAnywhere or a similar mod that allows you to build objects inside buildings and doorways.

    2 450,00 ₽

  22. 6 баллов
    BorizzK

    Чат админка

    Автор я На основе наработок комьюнити, на основе идей DaOne Мучайте P.S. Так же там есть доп функционал - для вызовов из класса миссии P.S.2. Инструкция (на англ) внутрях AdminMod_Class.c
  23. 6 баллов
    vitacite

    Создаем карту для Dayz SA с нуля с помощью QGIS

    В силу наличия большого количества неадекватных пользователей. Решил, что буду помогать только адекватным. Авторский материал из открытого доступа изъят.
  24. 6 баллов
    123new

    ToxicZoneSpawner

    Просмотреть файл ToxicZoneSpawner Игра, для который подходит данный товар: DayZ Standalone Тип: мод (серверный) Авторство: я (123new) Страница работы в Мастерской Steam: https://steamcommunity.com/sharedfiles/filedetails/?id=2768754903 Товар совместим, тестировался и проверялся на чистых версиях игры: 1.11,1.12,1.13,1.14,1.15,1.16,1.17,1.18,1.19,1.20 Описание: Скрипт, добавляющий на карте токсичные и зараженные зоны, которые можно настраивать по своему разумению. Иммитаця зон заражения выполняется посредством дымовых гранат, которые переспавниваются время от времени. (да, это может нагружать сервер игры дополнительно, но не сильно(проверял заказчик)) Скрипт не требуется к наличию игрокам и является серверным. Дополнительно: Доработка под новшества токсчных зон с новых версий игры 1.14 и 1.15 не проводилась, но сам скрипт работает. Такая работа есть в планах на изучение 😉 При проблемах с доступом к файлу: Свяжитесь с Dr.Tauren в личных сообщениях. Почему работа бесплатно и больше не поддерживается: читаем тут Комплектация: Скрипт (мод) Информация по слотам, которая может пригодиться к настройке товара (для раздела настройки) Пример заполненной конфигурации товара с тестового сервера с несколькими зонами (не чистая конфигурация товара) Возможности: Указание зон на карте с чисто индивидуальными для них характеристиками Имеется возможность отправлять игроку как текстовые уведомления в чат, так и всплывающие уведомления при входе и приближении к зоне (отключаемая и настраиваемая опции) Имеется возможность задать 2 радиусе, в одном из которых будет уведомление о близости игрока к зоне, а в другом именно само воздействие зоны (отключаемая опция) Имеется возможность включить спавн дымовых гранат и указать их тип (опциональная опция)(может дополнительно нагружать сервер)(для каждой дымовой гранаты надо будет ручками указать ее точку появления) Возможность настроить нанесение урона игроку, высчитываемого в зависимости от надетых на него вещей на слотах (отключаемая и настраиваемая опция) Возможность настроить нанесение урона вещам, надетым на игрок по коэфициенту, в зависимости от надетых на него вещей на слотах (отключаемая опция) Возможность настроить какие из вещей, надетые на игрока в слоте инвентаря, с каким коэфициентом будет защищать игрока в зависимости от ее качества. Можно указать несколько вещей и коэфициентных настроек. (НЕ отключаемая опция) Возможность настроить выдачу симптомов игроку (например чихание) при входе в зону без защиты/воздействии зоны на игрока (отключаемая опция) (не все симптомы проверялись) Мод является чисто-серверным (не требуется игроку) Возможность переписать код скрипта под себя, если вам это нужно (не зашифровано) Настройки мода вынесены в json-конфиг мода, позволяющий быстро настроить нужное количество схронов, точек их спавна и лута. При ошибках в конфиге мода он будет пересоздан автоматически на стандартный, при этом ошибки будут отмечены в script-логе сервера. Рекоммендуется держать копию конфигурации и наблюдать за логами сервера после его старта! Важно: Скрипт проверен на чистой версии игр на момент публикации и является работоспособным по сей день и час. Скрипт настраивается исключительно по настройкам из JSON-файла скрипта. Если у вас нет конфигурационного файла, мод сам создат чистую конфигурацию спавна мода 'поумолчанию' Если вы укажете настройки скрипта не верно, сервер сам пересоздат чистую конфигурацию спавна мода 'поумолчанию' Причины неверной настройки ищите в script-log файлах сервера. Возможна дополнительная нагрузка и влияние на fps сервера/игры при включении скрипта, а также активации определенных опций в настройках скрипта. Основной функционал отлажен и протестирован на чистом сервере. Скрипт целиком и полностью зависит от корректности работы официальных игровых функций игры (функции, имеющиеся в игре и добавленные в нее авторами игры). Автор скрипта (т.е. я) снимает с себя ответственность за некорректность работы данных функций. Настройка: приложена внутри Чистый JSON-конфиг файл работы с настройками (для тех кто хочет посмотреть сам): Config_ToxicZoneSpawner.rar The game for which this product is suitable: DayZ Standalone Type: mod (server-side) Authorship: I am (123new) The page of work in the Steam Workshop: https://steamcommunity.com/sharedfiles/filedetails/?id=2768754903 The product is compatible, tested and tested on clean versions of the game: 1.11,1.12,1.13,1.14,1.15,1.16,1.17,1.18,1.19,1.20 Description: A script that adds toxic and infected areas to the map, which you can customize as you see fit. The infection zones are imitated by smoke grenades, which are re-spawned from time to time. (yes, this can load the game server additionally, but not much(checked by the customer)) The script is not required for the presence of players and is server-side. If there are problems accessing the file: Contact Dr.Tauren in private messages. Why is the work free and no longer supported: read this Equipment Script (mod) Information on slots that can be useful for configuring the product (for the settings section) Example of a completed product configuration from a test server with multiple zones (not a clean product configuration) More description in Russian version site or arhive file! Автор 123new Добавлен 03.06.2021 Категория Скрипты, моды, карты и т.д.  
  25. 6 баллов
    123new

    Shadow of Chernobyl

    Увы, но одно дело когда это делают по рукам и на своем сервере чисто, другое дело когда вот так. В свободное распространение попало, а значит отныне я прекращаю работу в данной игре с чем-либо. Если мой труд не уважают - мне делать здесь нечего.
  26. 6 баллов
    Yep

    Yuki борец за справедливость

    Итак, до этого момента как то не парился на счет этого персонажа, да пацан чето там за права богемии выступает, кидает страйк Фидову за то что он взял грозу или пб что то такое(якобы украл модель у богемии). Ок базару нет в какой то степени это правильно то что мол найди модель на сайте с моделями платную\бесплатную и портирую но не бери чужого и т.д. Я в то время как раз делал этот ПБ с одного из таких сайтов похожим на оригинальный дейзовский и считал что так будет правильнее. И вот решил данный молодой человек, правильный и порядочный, все таки угнать мод а почему нет, правильно? Вот немного пруфов того что мод скопирован, но я думаю никто не сомневается в том что это так. https://i.imgur.com/BDtKhJO.png Названия моделей совпало, ну бывает просто совпадение) https://i.imgur.com/nGosEAV.png Ой и название текстур совпало, ну бывает что ж теперь не криминал. https://i.imgur.com/1cd3GEP.png О как и текстура которую я сам в фотошопе правил то же совпала, да как то. Ах да исходника ж нет что б лучше сделать ну бывает ничего. Сделал полезное дело уменьшил разрешение картинки, что б нагрузки было меньше, что б качали люди меньше, ну и лоды с магазинов убрал дабы пацанам жизнь медом не казалась https://i.imgur.com/n6InyPr.png Писал мне где то в комментах что барабан на FAL не правильный и вообще он бы сделал лучше! https://i.imgur.com/1EWBKHr.png Но если украсть то вроде уже ничего. Позже заметил данного персонажа на стриме Фидова где он писал что то вроде "Уууу вор, воруешь модели из других игр". https://i.imgur.com/5XTAfer.png https://i.imgur.com/rlJTnyz.png Упс а как так получилось само видимо попало, случайно закатилось или нет? Из чего делаем вывод Yuki либо мальчик который еще не вырос и не определился с ориентацией, либо не смейтесь над человеком ну болен и что кому то везет в жизни здоровым родился кто то не очень, ну шиза или ударился в детстве. Можно же все простить человек, все ж мы люди не роботы, может с памятью у человека плохо может он забыл что вчера говорил что воровать плохо. Но страйк закинуть можно малоли бегемоты или dmca одобрят)
  27. 6 баллов
    BorizzK

    Запрет разбора строений без модов

    А зачем править сами нативные файлы Когда можно просто 1 Создать рядом скажем по примеру itembase.c - itembase_modded.c 2 Внутри класс modded class ItemBase extends InventoryItem 3 Внутри класса отоверрайдить нужные функции и если надо организовать вызов нативной через super. 4 после обновлений просто класть файлы рядом с нативными в scripts и не придется каждый раз в нативные файлы лазить вобщем сделал modded scripts в архиве просто scripts из архива поверх нативного scripts кидайте, файлы лягут рядом и при старте подхватятся сервером проверяйте DisableBaseDestructionWithoutMods_scriptsmodded_1.1.rar
  28. 5 баллов
    SharkAttack

    LoadingTeleports

    Версия 2.0.1

    289 скачиваний

    Загрузочные телепорты - объекты, эмитирующие переход в другую локацию, подземелье, лабораторию и тд Особенности: возможность в зависимости от конфигурации маппить или искать на карте заранее замаппленные объекты по координатам; возможность добавлять свои объекты для телепортации по шаблону; возможность добавлять каждому объекту несколько пунктов назначения (точек для телепортации); возможность задавать наименование и описание действия для каждого пункта назначения; возможность задавать требуемую оплату за телепотацию для каждого пункта назначения; возможность задавать публичные (точки входа и выхода) и приватные звуки с желаемой в секундах задержкой проигрываниядля каждого пункта назначения; возможность задавать "время перехода", в которое игрок не будет ничего видеть и не сможет двигаться для каждого пункта назначения. Технические особенности: мод разделен на клиент - серверную и серверную части; мод не требует доп. модов и зависимостей; объекты для телепортации добавляются вручную через модификацию основного мода. Шаблон предоставляется вместе с основным модом; мод создает папку LoadingTeleports в папке профиля сервера с шаблономи конфигурации в формате json; мод проверен и оттестирован на версии 1.23. Инструкции: Loading teleports are objects, teleporting player character to another location, e.g. dungeon, laboratory, etc. Features: the ability, depending on the configuration, to map or search on the map for pre-mapped objects by coordinates; the ability to add your own objects for teleportation according to the template; the ability to add several destinations to each object (points for teleportation); the ability to set the name and description of the action for each destination; the ability to set the required payment for teleportation for each destination; the ability to set public (entry and exit points) and private sounds with the desired playback delay in seconds for each destination; the ability to set a "transition time" in which the player will not see anything and will not be able to move for each destination. Technical features: the mod is divided into client - server and server parts; mod does not require additional mods and dependencies; objects for teleportation are added manually through the modification of the main mod. The template is provided along with the main mod; the mod creates a LoadingTeleports folder in the server profile folder with a configuration template in json format; Mod is debuged and tested on version 1.23. Instructions:

    2 500,00 ₽

  29. 5 баллов
    123new

    CacheSpawner

    Версия 1.0.4 от 30.05.2022 with fix 4

    1 097 скачиваний

    Игра, для который подходит данный товар: DayZ Standalone Тип: скрипт (серверный) Авторство: я (123new) Авторская страница модификации в мастерской Steam: https://steamcommunity.com/sharedfiles/filedetails/?id=2768705995 Товар совместим, тестировался и проверялся на чистых версиях игры: 1.07-1.24 Описание: Скрипт, добавляющий спавн схронов (любых указанных объектов с лутом) в указанных зонах на карте. В скрипте можно указывать свои объекты для схрона по их ID объекта в игре, а также задавать количество схронов на карте и их точки спавна. Скрипт не требуется к наличию игрокам и является серверным. Отличие от ObjectsSpawner: в данном скрипте можно указать лут на объекте, т.е. спавн происходит простых объектов с лутом. В ObjectsSpawner объекты спавнятся только без лута! При проблемах с доступом к файлу: Свяжитесь с Dr.Tauren в личных сообщениях. Почему работа бесплатно и больше не поддерживается: читаем тут Дата последнего обновления работы: версия 1.0.4 от 04.01.2021 with fix 3 19.04.2022 + fix от 23.02.2024 Возможности: Спавн схронов (объектов с лутом) в указанных точках на карте Можно задавать любые ID объектов схронов на карте, известные вам в игре Можно задавать основные характеристики для каждого лута, который будет появляться в схроне Можно определять состав лута для каждого схрона Можно задавать несколько разных точек на карте для спавна схрнов Автоматический переспавн уже отспавнившихся схронов на карте через указанное время с очисткой старого схрона Можно задать минимальное и максимальное количество схронов, среди которых сервер при запуске выберет сам случайным образом количество схронов из всего списка. При указании или выпадении количества схронов меньшего количества, чем количество координат суммарно в списке, будут выбраны случайным образом схроны к спавну на карте Спавнер является чисто-серверным скриптом Возможность переписать код скрипта под себя, если вам это нужно Настройки мода вынесены в json-конфиг мода, позволяющий быстро настроить нужное количество схронов, точек их спавна и лута. При ошибках в конфиге мода он будет пересоздан автоматически на стандартный, при этом ошибки будут отмечены в script-логе сервера. Рекоммендуется держать копию конфигурации и наблюдать за логами сервера после его старта! Важно: Скрипт проверен на чистой версии игр на момент публикации и является работоспособным по сей день и час. Для работы скрипта требуются любые объекты с для хранения лута, не закрытые поумолчанию для добавления лута в них игроком! Использовать для этого можно любые игровые вещи! Если лут не помещается в схрон - он не будет в нем создан! Лут добавляется в объект по списку, как он указан в JSON-файле скрипта в виде 'поумолчанию в свободную ячейку инвентаря'. Раскладывать лут по свободным ячейкам, играя в тетрис и переворачивая лут скрипт не умеет!!! Если вы укажете настройки скрипта не верно, сервер сам пересоздат конфигурацию спавна мода 'поумолчанию' Основной функционал отлажен и протестирован на чистом сервере. Скрипт расставляет объекты на карте по строго указанным координатам их размещения из конфигурации сервера. Он не проверяет эти координаты и не корректирует их Скрипт целиком и полностью зависит от корректности работы официальных игровых функций расстановки объектов и добавления вещей в объект (функции, имеющиеся в игре и добавленные в нее авторами игры). Автор скрипта (т.е. я) снимает с себя ответственность за некорректность работы данных функций (да, были прецеденты) The game for which this product is suitable:DayZ Standalone Type: script (server-side) Authorship: I am (123new) The author's modification page in the Steam workshop: https://steamcommunity.com/sharedfiles/filedetails/?id=2768705995 The product is compatible, tested and tested on clean versions of the game: 1.07, 1.08, 1.09,1.10,1.11,1.12,1.13,1.14,1.15,1.16,1.17,1.18,1.19,1.20 Description: A script that adds spawn of caches (any specified objects with loot) in the specified zones on the map. In the script, you can specify your objects for the cache by their object ID in the game, as well as set the number of caches on the map and their spawn points. The script is not required for the presence of players and is server-side. Difference from Object spawner:in this script, you can specify the loot on the object, i.e. the spawn occurs of simple objects with loot. In Object spawner, objects are spawned only without loot! If you have problems accessing the file: Contact Dr.Tauren in private messages. Why the work is free and no longer supported: read here The date of the last update of the work: version 1.0.4 from 04.01.2021 with fix 3 19.04.2022 Opportunities: Spawn of caches (objects with loot) at the specified points on the map You can set any ID of cache objects on the map that you know in the game You can set the main characteristics for each loot that will appear in the cache You can determine the composition of loot for each cache You can set several different points on the map for spawn caches Automatic re-spawn of already spawned caches on the map after a specified time with the cleaning of the old cache You can set the minimum and maximum number of caches, among which the server will randomly select the number of caches from the entire list at startup. If you specify or drop out the number of caches less than the total number of coordinates in the list, the caches to spawn on the map will be randomly selectedThe sp awner is a purely server-side script The ability to rewrite the script code for yourself, if you need it The mod settings are made in the json config of the mod, which allows you to quickly configure the desired number of caches, their spawn points and loot. If there are errors in the mod's config, it will be recreated automatically to the standard one, and the errors will be noted in the server's script log. It is recommended to keep a copy of the configuration and monitor the server logs after it starts! Important: The script was tested on a clean version of the games at the time of publication and is operational to this day and hour. For the script to work, any objects with for storing loot that are not closed by silence for adding loot to them by the player are required! You can use any game items for this! If the loot does not fit into the cache, it will not be created in it! Loot is added to the object according to the list, as it is specified in the JSON file of the script in the form of 'silence to a free inventory cell'. The script does not know how to lay out loot in free cells, playing Tetris and turning loot over!!! If you specify the script settings incorrectly, the server itself will recreate the configuration of the spawn mod 'by silence' The main functionality is debugged and tested on a clean server. The script places objects on the map according to the strictly specified coordinates of their placement from the server configuration. It does not check these coordinates and does not correct them The script depends entirely on the correctness of the official game functions of placing objects and adding things to the object (functions available in the game and added to it by the authors of the game). The author of the script (i.e., I) disclaims responsibility for the incorrect operation of these functions (yes, there were precedents) Настройка в скриншотах / Settings in screenshots: Похожие товары, которые могут вас заинтересовать / Similar products that may interest you:

    Бесплатно

  30. 5 баллов
    DrTauren

    Настройка стартового лута игроков

    В этом гайде мы разберёмся как настроить стартовый лут на сервере DayZ Standalone. Наверняка многие знают как это сделать, но, думаю, не все Инструкция: 1) Открываем файл init.c, который находится в папке mpmissions вашего сервера и ищем такие строки: EntityAI itemEnt; ItemBase itemBs; Сразу после них находится блок примерно такого вида: itemEnt = player.GetInventory().CreateInInventory("Rag"); itemBs = ItemBase.Cast(itemEnt); itemBs.SetQuantity(4); SetRandomHealth(itemEnt); itemEnt = player.GetInventory().CreateInInventory("RoadFlare"); itemBs = ItemBase.Cast(itemEnt); Именно здесь и задаётся стартовый лут персонажа. Видим что в стартовом луте прописан фаер и четыре бинта. itemEnt = player.GetInventory().CreateInInventory("Rag"); - Rag это класснейм предмета (бинта) itemBs.SetQuantity(4); - количество бинтов и т.д. в пачке, коробке и т.д. Эти два блока нам и нужно удалить и заменить на свои. 2) Открываем файл types.xml. В этом файле прописаны класснеймы предметов, имеющихся в игре. Находим нужные и оформляем файл init.c под себя. Добавим, например, рюкзак, бобы, каску, куртку, штаны и колу: // рюкзак itemEnt = player.GetInventory().CreateInInventory("AliceBag_Black"); itemBs = ItemBase.Cast(itemEnt); // бобы itemEnt = player.GetInventory().CreateInInventory("BakedBeansCan"); itemBs = ItemBase.Cast(itemEnt); // каска itemEnt = player.GetInventory().CreateInInventory("BallisticHelmet_Black"); itemBs = ItemBase.Cast(itemEnt); // куртка itemEnt = player.GetInventory().CreateInInventory("BomberJacket_Grey"); itemBs = ItemBase.Cast(itemEnt); // штаны itemEnt = player.GetInventory().CreateInInventory("CargoPants_Black"); itemBs = ItemBase.Cast(itemEnt); // кола itemEnt = player.GetInventory().CreateInInventory("SodaCan_Cola"); itemBs = ItemBase.Cast(itemEnt); Таким образом, весь файл init.c должен выглядеть примерно так: Подробности о том как заспавнить оружие с магазинами, машины, предметы и тому подобное написаны в разделе init.c тут:
  31. 5 баллов
    Yuki

    CFTools

    Описание: Представляет из себя крайне удобную RCON панель для администрирования своих серверов. Так же для владельцев DS есть OmegaManager, от этих же ребят, но уже устанавливается на ваш сервер для автообновления модов и позволяет контролировать ресурсы. Функционал: 1. Удобная система Рестартов, которая сразу выдаёт уведомления в чат об игроком рестарте. Ничего не надо прописывать в ручную, задал время и всё, у тебя в это время со всеми предупреждениями будет рестарт сервера. Ну и он кикает всех игроков за минуту до рестарта, что позволяет избавится от дюперов, которые абузят рестарт. 2. Удобная система защиты. Начиная с игроков, у которых есть VAC Ban на аккаунте и заканчивая тем, что если они вдруг используют VPN, то вы это увидите. Ну и можно блокировать по IP и вообще вплоть до целых стран. 3. Whitelist 4. Система сообщений, которая может уведомлять вообще о множестве различных вещей. Начиная от сообщения при входе игрока и заканчивая тем, что ему иногда будет писаться его пинг. 5. Система уведомлений для админов проекта. Если у вас сервер вдруг упал, то вы можете получить уведомление на почту. Так же вас может уведомлять о рестартах и всём таком. 6. Крайне удобная логистика игроков, вам видно как Steam профиль игрока, так и его возможные аккаунты. Ещё там сохраняется история ников этого игрока, с которыми он был на вашем сервере, это крайне сильно помогает. 7. Можно назначать админов/модераторов и прочее, для банов и т.д через данный софт. Стоит отметить, что все функции, что были в DaRT тут уже есть, причём все. Но это всё в вебе. Установка: Зайди на сайт https://cftools.de/ и залогинится через Steam. Там взять Omega token и проследовать инструкциям Потом просто заходим обратно на сам сайт и нажимаем на вкладку ControlPanel. Подключаем по RCON и всё, вы молодцы. Серверный мод: Далее вам необходимо скачать в Steam мод, который просто подключайте как серверный. Он уже вам даст некоторые более интересные возможности. Для подключения надо в вашем Profile создать следующий файл cftools.cfg и вставить в него: { "service_api_key": "", "service_id": "" } Это даст вам доступ к карте сервера, логам строительства, убийств и т.д. Общее: Я сам до конца ещё не разобрался с данным инструментом, но многие крупные проекты, особенно зарубежные, активно этим всем пользуются. Создавая команды для игроков через !help и т.д. Так же у этого всего есть серверные моды, которые вы можете скачать в Steam. Так что думаю, что многим данный инструмент будет очень удобен, особенно, когда надо сделать на сервере что-то с телефона и быстро. При этом как-то удобно уведомить от этом игроков.
  32. 5 баллов
    1. Устанавливаем DayZ Tools выбираем DS Utils Далее нам нужно создать privatebikey для того, чтобы подписывать свои pbo файлы. СЛЕДУЕМ ИНСТРУКЦИИ ПОСЛЕ создания ключа нам нужно выбрать папку, в которой у нас лежат pbo файлы для подготовки к подписи. см скрин ниже: Далее мы видим, что нужные нам файлы появились в списке и жмём: Process Files, Да. Проверяем, подписались-ли наши файлы: После этого возвращаемся в DayZ Tools ----> Publisher и следуем инструкции в пути выбираете только папку мода (папку Addons указывать не нужно), если всё сделали верно увидите: All Signed (пункт 5) Жмём UPDATE всё просто позже приведу в порядок, делал в быстром темпе.
  33. 5 баллов
    Просмотреть файл Disable Construction And Deconstruction / Отключение Строительства и Разборки в указанных точках карты Тип: серверный мод Игра, для который подходит данный товар: DayZ Standalone Авторство: я (123new) Товар совместим, тестировался и проверялся на чистых версиях игры: 1.10,1.11,1.12,1.13,1.14,1.15,1.16,1.17,1.18,1.19,1.20 Описание: Серверный мод, осуществляющий запрет постройки и разбора построек на сервере, а также копку грядок в указанных вами зонах на карте. Мод не требуется к наличию игрокам и является чисто серверным. При проблемах с доступом к файлу: Свяжитесь с Dr.Tauren в личных сообщениях. Почему работа бесплатно и больше не поддерживается: читаем тут Возможности: Гибкий json-конфиг мода, избавляет вас от необходимости переписывать постоянно скрипты. При ошибках в конфиге мода он будет пересоздан автоматически, при этом ошибки будут отмечены в script-логе сервера Отключение возможности постройки внутри зон защиты Отключены возможности разборки внутри зон защиты Настраиваемые уведомления в чат для оповещения пользователя о запретах в зоне Исключения для возможности стройки в зонах защиты Логирование каждого действия срабатывания защиты в script-log файл сервера Важно: Работоспособность скрипта проверена и заточена на чистую версию игры без модификаций с новыми элементами постройки. Возможно, для добавления защиты под модовые элементы построек вам прийдется дописывать часть скриптов в моде самим, будьте готовы! Разделение по типам действий и настройки для скрипта не производилось в целях экономии стоимости скрипта. Скрипт проверен на чистой версии игры версии игры 1.07.153006 на момент публикации и является работоспособным по сей день и час. Настройка: Параметр enable_auto_restart_server_timer - включает и отключает работу всего скрипта. При false будет отключен, и остальные настройки будут отключены, но они должны быть в наличии. Формат значений - true или false Параметр Activate_ChatMessage_For_Blocked_Actions - включает и отключает чат-сообщение игроку при блокировании действий постройки и разбора в защищенной зоне. При false будет отключено. Формат значений - true или false Параметр Activate_ChatMessage_For_Allowed_Actions - включает и отключает чат-сообщение игроку при разрешении действий постройки и разбора в защищенной зоне для вписанных игроков. При false будет отключено. Формат значений - true или false Параметр Chat_Message_Block_Build - Чат-сообщение, которое пишется игроку в чат при блокировании действий постройки или разбора в защищенной зоне. Работает при Activate_ChatMessage_For_Blocked_Actions = true. Формат значений - любой текст. Параметр Chat_Message_Access_Build - Чат-сообщение, которое пишется игроку в чат при разрешении действий постройки или разбора в защищенной зоне. Работает при Activate_ChatMessage_For_Allowed_Actions = true. Формат значений - любой текст. Параметр ZonesMassive - Массив с конфигурациями зон. Минимум 1 элемент обязательно должен быть. Параметр secured_point - точка на карте в формате X Y Z (Y - высота). Все 3 значения чувствительны к правильности. Будьте внимательны, если ошибетесь с высотой, дистанция будет считаться от указанной вами точки на высоте. Формат значений - числа с точкой. Параметр distance_secure - дистанция защиты по радиусу от указанной в secured_point точки на карте. Указывается число, которое больше нуля. Формат значений - числа с точкой. Параметр Steam64IDS_With_ACCESS - массив Steam64ID игроков (как получить - гугл в помощь), которые имеют доступ к строительству и разбору построек в зоне. Несколько значений указываются через запятую. Формат значений - текст. Минимум 1 элемент обязательно должен быть. Параметр Allowed_for_Building - массив ID построек, которые игроки могут построить/установить в зоне без какого-либо запрета. Проще говоря, список исключений. Несколько значений указываются через запятую. Формат значений - текст. Минимум 1 элемент обязательно должен быть. Type: Server mod The game for which this product is suitable: DayZ Standalone Authorship: I am (123new) The product is compatible, tested and tested on clean versions of the game: 1.10,1.11,1.12,1.13,1.14,1.15,1.16,1.17,1.18,1.19,1.20 Description: A server mod that prohibits the construction and disassembly of buildings on the server, as well as digging beds in the zones you specified on the map. The mod is not required for the presence of players and is purely server-side. If you have problems accessing the file: Contact Dr.Tauren in private messages. Why the work is free and no longer supported: read here Opportunities: Flexible json config of the mod, saves you from having to constantly rewrite scripts. If there are errors in the mod's config, it will be recreated automatically, and the errors will be noted in the server's script log Disabling the possibility of building inside the protection zones Disassembly capabilities inside the protection zones are disabled Customizable chat notifications to notify the user about bans in the zone Exceptions for the possibility of construction in protection zones Logging of each protection trigger action in the server script-log file Important: The functionality of the script has been tested and sharpened for a clean version of the game without modifications with new construction elements. Perhaps, to add protection for the code elements of buildings, you will have to add some of the scripts in the mod yourself, be prepared! The separation by types of actions and settings for the script was not made in order to save the cost of the script. The script was tested on a clean version of the game version of the game 1.07.153006 at the time of publication and is operational to this day and hour. Customization: Parameter enable_auto_restart_server_timer - enables and disables the entire script. If false, it will be disabled, and the rest of the settings will be disabled, but they must be available. The format of the values is true or false Parameter Activate_ChatMessage_For_Blocked_Actions - enables and disables the chat message to the player when blocking the actions of construction and parsing in the protected zone. If false, it will be disabled. The format of the values is true or false Parameter Activate_ChatMessage_For_Allowed_Actions - enables and disables the chat message to the player when allowing the actions of construction and parsing in the protected zone for the entered players. If false, it will be disabled. The format of the values is true or false Parameter Chat_Message_Block_Build - Chat-a message that is written to the player in the chat when blocking the actions of construction or parsing in the protected zone. Works when Activate_ChatMessage_For_Blocked_Actions = true. The format of the values is any text. Parameter Chat_Message_Access_Build - Chat-a message that is written to the player in the chat when allowing the actions of construction or parsing in a protected zone. Works when Activate_Chat Message_For_Allowed_Actions = true. The format of the values is any text. Parameter ZonesMassive - An array with zone configurations. There must be at least 1 element. Parameter secured_point - a point on the map in the format X Y Z (Y is the height). All 3 values are sensitive to correctness. Be careful, if you make a mistake with the height, the distance will be calculated from the point you specified at the height. The format of the values is numbers with a dot. Parameter distance_secure - the protection distance by radius from the point specified in secure_point on the map. A number that is greater than zero is specified. The format of the values is numbers with a dot. Parameter Steam64IDS_With_ACCESS - an array of Steam64ID players (how to get-Google for help) who have access to the construction and analysis of buildings in the zone. Multiple values are separated by commas. The format of the values is text. There must be at least 1 element. Parameter Allowed_for_Building - an array of building IDs that players can build/install in the zone without any prohibition. Simply put, a list of exceptions. Multiple values are separated by commas. The format of the values is text. There must be at least 1 element. Автор 123new Добавлен 13.04.2020 Категория Скрипты, моды, карты и т.д.  
  34. 5 баллов
    123new

    [Breaking Point] Установка Сервера на Arma 3

    И так, товарищи, на днях вышел этот замечательный мод с серверной частью официально. А значит, приступим к настройке первого сервера =) (Кому интересно что это за мод, вот их. оф. сайт) Приступим: Для начала скачаем все нужное: 1. Arma 3 Server, конечно же, в первую очередь. (у кого стоит - пропускаем подпункт) 2. Качаем серверную составляющую для сервера мода, а именно конфиг сервера, mysql база данных самого сервера, батнички старта. Официальная страницы на GitHub: https://github.com/deathlyrage/breakingpointmod Зеркало от меня на момент загрузки: https://yadi.sk/d/XU32efgm3NHZQx И на всякий, все необходимое для серверной составляющей мода без лишних файлов в корректном виде от меня: https://yadi.sk/d/mGVh3Li93NHZW3 3. Качаем мод Breaking Point со steam workshop (нужна установленная арма 3 на аккаунте). Варианты установки: 1) Скачать можете сами через стим, подписавшись на него на страничке мода: http://steamcommunity.com/sharedfiles/filedetails/?id=426629791 Зеркало на обменнике: https://mega.nz/#!ZCwVka7b!gAM5QWESYKpsavOGkk_vCH5TchG_redxUmS1M-agYb8 2) Положите батник "download_bp_steamcmd.bat" из "ServerConfiguration/Tools/" (см скачанное в п. 2. инструкции) в папку с вашим "steamcmd" (см п. 1.), настройте его аналогично гайду по установке арма 3 сервер с этой темы (см п. 1.), и он сам вам закачает мод, но только при наличии установленной на вашем аккаунте Армы 3. 4. Качаем серверную часть мода Breaking Point со steam workshop (нужна установленная арма 3 на аккаунте). Варианты установки: 1) Скачать можете сами через стим, подписавшись на него на страничке мода: http://steamcommunity.com/sharedfiles/filedetails/?id=1133182382 Зеркало на обменнике: https://yadi.sk/d/SLvJe7f63NHa28 2) Положите батник "download_bp_steamcmd.bat" из "ServerConfiguration/Tools/" (см скачанное в п. 2. инструкции) в папку с вашим "steamcmd" (см п. 1.), настройте его аналогично гайду по установке арма 3 сервер с этой темы (см п. 1.), и он сам вам закачает мод, но только при наличии установленной на вашем аккаунте Армы 3. 5. Качаем и ставим mysql-сервер. Если стоит, пропускаем пункт. Я ставил вот этот, если кому интересно. 6. Помещаем скачанные моды армы в п. 3 и 4 в папку с Arma 3 Server. 7. Открываем скачанное в п. 2. Если качали мое - разархивируем все в папку с Arma 3 Server. Если качали официальное с GitHub или по зеркалу с меня, то содержимое папки ServerConfiguration из архива помещаем в папку с Arma 3 Server. В конечном счете получим что-то типа такого(папок BEC, Whitelister и файла ALI213 у вас, разумеется, не будет): 8. Запускаем ваш mysql клиент (можно navicat использовать или любой другой способ), соединяемся с вашим mysql сервером, создаем новую базу данных. Имя выбирайте любое, тип utf-8 unicode. 9. В созданную базу данных импортируем из папки с Arma 3 Server из папки SQL файлик чистой базы данных. Если все нормально, база данных импортируется без ошибок. 10. Открываем папку с Arma 3 Server, папку ServerConfig и открываем блокнотом BreakingPointExt.ini Настраиваем права доступа сервер для вашей mysql базы данных в строчках: [DATABASE] ip = 127.0.0.1 port = 3306 database = breakingpointmod username = root password = И если у вас включен Battleye, то вот эти строки: [RCON] port = 2305 password = changeme whitelist = false Если стоит FireDaemoon, то еще вот эти: [FIREDAEMON] service = BPA3_1 path = C:/Program Files (x86)/FireDaemon/Firedaemon.exe 11. там же открываем блокнотом файл config.cfg и настраиваем его. Обязательно: template = "BP1_BreakingPoint.Altis"; здесь указываем миссию сервера. Выше в файле есть пояснения в комментариях среди возможных значений. class Params { instance = 1; debug = false; }; Где instance = 1 указываем id карты сервера, пояснения все там же выше в файле. 12. Копируем из папки Tools файл server_start.bat в папку Arma 3 Server. Настраиваем его, если хотим. Открывать блокнотом или Notepad++ 13. Из папки @BreakingPoint копируем debug_console_x64.dll и debug_console.dll и из папки @BreakingPointServer копируем BreakingPointExt_x64.dll в папку Arma 3 Server. 14. Запускаем server_start.bat. Сервер готов и запущен! ВАЖНО: сервер рассчитан на использование x64 версии Arma 3 server. Как зайти: 1. В папку с уже готовой Arma 3 помещаем мод Breaking Point со steam workshop, скачанный в п. 3 инструкции выше. 2. В папку с уже готовой Arma 3 помещаем папку keys из папки с сервером вашим 3. Запускаем игру с параметром запуска -mod="@BreakingPoint" и находим свой сервер в игре. Надеюсь, не сильно сложно описал. Дерзаем, товарищи. Сразу говорю, об особенностях настройки сервера не знаю ничего!
  35. 5 баллов
    vitacite

    Ретекстур чего угодно. (camoSelections)

    закрыто.
  36. 5 баллов
    NightWolf

    Боты: управление вертолетом

    Тестирование управления вертолетом через скрипты ну то есть ботами.
  37. 5 баллов
    AKuznecov

    Как прописать звуки оружию

    Звуки для оружия прописываются следующим образом и имеют следующий конфиг: class CfgPatches { class WeaponPack_R700_Sound { units[] = {}; weapons[] = {}; requiredVersion = 0.1; requiredAddons[] = {"DZ_Data", "DZ_Sounds_Effects"}; }; }; class CfgSoundShaders { class base_closeShot_SoundShader; // External class reference class base_distShot_SoundShader; // External class reference class base_midShot_SoundShader; // External class reference class Rem700_closeShot_Soundshader : base_closeShot_SoundShader { samples[] = {{"WeaponPack\R700\sound\r700_close_shoot", 1}};// Для близкой дистанции range = 5; // Расстояние с которого будет слышно выстрел ближайшему игроку }; class Rem700_midShot_Soundshader : base_midShot_SoundShader{ samples[] = {{"WeaponPack\R700\sound\r700_close_shoot", 1}}; // Для средней дистанции volume = 0.562341; // Громкость семпла }; class Rem700_distShot_Soundshader : base_distShot_SoundShader { samples[] = {{"WeaponPack\R700\sound\r700_dist_shoot", 1}}; // Для дальней дистанции volume = 0.56; // Громкость семпла }; }; class CfgSoundSets { class Rifle_Shot_Base_SoundSet; // External class reference class Rem700_Shot_SoundSet : Rifle_Shot_Base_SoundSet { soundShaders[] = {"Rem700_closeShot_Soundshader", "Rem700_midShot_Soundshader", "Rem700_distShot_Soundshader"}; }; // Здесь надо перечислять саундшйдеры оружия }; В самом конфиге оружия где прописан класс режимов стрельбы в строчке soundSetShot[] = надо добавить наш саудсет soundSetShot[] = {"Rem700_Shot_SoundSet", "Win_Tail_SoundSet", "Win_InteriorTail_SoundSet"}; // Первый саунд будет от звуков нашего оружия, следующие саунды будут от оригинального винчестера модели 70. Tail - это различные области(Поля, в лесу и тд. InteriorTail - в интерьерах, то есть в помещении). Их можно также поменять если есть соответствующий подходящий сэмпл
  38. 5 баллов
    Накатал по быстрому для себя и своих ребят от нефиг делать, тк в командировке и дейзить возможности нет, только удаленно ковырять сервер Внутри настройки через переменные путь к базе сервера и инстанс ид берет из конфига сервера (нужно настроить имя файла и путь в файле) Мониторит сервер по названию окна, сохранив pid При вылете в 90% случаев корректно убивает процесс При перезапуске так же При каждом старте с 0 и при перезапусках делает бэкапы баз/настроек/логов в папку !Backup в корне сервера Можно настроть кол-во хранимых бэкпов для базы сервера и логов Вобщем заглянете внутрь и все поймете Вдруг кому пригодится Закрепляю тут краний боевой вариант Что к чему - прочтите всю тему и все станет ясно Сцыл на стрницу темы с крайней версией заточенной на использование с версией 1.04 и параметром -servermod Крайняя версия DayZStart_v42.rar
  39. 5 баллов
    Baksay

    Democreat - Euphoria Dayz (святой мученик платуна)

    Был пацан и нет пацана. Я бы сказал что мне его жаль, но врать не буду, абсолютно не жаль. Такому мусору - место на свалке
  40. 5 баллов
    VIRrusR

    Обновление модов на стороне сервера

    Petrovich , всё просто, у нас тут два киндервуда - они чего хошь враз занаучат и потом найдут стопицот ошибок и "почему так делать низззя!" ...Но ребяты толковые, ты, главное под ногами у них не путайся - задал вопрос и молчи в тряпочку! Они щаз ещё попинают, попинают друг дружку, потом сойдутся на том, что ничо не получится. ...А потом,BorizzK выложит куски скрипта, который всё порешает и всем будет счастье. Но никто всё равно ничо не поймёт, куда чего пхать и как прописывать, поэтому ещё немножко погодь - пока123new всё не распишет, упакует и ленточкой перевяжет. От так как-то мы тут и живём... P.S. Фтопку "моды", Long Live, Vanilla!
  41. 4 балла
    Когда проекту можно включать донат чтоб это выглядело органично и своевременно? Время и сумма включения доната и ошибки новичков. Дилемма которая появляется у создателя сервера это как не платить за сервер, аренду или электричество. То есть чтоб сервер приносил доход который бы покрывал расходы на этот самый сервер, пока не считаем человеко-час, то есть время затраченное админом Первая и главная ошибка почти всех новичков это купить или арендовать самый крутой, самый мощный сервер... отдать за него 5-10 тыс в месяц... - сразу скажу это провал если вы не готовы минимум 6 месяцев его оплачивать за свои деньги, 6 месяцев это средний показатель с учетом текучки онлайна, стабильности работы и навыков администратора, мы же берем новичка... Вторая ошибка которая вытекает из первой, ну раз 10к надо платить сразу ка я введу донат лута например за 2 000р за сет, он же самый выгодный... - чтоб 10к окупались даже с доната вам нужно довольно большой процент постоянных игроков, не бывает такого что человек пришел и сразу решил купить себе лут на сервер, ему нужно какое то время по играть, если это не очень умный но богатый школьник, бывает достаточно 1 недели, но этого же мало для стабильной оплаты сервера, основная масса донатеров начинает покупать через 1-2 месяца после начала игры на сервере, да и смысл покупать лут если его на сервере еще первый месяц много, за счет того что нет еще онлайна. Третья ошибка, а почему бы сразу не заработать себе первый миллион? допустим за свет платит "мамка", игровой сервер на компе "для учебы", скачал готовый сервер и начинаешь сразу продавать донаты... - ответ тот же что и при второй ошибке... донат отталкивает людей даже если его ни кто не покупает... а значит сложнее набирать онлайн так как нет сарафанного радио и друзья не притаскивают на сервер своих друзей. В итоге вероятнее всего мы получаем 10 000р. каждый месяц, заоблачные донаты за 2 000р. на проекте с группой в 300 человек или онлайном 5-10 человек, а адекватные игроки заходя в группу видят сумму донатов и активность аудитории и понимают что ловить тут не чего... итог онлайн в лучшем случаи плохо растет, в худшем падает... У меня даже есть примеры: Спойлер: все эти проекты закрылись через какое то время, правда они потом снова открывались, с периодичностью 1-2 года. Так когда вводить донат? Давайте начнем с того кто я такой и почему вообще стоит слушать мои советы? Я создатель и владелец пиратско-лицензионного игрового проекта DayZsib, проект запущен в 2013 году и на момент 2020 года и приносит прибыль начиная с 2014 года. Сделать запуск сервера как можно бюджетный, если дома интернет стабильный и есть компьютер который будет работать 24 часа, ставьте туда, так как у вас пока нет навыков создания сервера вы просто пару месяцев будете изучать как что ставить и как исправить ту или иную ошибку и получая онлайн 5-10 человек его терять из за какой то новой ошибки... и мы получаем минимум 1-2 месяца отсутствие стабильного онлайна. Реклама, если нет денег договаривайтесь с другими группами за бартерную рекламу, чтоб они вас прорекламировали, а вы их... пишите мелким блогером у которых нед подписчиков но они играют в игру и снимают её, им вы даете какой то уникальный контент, например шмот или эвент, они его снимают вы получаете охват аудитории, они интересный контент... (НЕ в коем случаи не спамте в другие группы, во 1 другая группа может отправить вам ответочку причем это может быть как ддос который положит ваш сервер дома, так и ответный спам который просто засрет вашу маленькую группу... да и через время вам не нужны конкуренты которым вы настолько противны что они хотят вас закрыть.). Активность аудитории, старайтесь общаться с вашей аудиторией как можно чаще, покажите им что вы здесь что это не мертвый сервер и вам интересно им заниматься и вы занимаетесь не ради бабла... ответный фидбек не заставит вас ждать и аудитория будет активно рекламировать вас своим друзьям. Пробники - донат первое время когда у вас есть стабильный онлайн то есть вы видите что это одни и те же ники в течении 1-2 месяца, они сами предложат вам ввести донат, но не нужно это делать с большими суммами, начните с чисто символических сумм, напомню вы создали проект который должен приносить радость игрокам, даже если вы создали его ради денег... Покажите игрокам что ваш донат нужен для того чтоб улучшить им игру, а не заработать на них... О видах доната и как они влияют на сервер можно почитать тут Так же немного информации по видам аренды, а так же плюсах и минусах У кого есть какие-то дополнения к теме, пишите. Если статья вам помогла поставьте + и спасибо 🙂
  42. 4 балла
    TIGLYA

    Создание шевронов

    TAG.rar Вот файл из видео
  43. 4 балла
    PLAYERDEAD

    DAYZSC CONFIG TOOL [DayZ v1.0]

    Просто инструмент для редактирования файла конфигурации сервера. 1. Скопируйте файлы в вашу папку сервера DayZ. 2. Открыть DayZSC.ini и указать свой путь к вашей миссии «DayZServer\mpmissions\dayzOffline.chernarusplus» !!! PS: Не сохраняйте свои настройки во время работы Сервера! PSs: Используйте резервные копии ваших файлов, инструмент ещё свежий и не известно как себя поведет. Версия: v0.16E DayZSC_Config_Tool-0.16e.7z Зеркало | Источник
  44. 4 балла
    goruni4

    DayZ Easy Server Administration - администрирование серверов

    Актуальная версия: 1.3.0.0 Описание: DayZ Easy Server Administration предназначено упросить администрирование серверов DayZ, все настройки производятся в программе, в папку сервера лишь нужно добавить моды и ключи. Функционал: Скачивание и обновление сервера, Старт, стоп, рестарт, бэкап, авторестарт по расписанию, автобэкап перед рестартом, проверка состояния, аптайм, логирование. Инструкция: 1. Скачать последнюю версию приложения доступную по ссылке ниже 2. Разархивировать папку из архива в корень диска (Пример: C:\DayZServerManager\DayZServerManager.exe) 3. Запустить DayZServerManager.exe 4. Авторизация 4.1 Зарегистрироваться если используете приложение впервые 4.2 Авторизоваться если ранее регистрировались 5. В главном меню выбрать папку сервера, в которой лежит DayZServer_x64.exe, либо выбрать пустую для скачивания сервера через приложение (для установки через приложение требуется указать стим логин и пароль в Manager Settings) 6. Добавить сервер 6.1 Открыть Server Config Editor для настройки конфига сервера 6.2 Открыть Battleye Config Editor для настройки конфига батлая 6.3 Поставить необходимые галочки проверки состояния, авторестарта и автобэкапа 6.4 Указать часы для авторестарта (Пример: 04:00;08:00) 6.5 Указать параметры запуска без -profiles, -config и -BEpath 7. Запустить сервер Примечание: Для корректной работы необходим установленный Microsoft .NET Framework 4.6.1 Окно редактирования открывается по двойному нажатию на строку сервера Бэкап работает только при выключенном сервере Бэкапы находятся в папке Backups Профили находятся в папке Profiles Файлы с настройками, конфигурациями серверов и серверами находятся в папке Config При удалении сервера удаляются все файлы связанные с данным сервером, в том числе папка storage (бэкапы в папке приложения не затрагиваются) Над чем работаю в данный момент: -Исправление ошибок и оптимизация -Подключение к серверам по RCon для просмотра количества игроков и информации о них, возможность банить, кикать, писать в чат и т.д. -Автообновление сервера и модов Что будет в следующих версиях: -Поддержка Arma2/Arma3 серверов Ссылки: DayZEasyServerAdministration Microsoft .NET Framework 4.6.1
  45. 4 балла
    Ришат

    Звуки

    Да с удовольствием) Запускаем и останавливаем проигрывание звука внутри класса действия. // Код нашего действия. class ActionOurAction : ActionContinuousBase { ref protected EffectSound ourSound; // Объявляем переменную типа 'EffectSound', не забыть укзаать сильную ссылку: 'ref'. // Конструктор класса нашего действия. void ActionOurAction() { /* Описываем все первичные инициализации конструктора */ ourSound = new EffectSound; // Инициализируем новый экземпляр переменной типа 'EffectSound'. ourSound.SetSoundAutodestroy( true ); // По необходимости. } // Переопределяем функцию 'OnExecuteClient'. override void OnExecuteClient( ActionData action_data ) { super.OnExecuteClient( action_data ); // Вызываем оригинальный код функции. action_data.m_Target.GetObject().PlaySoundSet(ourSound, "здесь нужный SoundSet", 0, 0); // Стартуем проигрывание звука при старте действия, передаем нашу переменную типа 'EffectSound', наш 'SoundSet' и параметры затухания. } // Переопределяем функцию 'OnFinishProgressClient'. override void OnFinishProgressClient( ActionData action_data ) { super.OnFinishProgressClient( action_data ); // Вызываем оригинальный код функции. action_data.m_Target.GetObject().StopSoundSet(ourSound); // Останавливаем проигрывание звука по окончанию дейтсвия, передаем в функцию нашу переменную типа 'EffectSound'. } };
  46. 4 балла
    BorizzK

    Шум при действии привлекающий зомби

    Например так В конфиге своего мода (config.cpp) class CfgNoises { class NoIZzPrivlekauschiyZombies { type="shot"; strength=10; }; }; И где надо Например в экшане в OnExecuteServer ref NoiseParams NoIZz = new NoiseParams(); NoIZz.LoadFromPath("CfgNoises NoIZzPrivlekauschiyZombies"); GetGame().GetNoiseSystem().AddNoisePos(player,player.GetPosition(), NoIZz); Этот шум должен воспроизводиться в процессе всего действия
  47. 4 балла
    modded class ItemBase extends InventoryItem { override void AfterStoreLoad() { super.AfterStoreLoad(); if (DoDelete()) delete this; } private bool DoDelete() { EntityAI parent = GetHierarchyParent(); if (parent) { return false; //Если является составной частью инвентаря или аттачментом - не удалять } else if (IsInherited(TentBase)) { TentBase t = TentBase.Cast(this); if (t) { if (t.GetState() == 0) return true; //Если палатка и она свернутся - удалять } } else if (IsInherited(DeployableContainer_Base)) // Barrel_ColorBase, SeaChest, WoodenCrate { return false; //Если бочка или один из ящиков - не удалять } return true; //Остальное удалять } } Суть такова После старта сервера и загрузки предмета из БД сервера всегда выполняется функция AfterStoreLoad() Мы ее оверрайдим Внутри сначала вызываем нативную функцию Затем проверяем через нашу функцию сам предмет И удаляем если подходит под описание
  48. 4 балла
    DrTauren

    Как донат убивает проекты.

    Считаю что любой донат, нарушающий баланс - это зло. Всё что получает донатер, должен иметь возможность получать и обычный игрок в таких же условиях. На старте - все должны быть равны. Вип классы, появляющиеся на спавне с кучей стволов и т.д. - полная дичь, но пользуется самой большой популярностью (тут уже решать админу - заработок или честность создаваемых для игроков условий). Туда же относятся вип базы с огромными стенами, например. Которые обычный игрок не в силах поставить на своей базе. Ещё хуже - установка триггеров вокруг донат баз, т.е. все игроки, которые не прописаны на данной базе будут умирать при приближении к ней. Другое дело - продажа комплектов для строительства. Например, как было в Эпохе на А2. Большой ящик строительства, средний и малый. При этом все объекты в ящике можно найти в игре. Такой донат лишь экономит время, но не сможет стать причиной применения вреда обычным игрокам, в отличие от тех же вип комплектов на спавне. Думаю доступно объяснил свою точку зрения. П.С. тут, опять же всё зависит от админа и его финансовых возможностей. Как показывает моя личная практика - есть два варианта: 1) сделай сервер без баланса с кучей плюх для донатеров - будет куча неадекватных школьников, которые будут скидывать доната по чуть-чуть, но постоянно 2) сделай сервер с нормальным донатом, не нарушающим баланс - в первые месяцы не будешь окупать затраты на сервер, но со временем появятся кланы взрослых игроков, которые даже просто так будут скидывать пожертвования, окупающие сервер полностью. Осторожно, КАПС (ВАРИАНТ РАБОТАЕТ ТОЛЬКО ЕСЛИ У ВАС ДЕЙСТВИТЕЛЬНО КАЧЕСТВЕННАЯ И ИНТЕРЕСНАЯ СБОРКА СЕРВЕРА).
  49. 4 балла
    Equadro

    Запрет разбора строений без модов

    Ну для тех кто хочет модом "-mod=DestroyDisable" Вроде запаковал верно. =) DestroyDisable.zip
×
×
  • Создать...

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

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