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

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

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

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

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

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


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

Отображаются публикации с наибольшей репутацией на 03/09/19 в Сообщения

  1. 2 балла
    И так, ребятки, вот вам небольшая 'полезняшка' от меня, и совершенно бесплатно! Описание: Скрипт, добавляющий админу сервера возможность указывать для каждого игрока индивидуальный скин спавна, его персональную точку спавна и один из имеющихся на сервере стартовых наборов с лутом, которые можно составить самим. Если указано несколько точек спавна и/или наборов лута, то будет выбран один из предложенных вариантов рандомно. Также, любой из названных параметров можно отключить в скрипте и сделать его стандартным, как он есть поумолчанию на сервере. Дополнительно - есть возможность назначить свой набор стартового лута для всех игроков на сервере не из списка скрипта! Нам понадобится: 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. 1 балл
    PJIIOxa исправил гайд в теме, теперь должно работать нормально. Изменены только 2 скрипта из миссии сервера. Гребанная богемия с отсутствием документации, чтоб они там перевернулись все!
  3. 1 балл
    Конечно некоректное, надо переписать со старой базы на новую, все запросы app.use(bodyParser()); var getRawBody = require('raw-body'); app.use(function (req, res, next) { if (req.headers['content-type'] === 'application/octet-stream') { getRawBody(req, { length: req.headers['content-length'], encoding: this.charset }, function (err, string) { if (err) return next(err) req.body = string next() }) } else { next() } }); exports.start = function () { app.listen(8080); console.log('Server running on port 8080'); } function responseFile(filePath, response) { fs.exists(filePath, function(exists){ if (exists) { console.log('responseFile...'); response.setHeader('Expect', '100-continue'); response.setHeader('Content-Type', 'application/octet-stream'); fs.createReadStream(filePath).pipe(response); console.log('responseFile...Complete?'); } else { response.writeHead(400, {"Content-Type": "text/plain"}); response.end("ERROR File does NOT Exists"); } }); } function countOcurrences(find,str){ return (str.split(find).length - 1) } function IsJsonString(str) { if ((countOcurrences("(",str) == countOcurrences(")",str)) && (countOcurrences("[",str) == countOcurrences("]",str)) && (countOcurrences("{",str) == countOcurrences("}",str)) ){ return true; } else { return false; } } app.get('/HOME', function (req, res) { pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); } else { connection.query('SELECT uid FROM objects', function (err, rows, fields) { if (err) { console.log("数据库连接失败") res.send('[]'); return; } connection.release(); if (rows.length == 0) { console.log('没有家园数据'); res.send('[]'); return; } var ids = '['; rows.forEach(function(element){ ids += '"' + element.uid+ '",'; }); ids = ids.substring(0,ids.length-1) + "]"; res.send(ids); console.log('获取家园数据[' + rows.length +']') return; }); } }); }); app.post('/DayZServlet/lud0/findobj', function (req, res) { console.log('找到物品 ' + req.query.uid); pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); } else { connection.query('SELECT model,x,y,z FROM objects WHERE uid = ?', [req.query.uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } connection.release(); if (rows.length == 0) { console.log('No data found'); res.send('{}'); return; } if ((rows[0].x == '0') && (rows[0].y == '0') && (rows[0].z == '0')) { console.log('Corrupt data'); res.send('{}'); return; } // Edit result for sending rows[0].pos = [rows[0].x, rows[0].y, rows[0].z]; delete rows[0].x; delete rows[0].y; delete rows[0].z; // Calculate queue res.send(JSON.stringify(rows[0])); }); } }); }); app.get('/DayZServlet/lud0/loadobj', function (req, res) { console.log('加载物品 ' + req.query.uid); pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); } else { connection.query('SELECT * FROM objects WHERE uid = ?', [req.query.uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } connection.release(); if (rows.length == 0) { console.log('No data found'); res.send('{}'); return; } //console.log(rows[0].items); //Check if data is corrupt if ( (IsJsonString(rows[0].items) == false) || ((rows[0].items).length < 1) ) { console.log('Corrupt data'); res.send('{}'); return; } //console.log('Sent character data: ' + JSON.stringify(rows[0])); //res.send(JSON.stringify(rows[0])); var loadData = '{"model":"'+rows[0].model+'","pos":['+rows[0].x+','+rows[0].z+','+rows[0].y+'],"items":'+rows[0].items+',"dir":['+rows[0].dir_x+','+rows[0].dir_y+','+rows[0].dir_z+'],"up":['+rows[0].up_0+','+rows[0].up_1+','+rows[0].up_2+']'+',"guid":"'+rows[0].guid+'"}'; console.log(loadData); if (IsJsonString(loadData) == true) { res.send(loadData); }else{ console.log("Resonce not json!"); res.send("{}"); } }); } }); }); app.post('/DayZServlet/lud0/saveobj', function (req, res) { var guid = req.body.guid.replace(/\"/g,""); var uid = req.query.uid.replace(/\"/g,""); pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); return; } connection.query('SELECT * FROM objects WHERE uid = ?', [uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } if (rows.length == 0) { console.log(getNowFormatDate1()+" 创建物品 "+req.query.uid); connection.query( 'INSERT INTO objects(uid,model,items,guid,x,y,z,dir_x,dir_y,dir_z,up_0,up_1,up_2,time_created) VALUES(?,?,"[]",?,?,?,?,?,?,?,?,?,?,NOW())', [uid,req.body.model,guid,req.body.pos[0], req.body.pos[2], req.body.pos[1], req.body.dir[0], req.body.dir[1], req.body.dir[2], req.body.up[0], req.body.up[1], req.body.up[2]], function (err, rows, fields) { if (err) console.log(err); } ); } else { console.log(getNowFormatDate1()+" 更新物品 "+req.query.uid); if(typeof (req.body.items) == 'undefined') { req.body.items = []; } connection.query('UPDATE objects SET model = ?, items = ?, guid = ?, x = ?, z = ?, y = ?, dir_x = ?, dir_y = ?, dir_z = ?, up_0 = ?, up_1 = ?, up_2 = ? WHERE uid = ?', [req.body.model, JSON.stringify(req.body.items), guid, req.body.pos[0], req.body.pos[1], req.body.pos[2], req.body.dir[0], req.body.dir[1], req.body.dir[2], req.body.up[0], req.body.up[1], req.body.up[2], uid], function (err, rows, fields) { if (err) console.log(err); } ); } connection.release(); res.send('{}'); }); }); }); app.post('/DayZServlet/lud0/killobj', function (req, res) { if (countOcurrences("?", req.query.uid) == 1){ var uid = (req.query.uid).replace('?uid=', ''); }else{ var uid = req.query.uid; } console.log('删除物品 ' + uid); pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); } else { connection.query('DELETE FROM objects WHERE uid = ?', [uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } connection.release(); }); } }); res.send('{}'); }); app.post('/DayZServlet/lud0/find', function (req, res) { console.log('Got find: ' + req.query.uid); pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); } else { connection.query('SELECT model,x,y,z,queue FROM player WHERE uid = ?', [req.query.uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } connection.release(); if (rows.length == 0) { console.log('No data found'); res.send('{}'); return; } if ((rows[0].x == '0') && (rows[0].y == '0') && (rows[0].z == '0')) { console.log('Corrupt data'); res.send('{}'); return; } // Edit result for sending rows[0].pos = [rows[0].x, rows[0].y, rows[0].z]; delete rows[0].x; delete rows[0].y; delete rows[0].z; // Calculate queue var queueEnd = moment(rows[0].queue); rows[0].queue = -queueEnd.diff(moment(), 'seconds'); res.send(JSON.stringify(rows[0])); }); } }); }); app.get('/DayZServlet/lud0/load', function (req, res) { console.log('Got load: ' + req.query.uid); pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); } else { connection.query('SELECT * FROM player WHERE uid = ?', [req.query.uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } connection.release(); if (rows.length == 0) { console.log('No data found'); res.send('{}'); return; } console.log(rows[0].items); //Check if data is corrupt if ( ((IsJsonString(rows[0].items) == false) && (IsJsonString(rows[0].state) == false)) || (((rows[0].items).length < 1) || ((rows[0].state).length < 1)) ) { console.log('Corrupt data'); res.send('{}'); return; } // Calculate queue var queueEnd = moment(rows[0].queue); rows[0].queue = -queueEnd.diff(moment(), 'seconds'); //console.log('Sent character data: ' + JSON.stringify(rows[0])); //res.send(JSON.stringify(rows[0])); var loadData = '{"model":"'+rows[0].model+'","alive":'+rows[0].alive+',"queue":'+rows[0].queue+',"pos":['+rows[0].x+','+rows[0].z+','+rows[0].y+'],"items":'+rows[0].items+',"state":'+rows[0].state+',"dir":['+rows[0].dir_x+','+rows[0].dir_y+','+rows[0].dir_z+'],"up":['+rows[0].up_0+','+rows[0].up_1+','+rows[0].up_2+']}'; //console.log(loadData); if (IsJsonString(loadData) == true) { res.send(loadData); }else{ console.log("Resonce not json!"); res.send("{}"); } }); } }); }); app.post('/DayZServlet/lud0/create', function (req, res) { console.log('Got create: ' + req.query.uid); pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); } else { connection.query('INSERT IGNORE INTO player(uid) VALUES(?)', [req.query.uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } connection.query('UPDATE record SET RespawnCount=RespawnCount+1', function (err, result) { if (err) { console.log(err) res.send('{}'); return; } connection.release(); res.send('{}'); }); }); } }); }); app.post('/DayZServlet/lud0/save', function (req, res) { console.log('Got save: ' + req.query.uid); pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); return; } //console.log(JSON.stringify(req.body.items)); connection.query('UPDATE player SET model = ?, alive = ?, items = ?, state = ?, x = ?, z = ?, y = ?, dir_x = ?, dir_y = ?, dir_z = ?, up_0 = ?, up_1 = ?, up_2 = ? WHERE uid = ?', [req.body.model, req.body.alive, JSON.stringify(req.body.items), JSON.stringify(req.body.state), req.body.pos[0], req.body.pos[1], req.body.pos[2], req.body.dir[0], req.body.dir[1], req.body.dir[2], req.body.up[0], req.body.up[1], req.body.up[2], req.query.uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } connection.release(); res.send('{}'); }); }); }); app.post('/DayZServlet/lud0/queue', function (req, res) { console.log('Got queue: ' + req.query.uid + ' (' + req.body.queue + 's)'); pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); } else { connection.query('SELECT queue FROM player WHERE uid = ?', [req.query.uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } var query = 'UPDATE player SET queue = DATE_ADD(CURRENT_TIMESTAMP,INTERVAL ' + mysql.escape(JSON.stringify(req.body.queue)) + ' SECOND) WHERE uid = ?'; connection.query(query, [req.query.uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } connection.release(); res.send('{}'); }); }); } }); }); app.post('/DayZServlet/lud0/kill', function (req, res) { if (countOcurrences("?", req.query.uid) == 1){ var uid = (req.query.uid).replace('?uid=', ''); }else{ var uid = req.query.uid; } console.log('Got kill: ' + uid); pool.getConnection(function (err, connection) { if (err) { console.log(err) res.send('{}'); } else { connection.query('DELETE FROM player WHERE uid = ?', [uid], function (err, rows, fields) { if (err) { console.log(err) res.send('{}'); return; } connection.query('UPDATE record SET DeadCount=DeadCount+1', function (err, result) { if (err) { console.log(err) res.send('{}'); return; } connection.release(); }); }); } }); res.send('{}'); }); app.post('/0061/rest/init/enviroment', function (req, res) { res.send('{"primary":"http://127.0.0.1:8080/Mikejones420Gaming","envsec":"http://127.0.0.1:8080/Mikejones420Gaming"}'); console.log('Env POST: ' + req.url); }); app.post('/0061/rest/init/ping', function (req, res) { res.send('{"ping":100}'); console.log('Env POST: ' + req.url); }); app.get('/0061/rest/u3sT1/status', function (req, res) { //res.send('{"status":"ok","message":"ok","timeout":30}'); res.send('{"status":"ok","message":"ok","timeout":30}'); console.log('Env POST: ' + req.url); }); app.post('/0061/rest/init/startup', function (req, res) {//res.send('{"s_flags":0,"s_log":1,"s_synctime":18000,"s_statstime":0,"s_deathtime":90,"s_queuetime":30}'); res.send('{"success": 1,"message": "ok","timeout": 30,"type": 1,"key": "12312132414564564fdsaaezdxqs45","version_required": "0.60:133913","version_allowed": "0.60:133913","check": 0,"categorycount": 12,"s_flags":1,"s_log":0,"s_synctime":18000,"s_statstime":30,"s_deathtime":90,"s_queuetime":30}'); console.log('Env POST: ' + req.url); }); app.post('/0061/rest/init/confirm', function (req, res) { res.send('{"success": 1,"message": "ok","timeout": 30,"type": 1,"key": "12312132414564564fdsaaezdxqs45","version_required": "0.60:133913","version_allowed": "0.60:133913","check": 0,"categorycount": 12,"s_flags":1,"s_log":0,"s_synctime":18000,"s_statstime":30,"s_deathtime":90,"s_queuetime":30}'); console.log('Env POST: ' + req.url); }); app.post('/0061/rest/init/sync', function (req, res) { res.send('{"success": 1,"message": "ok","timeout": 30,"type": 1,"key": "12312132414564564fdsaaezdxqs45","version_required": "0.60:133913","version_allowed": "0.60:133913","check": 0,"categorycount": 12,"s_flags":1,"s_log":0,"s_synctime":18000,"s_statstime":30,"s_deathtime":90,"s_queuetime":30}'); console.log('Env POST: ' + req.url); }); app.post('/0061/u3sT1/global/record/get', function (req, res) { //res.send('[["1","Animals killed","hunt"],["1","Infected killed","kill"]]'); //res.send('[["hunt","1","Animals killed"],["kill","1","Infected killed"]]'); //res.send('{"record":{"type":"hunt","localization":"Animals killed","flags":"1"}}'); //res.send('[{"record":{"type":"hunt","localization":"Animals killed","flags":"1"}},{"record":{"type":"kill","localization":"Infected killed","flags":"1"}}]'); //res.send('{"record":[{"type":"hunt","localization":"Animals killed","flags":"1"},{"type":"kill","localization":"Infected killed","flags":"1"}]}'); //res.send('{"record":[{"type":"hunt","localization":"Animals killed","flags":"1","record":1},{"type":"kill","localization":"Infected killed","flags":"1","record":2}]}'); res.send('{"record":[{"type":"hunt","localization":"Animals killed","flags":"1","record":"true"},{"type":"kill","localization":"Infected killed","flags":"1","record":"true"}]}'); console.log('Env POST: ' + req.url); }); /* app.post('/0061/u3sT1/global/record/get', function (req, res) { res.send('{"records":{"record":[{"flags":"1","localization":"Animals killed","type":"hunt"},{"flags":"1","localization":"Infected killed","type":"kill"},{"flags":"1","localization":"Survivors killed","type":"murder"},{"flags":"1","localization":"Distance traveled","type":"dist"},{"flags":"1","localization":"Survivors aided","type":"aid"},{"flags":"1","localization":"Water consumed","type":"water"},{"flags":"1","localization":"Calories burned","type":"calories"},{"flags":"3","localization":"Hours survived","type":"playtime"}]}}'); console.log('Env POST: ' + req.url); }); */ app.post('/0061/u3sT1/global/actions/get', function (req, res) { res.send('{"message": "test ok"}'); console.log('Env POST: ' + req.url); }); app.post('/0061/w_0ld/global/category/get', function (req, res) { res.send('<?xml version="1.0" encoding="UTF-8"?><categories><category id="1" type="dynamic"/><category id="2" type="static"/><category id="3" type="animal"/><category id="4" type="zombie"/><category id="5" type="vehicle"/><category id="6" type="wreck"/><category id="7" type="container"/><category id="8" type="random"/><category id="9" type="custom"/><category id="10" type="building"/><category id="11" type="door"/><category id="12" type="player"/></categories>'); console.log('Env POST: ' + req.url); }); app.post('/0061/w_0ld/global/type/getbin', function (req, res) { res.sendfile('type.bin'); console.log('Env POST: ' + req.url); }); app.post('/0061/w_0ld/global/type/setbin', function (req, res) { //res.send('{}'); var noneExistFileName = ['type', '', '.bin'].join(''); fs.writeFile(noneExistFileName, req.body, function(err){ if(err) throw err; console.log(noneExistFileName+' is written!'); }); res.status(200); console.log('SET BIN: '+req.url); }); app.post('/0061/a_0fg/find', function (req, res) { res.send('{"model":"SurvivorPartsMaleMatt", "queue": 0, "alive": true, "pos":[1000,1000,0]}'); //res.send('{}'); console.log('CHAR: ' + req.url); }); app.get('/0061/a_0fg/loadbin', function (req, res) { //res.sendfile(req.query.uid + '.bin'); //res.send(''); res.sendfile('123.bin'); console.log('LOAD: ' + req.url + ' UID' + req.query.uid); }); app.post('/0061/a_0fg/create', function (req, res) { //res.send('{}'); console.log('Got create: ' + req.query.uid); }); app.post('/0061/a_0fg/process', function (req, res) { var noneExistFileName = [req.query.uid, '', '.bin'].join(''); fs.writeFile(noneExistFileName, req.body, function(err){ if(err) throw err; console.log(noneExistFileName+' is written!'); }); res.status(200); console.log('Got process: ' + req.url + ' UID' + req.query.uid); }); app.post('/mpmissions/dayzOffline.chernarusplus/storage_1/data/events.bin', function (req, res) { /* res.setHeader('Content-Type', 'application/octet-stream'); res.sendfile('events.bin'); */ //res.send(''); console.log('Env POST: ' + req.url); }); /* app.post('/0061/w_0ld/global/category/get', function (req, res) { res.send('{"categories":{"category":{{"id":"1","type":"dynamic"},{"id":"2","type":"static"},{"id":"3","type":"animal"},{"id":"4","type":"zombie"},{"id":"5","type":"vehicle"},{"id":"6","type":"wreck"},{"id":"7","type":"container"},{"id":"8","type":"random"},{"id":"9","type":"custom"},{"id":"10","type":"building"},{"id":"11","type":"door"}}}}'); console.log('Env POST: ' + req.url); }); */ app.post(/.*/, function (req, res) { console.log('Got unhandled POST: ' + req.url); res.send('{}'); }); app.get(/.*/, function (req, res) { console.log('Got unhandled GET: ' + req.url); res.send('{}'); }); var net = require('net'); var HOST = '127.0.0.1'; var PORT = 9433; net.createServer(function(sock) { // We have a connection - a socket object is assigned to the connection automatically //console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort); // Add a 'data' event handler to this instance of socket sock.on('data', function(data) { var response = data.toString().trim(); if(response.search("Ping") > -1) { console.log('Recived Ping'); sock.write('Pong'); } if(response.search("ObjectIDS") > -1) { console.log('Getting Objects IDS'); pool.getConnection(function (err, connection) { if (err) { console.log(err) sock.write('Empty'); } else{ connection.query('SELECT uid FROM objects', function (err, rows, fields) { if (err) { console.log(err) sock.write('Empty'); return; } connection.release(); if (rows.length == 0) { sock.write('Empty'); } else { var ids = ''; rows.forEach(function(element){ ids += element.uid+','; }); ids = ids.substring(0, ids.length - 1); sock.write(ids); } }); } }); } if(response.search("ObjectSave: ") > -1) { //console.log(JSON.parse(response.match(/\[\[.{3,}\]\]/g)[0])); //var match = /*JSON.parse*/(response.match(/\[\[.{3,}\]\]/g)); var match = /\[\["(\d+)","([\w\d_-]+)",(\[[\d,\.\[]+\]\])\],(.*\])\]/g.exec(response); if (match) { pool.getConnection(function (err, connection) { if (err) { console.log(err) sock.write('Empty'); } else{ connection.query('SELECT * FROM objects WHERE ObjectID = ?', [match[1]], function (err, rows, fields) { if (err) { console.log(err) sock.write('Empty'); return; } if (rows.length == 0) { console.log("CREATE "+match[1]+" "+match[2]); connection.query( 'INSERT INTO objects(ObjectID,model,position,items,time_created,time_updated) VALUES(?,?,?,?,NOW(),NOW())', [match[1],match[2],match[3],match[4]], function (err, rows, fields) { if (err) console.log(err); } ); } else { console.log("UPDATE "+match[1]+" "+match[2]); connection.query( 'UPDATE objects SET position=?, items=?, time_updated=NOW() WHERE ObjectID=?', [match[3],match[4],match[1]], function (err, rows, fields) { if (err) console.log(err); } ); } connection.release(); }); } }); } sock.write('Ok'); sleep.sleep(0.01); } if(response.search("ObjectLoad: ") > -1) { var match = JSON.parse(response.match(/\d+/g)); if (match) { var oid = match; console.log("LOAD "+oid); pool.getConnection(function (err, connection) { if (err) { console.log(err) sock.write('Empty'); } else{ connection.query('SELECT * FROM objects WHERE ObjectID = ?', [oid], function (err, rows, fields) { if (err) { console.log(err) sock.write('Empty'); return; } connection.release(); if (rows.length == 0) { console.log("Could not find object."); sock.write('Empty'); } else { var ret = '[["'+rows[0].ObjectID+'","'+rows[0].model+'",'+rows[0].position+'],'+rows[0].items+']'; console.log(ret); sock.write(ret); } }); } }); } else { sock.write('Empty'); } } if(response.search("ObjectDelete: ") > -1) { var match = JSON.parse(response.match(/\d+/g)); if (match) { var oid = match; console.log("Deleting object "+oid); pool.getConnection(function (err, connection) { if (err) { console.log(err) sock.write('Empty'); } else{ connection.query('DELETE FROM objects WHERE ObjectID = ?', [oid], function (err, rows, fields) { if (err) { console.log(err) sock.write('Empty'); return; } connection.release(); }); } }); } sock.write('Ok'); } }); // Add a 'close' event handler to this instance of socket sock.on('close', function(data) { //console.log('SOCKET CONNECTION CLOSED'); }); sock.on('error', function(data) { console.log("Tried to send to a closed socket."); }); }).listen(PORT, HOST); console.log(getNowFormatDate1()+' Socket listening on ' + HOST +':'+ PORT);
  4. 1 балл
    Кто-нибудь проверял данный скрипт на версии игры 1.01, всё сделал по инструкции, но не получается. Не создаётся персонаж.
×
×
  • Создать...

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

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

Поддержка