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

Продаёте или покупаете?

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

Персональный скин, точка спавна, и сет с лутом при респавне, стартовый лут для всех!

Рекомендованные сообщения

И так, ребятки, вот вам небольшая 'полезняшка' от меня, и совершенно бесплатно!

 

Описание:

Скрипт, добавляющий админу сервера возможность указывать для каждого игрока индивидуальный скин спавна, его персональную точку спавна и один из имеющихся на сервере стартовых наборов с лутом, которые можно составить самим. Если указано несколько точек спавна и/или наборов лута, то будет выбран один из предложенных вариантов рандомно. Также, любой из названных параметров можно отключить в скрипте и сделать его стандартным, как он есть поумолчанию на сервере. Дополнительно - есть возможность назначить  свой набор стартового лута для всех игроков на сервере не из списка скрипта!

 

Нам понадобится:

1. Сервер DayZ 1.0, сделанный по одному из гайдов:

2. Notepad++

3. Немножечко трезвого ума и понимания того, что мы делаем, и как прописывается лут на новом языке enfusion

 

Установка:

Перед установкой: Обратите внимание, что имя 'стандартной' миссии сервера при загрузки со Steam называется: 'dayzOffline.chernarusplus'. На хостингах имя этой папки может отличаться. Если это так, то вам в информации ниже необходимо заменить 'dayzOffline.chernarusplus' на имя вашей  папки миссии сервера, иначе вы не сможете запустить сервер игры!
1. По пути:

{папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\

создать папку 'CustomSpawnPlayerConfig' и поместить в созданную нами папку 2 файла

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

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

или создать их самим со следующим содержанием:

Script.c

/*
	Описание: Скрипт выдачи индивидуального стартового лута, скина игрока и точек спавна
	Автор: 123new
*/

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);
		}		
	}
};

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)
			{
				player.RemoveAllItems(); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку (не корректно работает, пишет краш лог)
				itemCreated = player.GetInventory().CreateInInventory("CoyoteBag_Green"); 	// Выдаем рюкзак
				if (itemCreated)															// Проверяем, создался ли рюкзак
				{
					SetRandomHealthItem(itemCreated);												// Выдаем рюкзаку рандомное качество
					itemCreated1 = itemCreated.GetInventory().CreateInInventory("Apple");			// Добавляем в инвентарь созданного рюкзака яблоко
					if (itemCreated1)																// Проверяем, создалось ли яблоко в рюкзаке
					{
						SetRandomHealthItem(itemCreated1);												// Выдаем яблоку рандомное качество
					}
					itemCreated1 = NULL;															// Обнуляем значение переменной после работы с ней
					itemCreated1 = itemCreated.GetInventory().CreateInInventory("Rag");				// Выдаем игроку бинты в рюкзак
					if (itemCreated1)																// Проверяем, создались ли бинты в рюкзаке
					{
						itemCasted = ItemBase.Cast(itemCreated1);										// Выполняем преобразование в другой класс для работы с нужной нам функцией
						itemCasted.SetQuantity(4);														// Определяем количество для созданных бинтов как 4 штуки
						SetRandomHealthItem(itemCreated);												// Выдаем бинтам рандомное качество 
					}
					itemCreated1 = NULL;															// Обнуляем значение переменной после работы с ней
				}
				itemCreated = NULL;															// Обнуляем значение переменной после работы с ней
				itemCreated = player.GetInventory().CreateInInventory("TTSKOPants");		// Выдаем игроку штаны
				itemCreated = NULL;															// Обнуляем значение переменной после работы с ней
				itemCreated = player.GetInventory().CreateInInventory("TTsKOJacket_Camo");	// Выдаем игроку куртку
				itemCreated = NULL;															// Обнуляем значение переменной после работы с ней
				itemCreated = player.GetInventory().CreateInInventory("CombatBoots_Black");	// Выдаем игроку обувь
				itemCreated = NULL;															// Обнуляем значение переменной после работы с ней
				//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 (Сет поумолчанию для всех игроков, если хотите назначить - добавляйте здесь!)
			{
				//player.RemoveAllItems(); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку
				
				break;
			}
		}
	}
	
	void SetRandomHealthItem(EntityAI itemCreated)
	{
		if ( itemCreated )
		{
			private int rndHlt = Math.RandomInt(55,100);
			itemCreated.SetHealth("","",rndHlt);
		}
	}
}

Безымянный.png

2. В файле:

{папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.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();

Чтобы получилось примерно так

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


3. В функции:

void main()

перед ее закрывающей скобкой '}' добавить:

GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(My_Custom_Spawn_Parameters.Read_Update_Config, 120000, true); // Обновление настроек скрипта кастомных спавнов, 1 минута = 60000

где 120000 - 2 минуты. Эта функция будет обновлять конфигурацию скрипта через указанное вами время в процессе работы сервера постоянно.

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


4. В функции:

CreateCharacter

после ее открывающей скобки '{' добавить:

pos = My_Custom_Spawn_Parameters.Load_And_Check_Spawnpoints(identity, pos);
characterName = My_Custom_Spawn_Parameters.Load_And_Check_SpawnSkin_Player(identity, characterName);

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

5. В функции:

StartingEquipSetup

перед ее закрывающей скобкой '}' добавить:

My_Custom_Spawn_Parameters.Load_And_Check_StartLoadout(player);

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

6. В папке, обозначенной параметром запуска сервера '-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

Безымянный.pngБезымянный.png

7. В файле Sets.c в папке:

 {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\

настроить стартовый лут для ваших игроков и написать собственные сеты
ВАЖНО: количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше)
Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет!

 

P.S. В функции выдачи сетов опция 'player.RemoveAllItems();' работает, но пишет ошибку в scripts.log и crash.log. Причину так и не смог выяснить, на старых патчах игры работало нормально.  Возможно это временное явление!

 

Благодарности: Товарищу Mizev за его первоначальные гайды в группе VK при появлении в сети серверной части игры

Изменено пользователем 123new
исправления (история изменений)

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


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


Кто-нибудь проверял данный скрипт на версии игры 1.01, всё сделал по инструкции, но не получается. Не создаётся персонаж.

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


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

поддерживаю установил все как по гайду не работает.

Еще и в crashlog записались ошибки когда я сделал суицид что бы проверить скрипт точек и китов

DESKTOP-0Q531K4, 09.03 2019 17:35:05

LocalDestroyEntity: No inventory location
Class:      'DayZPlayerInventory'
Function: 'Error'
Stack trace:
scripts/1_Core/proto/EnDebug.c:44
scripts/3_Game/Systems/Inventory/HumanInventory.c:340
scripts/4_World/Entities/ManBase/PlayerBase.c:800
scripts/4_World/Entities/ManBase/PlayerBase.c:499
PTrader/scripts/4_World/entities\manbase\playerbase.c:50

Runtime mode
CLI params: port 2304 config [SM]ConFigServer\server.cfg cfg [SM]ConFigServer\basic.cfg BEpath C:\Steam\steamapps\common\DayZServer\[SM]ConFigServer\BattlEye profiles [SM]ConFigServer name [SM]ConFigServerName maxMem 7192 mod @RPCFramework;@ZomBerry;@mods filepatching  scrallowfilewrite  freezecheck  autoinit  adminLog  ShowScriptErrors  debugLog  dologs  netlog  


------------------------------------
DESKTOP-0Q531K4, 09.03 2019 17:35:05

[inv] Source location == HANDS, player has to handle this
Class:      'DayZPlayerInventory'
Function: 'Error'
Stack trace:
scripts/1_Core/proto/EnDebug.c:44
scripts/3_Game/Systems/Inventory/Inventory.c:980
scripts/3_Game/Systems/Inventory/HumanInventory.c:335
scripts/4_World/Entities/ManBase/PlayerBase.c:800
scripts/4_World/Entities/ManBase/PlayerBase.c:499
PTrader/scripts/4_World/entities\manbase\playerbase.c:50

Runtime mode
CLI params: port 2304 config [SM]ConFigServer\server.cfg cfg [SM]ConFigServer\basic.cfg BEpath C:\Steam\steamapps\common\DayZServer\[SM]ConFigServer\BattlEye profiles [SM]ConFigServer name [SM]ConFigServerName maxMem 7192 mod @RPCFramework;@ZomBerry;@mods filepatching  scrallowfilewrite  freezecheck  autoinit  adminLog  ShowScriptErrors  debugLog  dologs  netlog  

 

Изменено пользователем PJIIOxa (история изменений)

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


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

123new Подскажите где косяк вот строки из скрипт лога

SCRIPT       : [09.03.2019 - 18.19.36] [CustomSpawnPlayerConfig] [SelectStartSetPlayer] Can't founded private sets for player P_JI_IOxa(steam64id=76561198015929553)
SCRIPT       : [09.03.2019 - 18.19.36] [CustomSpawnPlayerConfig] [SelectStartSetPlayer] For player P_JI_IOxa(steam64id=76561198015929553) will be used spawn default start set withoun number. 

 

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


Ссылка на сообщение
Поделиться на других сайтах
22 минуты назад, PJIIOxa сказал:

123new Подскажите где косяк вот строки из скрипт лога


SCRIPT       : [09.03.2019 - 18.19.36] [CustomSpawnPlayerConfig] [SelectStartSetPlayer] Can't founded private sets for player P_JI_IOxa(steam64id=76561198015929553)
SCRIPT       : [09.03.2019 - 18.19.36] [CustomSpawnPlayerConfig] [SelectStartSetPlayer] For player P_JI_IOxa(steam64id=76561198015929553) will be used spawn default start set withoun number. 

 

КОСЯК В

SCRIPT    (E): NULL pointer to instance
Class:      'CustomSpawnPlayerConfig'
Function: 'Load_And_Check_Spawnpoints'
Stack trace:
$CurrentDir:mpmissions/dayzOffline.chernarusplus/CustomSpawnPlayerConfig/Script.c:282
$CurrentDir:mpmissions\dayzOffline.chernarusplus\init.c:62
scripts/5_Mission/mission\missionserver.c:371
scripts/5_Mission/mission\missionserver.c:158
scripts/3_Game/dayzgame.c:910
SCRIPT    (E): NULL pointer to instance
Class:      'CustomSpawnPlayerConfig'
Function: 'Load_And_Check_Spawnpoints'
Stack trace:
$CurrentDir:mpmissions/dayzOffline.chernarusplus/CustomSpawnPlayerConfig/Script.c:283
$CurrentDir:mpmissions\dayzOffline.chernarusplus\init.c:62
scripts/5_Mission/mission\missionserver.c:371
scripts/5_Mission/mission\missionserver.c:158
scripts/3_Game/dayzgame.c:910

Уже изучаю 'какого хрена' в enscript массив с параметрами передается в не верном виде, так как по логике срабатывания скрипта все верно.

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, PJIIOxa сказал:

поддерживаю установил все как по гайду не работает.

Еще и в crashlog записались ошибки когда я сделал суицид что бы проверить скрипт точек и китов


DESKTOP-0Q531K4, 09.03 2019 17:35:05

LocalDestroyEntity: No inventory location
Class:      'DayZPlayerInventory'
Function: 'Error'
Stack trace:
scripts/1_Core/proto/EnDebug.c:44
scripts/3_Game/Systems/Inventory/HumanInventory.c:340
scripts/4_World/Entities/ManBase/PlayerBase.c:800
scripts/4_World/Entities/ManBase/PlayerBase.c:499
PTrader/scripts/4_World/entities\manbase\playerbase.c:50

Runtime mode
CLI params: port 2304 config [SM]ConFigServer\server.cfg cfg [SM]ConFigServer\basic.cfg BEpath C:\Steam\steamapps\common\DayZServer\[SM]ConFigServer\BattlEye profiles [SM]ConFigServer name [SM]ConFigServerName maxMem 7192 mod @RPCFramework;@ZomBerry;@mods filepatching  scrallowfilewrite  freezecheck  autoinit  adminLog  ShowScriptErrors  debugLog  dologs  netlog  


------------------------------------
DESKTOP-0Q531K4, 09.03 2019 17:35:05

[inv] Source location == HANDS, player has to handle this
Class:      'DayZPlayerInventory'
Function: 'Error'
Stack trace:
scripts/1_Core/proto/EnDebug.c:44
scripts/3_Game/Systems/Inventory/Inventory.c:980
scripts/3_Game/Systems/Inventory/HumanInventory.c:335
scripts/4_World/Entities/ManBase/PlayerBase.c:800
scripts/4_World/Entities/ManBase/PlayerBase.c:499
PTrader/scripts/4_World/entities\manbase\playerbase.c:50

Runtime mode
CLI params: port 2304 config [SM]ConFigServer\server.cfg cfg [SM]ConFigServer\basic.cfg BEpath C:\Steam\steamapps\common\DayZServer\[SM]ConFigServer\BattlEye profiles [SM]ConFigServer name [SM]ConFigServerName maxMem 7192 mod @RPCFramework;@ZomBerry;@mods filepatching  scrallowfilewrite  freezecheck  autoinit  adminLog  ShowScriptErrors  debugLog  dologs  netlog  

 

а вот такого быть не может, это уже что-то другое срабатывает. ну или один из модов ломает всю игру и сама ошибка вообще не верная выводится, вплоть то stack trace ошибки

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


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

123new да да эта ошибка не от вашего скрипта эта ошибка я пытался поставить скрипт чтоб при суициде шмотки пропадали с персонажа чтоб не засирали игроки побережье. Убрал этот скрипт серавно вашь не работает а такой ошибки как вы скинули у меня вообще в логах нет

SCRIPT    (E): NULL pointer to instance
Class:      'CustomSpawnPlayerConfig'
Function: 'Load_And_Check_Spawnpoints'
Stack trace:
$CurrentDir:mpmissions/dayzOffline.chernarusplus/CustomSpawnPlayerConfig/Script.c:283
$CurrentDir:mpmissions\dayzOffline.chernarusplus\init.c:62
scripts/5_Mission/mission\missionserver.c:371
scripts/5_Mission/mission\missionserver.c:158
scripts/3_Game/dayzgame.c:910

 

Изменено пользователем PJIIOxa (история изменений)

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


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, PJIIOxa сказал:

123new да да эта ошибка не от вашего скрипта эта ошибка я пытался поставить скрипт чтоб при суициде шмотки пропадали с персонажа чтоб не засирали игроки побережье. Убрал этот скрипт серавно вашь не работает а такой ошибки как вы скинули у меня вообще в логах нет


SCRIPT    (E): NULL pointer to instance
Class:      'CustomSpawnPlayerConfig'
Function: 'Load_And_Check_Spawnpoints'
Stack trace:
$CurrentDir:mpmissions/dayzOffline.chernarusplus/CustomSpawnPlayerConfig/Script.c:283
$CurrentDir:mpmissions\dayzOffline.chernarusplus\init.c:62
scripts/5_Mission/mission\missionserver.c:371
scripts/5_Mission/mission\missionserver.c:158
scripts/3_Game/dayzgame.c:910

 

значит что-то не верно настрили, ошибка именно при респавне идет при попытке задать персонажу точку спавна и сет лута, скин задается нормально

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


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

123new все по гайду делал у меня только вот что пишет в скрипт логе при возрождении

Inventory::EEInit - Man=SurvivorBase<c7a56910> item=ItemInventory<80599410>
SCRIPT       : inv: DayZPlayerImplement::OnItemInHandsChanged
SCRIPT       : [09.03.2019 - 18.19.36] [CustomSpawnPlayerConfig] [SelectStartSetPlayer] Can't founded private sets for player P_JI_IOxa(steam64id=76561198015929553)
SCRIPT       : [09.03.2019 - 18.19.36] [CustomSpawnPlayerConfig] [SelectStartSetPlayer] For player P_JI_IOxa(steam64id=76561198015929553) will be used spawn default start set withoun number. 

 

Изменено пользователем PJIIOxa (история изменений)

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


Ссылка на сообщение
Поделиться на других сайтах
4 минуты назад, PJIIOxa сказал:

123new все по гайду делал у меня только вот что пишет в скрипт логе при возрождении


SCRIPT       : [09.03.2019 - 18.19.36] [CustomSpawnPlayerConfig] [SelectStartSetPlayer] Can't founded private sets for player P_JI_IOxa(steam64id=76561198015929553)
SCRIPT       : [09.03.2019 - 18.19.36] [CustomSpawnPlayerConfig] [SelectStartSetPlayer] For player P_JI_IOxa(steam64id=76561198015929553) will be used spawn default start set withoun number. 

 

значит не указан сет для uid 76561198015929553

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


Ссылка на сообщение
Поделиться на других сайтах
Только что, PJIIOxa сказал:

123new дак указан уже перепроверил на 100 раз

ну тогда сам скрипт изучай, его логику работы и ищи косяк, все что могу посоветовать пока

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


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

123new 

switch( use_set_id ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1)
		{
			case 1: //Set with number 1 (Сет с номером 1) КИТ для P_JI_IOxa
			{
				player.RemoveAllItems(); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку
				itemCreated = player.GetInventory().CreateInInventory("AssaultBag_Green"); 	// Выдаем рюкзак
				SetRandomHealthItem(itemCreated);												// Выдаем рюкзаку рандомное качество
				itemCreated = itemCreated.GetInventory().CreateInInventory("Mag_MP5_30Rnd");	// Добавляем в инвентарь созданного рюкзака магазин
				itemCreated = itemCreated.GetInventory().CreateInInventory("Mag_MP5_30Rnd");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Mag_MP5_30Rnd");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Mag_MP5_30Rnd");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Ammo_9x19");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Ammo_9x19");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Ammo_9x19");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Ammo_9x19");
				itemCreated = player.GetInventory().CreateInInventory("CargoPants_Green");	// Выдаем игроку штаны
				itemCreated = player.GetInventory().CreateInInventory("TacticalShirt_Olive");// Выдаем игроку куртку
				itemCreated = player.GetInventory().CreateInInventory("JungleBoots_Green");	// Выдаем игроку обувь
				itemCreated = player.GetInventory().CreateInInventory("TacticalGloves_Green"); // Выдаем игроку перчатки
				itemCreated = player.GetInventory().CreateInInventory("BalaclavaMask_Green"); // Выдаем игроку маску
				itemCreated = player.GetInventory().CreateInInventory("BallisticHelmet_Green");	// Выдаем игроку шлем
				itemCreated = player.GetInventory().CreateInInventory("SportGlasses_Black");	// Выдаем игроку очки
				itemCreated = player.GetInventory().CreateInInventory("Armband_White");	// Выдаем игроку повязку
				itemCreated = player.GetInventory().CreateInInventory("UKAssVest_Olive");	// Выдаем игроку разгрузку или броник
				itemCreated = player.GetInventory().CreateInInventory("Canteen");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("TacticalBaconCan");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("TacticalBaconCan");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("TacticalBaconCan");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("SewingKit");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("SewingKit");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("DuctTape");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("SodaCan_Pipsi");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("SodaCan_Pipsi");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("SodaCan_Pipsi");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("FirstAidKit");	// Выдаем игроку любой предмет
				SetRandomHealthItem(itemCreated);												// Выдаем аптечке рандомное качество
				itemCreated = itemCreated.GetInventory().CreateInInventory("BandageDressing");	// Добавляем в аптечку созданного рюкзака предмет
				itemCreated = itemCreated.GetInventory().CreateInInventory("BandageDressing");	// Добавляем в аптечку созданного рюкзака предмет
				itemCreated = itemCreated.GetInventory().CreateInInventory("BandageDressing");	// Добавляем в аптечку созданного рюкзака предмет
				itemCreated = itemCreated.GetInventory().CreateInInventory("BloodTestKit");	// Добавляем в аптечку созданного рюкзака предмет
				itemCreated = itemCreated.GetInventory().CreateInInventory("Matchbox");	    // Добавляем в аптечку созданного рюкзака предмет
				itemCreated = itemCreated.GetInventory().CreateInInventory("Battery9V");	// Добавляем в аптечку созданного рюкзака предмет
				SetRandomHealthItem(itemCreated);							// Выдаем предмету рандомное качество
				itemCreated = player.GetInventory().CreateInInventory("Machete");		// Выдаем игроку ножик или любое колюще режущее оружие в любой свободный слот в инвентаре
				itemCreated = player.GetInventory().CreateInInventory( "MP5K" ); 			// Выдаем игроку Основное оружие в любой свободный слот в инвентаре
				itemCreated.GetInventory().CreateAttachment( "ReflexOptic" ); 				// Выдаем игроку на Основное оружие оптику и крепим
				itemCreated.GetInventory().CreateAttachment( "MP5k_StockBttstck" ); 		// Выдаем игроку на Основное оружие цевье, приклад и глушитель, и крепим
				itemCreated.GetInventory().CreateAttachment( "MP5_RailHndgd" );				// Выдаем игроку на Основное оружие цевье, приклад и глушитель, и крепим
				itemCreated = player.GetInventory().CreateInInventory("CanOpener");				// Выдаем игроку предмет в любой свободный слот в инвентаре
				break;
			}

 

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


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, PJIIOxa сказал:

