Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
123new

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

Recommended Posts

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

 

Описание:

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

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

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

 

547566402_.png.f490b12005a30e3bf6619a4b863cffaa.png

 

2. В файле:

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

в самом верху файла добавить:

#include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c"

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

1771316958_1.png.3b304fc8c3f4e51f17fe2d646935cf46.png

 

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 будет применено для всех игроков при респавне в случае, если им не выдан никакой сет!
Поумолчанию в функции 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 при появлении в сети серверной части игры

 

 

Edited by 123new
обновление гайда и файлов (see edit history)

Share this post


Link to post
Share on other sites



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

Share this post


Link to post
Share on other sites

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

Еще и в 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  

 

Edited by PJIIOxa (see edit history)

Share this post


Link to post
Share on other sites

Блин у кого то работает скрипт????

Share this post


Link to post
Share on other sites

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. 

 

Share this post


Link to post
Share on other sites
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 массив с параметрами передается в не верном виде, так как по логике срабатывания скрипта все верно.

Share this post


Link to post
Share on other sites
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 ошибки

Share this post


Link to post
Share on other sites

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

 

Edited by PJIIOxa (see edit history)

Share this post


Link to post
Share on other sites
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

 

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

Share this post


Link to post
Share on other sites

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. 

 

Edited by PJIIOxa (see edit history)

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
Только что, PJIIOxa сказал:

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

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites
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;
			}

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
4 минуты назад, PJIIOxa сказал:

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

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

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites

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

Ошибка возникает из-за недоступности данных с 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>;

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

Edited by PJIIOxa (see edit history)

Share this post


Link to post
Share on other sites

файл

Sets.c строка 13     

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

Script.c строка 389    

StartSetsPlayers.StartSetsPlayer(player, use_set_id);

 

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By vitacite
      Квест на аномалии. Участники - любые игроки. 3 НПС, 3 Анимированных аномалии (пока без дамага), 3 квестовых предмета - детектор аномалий, карта сокровищь и журнал с девчонками 🙂
      Выглядит это так...
       

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

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

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

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

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

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

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

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

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

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
       
       
      Мануаль по установке тут....
      Обновление от 19.01.2016
      https://github.com/olkeakavitacite/EQP_Anomaly/
      Так же находится описание, как и чего делать.
       
    • By DrTauren
      DZAI создана простой, легко настраиваемой, лёгкой в установке системой. Она создана для работы с любыми DayZ-модами и картами.

      Особенности системы:
      Статичный спавн ботов - в городах, деревнях, на военных базах Динамический спавн ботов - спавнятся рандомно по всей карте. Могут появиться где угодно и когда угодно Патрули на воздушной технике - патрули также появляются рандомно. Пешие игроки имеют маленький шанс быть обнаруженными, но игрокам на какой-либо технике повезло гораздо меньше  Сухопутные патрули на технике - появляются так же рандомно, курсируют по дорогам между городами и деревнями Собственноручно настраиваемые патрули - спавните ботов и различные патрули в нужных вам местах. Например на ваших кастомных военных базах Боты используют только лутабельное оружие - вы можете подобрать любое оружие с убитого бота без каких-либо проблем, т.к. их лут генерируется с учётоб таблиц лута вашего мода. Чем реже лут у бота, тем он опасней (автор имеет ввиду скилл бота) Система жизней - боты имеют столько же жизней, как игрок. Точно так же могут упасть без сознания. Так что лучше стрелять по головам  
       
      Установка:
      1) Качаем архив: 
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      2) Распаковываем наш dayz_server.pbo, затем открываем файл server_monitor.sqf
      3) Находим строку:
      allowConnection = true; и добавляем над ней эту:
      [] call compile preprocessFileLineNumbers "\z\addons\dayz_server\DZAI\init\dzai_initserver.sqf"; 4) Копируем папку DZAI из скаченного архива в корень нашего dayz_server
      5) Настроить работу системы под себя вы можете в этом файле: DZAI\init\dzai_config.sqf
    • By 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] }; Подскажите пожалуйста, что не так)
    • By 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); } }  
  • Our picks

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.