123new 


switch( use_set_id ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1)
		{
			case 1: //Set with number 1 (Сет с номером 1) КИТ для P_JI_IOxa
			{
				player.RemoveAllItems(); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку
				itemCreated = player.GetInventory().CreateInInventory("AssaultBag_Green"); 	// Выдаем рюкзак
				SetRandomHealthItem(itemCreated);												// Выдаем рюкзаку рандомное качество
				itemCreated = itemCreated.GetInventory().CreateInInventory("Mag_MP5_30Rnd");	// Добавляем в инвентарь созданного рюкзака магазин
				itemCreated = itemCreated.GetInventory().CreateInInventory("Mag_MP5_30Rnd");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Mag_MP5_30Rnd");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Mag_MP5_30Rnd");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Ammo_9x19");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Ammo_9x19");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Ammo_9x19");
				itemCreated = itemCreated.GetInventory().CreateInInventory("Ammo_9x19");
				itemCreated = player.GetInventory().CreateInInventory("CargoPants_Green");	// Выдаем игроку штаны
				itemCreated = player.GetInventory().CreateInInventory("TacticalShirt_Olive");// Выдаем игроку куртку
				itemCreated = player.GetInventory().CreateInInventory("JungleBoots_Green");	// Выдаем игроку обувь
				itemCreated = player.GetInventory().CreateInInventory("TacticalGloves_Green"); // Выдаем игроку перчатки
				itemCreated = player.GetInventory().CreateInInventory("BalaclavaMask_Green"); // Выдаем игроку маску
				itemCreated = player.GetInventory().CreateInInventory("BallisticHelmet_Green");	// Выдаем игроку шлем
				itemCreated = player.GetInventory().CreateInInventory("SportGlasses_Black");	// Выдаем игроку очки
				itemCreated = player.GetInventory().CreateInInventory("Armband_White");	// Выдаем игроку повязку
				itemCreated = player.GetInventory().CreateInInventory("UKAssVest_Olive");	// Выдаем игроку разгрузку или броник
				itemCreated = player.GetInventory().CreateInInventory("Canteen");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("TacticalBaconCan");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("TacticalBaconCan");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("TacticalBaconCan");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("SewingKit");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("SewingKit");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("DuctTape");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("SodaCan_Pipsi");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("SodaCan_Pipsi");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("SodaCan_Pipsi");	// Выдаем игроку любой предмет
				itemCreated = player.GetInventory().CreateInInventory("FirstAidKit");	// Выдаем игроку любой предмет
				SetRandomHealthItem(itemCreated);												// Выдаем аптечке рандомное качество
				itemCreated = itemCreated.GetInventory().CreateInInventory("BandageDressing");	// Добавляем в аптечку созданного рюкзака предмет
				itemCreated = itemCreated.GetInventory().CreateInInventory("BandageDressing");	// Добавляем в аптечку созданного рюкзака предмет
				itemCreated = itemCreated.GetInventory().CreateInInventory("BandageDressing");	// Добавляем в аптечку созданного рюкзака предмет
				itemCreated = itemCreated.GetInventory().CreateInInventory("BloodTestKit");	// Добавляем в аптечку созданного рюкзака предмет
				itemCreated = itemCreated.GetInventory().CreateInInventory("Matchbox");	    // Добавляем в аптечку созданного рюкзака предмет
				itemCreated = itemCreated.GetInventory().CreateInInventory("Battery9V");	// Добавляем в аптечку созданного рюкзака предмет
				SetRandomHealthItem(itemCreated);							// Выдаем предмету рандомное качество
				itemCreated = player.GetInventory().CreateInInventory("Machete");		// Выдаем игроку ножик или любое колюще режущее оружие в любой свободный слот в инвентаре
				itemCreated = player.GetInventory().CreateInInventory( "MP5K" ); 			// Выдаем игроку Основное оружие в любой свободный слот в инвентаре
				itemCreated.GetInventory().CreateAttachment( "ReflexOptic" ); 				// Выдаем игроку на Основное оружие оптику и крепим
				itemCreated.GetInventory().CreateAttachment( "MP5k_StockBttstck" ); 		// Выдаем игроку на Основное оружие цевье, приклад и глушитель, и крепим
				itemCreated.GetInventory().CreateAttachment( "MP5_RailHndgd" );				// Выдаем игроку на Основное оружие цевье, приклад и глушитель, и крепим
				itemCreated = player.GetInventory().CreateInInventory("CanOpener");				// Выдаем игроку предмет в любой свободный слот в инвентаре
				break;
			}

 

явно нехватка скобочек

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


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

123new дак это отрывок я не стал кидать весь у меня там дофига комплектов делал все копипастом так что шибок не может быть со скобочками

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


Ссылка на сообщение
Поделиться на других сайтах
4 минуты назад, PJIIOxa сказал:

123new дак это отрывок я не стал кидать весь у меня там дофига комплектов делал все копипастом так что шибок не может быть со скобочками

ну тогда повторюсь, сидим и ищем ошибки в коде скрипта вместе со мной, скорее всего это именно Script.c

Изменено пользователем 123new (история изменений)

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


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

Кароче, для тех кто решил помочь и подумать (хотя, таких, судя по всему, не существует, и я сам с собой тут говорю):

Ошибка возникает из-за недоступности данных с ref массивов типа map извне функции, где данные в них добавляются.
Т.е. из

ref map<string, array<vector>> players_spawnpoints = new map<string, array<vector> >;
	ref map<string, array<int>> players_sets = new map<string, array<int> >;
	ref map<string, string> players_skins = new map<string, string>;

доступны только:

	ref map<string, string> players_skins = new map<string, string>;

 

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


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

123new Я бы с удовольствием помог но я вообще ноль в скриптах. Я даже не понял что вы щас написали :blink:

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


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

PJIIOxa очень плохо, изучайте, иначе будете вечно кого-то ждать.

Кажется нашел решение, проверяю

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


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

PJIIOxa исправил гайд в теме, теперь должно работать нормально. Изменены только 2 скрипта из миссии сервера.

Гребанная богемия с отсутствием документации, чтоб они там перевернулись все!

Изменено пользователем 123new (история изменений)

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


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

Установил к себе на тест сервер где с друзьями играем все нормально работает. Теперь ждём след обнову бегемот после которой ни один скрипт не сработает.

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


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

123new мда уже тупо поставил выши два файла даже не стал редактировать экипировку в крашлог записывается вот такая хрень при возрождении

DESKTOP-0Q531K4, 09.03 2019 21:17:31

LocalDestroyEntity: No inventory location
Class:      'DayZPlayerInventory'
Function: 'Error'
Stack trace:
scripts/1_Core/proto/EnDebug.c:44
scripts/3_Game/Systems/Inventory/HumanInventory.c:340
scripts/4_World/Entities/ManBase/PlayerBase.c:777
$CurrentDir://mpmissions//dayzOffline.chernarusplus//CustomSpawnPlayerConfig//Sets.c:13
$CurrentDir://mpmissions//dayzOffline.chernarusplus//CustomSpawnPlayerConfig//Script.c:389
$CurrentDir:mpmissions\dayzOffline.chernarusplus\init.c:276
scripts/5_Mission/mission/missionServer.c:338
scripts/5_Mission/mission/missionServer.c:373
scripts/5_Mission/mission/missionServer.c:158
scripts/3_Game/DayZGame.c:910

Runtime mode

 

Изменено пользователем PJIIOxa (история изменений)

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


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

файл

Sets.c строка 13     

player.RemoveAllItems(); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку (не корректно работает, пишет краш лог)

Script.c строка 389    

StartSetsPlayers.StartSetsPlayer(player, use_set_id);

 

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


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

прописано оружие в руках а по факту когда ресаешься его вообще нет
 

itemCreated = player.GetHumanInventory().CreateInHands("akm");				// Выдаем игроку AKM в руки

 

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

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

    • Автор: Akie
      Вопрос в чем, как тому или иному предмету дать свойство, чтобы при использовании в инвентаре он удалялся и давал хумку, пытался сделать сам, сделал удаление предмета через функцию player removeMagazine, потом проверку на количество хумки, то есть, если хумка больше 2500 то _positive, если меньше то _negative, прописал выдачу в зависимости от условия к примеру :
      if (_Positive) then { player setVariable["humanity",(_HumanityVal+5000),true] }; прикрутил экзекут скрипта к Overwrites click actions, кнопка появилась, но при нажатии, ничего не происходит, ни удаления предмета, ни начисления хуманити, куда копать?

      Понимаю, что чего-то не хватает, а вот чего понять не могу, вот сам скрипт:
       
      private ["_item","_HumanityVal","_Negative","_Positive"] _item = "Итем класс нейм"; player removeMagazine _item; _HumanityVal = player getVariable["humanity",0]; if (_HumanityVal <= -2500) then {_Negative = true;}; if (_HumanityVal >= 2500) then {_Positive = true;}; if (_Positive) then { player setVariable["humanity",(_HumanityVal+5000),true] }; if (_Negative) then { player setVariable["humanity",(_HumanityVal-5000),true] }; Подскажите пожалуйста, что не так)
    • Автор: Sancezz063
      Всем привет!
      Не получается сделать стартовый лут для персонажа, нужно заменить полностью одежду и то что выдается
      Знаю многие сейчас начнут писать мол всё есть на форуме, а я отвечу, делаю я всё именно так как рассказывается и нифига не работает, откапал старый рабочий init.c и он тоже не работает, то ли разрабы слегка поменяли код, толи я нифига не понимаю.
      Может кому не лень, напишите пример по созданию шмотки и складыванию в неё какого-нибудь предмета.
      Заранее спасибо!
      override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { EntityAI itemTop; EntityAI itemEnt; ItemBase itemBs; float rand; itemTop = player.FindAttachmentBySlotName("Body"); if ( itemTop ) { itemEnt = itemTop.GetInventory().CreateInInventory("Rag"); if ( Class.CastTo(itemBs, itemEnt ) ) itemBs.SetQuantity(4); SetRandomHealth(itemEnt); string chemlightArray[] = { "Chemlight_White", "Chemlight_Yellow", "Chemlight_Green", "Chemlight_Red" }; int rndIndex = Math.RandomInt(0, 4); itemEnt = itemTop.GetInventory().CreateInInventory(chemlightArray[rndIndex]); SetRandomHealth(itemEnt); rand = Math.RandomFloatInclusive(0.0, 1.0); if ( rand < 0.35 ) itemEnt = player.GetInventory().CreateInInventory("Apple"); else if ( rand > 0.65 ) itemEnt = player.GetInventory().CreateInInventory("Pear"); else itemEnt = player.GetInventory().CreateInInventory("Plum"); SetRandomHealth(itemEnt); } }  
    • Автор: NoNameUltima
      Автор:
      Я. Версия админки:
      R3  
      Описание:
      Админка поставляется с ключами, и подписями. Админка разделена на 2 части - клиентская, и серверная. Так же работает в оффлайн режиме.  
      Для установки админки, необходимо:
      На сервере подключить серверный мод. На сервере подключить клиентский мод. На сервере скопировать ключ из клиентского мода, и поместить в папку keys сервера. На клиенте добавить клиентский мод. В конфигурационный файл администрации прописать UID(ы) администраторов и модераторов.  
      Рабочие пункты админки:
       
      Отображение в 3D(ESP от 0 до 1000м)
      Настройки радиуса отображения Игроки. Зомби. Техника. Постройки. Объекты.  
      Отображение на карте(в радиусе игрока от 0 до 1000м):
      Настройки радиуса отображения Игроки. Зомби. Техника. Постройки. Объекты. НПЦ.  
      Сервер:
      Установка времени на сервере. Установка погоды на сервере(В бете).  
      Собственные:
      Телепорт по векторам(4 - по направлению взгляда. 5 - вверх). Телепорт по карте. Неуязвимость. Бесконечный БК. Невидимость. Защита от зомби. Свободная камера.  
      Игроки:
      Телепорт игрока к администратору. Телепорт администратора к игроку. Телепорт в заданные координаты. Лечение. Очистка инвентаря. Выдача БК к текущему оружию(в руках). Заблокировать. Разблокировать. Убить. Отсоединить. Забанить(свой файл банов по UID) Создание перед игроком объектов из заранее подготовленных файлов на сервере. Игроки(доп.  пункты для мода Ultima):
      Изменить баланс наличных Изменить банковский баланс Изменить репутацию Изменить фракцию Изменить кол-во убийств зомби Изменить кол-во убийств людей  
      Создание объектов:
      Фильтр при выборе раздела создания предметов(поиск по имени класса). Пресеты для создания авто, из аддонов(авто с обвесом, - колеса и т.п., так же можно добавлять и для стандартной техники, если нет желания ее создавать в сборе).  
      Удаление объектов:
      Все все объекты в радиусе X(не более 100м). Все объекты в радиусе X, по классу(не более 100м). Объект в прицеле по горячей клавише.  
      Другое:
      Карта администратора. Монитор отладки. Информационный виджет. Наблюдение за игроком.  
      Горячие клавиши:
      [        -     Вызов панели администратора. HOME     -     Вкл\Выкл отображения полосы отладки. DELETE   -    Удаление объекта в прицеле. 4  -    Телепорт по направлению взгляда. 5  -    Телепорт вверх. SHIFT+M - Карта администратора. F11 - Дебаг администратора.  
      Сообщения:
      Вывод сообщений игрокам, о действиях модератора(если в админке UID указан, как UID модератора).  
      Журналы:
      Действия администрации.  
      Стоимость:
      3500  
      Видео:( ВНИМАНИЕ! В ВИДЕО, ВНУТРИ ПАНЕЛИ АДМИНИСТРАТОРА, РАБОТАЮТ ТОЛЬКО ТЕ ПУНКТЫ КОТОРЫЕ УКАЗАНЫ ВЫШЕ! ОСТАЛЬНЫЕ ПУНКТЫ ДОБАВЛЕНЫ НА БУДУЩЕЕ, И МОГУТ БЫТЬ ИЗМЕНЕНЫ)
      P.S. Обновления платные - 25% от стоимости админки.
      Скайп: hf-trade
    • Автор: NoNameUltima
      ASCP (переделка DZEU)
       
      Возможности вкладки RCon:
      Просмотр чата - любые переписки, отправка собственных сообщений в чат, а так же отправка личных сообщений выбранному игроку. Цвет фона, и сообщений настраивается. Просмотр игроков находящихся на сервере(страна- флаг, GUID, IP, Порт, пинг) Таблица администрации - вы можете добавлять администраторов, и модераторов, - при входе на сервер будет выводится специализированное сообщение(в зависимости от настроек). Белый список. Оповещения(по дням недели, времени, интервалу. Как технические - рестарты и т.п., так и текстовые). Авто кики, с сообщениями о не правильных установках игрока(Например у вас запрещены некоторые символы в именах игроков). Работа с бан листами - отсев дубликатов, склейка банов. Список имен, GUID'ов, и дат, игроков заходивших на ваш сервер. Возможность запрета смены имени игрока, после первого захода на сервер.*Опция в режиме тестирования. Стандартные команды RCon(смена пароля, перезагрузка списка банов и т.п.) Настройки задающие IP, порт, пароль, максимально допустимую длину имени, максимально допустимое время нахождения в лобби и т.п. Авто-сохранение журналов чата ежечасно по указанным вами путям. Возможности вкладки сервер:
      Ручной запуск сервера. Настройки задающие авто-запуск сервера, командную строку, путь к файлу сервера.  
      Дополнительно:
      Авто-запуск батч файла перед стартом сервера, внутри которого вы можете выполнять любые события. Например связанные с чисткой БД. *Для примера созданы и приложены события для А2 DayZ Epoch: - Удаление определенной техники, на каждом рестарте. - Удаление объектов поврежденных более чем на Х процентов, на каждом рестарте. - Нанесение Х урона объектам, раз в сутки. - Удаление персонажей, которе не заходили на сервер более Х суток. - Пополнение кол-ва объектов для торговцев, на каждом рестарте, в зависимости от оставшегося кол-ва. - Удаление объектов не используемых более Х часов, на каждом рестарте. Авто-сохранение файлов серверных журналов. По файлам и папкам. Авто-очистка папок с журналами, от файлов старше Х дней(настраивается). Просмотр реал-тайм журналов сервера, таких как RPT файлы и т.п.  
      Работа программы проверялась на ОС'ях:
       
      Windows 7 Windows server 2008 Windows server 2012  
      Использовались сервера:
      A2OA DayZ Epoch\Overpoch, A3 Exile DayZ SA  
      Пример строки запуска в программе, для запуска DayZ SA:
      *т.к. строка зачастую длинная, ее проще править напрямую в файле ASCP_Settings.ini
      Параметры запуска(командная строка)=-port=2302 "-config=Instance_1\server.cfg" "-cfg=Instance_1\basic.cfg" "-profiles=Instance_1" "-mod=@Ultima;@UltimaClientAdmin;" "-serverMod=@UltimaServer;@UltimaServerAdmin;" -user=Instance_1 -name=Ultima -nologs -adminlog -freezecheck -FilePatching  
      Пример bat файла, для запуска DZSAL
      @echo off set DayZExe=DZSALModServer.exe set DayZConfig=Instance_1\server.cfg set DayZBasic=Instance_1\basic.cfg set DayZProfiles=Instance_1 set DayZUser=Instance_1 set DayZName=Ultima set PORT=2302 set SERVERMODS=@UltimaServer;@UltimaServerAdmin; set MODS=@UltimaData;@Ultima;@UltimaClientAdmin; set IGNOREMOD=@UltimaServer;@UltimaServerAdmin; set IP=192.168.1.2 start "" "%DayZExe%" -ip=%IP% -instanceId=1 -port=%PORT% -ignoremod=%IGNOREMOD% -skipserver -serverMod=%SERVERMODS% -mod=%MODS% -config=%DayZConfig% -cfg=%DayZBasic% -profiles=%DayZProfiles% -user=%DayZUser% -name=%DayZName% -nologs -adminlog -freezecheck -FilePatching *Батч файл запускает http сервер, с лаунчером, без запуска самого сервера DayZ(за запуск сервера отвечает ASCP), и игнорирует серверные моды.
       
      Проблемы кодировок:
      На Windows сервер, иногда, неверно установлены кодировки, и вместо кириллицы, либо "кракозябры", либо вообще не видно текста.
      Решение проблемы достаточно простое -
      Запускаем из командной строки: regedit (кто не знает, как это сделать, можно просто открыть любую папку в windows, и вверху в строке где написан путь к папке, написать regedit). Далее идем по пути регистра: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage] В правом окошке видим кодировки, находим кодировки начинающиеся с 1250, и до 1255. Правым кликом на кодировку, - изменить значение, и меняем на 1251, т.е. 1250=1251, 1251=1251, 1252=1251.... Перезагружаемся.  
      Полную версию программы можно приобрести за 2000р.
      P.S. Тем кто брал DZEU - может получить полную версию ASCP бесплатно.
       
      Немного скриншотов:
       
      Окошко статуса сервера:

      Окно настроек:

      Окно игроков:

       
×
×
  • Создать...