<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x41F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x435; &#x442;&#x435;&#x43C;&#x44B;: &#x412;&#x435;&#x440;&#x441;&#x438;&#x44F; 1.0 &#x438; &#x432;&#x44B;&#x448;&#x435;</title><link>https://s-platoon.magicbyte.org/forum/234-versiya-10-i-vyshe/</link><description>&#x41F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x435; &#x442;&#x435;&#x43C;&#x44B;: &#x412;&#x435;&#x440;&#x441;&#x438;&#x44F; 1.0 &#x438; &#x432;&#x44B;&#x448;&#x435;</description><language>ru</language><item><title>[DayZ 1.0] &#x41E;&#x431;&#x44A;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x43E; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x438;&#x433;&#x440;&#x43E;&#x43A;&#x43E;&#x432; &#x432; &#x447;&#x430;&#x442;</title><link>https://s-platoon.magicbyte.org/topic/7455-dayz-10-obyavleniya-o-kolichestve-igrokov-v-chat/</link><description><![CDATA[
<p style="text-align: center;">
	<span style="color:#e74c3c;"><span style="font-size:20px;">В данной теме мы с вами научимся создавать простой скрипт, который позволит выводить в чат объявления о количестве игроков. </span></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;"><span style="color:#27ae60;">Нам понадобится:</span></span>
</p>

<p>
	1. Сервер DayZ 1.0, сделанный по одному из гайдов:
</p>
<iframe data-embedcontent="" frameborder="0" src="https://s-platoon.ru/applications/core/interface/js/spacer.png" data-embed-src="https://s-platoon.magicbyte.org/topic/7015-sozdaem-server-dayz-063-na-osnove-oficialnyh-servernyh-faylov-igry-v-steam/?do=embed"></iframe>

<p>
	2. Notepad++
</p>

<p>
	3. Немножечко трезвого ума
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#27ae60;">Приступим:</span></strong>
</p>

<p>
	1. Открываем <strong>Mpmissions</strong> - <strong>dayzOffline.chernarusplus</strong> - <strong>init.c</strong><br>
	2. В самом начале файла добавляем:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7377_5" style="">
<span class="pln">#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\PlayersMessagesCount.c" </span></pre>

<p>
	Находим функцию
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9609_4" style="">
<span class="pln">void main()</span></pre>

<p>
	и перед ее закрывающей скобкой "}"добавляем:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6351_8" style="">
<span class="pln">GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(SendPlayersCount, CountPlayers_TIME_InfoPlayers_Repeat, true); </span></pre>

<p>
	3. Помещаем в папку файл <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<p>
	Либо создаем вручную этот файл с именем "<strong>PlayersMessagesCount.c</strong>" и заполняем его следующим текстом:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6351_6" style="">
<span class="pln">int CountPlayers_TIME_InfoPlayers_Repeat = 120000; //in ms (120 seconds = 120000)
string Message_Chat = "Online Players: ";
void SendPlayersCount()
{
	array</span><span class="tag">&lt;Man&gt;</span><span class="pln"> players = new array</span><span class="tag">&lt;Man&gt;</span><span class="pln">;
	GetGame().GetPlayers( players );
	int numbOfplayers = players.Count();
	
	if( numbOfplayers &gt; 0 )
	{
		foreach(Man player: players)
		{
			CountPlayers_SendPersonalMessage(Message_Chat + numbOfplayers.ToString(), player);
		}
	//   GetGame().ChatPlayer(0,Message_Chat + numbOfplayers.ToString());
	}
}
void CountPlayers_SendPersonalMessage(string message, Man player) 
{
	if(( player ) &amp;&amp; (message != ""))
	{
		Param1</span><span class="tag">&lt;string&gt;</span><span class="pln"> m_GlobalMessage = new Param1</span><span class="tag">&lt;string&gt;</span><span class="pln">(message); 
		GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); 
	}
}</span></pre>

<p>
	4. Настраиваем файл как нам нужно. Т.е. в строке
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6351_4" style="">
<span class="pln">int CountPlayers_TIME_InfoPlayers_Repeat = 120000; //in ms (120 seconds = 120000)</span></pre>

<p>
	указываем время повтора вывода сообщений в чат (поумолчанию стоит 2 минуты)
</p>

<p>
	и текст сообщений в переменной
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7377_13" style="">
<span class="pln">string Message_Chat = "Online Players: ";</span></pre>

<p>
	 
</p>

<p>
	P.S. Если сообщения вам не видны, включите их видимость в настройках вашего клиента игры для себя!
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7455</guid><pubDate>Sat, 16 Feb 2019 17:23:11 +0000</pubDate></item><item><title>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x441;&#x432;&#x43E;&#x439; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x43D;&#x44B;&#x439; &#x43C;&#x43E;&#x434;. [DayZ 1.4 to Discontined]</title><link>https://s-platoon.magicbyte.org/topic/7838-sozdaem-svoy-servernyy-mod-dayz-14-to-discontined/</link><description><![CDATA[
<p style="text-align:center;">
	<span style="font-size:16px;"><span style="color:#3498db;">В данной теме я распишу возможность создания серверного <abbr title="Модификации">мода</abbr> для сервера на собственном примере и объясню как его собрать.Работающий на момент публикации статьи на версии сервера игры 1.04.152050.</span></span>
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#f39c12;">Темы к ознакомлению, связанные с данным материалом:</span></strong>
</p>

<p>
	<a href="https://s-platoon.magicbyte.org/topic/8701-enscript-uchimsya-osnovam-skriptinga/" rel="">https://s-platoon.ru/topic/8701-enscript-uchimsya-osnovam-skriptinga/</a>
</p>

<p>
	<a href="https://s-platoon.magicbyte.org/topic/8622-enscript-delaem-skript-dlya-moda-i-osnovnye-principy-skriptinga-modov/" rel="">https://s-platoon.ru/topic/8622-enscript-delaem-skript-dlya-moda-i-osnovnye-principy-skriptinga-modov/</a>
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#2ecc71;">Нам понадобятся:</span></strong>
</p>

<p>
	1. Сервер игры актуальной версии, не ниже патча 1.04. Как установить можно узнать тут:
</p>
<iframe data-embedcontent="" data-embedid="embed2687088558" frameborder="0" scrolling="no" style="height:392px;max-width:502px;" data-embed-src="https://s-platoon.magicbyte.org/topic/7243-sozdaem-server-dayz-standalone-na-osnove-oficialnyh-servernyh-faylov-igry-v-steam/?do=embed"></iframe>

<p>
	До версии 1.04 параметра <u>servermod </u>у сервера игры не существовало!!!
</p>

<p>
	2. Программа '<strong>PBO manager</strong>' с состава инструментария армы из сети: <a href="https://www.armaholic.com/page.php?id=16369" rel="external nofollow">https://www.armaholic.com/page.php?id=16369</a>
</p>

<p>
	Зеркало: <a href="https://yadi.sk/d/_gmzoNSDpNJTt" rel="external nofollow">https://yadi.sk/d/_gmzoNSDpNJTt</a>
</p>

<p>
	Еще зеркало: <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<p>
	3. <abbr title="Сценарий, выполняемый системой">Скрипты</abbr> для упаковки в наш <abbr title="Модификация">мод</abbr>, сформированные и подготовленные нами вручную. Как - смотрите тему
</p>
<iframe allowfullscreen="" data-embedauthorid="11586" data-embedcontent="" data-embedid="embed632366768" scrolling="no" style="height:212px;max-width:502px;" data-embed-src="https://s-platoon.magicbyte.org/topic/8622-enscript-delaem-skript-dlya-moda-i-osnovnye-principy-skriptinga/?do=embed&amp;embedDo=getLastComment"></iframe>

<p>
	4. Notepad++ <a href="https://notepad-plus-plus.org/download" rel="external nofollow">https://notepad-plus-plus.org/download</a>
</p>

<p>
	P.S. Вместо '<strong>PBO manager</strong>' можно использовать DayZ Tools, но как им пользоваться разбираемся сами <span class="ipsEmoji">?</span>
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#2ecc71;">И так, приступим:</span></strong>
</p>

<p>
	1. Предположим, что у нас имеется свой некий набор <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<p>
	Подробнее о создании <abbr title="Сценарий, выполняемый системой">скриптов</abbr> для своих целей - <a href="https://s-platoon.magicbyte.org/topic/8622-enscript-delaem-skript-dlya-moda-i-osnovnye-principy-skriptinga/?do=getLastComment" rel="">читайте вот эту тему!</a>
</p>

<p>
	2. Создаем папку с нашим модом. Для примера, это будет папка '<strong>@My_Server_Mod</strong>'. В созданной нами папке создаем папку '<strong>Addons</strong>', а в ней папку '<strong>My_Server_Mod</strong>'.<br>
	3. Помещаем содержимое распакованного архива в папку '<strong>My_Server_Mod</strong>'. Должно получиться так:
</p>

<p>
	<img alt="Безымянный.png" class="ipsImage ipsImage_thumbnailed" data-fileid="4304" data-ratio="36,13" style="height:auto;" width="573" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2019_07/5d242fa5ed0f2_.png.3fb3af9c556f75db587f5c439fa01746.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"></p>

<p>
	4. В папке '<strong>My_Server_Mod</strong>' создаем файлик '<strong>config.cpp</strong>' и заполняем его следующими данными (советую использовать Notepad++ для этого):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">class CfgPatches	// требуется обязательно
{
	class My_Server_Mod	// требуется обязательно, совпадает с именем мода
	{
		units[]={}; 				// may be not worked
		weapons[]={}; 				// may be not worked
		requiredVersion=0.1; 		// may be not worked
		requiredAddons[]={};
		/*
			requiredAddons[]=
			{
				"DZ_Data",		// Перечисляем требуемые и используемые модом аддоны (pbo-файлы игры и модов по их внутренним скриптовым именам)
			};
		*/
	};
};
class CfgMods // // требуется обязательно, совпадает с именем мода
{
	// https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation
	class My_Server_Mod
	{
	    dir = "My_Server_Mod";							// Имя папки мода, совпадает с именем мода
	    picture = ""; 									// Картинка в описании мода
	    action = "";  									// Ссылка, например вот так: action = "https://dayz.com/";	
	    hideName = 1;									// Не уверен, что этот параметр работает
	    hidePicture = 1;								// Не уверен, что этот параметр работает
	    name = "My_Server_Mod";  						// Имя мода (а также его внутреннее скриптовое имя)
		logoSmall = "Mods/TestMod/modlogosmall.tga";	// значок рядом с именем мода, если описание не развернуто
		logo = "Mods/TestMod/modlogo.tga";				// логотип под меню игры
		logoOver = "Mods/TestMod/modlogohover.tga";		// при наведении курсора мыши на логотип
		tooltip = "tooltip";							// подсказка при наведении курсора мыши
		overview = "My Server Mod"; 					// Описание
	    credits = "123new";								// credits
	    author = "123new";								// author
	    authorID = "0";  								// author steam ID 
	    version = "1.0";  								// version
	    extra = 0;										// Не уверен, что этот параметр работает
		
	    type = "mod"; 									// требуется обязательно, остается неизменным
		// inputs = "mods\testmod\inputs\my_new_inputs.xml"; 	     // необязательно, при использовании пользовательских inputs
		dependencies[]={"Core","GameLib","Game","World","Mission"};  							// необязательно, если необходимо установить зависимость класса

	    class defs
	    {			
			class engineScriptModule
			{
				value=""; // если значение пустое, используется функция ввода по умолчанию
				files[]={"My_Server_Mod/scripts/1_Core"}; // вы можете добавить любое количество файлов или каталогов, и они будут скомпилированы вместе с оригинальными скриптами игрового модуля
			};
			class gameLibScriptModule
			{
				value="";
				files[]={"My_Server_Mod/scripts/2_GameLib"};
			};
			class gameScriptModule
			{
				//value="CreateGameMod"; // когда значение заполнено, имя функции ввода модуля скрипта по умолчанию перезаписывается им
				value = "";
				files[]={"My_Server_Mod/scripts/3_Game"};
			};
			class worldScriptModule
			{
				value="";
				files[]={"My_Server_Mod/scripts/4_World"};
			};
			class missionScriptModule
			{
				value="";
				files[]={"My_Server_Mod/scripts/5_Mission"};
			};
        };
		// Если какой-то из разделов скриптинга вам не нужен и вы не сибираетесь его паковать, сотрите необходимый блок с ним выше и в массиве dependencies 
    };
};</span></pre>

<p>
	Пояснения в файле оставил. Файл готовый: <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<p>
	Как видите, в '<strong>deffs</strong>' названия классов и путей соответствуют родным из '<strong>scripts.pbo</strong>', но с допиской имени <abbr title="Модификации">мода</abbr>. Имя <abbr title="Модификации">мода</abbr> в данном случае и есть идентификатор для обращения к своему моду извне. А в '<strong>dependencies</strong>' перечисляются используемые классы оригинальных <abbr title="Сценарий, выполняемый системой">скриптов</abbr> без дописки номера секции. Количество используемых '<strong>dependencies</strong>' и блоков '<strong>deffs</strong>' должно быть идентично.
</p>

<p>
	Пояснения есть также и в официальной документации от разработчика: <a href="https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation" rel="external nofollow">https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation</a>
</p>

<p>
	5. Запаковываем нашу папку '<strong>My_Server_Mod</strong>' в pbo-файл '<strong>My_Server_Mod.pbo</strong>' через 'PBO manager', как на скриншоте ниже:
</p>

<p>
	<img alt="Безымянный.png" class="ipsImage ipsImage_thumbnailed" data-fileid="4306" data-ratio="58,31" style="height:auto;" width="830" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2019_07/5d243426305c7_.png.28c779f068265378c199bbedeb71aae6.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"><img alt="Безымянный.png" class="ipsImage ipsImage_thumbnailed" data-fileid="4307" data-ratio="26,32" style="height:auto;" width="661" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2019_07/5d2434a34e553_.png.d56655e5b1321df9207d354d99c071f1.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"></p>

<p>
	Можно использовать и другие способы запаковки, если знаете их или привычны вам.
</p>

<p>
	6. Добавляем в параметры запуска сервера параметр:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">"-servermod=@My_Server_Mod;" -FilePatching</span></pre>

<p>
	7. Радуемся, наш серверный <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<p>
	<strong>P.S. </strong>Создавать <strong>bikey</strong> файл для <abbr title="Модификации">мода</abbr> и <strong>bisign</strong> подписи для него не требуется, иначе это может привести к неработоспособности серверной модификации (возможно, недоработка сервера игры разработчиком)
</p>

<p>
	 
</p>

<p>
	Отмечу сразу, что данный способ подходит для модификации и переписывания оригинальных классов <abbr title="Сценарий, выполняемый системой">скриптов</abbr> сервера от разработчиков и модификации чужих <abbr title="Модификации">модов</abbr> с помощью моддинга, применяется исключительно на стороне сервера игры и клиент игры не затрагивает. Распространять такой <abbr title="Модификация">мод</abbr> игрокам НЕ НУЖНО!<br>
	Изменение оригинальных <abbr title="Сценарий, выполняемый системой">скриптов</abbr>, для которых не предусмотрена операция '<strong>modded class</strong>' в движке игры, а также классов и функций, которые защищены языком и движком игры от такого рода действий через серверные <abbr title="Модификации">моды</abbr> не получится. Если вы столкнулись с этим, вам проще распаковать <strong>scripts.pbo</strong> и поместить папку <strong>scripts</strong> в корень сервера игры, добавить в параметры запуска сервера параметр <strong>-FilePatching</strong> и изменять напрямую в папке необходимые вам файлы.Запаковывать назад в pbo папку и размещать в dta в таком случае не нужно!
</p>

<p>
	 
</p>

<p>
	<strong>P.P.S.</strong> Процедура создания своего собственного клиент-серверного <abbr title="Модификации">мода</abbr> на основе <abbr title="Сценарий, выполняемый системой">скриптов</abbr> работает таким же образом. В случае создания такого <abbr title="Модификации">мода</abbr>, файл '<strong>config.cpp</strong>' может быть для стандартного <abbr title="Модификации">мода</abbr> более разнообразным, а также после требуется обязательная подпись такого <abbr title="Модификации">мода</abbr> в <strong>bisign</strong> и создание <strong>bikey</strong> файлов. Более подробно это освещать требуется отдельно!
</p>
]]></description><guid isPermaLink="false">7838</guid><pubDate>Tue, 09 Jul 2019 06:52:28 +0000</pubDate></item><item><title>&#x41F;&#x435;&#x440;&#x441;&#x43E;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x441;&#x43A;&#x438;&#x43D;, &#x442;&#x43E;&#x447;&#x43A;&#x430; &#x441;&#x43F;&#x430;&#x432;&#x43D;&#x430;, &#x438; &#x441;&#x435;&#x442; &#x441; &#x43B;&#x443;&#x442;&#x43E;&#x43C; &#x43F;&#x440;&#x438; &#x440;&#x435;&#x441;&#x43F;&#x430;&#x432;&#x43D;&#x435;, &#x441;&#x442;&#x430;&#x440;&#x442;&#x43E;&#x432;&#x44B;&#x439; &#x43B;&#x443;&#x442; &#x434;&#x43B;&#x44F; &#x432;&#x441;&#x435;&#x445;!</title><link>https://s-platoon.magicbyte.org/topic/7539-personalnyy-skin-tochka-spavna-i-set-s-lutom-pri-respavne-startovyy-lut-dlya-vseh/</link><description><![CDATA[
<p style="text-align:center;">
	<span style="font-size:16px;">И так, ребятки, вот вам небольшая 'полезняшка' от меня, и совершенно бесплатно! </span>
</p>

<p>
	 
</p>

<p>
	<span style="color:#27ae60;"><span style="font-size:18px;"><strong>Описание:</strong></span></span>
</p>

<p>
	<p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

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

<p>
	<strong>Script.c</strong>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">/*
	Описание: Скрипт выдачи индивидуального стартового лута, скина игрока и точек спавна
	Автор: 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&lt;string, ref array</span><span class="tag">&lt;vector&gt;</span><span class="pln">&gt; players_spawnpoints = new map&lt;string, ref array</span><span class="tag">&lt;vector&gt;</span><span class="pln"> &gt;;
	ref map&lt;string, ref array</span><span class="tag">&lt;int&gt;</span><span class="pln">&gt; players_sets = new map&lt;string, ref array</span><span class="tag">&lt;int&gt;</span><span class="pln"> &gt;;
	ref map</span><span class="tag">&lt;string</span><span class="pln">, </span><span class="atn">string</span><span class="tag">&gt;</span><span class="pln"> players_skins = new map</span><span class="tag">&lt;string</span><span class="pln">, </span><span class="atn">string</span><span class="tag">&gt;</span><span class="pln">;
	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) &amp; (pos_y == 0.0) &amp; (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</span><span class="tag">&lt;string&gt;</span><span class="pln"> 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</span><span class="tag">&lt;string&gt;</span><span class="pln"> ReadFileConfig()
	{
		private string name_block_work = "[ReadFileConfig] ";
		private array</span><span class="tag">&lt;string&gt;</span><span class="pln"> readed_lines_config = new array</span><span class="tag">&lt;string&gt;</span><span class="pln">;
		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 ) &gt; 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</span><span class="tag">&lt;string&gt;</span><span class="pln"> readed_lines_config)
	{
		private bool return_zn = true;
		private string name_block_work = "[AnaliseFileConfig] ";
		if (readed_lines_config.Count() &gt; 0)
		{
			foreach (string line : readed_lines_config)
			{
				if (line.Contains(block_split_parameters_config))
				{
					private array</span><span class="tag">&lt;string&gt;</span><span class="pln"> splited_line = new array</span><span class="tag">&lt;string&gt;</span><span class="pln">;
					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</span><span class="tag">&lt;string&gt;</span><span class="pln"> 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</span><span class="tag">&lt;string&gt;</span><span class="pln"> splited_line = new array</span><span class="tag">&lt;string&gt;</span><span class="pln">; 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</span><span class="tag">&lt;vector&gt;</span><span class="pln"> temp_players_spawnpoints = new array</span><span class="tag">&lt;vector&gt;</span><span class="pln">; temp_players_spawnpoints.Clear();
			array</span><span class="tag">&lt;int&gt;</span><span class="pln"> temp_players_sets = new array</span><span class="tag">&lt;int&gt;</span><span class="pln">; temp_players_sets.Clear();
			array</span><span class="tag">&lt;string&gt;</span><span class="pln"> temp_players_spawnpoints_string = new array</span><span class="tag">&lt;string&gt;</span><span class="pln">; temp_players_spawnpoints_string.Clear();
			array</span><span class="tag">&lt;string&gt;</span><span class="pln"> temp_players_sets_string = new array</span><span class="tag">&lt;string&gt;</span><span class="pln">; 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() &gt; 0) &amp;&amp; (enabled_loaded_successfull_config))
				{				
					if (players_spawnpoints.Contains(UID_P))
					{
						private array</span><span class="tag">&lt;vector&gt;</span><span class="pln"> readed_lines_config = new array</span><span class="tag">&lt;vector&gt;</span><span class="pln">;
						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() &gt; 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() &gt; 0) &amp;&amp; (enabled_loaded_successfull_config))
				{				
					if (players_sets.Contains(UID_P))
					{
						private array</span><span class="tag">&lt;int&gt;</span><span class="pln"> readed_lines_config = new array</span><span class="tag">&lt;int&gt;</span><span class="pln">; 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 &gt;= 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</span><span class="tag">&lt;EntityAI&gt;</span><span class="pln"> GetItemListinobject(PlayerBase player,EntityAI item, bool check_player)
	{
		array</span><span class="tag">&lt;EntityAI&gt;</span><span class="pln"> EntityAI_list_items = new array</span><span class="tag">&lt;EntityAI&gt;</span><span class="pln">; EntityAI_list_items.Clear();
		int	attIdx = 0; int attCount = 0; EntityAI		item_in_object;
		if ((player) &amp;&amp; (check_player))
		{
			attCount	=	player.GetInventory().AttachmentCount(); 
			for (attIdx	=	0; attIdx &lt; attCount; attIdx++)
			{
				item_in_object	=	player.GetInventory().GetAttachmentFromIndex(attIdx);
				if ( item_in_object.IsItemBase() )
				{
					EntityAI_list_items.Insert(item_in_object);
				}
			}
		}
		if ((item) &amp;&amp; !check_player)
		{
			attCount	=	item.GetInventory().AttachmentCount();
			for (attIdx	=	0; attIdx &lt; 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</span><span class="tag">&lt;EntityAI&gt;</span><span class="pln"> ItemListPlayer = new array</span><span class="tag">&lt;EntityAI&gt;</span><span class="pln">;
		private array</span><span class="tag">&lt;EntityAI&gt;</span><span class="pln"> ItemsForDelete = new array</span><span class="tag">&lt;EntityAI&gt;</span><span class="pln">;
		private EntityAI itemInHands_player = player.GetHumanInventory().GetEntityInHands();
		if (itemInHands_player != NULL)
		{
			if (player.CanDropEntity(itemInHands_player) &amp;&amp; player.GetHumanInventory().CanRemoveEntityInHands())
			{
			//	Print("ItemForDelete: " + itemInHands_player.ToString());
				ItemsForDelete.Insert(itemInHands_player);
			}
		}
		ItemListPlayer = GetItemListinobject(player,NULL,true);		
		if (ItemListPlayer.Count() &gt; 0)
		{			
			foreach(EntityAI ItemPlayer: ItemListPlayer)
			{
				private array</span><span class="tag">&lt;EntityAI&gt;</span><span class="pln"> ItemInItemInInventory = GetItemListinobject(NULL,ItemPlayer,false);
				private CargoBase cargo = ItemPlayer.GetInventory().GetCargo();		
				if(cargo) 
				{
					if (cargo.GetItemCount() &gt; 0)
					{
						for (int f = 0; f &lt; cargo.GetItemCount(); f++)
						{
							if(cargo.GetItem(f))
							{						
								ItemsForDelete.Insert(cargo.GetItem(f));
							}
						}														
					}
				}									
				if (ItemInItemInInventory.Count() &gt; 0)
				{
					foreach(EntityAI items_temp: ItemInItemInInventory)
					{
						if(items_temp)
						{						
							ItemsForDelete.Insert(items_temp);
						}
					}		
				}
				if(ItemPlayer)
				{	
					ItemsForDelete.Insert(ItemPlayer);
				}
			}										
		} 
		if (ItemsForDelete.Count() &gt; 0)
		{
			foreach(EntityAI item_temp: ItemsForDelete)
			{
				if(item_temp)
				{														
					GetGame().ObjectDelete(item_temp);													
				}												
			}
		}
	}
};
</span></pre>

<p>
	<strong>Sets.c</strong>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">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 </span><span class="tag">&lt;vector&gt;</span><span class="pln">  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;
			}
		}
	}
}</span></pre>

<p>
	<strong>init_mod.c</strong>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">#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);
	}
	
}</span></pre>

<p>
	 
</p>

<p>
	<img alt="547566402_.png.f490b12005a30e3bf6619a4b863cffaa.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5207" data-ratio="33.60" style="height:auto;" width="750" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_02/547566402_.png.f490b12005a30e3bf6619a4b863cffaa.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"></p>

<p>
	 
</p>

<p>
	2. В файле:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">{папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c</span></pre>

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

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">#include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c"</span></pre>

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

<p>
	<img alt="1771316958_1.png.3b304fc8c3f4e51f17fe2d646935cf46.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5208" data-ratio="33.82" style="height:auto;" width="819" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_02/1771316958_1.png.3b304fc8c3f4e51f17fe2d646935cf46.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"></p>

<p>
	 
</p>

<p>
	3. В папке, обозначенной параметром запуска сервера '<strong>-profile=</strong>', поместить файл с именем <strong>CustomSpawnPlayerConfig.txt</strong><br>
	и заполнить его данными по следующему формату:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">UID|Skin_player|sets_numbers|points_spawns</span></pre>

<p>
	где <u><strong>UID</strong></u> - это <u><strong>steam64id от профиля игрока в steam</strong></u><br><strong>Skin_player</strong> - точный id скина игрока (можно указать <strong>0</strong> для отключения опции)<br><strong>sets_numbers</strong> - номер сета со стартовым лутом (можно указать несколько через '<strong>;</strong>', указать один всего, либо указать <strong>0</strong> для отключения опции)<br><strong>points_spawns</strong> - координаты спавна игрока на карте в формате '<strong>x y z</strong>' (можно указать несколько через '<strong>;</strong>', указать всего одну точку, либо указать <strong>0</strong> для отключения опции)<br><u><strong>Пример: </strong></u><p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">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</span></pre>

<p>
	 
</p>

<p>
	4. В файле <strong>Sets.c</strong> в папке:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln"> {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\</span></pre>

<p>
	настроить стартовый лут для ваших игроков и написать собственные сеты<br><u><strong>ВАЖНО: </strong></u>количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше)<br>
	Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет!<br>
	Поумолчанию в <abbr title="Набор команд и параметров">функции</abbr> default вызывается <abbr title="Набор команд и параметров">функция</abbr> DefaultSets, позволяющая рандомно выбирать любой из сетов для игроков, которым сет не задан в конфигурации <abbr title="Сценарий, выполняемый системой">скрипта</abbr>. Принцип составления сетов такой же, как и выше. Если будете пользоваться этим, обратите вниманием на строку:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">private int random_set_number = Math.RandomIntInclusive(1,6);</span></pre>

<p>
	Эта <abbr title="Набор команд и параметров">функция</abbr> генерирует число от 1 до 6 включительно. Соответственно если сетов будет больше 6, то число надо корректировать и тут тоже!
</p>

<p>
	 
</p>

<p>
	P.S. Прикрепить к соспавненному оружию магазин не получится, рабочего кода я не смог найти!!
</p>

<p>
	 
</p>

<p>
	Если у вас папка активной миссии сервера отличается от dayzOffline.chernarusplus то переименуйте ее в строке, вписываемой в:<br>
	        {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c<br>
	        {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;"><span style="color:#2ecc71;"><strong>Благодарности:</strong></span></span> Товарищу Mizev за его первоначальные гайды в группе VK при появлении в сети серверной части игры
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7539</guid><pubDate>Fri, 08 Mar 2019 20:47:18 +0000</pubDate></item><item><title>[DayZ 1.0] &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43E;&#x431;&#x44A;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x432; &#x447;&#x430;&#x442;</title><link>https://s-platoon.magicbyte.org/topic/7355-dayz-10-sozdaem-obyavleniya-v-chat/</link><description><![CDATA[
<p style="text-align: center;">
	<span style="color:#e74c3c;"><span style="font-size:20px;">В данной теме мы с вами научимся создавать простой скрипт, который позволит выводить в чат объявления, которые вы захотите сами. </span></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;"><span style="color:#27ae60;">Нам понадобится:</span></span>
</p>

<p>
	1. Сервер DayZ 1.0, сделанный по одному из гайдов:
</p>
<iframe data-embedcontent="" frameborder="0" src="https://s-platoon.ru/applications/core/interface/js/spacer.png" data-embed-src="https://s-platoon.magicbyte.org/topic/7015-sozdaem-server-dayz-063-na-osnove-oficialnyh-servernyh-faylov-igry-v-steam/?do=embed"></iframe>

<p>
	2. Notepad++
</p>

<p>
	3. Немножечко трезвого ума
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#27ae60;">Приступим:</span></strong>
</p>

<p>
	1. Открываем <strong>Mpmissions</strong> - <strong>dayzOffline.chernarusplus</strong> - <strong>init.c</strong><br>
	2. В самом начале файла добавляем:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4267_7" style="">
<span class="pln">#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\InfoMessages.c" </span></pre>

<p>
	Находим функцию
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4267_4" style="">
<span class="pln">void main()</span></pre>

<p>
	и перед ее закрывающей скобкой "<strong>}</strong>"добавляем:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4267_9" style="">
<span class="pln">GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(CustomInformation, TIME_Information_Repeat, true);  </span></pre>

<p>
	пример:
</p>

<p>
	<p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> <br>
	3. Помещаем в папку файл  <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<p>
	Либо создаем вручную этот файл с именем "<strong>InfoMessages.c</strong>" и заполняем его следующим текстом:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1055_5" style="">
<span class="pln">int TIME_Information_Repeat = 60000; //in ms (60 seconds = 60000)

ref TStringArray Messages = {"Welcome to My Server!",
		   "This is server DayZ 1.0 Stable version!",
		   "Our ip adress: ....", "Our site: ....",
		   "Good day and big Loot for all!"};

void CustomInformation()
{
	//GetGame().GetWorld().GetPlayerList(m_Players);
	array</span><span class="tag">&lt;Man&gt;</span><span class="pln"> players = new array</span><span class="tag">&lt;Man&gt;</span><span class="pln">;
	GetGame().GetPlayers( players );
	private int numbOfplayers = players.Count();
	
	if( numbOfplayers &gt; 0 )
	{
	  // GetGame().ChatPlayer(0,Messages.GetRandomElement());
		foreach(Man player: players)
		{
			InfoMessages_SendPersonalMessage(Messages.GetRandomElement(), player);
		}
   }
}
void InfoMessages_SendPersonalMessage(string message, Man player) 
{
	if(( player ) &amp;&amp; (message != ""))
	{
		Param1</span><span class="tag">&lt;string&gt;</span><span class="pln"> m_GlobalMessage = new Param1</span><span class="tag">&lt;string&gt;</span><span class="pln">(message); 
		GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); 
	}
}</span></pre>

<p>
	4. Настраиваем файл как нам нужно. Т.е. в строке
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9403_16" style="">
<span class="pln">int TIME_Information_Repeat = 60000; //in ms (60 seconds = 60000)</span></pre>

<p>
	указываем время повтора вывода сообщений в чат (поумолчанию стоит минута)
</p>

<p>
	и сами сообщения в переменной
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8043_8" style="">
<span class="pln">ref TStringArray Messages = {"Welcome to My Server!",
		   "This is server DayZ 0.63 Experimental!",
		   "Our ip adress: ....", "Our site: ....",
		   "Good day and big Loot for all!"};</span></pre>

<p>
	Важно: в конце последней строки обязательно должна быть скобка и точка с запятой, иначе сервер не запустится!
</p>

<p>
	 
</p>

<p>
	P.S. Если сообщения вам не видны, включите их видимость в настройках вашего клиента игры для себя!
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7355</guid><pubDate>Mon, 21 Jan 2019 15:41:10 +0000</pubDate></item><item><title>&#x41E;&#x43F;&#x43E;&#x432;&#x435;&#x449;&#x435;&#x43D;&#x438;&#x435; &#x438; &#x43B;&#x43E;&#x433;&#x438; &#x432;&#x445;&#x43E;&#x434;&#x430; &#x438; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x430; &#x438;&#x433;&#x440;&#x43E;&#x43A;&#x430;</title><link>https://s-platoon.magicbyte.org/topic/8020-opoveschenie-i-logi-vhoda-i-vyhoda-igroka/</link><description><![CDATA[
<p style="text-align: center;">
	<span style="color:#e74c3c;"><span style="font-size:20px;">В данной теме мы с вами научимся создавать простой скрипт, который позволит выводить в чат объявления о присоединении и отсоединении игроков, а также логировать их данные. </span></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;"><span style="color:#27ae60;">Нам понадобится:</span></span>
</p>

<p>
	1. Сервер DayZ 1.0, сделанный по одному из гайдов:
</p>
<iframe data-embedcontent="" frameborder="0" src="https://s-platoon.ru/applications/core/interface/js/spacer.png" data-embed-src="https://s-platoon.magicbyte.org/topic/7015-sozdaem-server-dayz-063-na-osnove-oficialnyh-servernyh-faylov-igry-v-steam/?do=embed"></iframe>

<p>
	2. Notepad++
</p>

<p>
	3. Немножечко трезвого ума
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#27ae60;">Приступим:</span></strong>
</p>

<p>
	1. Открываем <strong>Mpmissions</strong> - <strong>dayzOffline.chernarusplus</strong> - <strong>init.c</strong><br>
	2. В самом начале файла добавляем:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8469_4" style="">
<span class="pln">#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\ConnectDisconnectMessagesInChat.c" </span></pre>

<p>
	Обратите внимание, имя папки с активной mpmissions сервера у вас может отличаться от стандартного названия  <strong>dayzOffline.chernarusplus</strong> - в таком случае в ссылке выше имя этой папки также надо заменить (это актуально в основном для серверов аренды)
</p>

<p>
	3. Помещаем в папку файл<p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> Либо создаем вручную этот файл с именем "
</p>

<p>
	"<strong>ConnectDisconnectMessagesInChat.c</strong>" и заполняем его следующим текстом:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_80_4" style="">
<span class="pln">modded class CustomMission
{
	void SendGlobalChatMessage(string message)
	{
		private array</span><span class="tag">&lt;Man&gt;</span><span class="pln"> players = new array</span><span class="tag">&lt;Man&gt;</span><span class="pln">;
		GetGame().GetPlayers( players );
		int numbOfplayers = players.Count();
		
		if( numbOfplayers &gt; 0 )
		{
			foreach(Man player: players)
			{
				SendPersonalMessage(message, player);
			}
			//GetGame().ChatPlayer(message);
		}
	}
	void SendPersonalMessage(string message, Man player) 
	{
		if(( player ) &amp;&amp; (message != ""))
		{
			Param1</span><span class="tag">&lt;string&gt;</span><span class="pln"> m_GlobalMessage = new Param1</span><span class="tag">&lt;string&gt;</span><span class="pln">(message); 
			GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); 
		}
	}

	override void InvokeOnDisconnect( PlayerBase player )
	{
		private PlayerIdentity identity = NULL;
		identity = player.GetIdentity();
		if (player &amp;&amp; identity)
		{
			private string Name_P = identity.GetName();
			private string UID_P = identity.GetPlainId();
			private string message = "[Информация] Игрок " + Name_P + " отключился от сервера.";
			private string log_message = "[Disconnect] Player " + Name_P + " with Steam64ID: " + UID_P + " disconnected from server.";
			//GetGame().ChatPlayer(message);
			SendGlobalChatMessage(message);
			Print(log_message);
		}
		super.InvokeOnDisconnect( player );
	}	
	override void InvokeOnConnect(PlayerBase player, PlayerIdentity identity)
	{
		super.InvokeOnConnect(player, identity);
		private string Name_P = identity.GetName();
		private string UID_P = identity.GetPlainId();
		private string message = "[Информация] Игрок " + Name_P + " Зашёл на сервер.";
		private string log_message = "[Connect] Player " + Name_P + " with Steam64ID: " + UID_P + "connected to server.";
		//GetGame().ChatPlayer(message);
		SendGlobalChatMessage(message);
		Print(log_message);
	}
}</span></pre>

<p>
	4. Настраиваем текст как нам нужно. Т.е. в строках для чата
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8469_8" style="">
<span class="pln">private string message = "[Информация] Игрок " + Name_P + " отключился от сервера.";</span></pre>

<p>
	и
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8469_10" style="">
<span class="pln">private string message = "[Информация] Игрок " + Name_P + " Зашёл на сервер.";</span></pre>

<p>
	а также для логов
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_80_6" style="">
<span class="pln">private string log_message = "[Disconnect] Player " + Name_P + " with Steam64ID: " + UID_P + " disconnected from server.";</span></pre>

<p>
	и
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_80_8" style="">
<span class="pln">private string log_message = "[Connect] Player " + Name_P + " with Steam64ID: " + UID_P + "connected to server.";</span></pre>

<p>
	P.S. Если сообщения вам не видны, включите их видимость в настройках вашего клиента игры для себя!
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">8020</guid><pubDate>Thu, 05 Sep 2019 18:00:13 +0000</pubDate></item><item><title>&#x41D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x43A;&#x430; &#x43C;&#x43E;&#x434;&#x43E;&#x432;&#x44B;&#x445; types.</title><link>https://s-platoon.magicbyte.org/topic/9475-nastroyka-modovyh-types/</link><description><![CDATA[
<p>
	И так, вышел 1.08 и я узнал одну замечательную вещь, про которую тут ещё не писали. Она поможет вам разгрузить ваш ванильный types от модовых вещей и ещё больше раскидать их по категориям.<br><br>
	Идём в <strong><span style="color:#3498db;">cfgeconomycore.xml, </span></strong>там вписываем следущее:<br>
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">    </span><span class="com">&lt;!-- Mod CENTRAL ECONOMY --&gt;</span><span class="pln">
    </span><span class="tag">&lt;ce</span><span class="pln"> </span><span class="atn">folder</span><span class="pun">=</span><span class="atv">"Mod_ce"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"MVS_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/ce&gt;</span></pre>

<p>
	Дальше мы создаём папку <span style="color:#2980b9;"><strong>Mod_ce, </strong></span>в которой создаём ваш модовый types, в моём случае, это сделано под <abbr title="Модификация">мод</abbr> MVS, так что я назвал его MVS_types.xml. И всё, таких types может быть хоть сотни. Ваш основной файл types перестанет иметь 50к строк и не будет лагать при листании.<br><br>
	Пример того, как оно может выглядеть в конечном счёте. Если где-то ошибся, то буду рад  услышать исправление проблемы.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">    </span><span class="com">&lt;!-- NewDawnRangers mods types --&gt;</span><span class="pln">
    </span><span class="tag">&lt;ce</span><span class="pln"> </span><span class="atn">folder</span><span class="pun">=</span><span class="atv">"modstypes"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"arma2weaponpack_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"cannabisplus_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"cheytac_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"cl0udsmilitarygear_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"codelock_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"crsk_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"massmanyitemoverhaul_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"mosinscope_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"mungharditempack_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
        </span><span class="tag">&lt;file</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"opbaseitems_types.xml"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"types"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/ce&gt;</span></pre>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="6566" data-ratio="79.53" width="635" alt="839316534_.png.e138c14b3233158af98a260edf308cbd.png" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_07/839316534_.png.e138c14b3233158af98a260edf308cbd.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"></p>
]]></description><guid isPermaLink="false">9475</guid><pubDate>Wed, 01 Jul 2020 15:53:45 +0000</pubDate></item><item><title>[Enscript] &#x423;&#x447;&#x438;&#x43C;&#x441;&#x44F; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x430;&#x43C; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442;&#x438;&#x43D;&#x433;&#x430;</title><link>https://s-platoon.magicbyte.org/topic/8701-enscript-uchimsya-osnovam-skriptinga/</link><description><![CDATA[
<p style="text-align:center;">
	<strong><span style="color:#2980b9;">И снова здравствуйте, товарищи и коллеги!</span></strong>
</p>

<p style="text-align:center;">
	 
</p>

<p>
	<em>Уже не один день наблюдаю среди многих из читающих такую проблему, как непонимание того, что написано в том или ином гайде, скрипте, теме форума по DayZ Standalone. А понимать бы это все это ой как бы не плохо было бы, да, товарищи? Ну хотя бы так, для себя, для осознания происходящего и упрощения своей жизни. Не все же за вас делать постоянно, как считаете?<br>
	Что же, решил я вот для вас завести такую темку, полезную. В ней мы не будем рассматривать установку чего-либо или сборку <abbr title="Модификации">мода</abbr>. Мы попробуем разобраться в основах языка игры, а именно - написании своего кода, чтении кода игры, данного разработчиком, или чужим модом в мастерской.<br>
	Разумеется, надеюсь я и на вашу бескорыстную помощь и поддержку, а также на помощь знатоков и экспертов скриптинга игры, ведь один я не справлюсь в написании этой безмерно полезной для многих и большой темы. А помощь ой как понадобится, чувствую затылком.</em><br>
	Ну ладно, утомил я вас, начнем, пожалуй, согласны?
</p>

<p>
	<br>
	Оговорюсь сразу, в данной теме мы затронем лишь скриптовую составляющую игры. Т.е. вопросы изменения <abbr title="Модификации">модов</abbr>, игры, создания собственных интерфейсов, игровых вещей и прочего освещаться не будут.
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#f39c12;">Темы к ознакомлению, схожие с данным материалом:</span></strong>
</p>

<p>
	<a href="https://s-platoon.magicbyte.org/topic/8622-enscript-delaem-skript-dlya-moda-i-osnovnye-principy-skriptinga-modov/" rel="">https://s-platoon.ru/topic/8622-enscript-delaem-skript-dlya-moda-i-osnovnye-principy-skriptinga-modov/</a>
</p>

<p>
	<a href="https://s-platoon.magicbyte.org/topic/7838-sozdaem-svoy-servernyy-mod-dayz-14-to-discontined/" rel="">https://s-platoon.ru/topic/7838-sozdaem-svoy-servernyy-mod-dayz-14-to-discontined</a>
</p>

<p>
	<a href="https://s-platoon.magicbyte.org/topic/8859-enscript-rodnye-funkcii-v-kode-igry-opisanie-nahozhdenie/" rel="">https://s-platoon.ru/topic/8859-enscript-rodnye-funkcii-v-kode-igry-opisanie-nahozhdenie/</a>
</p>

<p>
	<span style="color:#e67e22;"><strong>Официальная документация, связанная с данным материалом (спасибо </strong></span><strong><a href="https://s-platoon.magicbyte.org/profile/14721-borizzk/" rel=""><span style="color:#27ae60;">BorizzK</span></a></strong><span style="color:#e67e22;"><strong><span class="ipsEmoji">?</span></strong></span>
</p>

<p>
	<a href="https://community.bistudio.com/wiki/DayZ:Enforce_Script_Syntax" rel="external nofollow">https://community.bistudio.com/wiki/DayZ:Enforce_Script_Syntax</a>
</p>

<p>
	<a href="https://community.bistudio.com/wiki/Category:DayZ:Editing" rel="external nofollow">https://community.bistudio.com/wiki/Category:DayZ:Editing</a>
</p>

<p>
	 
</p>

<p>
	Начнем мы, пожалуй, с общего.
</p>

<p>
	<span style="color:#27ae60;"><u><strong>Введение. <abbr title="Сценарий, выполняемый системой">Скрипты</abbr>.</strong></u></span>
</p>

<p>
	<abbr title="Сценарий, выполняемый системой">Скрипты</abbr> - важная часть функционирования игры, создания <abbr title="Модификации">модов</abbr> и модификации как игры, так и сервера. Они позволяют делать чудные модификации, создавать новые опции,  настраивать или изменять в игре по своей задумке практически любой аспект и функционал, заданный разработчиками, дополнять его и разнообразить.
</p>

<p>
	<br><span style="color:#27ae60;"><strong>Алгоритм</strong></span>
</p>

<p>
	Ваша первая задача при написании <abbr title="Сценарий, выполняемый системой">скриптов</abbr> - определить, какие шаги надо предпринять, чтобы решить какую-либо проблему. Последовательность таких шагов - это и будет алгоритм.<br>
	Например,  намерение - передать другу ваш рюкзак. Значит необходимо выполнить следующие действия:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		Цитата
	</div>

	<div class="ipsQuote_contents">
		<p>
			 
		</p>

		<p>
			Шаг 1 - определить вас и друга, как игрока на сервере<br>
			Шаг 2 - проверить, имеется ли искомая вещь у вас и в каком она состоянии<br>
			Шаг 3 - Скинуть вашу вещь для передачи другу, либо поместить ее в некоторое хранилище на небольшое время
		</p>

		<p>
			Шаг 4 - Выдать вашу вещь другу, например, подобрав ее, или переместив ее из хранилища
		</p>

		<p>
			 
		</p>
	</div>
</blockquote>

<p>
	Но тут у нас встает вопрос - игрок же вызывает какое-то меню или опцию, которая будет выполнять данные действия. Как это реализовать? Ведь игра - это лишь набор комманд, которые выполняются по одной за раз, как правильно объединить все и сделать корректно?<br>
	Сделать это все можно именно посредством скриптинга в данной игре с использованием <abbr title="Сценарий, выполняемый системой">скриптов</abbr>.
</p>

<p>
	<span style="color:#27ae60;"><strong>Интерпретатор</strong></span>
</p>

<p>
	Когда вы составили алгоритм, вам нужно что-то, что может его исполнить. У нас есть компьютерная игра, которая может это сделать. В игре есть игроки, объекты которые могут выполнять те или иные действия, например, получение данных, создание объектов, открытие дверей и т.п. Все имеет свою комманду и результат выполнения. Иными словами, игра сама интерпретирует ваши <abbr title="Сценарий, выполняемый системой">скрипты</abbr> и их код в рабочий вид в игре.
</p>

<p>
	<strong><span style="color:#27ae60;">Исходный код (<abbr title="Сценарий, выполняемый системой">Скрипт</abbr>)</span></strong>
</p>

<p>
	Исходный код (<abbr title="Сценарий, выполняемый системой">скрипт</abbr>) - это алгоритм, написанный на каком-либо языке программирования, который преобразуется в машинный код программы и будет выполнен в том или ином случае. В случае в нашей игрой это код, который игра преобразует в понятные для нее комманды и выполняет их.<br><strong><span style="color:#27ae60;">Скриптинг</span></strong><br>
	Скриптинг - какие-либо действия по написанию <abbr title="Сценарий, выполняемый системой">скриптов</abbr> для своих работ\<abbr title="Модификации">модов</abbr>\игры. Скриптинг в DayZ в основном основывается на том, что уже имеется в игре. Т.е. на базовом функционале игры, который задан разработчиком. В DayZ вся скриптовая часть, написанная авторами игры, располагается в файлике "<strong>scripts.pbo</strong>" в папке "<strong>dta</strong>", который мы можем распаковать через "<strong>PBO Manager</strong>", например, и поглядеть.<br>
	Любые <abbr title="Сценарий, выполняемый системой">скрипты</abbr> могут содержать как набор из <abbr title="Набор команд и параметров">функций</abbr>, так и набор из разных классов с функциями, которые могут вам понадобиться.<br><span style="color:#27ae60;"><strong>Enforce Script</strong></span>
</p>

<p>
	Enforce Script (EnScript по простому)- это язык сценариев (интерпретации скриптинга), разработанный для движка игры DayZ "enforce Engine" компанией Bohemia Interactive Studio .
</p>

<p>
	Все <abbr title="Сценарий, выполняемый системой">скрипты</abbr> EnScript, основные игровые логики находятся в "<strong>scripts.pbo</strong>" в папке "<strong>dta</strong>" каталога "<strong>DayZ</strong>" или "<strong>DayZ Server</strong>".  Именно этот файл и будет нам полезен для выяснения того, как работают некоторые вещи (пока, наконец, не появится достойная ссылка на API от разработчиков игра, будь они прокляты).
</p>

<p>
	Основные принципы скриптинга на EnScript:
</p>

<ul>
<li>
		Любая комманда, строка в <abbr title="Набор команд и параметров">функции</abbr> должна завершаться на ; (точку с запятой)
	</li>
	<li>
		Тело любой <abbr title="Набор команд и параметров">функции</abbr>/класса/структуры должно быть заключено в {} (фигурные скобки)
	</li>
	<li>
		Язык крайне чувствителен к регистру, т.е. MyPeremennaya и Myperemennaya будут 2 разными объектами для игры.
	</li>
	<li>
		Язык, крайне схожий с синтаксисом и коммандами C++, C# и JavaScript, для тех, кто знает эти языки хотя бы на любительском уровне, работать и писать свои <abbr title="Сценарий, выполняемый системой">скрипты</abbr> будет проще в разы
	</li>
</ul>
<p>
	<strong><span style="color:#27ae60;">Структура скриптовой части игры</span></strong><br>
	Распаковав "<strong>scripts.pbo</strong>"  (файл есть в клиенте игры и сервере, он одинаковый) мы увидим несколько папок, таких как "<strong>1_Core</strong>", "<strong>2_GameLib</strong>", "<strong>3_Game</strong>", "<strong>4_World</strong>", "<strong>5_Mission</strong>", "<strong>data</strong>", "<strong>editor</strong>" а также файлики "<strong>$PREFIX$</strong>", "<strong>$PRODUCT$</strong>","<strong>$VERSION$</strong>","<strong>config.bin</strong>","<strong>profile_fixed.cfg</strong>", "<strong>staticDefinesDoc.c</strong>". Из того, что мне известно, и что нам пригодится при написании <abbr title="Сценарий, выполняемый системой">скриптов</abbr>, я отмечу лишь файлик "<strong>config.bin</strong>", который составляет основную конфигурацию pbo-файла и включенных в него файлов <abbr title="Сценарий, выполняемый системой">скриптов</abbr> (по нему 'компилируются' при запуске игры в <abbr title="Сценарий, выполняемый системой">скрипты</abbr> в определенные разделы кода запуска игры). А также папки "<strong>1_Core</strong>", "<strong>2_GameLib</strong>", "<strong>3_Game</strong>", "<strong>4_World</strong>", "<strong>5_Mission</strong>".<br>
	Сам "<strong>config.bin</strong>" разбирать мы не будем, это сделано уже <a href="https://s-platoon.magicbyte.org/topic/7838-sozdaem-svoy-servernyy-mod-dayz-14-to-discontined/" rel="">ранее в теме вот этой</a>.<br>
	Каждая из указанных ранее папок обозначает раздел инициализации кода игры. Например, в "<strong>1_Core</strong>", "<strong>2_GameLib</strong>" подгружается основной синтаксис всех <abbr title="Набор команд и параметров">функций</abbr> и переменных игры (то как они будут объявляться в коде, вызываться, какие значения возвращать и принимать). В "<strong>3_Game</strong>" основной функционал самой игры, обозначающий используемые классы и базовые <abbr title="Набор команд и параметров">функции</abbr> этих классов. В "<strong>4_World</strong>" все остальные классы, <abbr title="Набор команд и параметров">функции</abbr> и параметры, которые будут исполняться в игре в зависимости от того, какие объекты окружения будут в ней будут и как будут функционировать. В "<strong>5_Mission</strong>" будет описываться функционал, относящийся к экранам загрузки, меню, их действиям и вызовам.<br>
	На основе этих разделов и строится основной принцип скриптинга любого <abbr title="Модификации">мода</abbr> и функционирования игры в целом. Если вы откроете любой из <abbr title="Модификации">модов</abbr>, который имеет хотя бы 1 <abbr title="Сценарий, выполняемый системой">скрипт</abbr>, увидите часть этой структуры.<br>
	Основные разделы <abbr title="Сценарий, выполняемый системой">скриптов</abbr> также взаимодействуют друг с другом, но только в порядке, в котором они выполняются и описываются. Например, из "<strong>5_Mission</strong>" вы можете вызывать классы и <abbr title="Набор команд и параметров">функции</abbr>, описанные в "<strong>4_World</strong>", а из "<strong>4_World</strong>" вызвать <abbr title="Набор команд и параметров">функции</abbr> в "<strong>5_Mission</strong>" не получится, поскольку игра их еще не знает на том этапе запуска и 'компиляции кода <abbr title="Сценарий, выполняемый системой">скрипта</abbr>'.<br><span style="color:#27ae60;"><strong><abbr title="Набор команд и параметров">Функции</abbr></strong></span><br><abbr title="Набор команд и параметров">Функции</abbr> - это набор команд (действий) и параметров(переменных). Для ее вызова используется стандартный формат вида: {имя <abbr title="Набор команд и параметров">функции</abbr>}({параметры <abbr title="Набор команд и параметров">функции</abbr>});
</p>

<p>
	Тело любой <abbr title="Набор команд и параметров">функции</abbr>/класса/структуры должно быть заключено в "{}" (фигурные скобки)<br><abbr title="Набор команд и параметров">Функции</abbr> могут быть как заданные разработчиками игры в каких-либо классах, так и написанные вами вручную собственные.<br>
	Иногда для ее вызова хватает лишь одной лишь команды, например "<strong>MyFunction();</strong>". Но чаще в синтаксисе вызова <abbr title="Набор команд и параметров">функции</abbr> присутствует один и более параметров, например "<strong>MyFunction("my text");</strong>" .<br>
	Параметры <abbr title="Набор команд и параметров">функции</abbr> могут не содержать значений, а могут иметь 1 или несколько значений, разделенных запятой, например:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">void MyFunction(int MyChislo, string text1, text2, bool value);</span></pre>

<p>
	У каждой команды может быть свой список данных, которые она может использовать в своем выполнении(например, как было в последнем примере), а также может быть и список данных, которые она вернет. Будут ли эти данные требоваться от <abbr title="Набор команд и параметров">функции</abbr> зависит от автора, который эту <abbr title="Набор команд и параметров">функцию</abbr> пишет (т.е. от разработчиков игры, если это <abbr title="Сценарий, выполняемый системой">скрипт</abbr> родной игры, или от вас, если этот <abbr title="Сценарий, выполняемый системой">скрипт</abbr> вы пишете сами) <abbr title="Набор команд и параметров">Функции</abbr> с возвращаемыми данными (имеют тип значения, который они возвращают) могут вызываться как вот так:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">int chislo = MyFunction("my text"); </span></pre>

<p>
	т.е. переменная chislo пример значение, которое <abbr title="Набор команд и параметров">функция</abbr> возвратила<br>
	либо так:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">MyFunction("my text"); </span></pre>

<p>
	  т.е. <abbr title="Набор команд и параметров">функция</abbr> вернет значение, но оно не будет записано, и не будет использоваться далее.<br><abbr title="Набор команд и параметров">Функции</abbr> без возврата значений (имеют тип void) могут вызываться только вот так:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">MyFunction("my text");</span></pre>

<p>
	<abbr title="Набор команд и параметров">Функции</abbr> могут иметь несколько типов. Например,
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">void MyFunction()
{

}</span></pre>

<p>
	<abbr title="Набор команд и параметров">функция</abbr> без возврата значения. А <abbr title="Набор команд и параметров">функция</abbr>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">int  MyFunction()</span></pre>

<p>
	возвратит значение типа int (число). Соответственно, <abbr title="Набор команд и параметров">функции</abbr> без возврата значений будут содержать лишь код своих вычислений, а <abbr title="Набор команд и параметров">функции</abbr> с возвратом обязаны иметь комменду return {значение} .<br>
	Пример <abbr title="Набор команд и параметров">функции</abbr> без возврата значений и принимаемых переменных:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">void MyFunction() 
{
	Print(" ---TEST--- ");
}</span></pre>

<p>
	<abbr title="Набор команд и параметров">Функция</abbr> запишет в script.log текст: " <strong>---TEST---</strong> "<br>
	Пример вызова в коде: <strong>MyFunction();</strong><br>
	Пример <abbr title="Набор команд и параметров">функции</abbr> с возвратом значений и принимаемыми переменными:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">string MyFunction(string MyText) 
{
	Print(" ---TEST--- " + MyText);
	return "[" + MyText + "]";
}</span></pre>

<p>
	Пример вызова в коде:  <strong>string MyTXT1 = MyFunction("TEXT FOR TEST");</strong><br><abbr title="Набор команд и параметров">Функция</abbr> запишет в script.log текст: " <strong>---TEST--- TEXT FOR TEST </strong>" и запишет в переменную <strong>MyTXT1</strong> значение <strong>[MyText]</strong><br>
	Параметров, которые могут передаваться в <abbr title="Набор команд и параметров">функцию</abbr>, может быть несколько, но не рекоммендую их делать более 10.<br><span style="color:#27ae60;"><strong>Переменные и их типы</strong></span><br>
	Переменные - это типы данных, используемые в коде <abbr title="Сценарий, выполняемый системой">скриптов</abbr> игры. Типы переменных обозначаются классами, заданными в игре. Это могут быть как заданные разработчиками поумолчанию типы данных, так и собственные классы, написанные вами. Обозначаются переменные общим видом так: {тип переменной} {название переменной}
</p>

<p>
	Строка с обозначением любой переменной или заданием ее значением должно быть закончено точной с запятой на конце!<br>
	Например: <strong>int chislo, string text, bool value</strong>; или <strong>string text = "TEST";</strong><br>
	Каждый тип означает, какие типы данных может принимать данная переменная, и какой объем в памяти игры она займет. Базовое количество типов схоже с c++ и c#, но есть и типы, обозначаемые заданными классами в игре.<br>
	Стоит понимать, что объявленная 1 раз переменная в <abbr title="Набор команд и параметров">функции</abbr> или классе не может быть объявлена в ней же еще раз, но ей может быть присвоено новое значение, например <span>:</span>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">void MyFunction()
{
	string myperemennaya="text1"; 
	// тут какие-то вычисления
	myperemennaya="text2";
}</span></pre>

<p>
	Список используемых типов переменных в игре можно прочитать тут (на немецком):<br><a href="https://germandayz.de/forum/thread/19551-guide-dayz-standalone-scripting-enforce-scripting/" rel="external nofollow">https://germandayz.de/forum/thread/19551-guide-dayz-standalone-scripting-enforce-scripting/</a><br>
	 Остальные имеют стандартный тип, используемый в том же с++ и c#
</p>

<p>
	<span style="color:#27ae60;"><strong>Модификаторы <abbr title="Набор команд и параметров">функций</abbr> и переменных.</strong></span><br>
	Также, переменные могут иметь модификаторы доступности данных в функциях. Например:
</p>

<p>
	<strong>public:</strong> делает переменную открытой к доступу в других функциях
</p>

<p>
	<strong>private:</strong> делает переменную  закрытой к доступу в других функциях
</p>

<p>
	<strong>protected:</strong> ограничивает доступ к переменной только для дружественных и дочерних классов.<br><strong>static</strong> - переменная, которая сохраняется в памяти игры даже после удаления экземпляра <abbr title="Набор команд и параметров">функции</abbr> (класса) или переменной из памяти (как в C++).
</p>

<p>
	<strong>native</strong> - <abbr title="Набор команд и параметров">Функция</abbr> или переменная, реализованная игровым движком, не может быть перезаписана. В исходном коде движка такие <abbr title="Набор команд и параметров">функции</abbr> отмечены со смещением. Невозможно изменить модами и сприптами, только использовать их сами.
</p>

<p>
	<strong>ref</strong> - ссылка на свой тип класса или переменной, ref - сокр. referal, т.е. ссылка в переводе<br>
	Модификаторы также описаны по ссылке выше, и могут быть использованы не только в переменных, но и в функциях игры!
</p>

<p>
	<span style="color:#27ae60;"><strong>Классы</strong></span><br>
	Классы - это структуры, которые могут содержать определенные <abbr title="Набор команд и параметров">функции</abbr> и переменные, заданные автором <abbr title="Сценарий, выполняемый системой">скрипта</abbr>. У классов может быть много <abbr title="Набор команд и параметров">функций</abbr>, переменных, а каждый класс в свою очередь может быть задан и записан в отдельные переменные по нескольку раз. Т.е. это своего рода свой тип переменной, которая может содержать свои данные внутри себя.<br>
	Отдельная переменная своего класса или одного из классов игры (например <strong>Playerbase</strong>) воспринимается как единичный некий экземпляр-объект данного класса, и чем больше таких переменных, тем больше экземпляров одного и того же класса существует в памяти игры. Например: <strong>PlayerBase player = NULL;</strong>
</p>

<p>
	Также, в классах можно обращаться к переменным и функциям, находящимся внутри классов через символ точки (это как вызов и получение результата <abbr title="Набор команд и параметров">функции</abbr> или переменной). Т.е. для экземпляра класса:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">class MyClass
{
	string MyText = "";
	int Chislo = 0;
	void MyFunction()
	{
		Prnt("TEST");
	}
}
ref MyClass Peremennaya = new ref MyClass();</span></pre>

<p>
	создается переменная, и ее можно вызывать так: <strong>string MyResult = Peremennaya.MyText; </strong>и значение <strong>My Text</strong> будет записано в <strong>MyResult</strong>.<br>
	Также можно и вызвать <abbr title="Набор команд и параметров">функцию</abbr> или результат ее выполнения (если <abbr title="Набор команд и параметров">функция</abbr> возвращает значение): <strong>Peremennaya.MyFunction()</strong> выполнит запись в <strong>script.log</strong> текста <strong>TEST</strong>.<br>
	Переменные, объявляемые вне <abbr title="Набор команд и параметров">функций</abbr> в классе одном будут доступны во всех функциях этого класса. Но переменные, заданные в классе, будут индивидуальны для каждого экземпляра этого класса. Т.е. если мы создаем свой класс, например, такого содержания:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">class MyClass
{
	string MyText = "";
	int Chislo = 0;
}</span></pre>

<p>
	затем создаем экземпляры этого класса в памяти игры, коммандами
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">ref MyClass Peremennaya = new ref MyClass();
ref MyClass Peremennaya2 = new ref MyClass();</span></pre>

<p>
	то у <strong>Peremennaya </strong>и у <strong>Peremennaya2 </strong>будут свои данные в <strong>MyText </strong>и <strong>Choislo</strong>, не связанные между собой:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">Peremennaya.Text = "MyText1";
Peremennaya.Chislo = 2;
Print("Peremennaya.Text = " + Peremennaya2.Text + " Peremennaya.Chislo = " + Peremennaya.Chislo.ToString());
Print("Peremennaya2.Text = " + Peremennaya2.Text + " Peremennaya2.Chislo = " + Peremennaya2.Chislo.ToString());</span></pre>

<p>
	То мы получим в <strong>scriptlog</strong>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">"Peremennaya.Text = Peremennaya.Text = MyText1 Peremennaya.Chislo = 2"
"Peremennaya2.Text = Peremennaya2.Text = Peremennaya2.Chislo = 0"</span></pre>

<p>
	Т.е. в <strong>Peremennaya2.Text </strong> будет пусто.<br>
	Обязательно для созданных собственных классов переменных указание ссылочности типов - <strong>ref</strong> (ref - сокр. referal, т.е. ссылка в переводе) - от этого зависит доступность данных в классах и функциях.
</p>

<p>
	Также, из классов можно вызывать и <abbr title="Набор команд и параметров">функции</abbr>, и обращаться к переменным. Разумеется, если они не защищены функцией или модификатором. Например, создадим класс:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">Class ClassTest
{
	string MyText1 = "123";
	private string MyText2 = "456";
	void MyFunction1 (string text)
	{
		string MyText3 = "789";
		Print("!!!Used MyFunction:" + text);
	}
	int MyFunction2 ()
	{
		return 2;
	}
}</span></pre>

<p>
	и создадим экземпляр данного класса, и попробуем к нему обратиться:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">ref ClassTest Peremennaya3 = new ref ClassTest();

Print("Text1 = " + Peremennaya3.Text1); // В script.log будет Text1 = 123
Print("Text2 = " + Peremennaya3.Text2); // не запустится игра, так как модификатор private не позволит обратиться к переменной внутри класса
Print("Text3 = " + Peremennaya3.MyFunction1 ("TEXT")); // В script.log будет Text3 = !!!Used MyFunction:TEXT
Peremennaya3.MyFunction2(); // Выолнит функцию MyFunction2 и возвратит значение 2, но оно не будет записано</span></pre>

<p>
	А вот <strong>MyText3 </strong>из <strong>MyFunction1 </strong>не получить, так как она содержится внутри <abbr title="Набор команд и параметров">функции</abbr> в классе.
</p>

<p>
	<strong><span style="color:#27ae60;">Моддинг Классов</span></strong>
</p>

<p>
	Классы, в свою очередь, можно менять модами, если они не являются 'нативными', либо не защищены движком игры разработчиков от изменений. Для этого применяют приписку "<strong>Modded</strong>" перед именем класса с сохранением его имени, например:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">Modded class PlayerBase
{

}</span></pre>

<p>
	<strong><span style="color:#27ae60;">Моддинг <abbr title="Набор команд и параметров">Функций</abbr> в классах</span></strong>
</p>

<p>
	<abbr title="Набор команд и параметров">Функции</abbr> в классах также можно перезаписывать. Для этого используется модификатор "<strong>override</strong>" перед тем, как задать эту <abbr title="Набор команд и параметров">функцию</abbr>, а в теле самой этой <abbr title="Набор команд и параметров">функции</abbr> можно (и крайне рекоммендуется, но не обязательно) использовать вызов "<strong>super.</strong>" с дальнейшим вызовом этой <abbr title="Набор команд и параметров">функции</abbr> и передачей оригинальных параметров <abbr title="Набор команд и параметров">функции</abbr>. Например:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">Modded class PlayerBase
{
	override void OnConnect()
	{
		Print("Test1"); // Эта строка выполнится до вызова оригинальной функции		
		super.OnConnect(); // вызов оригинальной функции с сохранением ее параметров
		Print("Test2"); // Эта строка выполнится после вызова оригинальной функции
	}
	override string GetPlayerClass()
	{ 
		string returned_original = super.GetPlayerClass(); // вызов оригинальной функции с сохранением ее параметров и значения в переменную
		if(returned_original == "Bad Type") // Проверка значения
		{
			returned_original = "Good Type"; // Замена значения на нужное нам
		}
		return returned_original; // Возврат значения функцией
	}
	override void EEKilled( Object killer )
	{
		super.EEKilled( killer ); // вызов оригинальной функции с сохранением ее параметров
		Print("Test3"); // Эта строка выполнится после вызова оригинальной функции
	}
}</span></pre>

<p>
	Как видим, <abbr title="Набор команд и параметров">функции</abbr> перепишутся с вызовом оригинального значения и допиской нужных или коррекцией.<br>
	Можно делать и так, но крайне не рекоммендуется:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">Modded class PlayerBase
{
	override void OnConnect()
	{
		Print("Test1"); // Эта строка выполнится до вызова оригинальной функции		
		Print("Test2"); // Эта строка выполнится после вызова оригинальной функции
	}
}</span></pre>

<p>
	Но в таком случае, если утеряно оригинальное выполнение кода игры и наследование <abbr title="Набор команд и параметров">функций</abbr>, игра/сервер могут сломаться. Да и <abbr title="Модификации">моды</abbr>, которые параллельно с вашим, будут использовать эту <abbr title="Набор команд и параметров">функцию</abbr>, могут перестать работать.
</p>

<p>
	<span style="color:#27ae60;"><strong>Моддинг и скриптинг - Разница?</strong></span>
</p>

<p>
	Собственно, если вы осилили все. что описано выше, вы освоили базовую часть скриптинга в данной игре, а значит вас можно поздравить: Теперь вы готовы к написанию собственных <abbr title="Сценарий, выполняемый системой">скриптов</abbr> и <abbr title="Модификации">модов</abbr>!<br>
	Самой по себе разницы между скриптами и модами нету. <abbr title="Сценарий, выполняемый системой">Скрипты</abbr> - это составляющая большинства современных <abbr title="Модификации">модов</abbr> в DayZ, т.е. непосредственная часть <abbr title="Модификации">мода</abbr>. Те же самые <abbr title="Сценарий, выполняемый системой">скрипты</abbr> могут быть и в mpmissions и в моде, но с одной разницей -
</p>

<p>
	то что есть в mpmissions может быть в подключено в моде, а то что подключено в моде не всегда может быть подключено в mpmissions. А смысл как раз в том, что игра загружает <abbr title="Сценарий, выполняемый системой">скрипты</abbr> последовательно, т.е. сначала оригинальный код игры с dta, потом <abbr title="Модификации">моды</abbr>, и только потом mpmission. Сама же "<strong>Mpmission</strong>" является частью, заданной в классе "<strong>5_Mission</strong>" в оригинальных скриптах игры, и делится на 2 файла в зависимости от типа запускаемой игры. Для клиента игры это "<strong>missionGameplay.c</strong>" а для сервера это "<strong>missionServer.c</strong>", откуда уже и читаем mpmission сервера. Иными словами, на момент чтения mpmission у нас по сути уже считаны и организованы все структуры разделов кода игры, и доступа к изменениям кодов и классов в <strong>"mpmissions</strong>" у нас нет.
</p>

<p>
	Т.е. то, что вносится в <strong>Mpmissions </strong>можно вносить в свой <abbr title="Модификация">мод</abbr>, но никак не наоборот. Сами же <abbr title="Сценарий, выполняемый системой">скрипты</abbr> по своей стркутуре и особенностям такие же.
</p>

<p>
	 
</p>

<p>
	<span style="color:#27ae60;"><strong>Примечание:</strong></span>
</p>

<p>
	Что же касается модификаторов, типов переменных, <abbr title="Набор команд и параметров">функций</abbr>, классов, используемых в игре в скриптах и модах, можно пока почитать вот тут на немецком: <span><a href="https://germandayz.de/forum/thread/19551-guide-dayz-standalone-scripting-enforce-scripting/" rel="external nofollow">https://germandayz.de/forum/thread/19551-guide-dayz-standalone-scripting-enforce-scripting/</a> Позже будем пытаться создавать свою тему с данным описанием</span><span> </span><br>
	Что касается информации о родных функциях и классах, используемых в игре и на сервере - этой информации найти не смог.  Но ее вы можете найти сами так: распаковываем весь scripts.pbo в папку, запускаем Notepad и используем поиск в папке по тексту (Ctrl+F вкладка №3), ищем по кусочкам нужных фраз на английском и смотрим как называется <abbr title="Набор команд и параметров">функция</abbr>, ее расположение в классе.<br>
	Также, предлагаю всем, кто заинтересован в облегчении поиска информации о таких функциях, помочь друг другу и составить этот список самим в вот этой теме на форуме:
</p>
<iframe allowfullscreen="" data-embedauthorid="11586" data-embedcontent="" data-embedid="embed6879237137" scrolling="no" style="height:210px;max-width:502px;" data-embed-src="https://s-platoon.magicbyte.org/topic/8859-enscript-rodnye-funkcii-v-kode-igry-opisanie-nahozhdenie/?do=embed"></iframe>

<p>
	Поиск по форуму поможет остальным найти интересующую нас информацию <span class="ipsEmoji">?</span>
</p>

<p>
	<br>
	 
</p>
]]></description><guid isPermaLink="false">8701</guid><pubDate>Thu, 20 Feb 2020 13:20:37 +0000</pubDate></item><item><title>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x441;&#x432;&#x43E;&#x438; &#x43E;&#x431;&#x43B;&#x430;&#x441;&#x442;&#x438; &#x441;&#x43F;&#x430;&#x432;&#x43D;&#x430; &#x43B;&#x443;&#x442;&#x430;</title><link>https://s-platoon.magicbyte.org/topic/9457-sozdaem-svoi-oblasti-spavna-luta/</link><description><![CDATA[
<p>
	В этой теме я расскажу один из способов создания областей спавна лута с помощью инструмента "<span style="color:#3498db;">Economy Editor</span>" который предоставили нам разработчики.<br>
	1. Для начала нужно скачать исходники, которые разрабы дают для примера а так же карту в формате PNG для открытия её тулсом, о котором я писал выше - <a href="https://github.com/BohemiaInteractive/DayZ-Central-Economy" rel="external nofollow">ТЫК</a> . После скачивания нас интересует папка <span style="color:#2980b9;"><u><em>CETool</em></u></span><br>
	2. Открываем скачанный файл <span style="color:#3498db;"><em>chernarusplus. </em></span>В этом файле мы заранее можем создать кастомный usage  или же тир. ( рекомендую создавать именно Usage, т.к с тиром происходит что-то не понятное иногда) я для примера создал Test123, так же чуть ниже нам нужно создать layers.  Layers'ы это как раз те самые зоные которые мы и будем рисовать чуть позже. Скрин 2. На этом файл сохраняем и пока забываем о нем.<br>
	 
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="image.png.18e4fea1f4ebb9fe99517640f76e57c8.png" class="ipsImage ipsImage_thumbnailed ipsAttachLink_image" data-fileid="6485" data-ratio="50.00" style="width:300px;height:150px;" width="947" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_06/image.png.18e4fea1f4ebb9fe99517640f76e57c8.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"> - кастомый юзейдж<br><p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p>  - Наш снизу, ему мы ставим  Usage_flags поставьте 0.
		</p>
	</div>
</div>

<p>
	3. Запускаем <span style="color:#3498db;"><em>Economy Editor </em></span>нажимаешь сверху <span style="color:#3498db;">load</span> выбираем наш скачанный и уже отредактированный <span style="color:#3498db;"><em>chernarusplus . </em></span>Тут мы видим уже существующие тиры и зоны различные, а так же спавн ИИ. Скрываем все лишнее что бы не мешало нам создавать нашу зоны, нажав на кнопку в левой части интерфейса "<em>hide all</em>" . Далее создаем новую зоны - тыкаем на <span style="color:#3498db;"><em>карандашик</em></span> так же в левой части экрана <img alt="image.png.2259198cb74e31722c1c260c16cd1985.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6489" data-ratio="52.78" style="height:auto;" width="36" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_06/image.png.2259198cb74e31722c1c260c16cd1985.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png">  после создания нашей зоны называем её как в нашем файле <span style="color:#3498db;"><em>chernarusplus </em></span>, в моем случае это - <strong><em>usgFlg_Paint-Test123.</em></strong> После выбираем нашу зону кликнув на неё в списке в самом низу и переходим в <span style="color:#3498db;">paint mode</span> <img alt="image.png.31ff76192659c7cf50c1e3a3c208086b.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6490" data-ratio="26.14" style="height:auto;" width="88" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_06/image.png.31ff76192659c7cf50c1e3a3c208086b.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"> в этом моде выделяем на карте те зоны, в которых хотите что бы спавнился ваш лут.  После того как нарисовали свою область выходим из режима <span style="color:#3498db;">paint mode</span> сняв галочку. Остается выбран нашу зону в списке далее в окне <strong><em><span style="color:#3498db;">Layer Properties</span></em></strong> указать наш ранее созданный  флаг или тир, в моем  случае ставлю галочку перед <span style="color:#3498db;">Test123.</span> После мы можем сохранить нашу зону. Для этого нажимаем <img alt="image.png.f27581eee2c5687e11af2abb5879ff46.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6491" data-ratio="84.21" style="height:auto;" width="19" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_06/image.png.f27581eee2c5687e11af2abb5879ff46.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"> сохраняем, ждем пока он создает и бинарит новую карту экономики. По завершению процесса этого мы увидем в в окне <span style="color:#3498db;">Status </span>- Save done.
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p>  -  Окно программы
		</p>

		<p>
			<p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p>  - После открытия проекта видим карту
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	4. Теперь в этой же папке <span style="color:#2980b9;"><u><em>CETool </em></u></span>появляется папка <span style="color:#3498db;">map </span>в ней лежит наша карта, которую нужно переименовать в <strong><em><span style="color:#3498db;">areaflags.map,</span></em></strong> после этот файл заменяем в папке нашего сервера <span style="color:#3498db;">server\mpmissions\dayzOffline.chernarusplus.</span>
</p>

<p>
	5. После замены карты нужно прописать наши зоны в <strong><em><span style="color:#3498db;">cfglimitsdefinition.xml</span> </em></strong>который лежит по пути <span style="color:#3498db;">server\mpmissions\dayzOffline.chernarusplus. </span><span style="color:#e74c3c;">!!! Важно, порядок зон заданный в файле <em>chernarusplus из первого списка очень важен, т.е задаем так же как и расположены наши флаги там.</em></span>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="image.png.b3267c4fad0c81d6150a2230b985cff9.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6492" data-ratio="50.00" style="width:300px;height:150px;" width="487" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_06/image.png.b3267c4fad0c81d6150a2230b985cff9.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"> - Тут я прописал нашу кастомную зону - Test123
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	6. Последний пункт - задаем в <span style="color:#3498db;">Types </span> нашу кастомную зону предмета, которые хотим что бы спавнились в нашей зоне.
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			    &lt;type name="ACOGOptic"&gt;<br>
			        &lt;nominal&gt;500&lt;/nominal&gt;<br>
			        &lt;lifetime&gt;7200&lt;/lifetime&gt;<br>
			        &lt;restock&gt;0&lt;/restock&gt;<br>
			        &lt;min&gt;450&lt;/min&gt;<br>
			        &lt;quantmin&gt;-1&lt;/quantmin&gt;<br>
			        &lt;quantmax&gt;-1&lt;/quantmax&gt;<br>
			        &lt;cost&gt;100&lt;/cost&gt;<br>
			        &lt;flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/&gt;<br>
			        &lt;category name="weapons"/&gt;<br>
			        <span style="color:#27ae60;">&lt;usage name="Test123"/&gt;</span><br>
			    &lt;/type&gt;
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	<span style="color:#2c3e50;"><em>Так же хочу обратить ваше внимание что если вы выделили область на карте где нет каких либо точек спавна лута( зданий, или других объектов с точками) то и лута там соотвественно не будет.. Данный способ подойдет лишь для того, что бы вы могли более точно распределить лут в выбранной области.</em></span>
</p>
]]></description><guid isPermaLink="false">9457</guid><pubDate>Sun, 28 Jun 2020 01:20:25 +0000</pubDate></item><item><title>CheckArtefacts</title><link>https://s-platoon.magicbyte.org/topic/12370-checkartefacts/</link><description><![CDATA[
<p style="text-align:center;">
	<span style="color:#3498db;">В данной теме мы с вами научимся ставить <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> <br />
	2. Распаковываем папку <strong>@CheckArtefacts</strong> в папку с вашим игровым сервером и прописываем модик в серверные <abbr title="Модификации">моды</abbr> сервера параметром:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">-servermod=@CheckArtefacts</span></pre>

<p>
	Если строка имеется там уже с другими модами, дописываем папку через точку с запятой к имеющимся.
</p>

<p>
	3. Помещаем в папку файл  <strong>Config_CheckArtefacts.json</strong> в <u>системную папку profiles</u> сервера (задается параметром запуска сервера -profiles=) и настраиваем файл так как нужно нам.
</p>

<p>
	Если файла нет и вы забыли это сделать - он создастся автоматически.
</p>

<p>
	 
</p>

<p>
	<span style="color:#3498db;"><strong>Настройки:</strong></span>
</p>

<p>
	<strong>DebugLogs_enabled </strong>- включение <abbr title="Файл, содержащий сведения об определённых событиях">логов</abbr> отладки <abbr title="Сценарий, выполняемый системой">скрипта</abbr>, 0 - выкл, 1 - вкл.
</p>

<p>
	<strong>Time_Repeat_Checking_Seconds </strong>- время повтора проверки всех игроков в секундах, грубо говоря регулирует как часто проверка выполняется.
</p>

<p>
	<strong>CheckList </strong>- массив с настройками. Этих настроек можно делать сколь угодно.
</p>

<p>
	Ниже параметры для одного блока настройки в этом массиве:
</p>

<p>
	<strong>Enabled_Config </strong>- переключатель активации конфига. 0 - выкл, 1 - выкл.
</p>

<p>
	<strong>Classname_Search </strong>- id вещей, которые будут искаться в инвентаре игрока. Можно указать несколько.
</p>

<p>
	<strong>Check_In_player_Inventory </strong>- параметр, указывающий, что необходимо искать указанные id предмета в инвентаре игрока. 0 - выкл, 1 - вкл.
</p>

<p>
	<strong>Check_In_player_Hands </strong>- параметр, указывающий, что необходимо искать указанные id предмета в руках игрока. 0 - выкл, 1 - вкл.
</p>

<p>
	<strong>DontSearchClassnamesInBlackList </strong>- параметр, включающий список исключений предметов, в которых при нахождении объекта, действия скриптом не будут применены. 0 - выкл, 1 - вкл.
</p>

<p>
	<strong>BlackList_Classnames </strong>- список исключений id объектов  для опции выше, действует только при <strong>DontSearchClassnamesInBlackList  = 1</strong>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">"Enable_HP_Add": 1,
            "HP_Add_Value": 0.05,
            "Enable_Blood_Add": 1,
            "Blood_Add_Value": 0.05,
            "Enable_Shock_Add": 1,
            "Shock_Add_Value": 0.05,
            "Enable_StatEnergy_Add": 1,
            "StatEnergy_Add_Value": 0.05,
            "Enable_StatWater_Add": 1,
            "StatWater_Add_Value": 0.05,
            "Enable_StatDiet_Add": 1,
            "StatDiet_Add_Value": 0.05,
            "Enable_StatTremort_Add": 1,
            "StatTremor_Add_Value": 0.05,
            "Enable_StatHeatComfort_Add": 1,
            "StatHeatComfort_Add_Value": 0.05,
            "Enable_StatWet_Add": 1,
            "StatWet_Add_Value": 0.05,
            "Enable_StatStamina_Add": 1,
            "StatStamina_Add_Value": 0.05,
            "Enable_StatSpecialty_Add": 1,
            "StatSpecialty_Add_Value": 0.05,
            "Enable_Bleeding_Add": 1,
            "Bleeding_Add_Value": 1</span></pre>

<p>
	параметры, указанные выше в блоке кода позволяют применить к игроку те или иные значения при каждой проверке игрока.
</p>

<p>
	Значения с Enable - переключатели активности опции, что идет следом. 0 - выкл, 1 -вкл.
</p>

<p>
	Сами опции следом за переключателями же указывают фактическое значение, которое будет добавлено или отнято от параметра игрока. Доступно к указанию число как с плюсом, так и с минусом, числа как с точкой, так и без. При плюсовом значении соответственно значение будет увеличено, при минусовом - отнято. Значения указываются В ФАКТИЧЕСКИХ ЕДИНИЦАХ, НЕ В ПРОЦЕНТАХ!!!.
</p>

<p>
	 
</p>

<p>
	 
</p>

<p style="text-align:center;">
	<strong><span style="color:#3498db;"><abbr title="Сценарий, выполняемый системой">Скрипт</abbr>-<abbr title="Модификация">мод</abbr> доступен для полного переписывания вам под ваши нужды! </span></strong>
</p>

<p style="text-align:center;">
	<strong><span style="color:#3498db;">P.S. Я не дорабатываю работу под ваши нужды! Можете заняться этим сами.</span></strong>
</p>
]]></description><guid isPermaLink="false">12370</guid><pubDate>Mon, 31 Jan 2022 17:53:03 +0000</pubDate></item><item><title>&#x421;&#x43F;&#x430;&#x432;&#x43D; &#x433;&#x440;&#x430;&#x43D;&#x430;&#x442;&#x44B; &#x431;&#x435;&#x437; &#x43A;&#x43E;&#x43B;&#x44C;&#x446;&#x430;</title><link>https://s-platoon.magicbyte.org/topic/11641-spavn-granaty-bez-kolca/</link><description><![CDATA[
<p>
	Появилась необходимость спавнить в произвольном месте гранату с уже вытащенным кольцом. Код получился такой:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">EntityAI entity = EntityAI.Cast(GetGame().CreateObject("RGD5Grenade", m_Position)); // где-то выше m_Position = player.GetPosition();
Grenade_Base grenade = Grenade_Base.Cast(entity);
grenade.Unpin();</span></pre>

<p>
	Граната появляется, кольцо выдёргивается, но граната просто лежит на земле. Можно её подобрать, в руках видно, что кольцо уже выдернуто (можно бросить, или положить в инвентарь и взорваться).
</p>

<p>
	А нужно, чтобы она вела себя как будто уже брошенная, и после спавна взорвалась через стандартную задержку.
</p>
]]></description><guid isPermaLink="false">11641</guid><pubDate>Mon, 30 Aug 2021 09:32:05 +0000</pubDate></item><item><title>&#x427;&#x430;&#x442; &#x430;&#x434;&#x43C;&#x438;&#x43D;&#x43A;&#x430;</title><link>https://s-platoon.magicbyte.org/topic/7834-chat-adminka/</link><description><![CDATA[
<p>
	Автор я
</p>

<p>
	На основе наработок комьюнити, на основе идей DaOne
</p>

<p>
	 
</p>

<p>
	Мучайте
</p>

<p>
	P.S. Так же там есть доп функционал - для вызовов из класса миссии
</p>

<p>
	P.S.2. Инструкция (на англ) внутрях
</p>

<p>
	 
</p>

<p>
	 
</p>

<p><p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> </p>
]]></description><guid isPermaLink="false">7834</guid><pubDate>Sun, 07 Jul 2019 14:46:54 +0000</pubDate></item><item><title>&#x42D;&#x43A;&#x441;&#x442;&#x435;&#x43D;&#x434; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x43E;&#x432; &#x432;&#x435;&#x449;&#x435;&#x439; &#x43D;&#x430; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x435; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x430;</title><link>https://s-platoon.magicbyte.org/topic/16626-ekstend-klassov-veschey-na-storone-servera/</link><description><![CDATA[
<p>
	Всем привет!<br />
	Подскажите, есть ли возможность экстендить вещь от вещи, оставаясь в рамках серверного <abbr title="Модификации">мода</abbr>?
</p>

<p>
	Условно говоря, мне нужна вещь с другим названием класса, но полностью (или не совсем) повторяющая поведение оригинала.<br />
	Т.е. в оригинальном коде есть "class FieldShovel extends ItemBase", а мне нужен, например, "class WormShovel extends FieldShovel". В идеале оверрайдить методы внутри этого класса, чтобы эта лопата не копала огороды, зато копала больше червей. В плане модели/текстуры всё остаётся абсолютно так же, поэтому и интересно, можно ли сделать всё на уровне сервера?
</p>
]]></description><guid isPermaLink="false">16626</guid><pubDate>Fri, 28 Mar 2025 02:12:03 +0000</pubDate></item><item><title>&#x421;&#x43E;&#x43A;&#x440;&#x44B;&#x442;&#x438;&#x435; &#x430;&#x442;&#x442;&#x430;&#x447;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x438;&#x433;&#x440;&#x43E;&#x43A;&#x430; &#x43F;&#x440;&#x438; &#x43F;&#x43E;&#x441;&#x430;&#x434;&#x43A;&#x435; &#x432; &#x442;&#x430;&#x447;&#x43A;&#x443; &#x438; &#x440;&#x430;&#x441;&#x43A;&#x440;&#x44B;&#x442;&#x438;&#x435; &#x43F;&#x440;&#x438; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x435;</title><link>https://s-platoon.magicbyte.org/topic/11290-sokrytie-attachmentov-igroka-pri-posadke-v-tachku-i-raskrytie-pri-vyhode/</link><description><![CDATA[
<p>
	Суть такова
</p>

<p>
	Когда "ванильно" садишься в машину рюкзак прет сквозь спинку сиденья, оружие может торчать сквозь крышу - разработчики просто не позаботились об этих нюансах, но предусмотрели функционал для решения этих "проблем"
</p>

<p>
	 
</p>

<p>
	Это нативная <abbr title="Набор команд и параметров">функция</abbr> в двигле (сторона C++) SetInvisible
</p>

<p>
	И штатная <abbr title="Набор команд и параметров">функция</abbr> в скриптах игры SetInvisibleRecursive в классе EntityAI (базовый для всех сущностей игры) (которая юзает SetInvisible) + юзает рекурсивно саму себя, что бы скрыть/показать аттачменты аттачметнтов<br /><br />
	Я просто покажу как сделать скрытие того, что находится в слотах игрока когда он садится в тачку и показать когда он вылезает из нее<br /><br />
	Слоты имеют индексы (номера)<br />
	На стороне <abbr title="Сценарий, выполняемый системой">скриптов</abbr> определяются они (для простоты программирования) через класс InventorySlots (inventoryslots.c) - это нативный класс в двигле игры (обьявленный на стороне <abbr title="Сценарий, выполняемый системой">скриптов</abbr>, что бы иметь к нему доступ) (кстати есть еще классы
</p>

<p>
	в двигле которые не обьявлены бисами на стороне <abbr title="Сценарий, выполняемый системой">скриптов</abbr>, но которые можно обьявить самому и получить доступ к чудесатому функционалу - нужно ковырять экзешник и эксперементировать)<br /><br />
	Так вот... не буду тянуть кота за его и без того оттянутые бисами ойца... собственно код<br />
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">modded class PlayerBase extends ManBase
{
	protected ref array</span><span class="tag">&lt;int&gt;</span><span class="pln"> hideAttachmentsSlotsArray 	= new array</span><span class="tag">&lt;int&gt;</span><span class="pln">;
	protected bool m_AttachmentsHide 					= false;
	protected bool m_AttachmentsHidden 					= false;
	
	void PlayerBase()
	{
		hideAttachmentsSlotsArray.Insert(InventorySlots.MELEE);
		hideAttachmentsSlotsArray.Insert(InventorySlots.BACK);
		hideAttachmentsSlotsArray.Insert(InventorySlots.SHOULDER);
	}
	
	void Init()
	{
		super.Init();
		RegisterNetSyncVariableBool("m_AttachmentsHide");
	}
	
	override void OnCommandVehicleStart()
	{
		m_AttachmentsHide = true;
		#ifdef SERVER
		SetSynchDirty();
		#endif
		Print("::: ["+this+"]: OnCommandVehicleStart: m_AttachmentsHide: " + m_AttachmentsHide);
		super.OnCommandVehicleStart();
	}

	override void OnCommandVehicleFinish()
	{
		m_AttachmentsHide = false;
		Print("::: ["+this+"]: OnCommandVehicleFinish: m_AttachmentsHide: " + m_AttachmentsHide);
		super.OnCommandVehicleFinish();
	}

	void HideAttachments(bool hiddenstate)
	{
		SetInvisibleRecursive(hiddenstate,this,hideAttachmentsSlotsArray);
	}
	
	override void OnVariablesSynchronized()
	{
		super.OnVariablesSynchronized();
		
		if (m_AttachmentsHide != m_AttachmentsHidden)
		{
			m_AttachmentsHidden = m_AttachmentsHide;
			HideAttachments(m_AttachmentsHide);
		}
	}
}
</span></pre>

<p>
	 
</p>

<p>
	так можно скрыть ваще все и игрок сядет в тачку голый... ну тоесть весело задорно, жалко что не порно...
</p>

<p>
	 
</p>

<p>
	вобщем как-то так<br /><br />
	P.S. Сорян - после почти 10 литров пива пишется хорошо, но чем больше количество символов, тем меньше хочется писать и больше хочется продолжить банкет
</p>

<p>
	 
</p>

<p>
	Всем удачи!
</p>

<p>
	 
</p>

<p>
	<br /><br />
	 
</p>
]]></description><guid isPermaLink="false">11290</guid><pubDate>Fri, 18 Jun 2021 19:26:14 +0000</pubDate></item><item><title>[DayZ 1.0] &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x421;&#x435;&#x439;&#x432;&#x437;&#x43E;&#x43D;&#x443; &#x43D;&#x430; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x435;</title><link>https://s-platoon.magicbyte.org/topic/7273-dayz-10-sozdaem-seyvzonu-na-servere/</link><description><![CDATA[
<p style="text-align:center;">
	<span style="font-size:16px;"><span style="color:#3498db;">В данной теме я распишу мой вариант установки сейвзоны, работающий на момент публикации статьи на версии сервера игры 1.06.152885.</span></span>
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#27ae60;">Установка</span></strong>
</p>

<p>
	1. Открываем '<strong>init.c</strong>' в  '<strong>MpMissions</strong>' вашей.
</p>

<p>
	2. Вверху файла добавляем 1 строкой:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">#include "$CurrentDir:\\mpmissions\\dayzoffline.chernarusplus\\Scripts\safezone.c"</span></pre>

<p>
	Где '<strong>dayzoffline.chernarusplus</strong>' - имя папки с активной '<strong>MpMissions</strong>' вашей.
</p>

<p>
	Т.е. для карты Livonia '<strong>dayzoffline.chernarusplus</strong>'  надо вручную заменить на '<strong>dayzOffline.enoch</strong>'
</p>

<p>
	Пример:
</p>

<p>
	<p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<p>
	3.Создаем папку '<strong>Scripts</strong>' в корне '<strong>MpMissions</strong>' вашей, а в ней создаем файл с именем '<strong>safezone.c</strong>' следующего содержания:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">/*
	Author: Sania(ZoS) (aka 123new)
	Project: S-platoon.ru
	Install:
	1. Create a 'Scripts' directory in your active mpmissions
	2. Plase this filename (safezone.c) in 'Scripts' 
	3. Add in init.c this line:
	#include "$CurrentDir:\\mpmissions\\dayzoffline.chernarusplus\\Scripts\safezone.c"
	Where is 'dayzoffline.chernarusplus' is active mpmission directory in cfg filename server
	4. Configure a next settings
*/
class SafeZone_PlugIn
{
	protected bool Activate_SafeZone_PlugIn = true; // safezone on (true) or off (false)
	protected float SAFEZONE_time_repeat_checking = 10; //In seconds
	
	ref static TStringArray SAFEZONE_LOACTIONS = {"15145.1 32.9793 13919.0",
		   "12145.1 32.9793 10919.0"};//Map coords (positions of the safe zone)
	protected static float  SAFEZONE_RADIUS   = 100; //In meter
	protected static string SAFEZONE_ENTRY_MESSAGE     = "Welcome to The SafeZone! Godmode ENABLED!";
	protected static string SAFEZONE_EXIT_MESSAGE      = "You Have Left The SafeZone! Godmode DISABLED!";
		
	
	void OnInit()
	{
		if(Activate_SafeZone_PlugIn)
		{
			GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(RunCheckStart, (SAFEZONE_time_repeat_checking * 1000), true); 
		}
	}
	
	static void RunCheckStart()
	{
		private array</span><span class="tag">&lt;Man&gt;</span><span class="pln"> players = new array</span><span class="tag">&lt;Man&gt;</span><span class="pln">;
		GetGame().GetPlayers( players );
		if (SAFEZONE_LOACTIONS.Count() &gt; 0)
		{
			if (players.Count() &gt; 0)
			{
				foreach(string SAFEZONE_LOACTION: SAFEZONE_LOACTIONS)
				{
					if( players.Count() &gt; 0 )
					{
						foreach(Man player: players)
						{
							if(player)
							{
								private PlayerBase player_casted = PlayerBase.Cast(player);
								CheckingPosition(player_casted,SAFEZONE_LOACTION.ToVector());
							}
						}
				   }
			   }	
		   }
		}
	}

	static void CheckingPosition(PlayerBase player,vector SAFEZONE_LOACTION)
	{
		private float SAFEZONE_distance;
		private string SAFEZONE_ZoneCheck, SAFEZONE_UID_PLAYER, SAFEZONE_NAME_PLAYER;
		SAFEZONE_NAME_PLAYER = player.GetIdentity().GetName(); 
		SAFEZONE_UID_PLAYER = player.GetIdentity().GetPlainId(); //Steam 64	

		private vector SAFEZONE_pos_player = player.GetPosition();
		private vector SAFEZONE_LOCATION_FIXED = CorrectToGroundPosY(SAFEZONE_LOACTION);
		private string name_mesage_profile = "GodModeEnabledFor: " + SAFEZONE_UID_PLAYER + " Location: " + SAFEZONE_LOACTION.ToString();
		SAFEZONE_distance = vector.Distance(SAFEZONE_pos_player,SAFEZONE_LOCATION_FIXED);
		if (SAFEZONE_distance &lt;= SAFEZONE_RADIUS) //Player Inside Zone
		{
			SAFEZONE_ZoneCheck = "";
			GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck);
			if (SAFEZONE_ZoneCheck == "true") //Already in zone
			{
				GetGame().SetProfileString(name_mesage_profile,"true");
				player.SetAllowDamage(false); //GodMode On
				return;
			}
			else
			{
				GetGame().SetProfileString(name_mesage_profile,"true");
				Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Enter in safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString());
				player.SetAllowDamage(false); //GodMode On
				SendPersonalMessage(SAFEZONE_ENTRY_MESSAGE, player);
			}
		} else 
		{
			 //Player Outside of Zone
			if (SAFEZONE_distance &gt; SAFEZONE_RADIUS) //Player Outside of Zone
			{
				SAFEZONE_ZoneCheck = "";
				GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck);
				if (SAFEZONE_ZoneCheck == "false")
				{
					GetGame().SetProfileString(name_mesage_profile,"false");
					return;
				}
				else
				{
					if (SAFEZONE_ZoneCheck != "")
					{
						GetGame().SetProfileString(name_mesage_profile,"false");
						Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Left safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString());
						player.SetAllowDamage(true); //GodMode Off
						SendPersonalMessage(SAFEZONE_EXIT_MESSAGE, player);
					} else
					{
						GetGame().SetProfileString(name_mesage_profile,"false");
						return;
					}
				}				
			}
		}
	}

	static vector CorrectToGroundPosY(vector pos)
	{
		private float pos_x = pos[0];
		private float pos_z = pos[2];
		private float pos_y = GetGame().SurfaceY(pos_x, pos_z);
		private vector tmp_pos = Vector(pos_x, pos_y, pos_z);
		return tmp_pos;
	}
	static void SendPersonalMessage(string message, PlayerBase casted_player) 
	{
		Man player; 
		Class.CastTo(player, casted_player);
		if(( player ) &amp;&amp; (message != ""))
		{
			Param1</span><span class="tag">&lt;string&gt;</span><span class="pln"> m_GlobalMessage = new Param1</span><span class="tag">&lt;string&gt;</span><span class="pln">(message); 
			GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); 
		}
	}
}
/*
class SafeZone_Config //test config for json
{
	vector SAFEZONE_LOACTION = "15145.1 32.9793 13919.0"; //Map coords (position of the safe zone)
	float  SAFEZONE_RADIUS   = 100.0; //In meter
	string SAFEZONE_ENTRY_MESSAGE     = "Welcome to The SafeZone! Godmode ENABLED!";
	string SAFEZONE_EXIT_MESSAGE      = "You Have Left The SafeZone! Godmode DISABLED!";\
}
*/
ref SafeZone_PlugIn SafeZone = new SafeZone_PlugIn();
modded class CustomMission
{	
	override void OnInit () 
    {
		super.OnInit();
		SafeZone.OnInit();		
    }
}</span></pre>

<p>
	Ну или скачиваем его отсюда в готовом виде: <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<p>
	<u>Здесь:</u>
</p>

<p>
	 '<strong>SAFEZONE_LOACTIONS</strong>' - координаты точкек центра сейвзоны, можно указать несколько.
</p>

<p>
	'<strong>SAFEZONE_RADIUS</strong>' - радиус от указанного центра севзоны, на котором действует защита
</p>

<p>
	'<strong>ENTRY_MESSAGE</strong>' - сообщение о входе в зону (не рекоммендуется указывать русский язык, может не отображаться)<br>
	'<strong>EXIT_MESSAGE</strong>' - сообщение о выходе из зоны (не рекоммендуется указывать русский язык, может не отображаться)
</p>

<p>
	'<strong>SAFEZONE_time_repeat_checking</strong>' - время повтора проверки наличия игроков в зонах, в секундах
</p>

<p>
	'<strong>Activate_SafeZone_PlugIn</strong>' - активация плагина скрипта, true - ключен, false - выключен<br>
	4. Запускаем сервер и проверяем.
</p>

<p>
	 
</p>

<p>
	Для совсем ленивых готовая миссия сервера с настроенной сейвзоной для патча игры 1.06  <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<p>
	 
</p>

<p>
	<strong>Гайд обновлен: </strong>31.01.2020
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7273</guid><pubDate>Sun, 23 Dec 2018 11:26:36 +0000</pubDate></item><item><title>&#x41D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x43A;&#x430; Workbench, DayZDiag_x64, &#x423;&#x43F;&#x430;&#x43A;&#x43E;&#x432;&#x43A;&#x430; &#x43C;&#x43E;&#x434;&#x43E;&#x432; (&#x418;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442;&#x43E;&#x432; &#x431;&#x435;&#x437; &#x43F;&#x435;&#x440;&#x435;&#x437;&#x430;&#x433;&#x440;&#x443;&#x437;&#x43A;&#x438; &#x438;&#x433;&#x440;&#x44B;)</title><link>https://s-platoon.magicbyte.org/topic/14984-nastroyka-workbench-dayzdiag_x64-upakovka-modov-izmenenie-skriptov-bez-perezagruzki-igry/</link><description><![CDATA[
<p>
	<span style="color:#3498db;"><strong>Что вы узнаете в этом руководстве:</strong></span><br /><br />
	- Установка и настройка Workbench с нуля<br />
	- Установка инструментариев Dayz Tolls, Mikera tools<br />
	- Создание своего первого <abbr title="Модификации">мода</abbr><br />
	- Отладка этого <abbr title="Модификации">мода</abbr> в игре<br />
	- Изменение <abbr title="Модификации">мода</abbr> без перезагрузки<br /><br /><span style="color:#3498db;"><strong>Что нужно для начала работ:</strong></span><br /><br />
	1. Установленная игра <strong>DayZ </strong>- <a href="https://store.steampowered.com/agecheck/app/221100/" rel="external nofollow">https://store.steampowered.com/agecheck/app/221100/</a><br />
	2. Установленный сервер <strong>DayZ</strong> - <a href="https://store.steampowered.com/agecheck/app/221100/" rel="external nofollow">https://store.steampowered.com/agecheck/app/221100/</a><br />
	3. Установленный <strong>DayZ Tools</strong> - <a href="https://store.steampowered.com/app/830640/DayZ_Tools/" rel="external nofollow">https://store.steampowered.com/app/830640/DayZ_Tools/</a><br />
	4. Установленный <strong>Visual Studio Code</strong> или Notepad ++(советую первый вариант, бонус в конце статьи)<br />
	5. Установить пакет инструментов от <strong>Mikera </strong>(галочками отмечено в спойлере) - <a href="https://mikero.bytex.digital/Downloads" rel="external nofollow">https://mikero.bytex.digital/Downloads</a>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
		</p>
	</div>
</div>

<p>
	<br /><strong>Если все вышеперечисленные пункты выполнены приступим к настройке:</strong><br /><br /><span style="color:#d35400;"><strong>1. Создание диска Р и распаковка файлов игры</strong></span>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			Оригинал статьи - <a href="https://community.bistudio.com/wiki/DayZ:Modding_Basics" rel="external nofollow">https://community.bistudio.com/wiki/DayZ:Modding_Basics</a><br />
			Диск Р - это виртуальный диск который в обязательном порядке должен быть создан для работы со своими модификациями (модами)<br />
			Для создания диска Р и дальнейшей работы с ним потребуется место на жестком диске не менее 50 гб (распакованная игра весит порядка 15 Гб).<br />
			Исходя из этого диск С для работы мы не рассматриваем. Выбираем диск в котором у вас достаточно места. Допустим диск D. В нем создаем папку Pdrive. <br />
			У меня получился такой путь <strong>D:\PDrive</strong><br />
			Теперь открываем <strong>DayZ Tools</strong> и прописываем путь до папки <strong>Pdrive</strong>, ставить галочку напротив <strong>Startup of the Tools</strong> (Диск будет автоматически монтироваться при запуске DayZ Tools)<br />
			Так же ниже проверяем правильно ли указан путь до установленной игры DayZ, если нет то снимаем галочку и указываем верную директорию.<br />
			 
		</p>

		<div class="ipsSpoiler" data-ipsspoiler="">
			<div class="ipsSpoiler_header">
				<span>Скрытый текст</span>
			</div>

			<div class="ipsSpoiler_contents">
				<p>
					<img alt="image.png.0bced1ebcfcdfe902eb9bba7b16e832e.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16084" data-ratio="74.79" style="height:auto;" width="599" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2023_10/image.png.0bced1ebcfcdfe902eb9bba7b16e832e.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png" /><span> </span>
				</p>
			</div>
		</div>

		<p>
			Далее там же в Dayz Tools нажимаем вкладку <strong>Tools </strong>и выбираем <strong>Mount Drive P - </strong>Наш виртуальный диск смонтирован!<br />
			Теперь находим приложение <strong>dayz2p</strong>, запускаем и указываем диск <strong>P. </strong><br />
			Жмем <strong>Enter </strong>и ждем окончания распаковки файлов игры на диск Р (время распаковки занимает от 5 мин и более)<br />
			Можете использовать DayZ Tools для распаковки игры (Tools/Extract Game Data), но советую использовать <strong>dayz2p </strong>так как все конфиги будут сразу разбинарены.<br />
			После выполнения распаковки вы можете наблюдать на диске Р все файлы игры
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	<br /><br /><span style="color:#d35400;"><strong>2. Создание первого <abbr title="Модификации">мода</abbr></strong></span>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			Приступим к созданию своего первого <abbr title="Модификации">мода</abbr>.<br />
			На диске Р создадим папку <strong>GGmod </strong>(Никогда не используйте в названии <abbr title="Модификации">мода</abbr> и классов боле 2х заглавных букв - Mikera не запакует ваш <abbr title="Модификация">мод</abbr>)<br />
			Создаем папку <strong>Scripts,</strong> в папке Scripts создаем папку<b> 4_World, </b>в папке 4_World создаем папку <strong>GGscript  </strong>(P:\GGmod \Scripts\4_World\GGscript  ).<br />
			В дальнейшем папка <strong>GGscript </strong>в 4_World облегчит нам поиск наших <abbr title="Сценарий, выполняемый системой">скриптов</abbr> через <strong>Workbench</strong><br />
			Создаем файл config.cpp в корне нашего <abbr title="Модификации">мода</abbr> (P:\GGmod \config.cpp)<br />
			Открываем config.cpp через Visual Studio Code (или Notepad++)  и вставляем код
		</p>

		<div class="ipsSpoiler" data-ipsspoiler="">
			<div class="ipsSpoiler_header">
				<span>Скрытый текст</span>
			</div>

			<div class="ipsSpoiler_contents">
				<pre class="ipsCode prettyprint lang-c prettyprinted">


<span class="kwd">class</span><span class="pln"> </span><span class="typ">CfgPatches</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">GGmod</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		requiredAddons</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			</span><span class="com">// ""  //Если вы делаете ретекстур или изменяете скрипт здесь указываются классы модов которые нам требуется изменить</span><span class="pln">
		</span><span class="pun">};</span><span class="pln">
	</span><span class="pun">};</span><span class="pln">
</span><span class="pun">};</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">CfgMods</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">GGmod</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		type </span><span class="pun">=</span><span class="pln"> </span><span class="str">"mod"</span><span class="pun">;</span><span class="pln">

		</span><span class="kwd">class</span><span class="pln"> defs
		</span><span class="pun">{</span><span class="pln">
			</span><span class="kwd">class</span><span class="pln"> worldScriptModule
			</span><span class="pun">{</span><span class="pln">
				</span><span class="pun">значение</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
				</span><span class="pun">файлы[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="str">"GGmod/Scripts/4_World"</span><span class="pln"> </span><span class="pun">};</span><span class="pln"> </span><span class="com">//Путь до нашей папки 4_World со скриптами</span><span class="pln">
			</span><span class="pun">};</span><span class="pln">
		</span><span class="pun">};</span><span class="pln">
	</span><span class="pun">};</span><span class="pln">
</span><span class="pun">};</span></pre>

				<p>
					 
				</p>
			</div>
		</div>

		<p>
			<br />
			Сохраняем <strong>config.cpp</strong> и закрываем его.<br />
			Теперь перейдем к созданию своего первого <abbr title="Сценарий, выполняемый системой">скрипта</abbr>.<br />
			В папке GGscript  создаем файл <strong>moddedPlayerBase.c</strong>  (P:\GGmod \Scripts\4_World\GGscript\moddedPlayerBase.c). Название <abbr title="Сценарий, выполняемый системой">скрипта</abbr> можете указывать совершенно любое латиницей оно ни на что не влияет.<br />
			Открываем <strong>moddedPlayerBase.c </strong>через Visual Studio Code (или Notepad++)  и вставляем  наш первый <abbr title="Сценарий, выполняемый системой">скрипт</abbr><br />
			 
		</p>

		<div class="ipsSpoiler" data-ipsspoiler="">
			<div class="ipsSpoiler_header">
				<span>Скрытый текст</span>
			</div>

			<div class="ipsSpoiler_contents">
				<pre class="ipsCode prettyprint lang-c prettyprinted">


<span class="pln">modded </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">PlayerBase</span><span class="pln">	</span><span class="com">// указываем что модифицируем оригинальный класс игры PlayerBase</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	override </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">OnJumpStart</span><span class="pun">()</span><span class="pln">	</span><span class="com">// переопределяем существующий метод OnJumpStart</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		super</span><span class="pun">.</span><span class="typ">OnJumpStart</span><span class="pun">();</span><span class="pln">			</span><span class="com">// вызываем исходный метод обратного вызова, чтобы ничего не сломать</span><span class="pln">
		</span><span class="typ">Print</span><span class="pun">(</span><span class="str">"Мой первый мод, Ура!!!"</span><span class="pun">);</span><span class="pln">	</span><span class="com">// вызываем Print с указанным текстом </span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

				<p>
					 
				</p>
			</div>
		</div>

		<p>
			<br />
			Сохраняем <strong>moddedPlayerBase.c </strong> и закрываем его.<br />
			На этом этапе мы создали наш первый <abbr title="Модификация">мод</abbr> без запаковки в PBO. Который будет выводит в script <abbr title="Файл, содержащий сведения об определённых событиях">логи</abbr> текст "<strong>Мой первый <abbr title="Модификация">мод</abbr>, Ура!!!" </strong>каждый раз когда мы будем прыгать игровым персонажем.
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	<br /><br /><span style="color:#d35400;"><b>3. Упаковка в PBO</b></span><br /><b><span style="color:#1abc9c;">На данном этапе мы </span><span style="color:#c0392b;">забываем</span><span style="color:#1abc9c;"> окончательно </span><span style="color:#c0392b;">о существовании Addon Builder</span><span style="color:#1abc9c;"> встроенного в DayZ Tools.</span><span style="color:#c0392b;"> </span><br /><span style="color:#f1c40f;">Используйте </span><span style="color:#c0392b;">pboProject </span><span style="color:#f1c40f;">для запаковки <abbr title="Модификации">модов</abbr></span><span style="color:#1abc9c;"> - он показывает абсолютно все допущенные ошибки, кроме ошибок в скриптах.</span></b>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			На диске P создаем папку @MyMod и папку Addons внутри (P:\@MyMod\Addons). Говорят что Addons лучше создавать с заглавной буквы.<br />
			Открываем установленный <strong>pboProject - </strong>нажимаем <strong>Setup</strong><br />
			И изменяем настройки как указано на скриншоте под спойлером<br />
			 
		</p>

		<div class="ipsSpoiler" data-ipsspoiler="">
			<div class="ipsSpoiler_header">
				<span>Скрытый текст</span>
			</div>

			<div class="ipsSpoiler_contents">
				<p>
					<img alt="image.png.6beff1ad8780a86fc183f9f33176e1c0.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16085" data-ratio="145.16" style="height:auto;" width="496" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2023_10/image.png.6beff1ad8780a86fc183f9f33176e1c0.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png" /></p>
			</div>
		</div>

		<p>
			<br />
			Подтверждаем изменения, жмем ОК и далее настраиваем главное окне.<br />
			Жмем Mod Folder и указываем путь P:\@MyMod<br />
			Жмем Source Folder и указываем путь P:\GGmod<br />
			(При создании своего <abbr title="Модификации">мода</abbr> учитывайте что в корневой папке, в данном случае GGmod должен обязательно находится config.cpp с начальными данными указанными выше. Иначе <strong>pboProject </strong> ничего не запакует)<br />
			Далее устанавливаем галочки указанные на скриншоте под спойлером<br />
			 
		</p>

		<div class="ipsSpoiler" data-ipsspoiler="">
			<div class="ipsSpoiler_header">
				<span>Скрытый текст</span>
			</div>

			<div class="ipsSpoiler_contents">
				<p>
					<img alt="image.png.f8dc8cf7f09b61ee7cf318a0c8391713.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16086" data-ratio="108.59" style="height:auto;" width="396" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2023_10/image.png.f8dc8cf7f09b61ee7cf318a0c8391713.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png" /></p>
			</div>
		</div>

		<p>
			<br />
			Жмем <strong>Crunch</strong><br />
			Наш<strong> Pbo </strong>запаковался в папку<strong> P:\@MyMod\Addons</strong><br />
			Если появилась какая либо ошибка при запаковке то нажимаем View Outputs и смотрим ошибки в самом низу текстового документа.<br />
			Если текстовый документ не открылся, то тогда должна была открыться папка в которой лежит текстовой документ с название вашего <abbr title="Модификации">мода</abbr> (GGmod.txt)<br />
			Так же если в этом текстовом файле ошибки не обнаружены проверяем консоль командной строки либо нажимаем View Binlog и смотрит ошибки там.<br />
			В View Binlog обычно отображаются ошибки связанные с rvmat, 3д моделями и их model.cfg
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	<br /><br /><span style="color:#d35400;"><strong>4. Подготовка к Filepatching</strong></span>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			Для работы с Filepatching нам требуется чтобы наш незапакованный <abbr title="Модификация">мод</abbr> находился в корне папки с игрой DayZ.<br />
			Чтобы не копировать постоянно измененный код с модом в корень DayZ нам потребуется сделать <a href="https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0" rel="external nofollow">символические ссылки</a>.<br /><span>Жмем <strong>win+R</strong>, пишем <strong>cmd</strong>, <strong>Enter. </strong>И вставляем ниже указанный код.<br />
			Где <strong>"D:\Games\SteamLibrary\steamapps\common\DayZ\GGmod" - </strong>путь до игры<strong> DayZ, </strong>куда вставиться символическая ссылка. <br />
			А<strong> "P:\GGmod" - </strong>путь до папки с нашим незапакованным модом</span>
		</p>

		<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="pln">mklink </span><span class="pun">/</span><span class="pln">J </span><span class="str">"D:\Games\SteamLibrary\steamapps\common\DayZ\GGmod"</span><span class="pln"> </span><span class="str">"P:\GGmod"</span></pre>

		<p>
			Если все указали верно в командной строке напишет что символическая ссылка создана. Теперь по пути <strong>D:\Games\SteamLibrary\steamapps\common\DayZ </strong>в моем случае, у вас может быть свой путь до корня папки игры DayZ, появится папка со значком ярлыка <span><strong>GGmod.</strong><br />
			Теперь когда мы решим изменить код <abbr title="Сценарий, выполняемый системой">скрипта</abbr> в папке P:\GGmod он будет автоматом изменен и в папке с игрой.<br />
			Так же сразу для дальнейшей работы с Workbench нам нужно создать символическую ссылку на папку scripts</span><br />
			 
		</p>

		<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="pln">mklink </span><span class="pun">/</span><span class="pln">J </span><span class="str">"D:\Games\SteamLibrary\steamapps\common\DayZ\scripts"</span><span class="pln"> </span><span class="str">"P:\scripts"</span></pre>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	<br /><br /><span style="color:#d35400;"><strong>5. Тестирование в одиночной игре/оффлайн режим. (DayZDiag_x64 - client)</strong></span>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			Для тестирования в одиночной игре нам потребуется создать свою миссию.<br />
			В корне папки с игрой <strong>DayZ </strong>создаем папку <strong>misiions, </strong>внутри создаем папку<strong> MyMisiion.ChernarusPlus  (</strong><span><strong>D:\Games\SteamLibrary\steamapps\common\DayZ\missions\</strong></span><strong>MyMisiion.ChernarusPlus</strong><span><strong>)</strong></span><br />
			В папке <strong>MyMisiion.ChernarusPlus </strong>создаем файл<strong> Init.c </strong>и открываем через Visual Studio Code (или Notepad++)  и вставляем код<br />
			 
		</p>

		<div class="ipsSpoiler" data-ipsspoiler="">
			<div class="ipsSpoiler_header">
				<span>Скрытый текст</span>
			</div>

			<div class="ipsSpoiler_contents">
				<pre class="ipsCode prettyprint lang-c prettyprinted">


<span class="typ">Mission</span><span class="pln"> </span><span class="typ">CreateCustomMission</span><span class="pun">(</span><span class="pln">string path</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MissionGameplay</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">void</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="typ">PlayerBase</span><span class="pln"> player</span><span class="pun">;</span><span class="pln">
	</span><span class="typ">ItemBase</span><span class="pln"> item</span><span class="pun">;</span><span class="pln">

	</span><span class="com">// Создаем игрока, указываем позицию возрождения</span><span class="pln">
	player </span><span class="pun">=</span><span class="pln"> </span><span class="typ">PlayerBase</span><span class="pun">.</span><span class="typ">Cast</span><span class="pun">(</span><span class="pln"> </span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">CreatePlayer</span><span class="pun">(</span><span class="pln">NULL</span><span class="pun">,</span><span class="pln"> </span><span class="str">"SurvivorF_Linda"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"2200 10 2200"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"NONE"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

	</span><span class="com">// Спавним игроку рубашку TShirt_Black</span><span class="pln">
	item </span><span class="pun">=</span><span class="pln"> player</span><span class="pun">.</span><span class="typ">GetInventory</span><span class="pun">().</span><span class="typ">CreateInInventory</span><span class="pun">(</span><span class="str">"TShirt_Black"</span><span class="pun">);</span><span class="pln">

	</span><span class="com">// Спавним игроку штаны ShortJeans_Green</span><span class="pln">
	item </span><span class="pun">=</span><span class="pln"> player</span><span class="pun">.</span><span class="typ">GetInventory</span><span class="pun">().</span><span class="typ">CreateInInventory</span><span class="pun">(</span><span class="str">"ShortJeans_Green"</span><span class="pun">);</span><span class="pln">

	</span><span class="com">// Спавним игроку обувь WorkingBoots_Brown</span><span class="pln">
	item </span><span class="pun">=</span><span class="pln"> player</span><span class="pun">.</span><span class="typ">GetInventory</span><span class="pun">().</span><span class="typ">CreateInInventory</span><span class="pun">(</span><span class="str">"WorkingBoots_Brown"</span><span class="pun">);</span><span class="pln">

	</span><span class="com">// Создаем предмет в инвентаре</span><span class="pln">
	item</span><span class="pun">.</span><span class="typ">GetInventory</span><span class="pun">().</span><span class="typ">CreateInInventory</span><span class="pun">(</span><span class="str">"Apple"</span><span class="pun">);</span><span class="pln">

	</span><span class="com">// Выбираем игрока которым будет управлять клиент</span><span class="pln">
	</span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">SelectPlayer</span><span class="pun">(</span><span class="pln">NULL</span><span class="pun">,</span><span class="pln"> player</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

				<p>
					 
				</p>
			</div>
		</div>

		<p>
			<br />
			Сохраняем <strong>Init.c </strong>и закрываем<br />
			Создаем файл<strong> start_SP.bat</strong> для запуска игры через <span><strong>DayZDiag_x64</strong></span><br />
			Открываем <strong>start_SP.bat</strong> через Visual Studio Code (или Notepad++)  и вставляем код<br />
			 
		</p>

		<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="pln">start </span><span class="pun">/</span><span class="pln">D </span><span class="str">"D:\Games\SteamLibrary\steamapps\common\DayZ"</span><span class="pln"> </span><span class="typ">DayZDiag_x64</span><span class="pun">.</span><span class="pln">exe </span><span class="pun">-</span><span class="pln">newErrorsAreWarnings</span><span class="pun">=</span><span class="lit">1</span><span class="pln"> </span><span class="str">"-mod=P:\@MyMod"</span><span class="pln"> </span><span class="str">"-mission=./missions/MyMission.ChernarusPlus"</span><span class="pln"> </span><span class="pun">-</span><span class="pln">filePatching</span></pre>

		<p>
			Где:<br />
			- <span><strong>D:\Games\SteamLibrary\steamapps\common\DayZ </strong></span>заменяем на свой путь до игры<strong> DayZ<br />
			- mod=P:\@MyMod </strong>путь до вашего упакованного <abbr title="Модификации">мода</abbr><br />
			- <strong>mission=./missions/MyMission.ChernarusPlus - </strong>путь до вашей миссии находящейся в корне папки DayZ<br /><br />
			Сохраняем и пробуем запустить <strong>start_SP.bat</strong><br />
			У нас загрузилась игра через <span><strong>DayZDiag_x64. </strong>Жмем кнопки<strong> </strong></span><strong>Win+Alt</strong> должно открыться <strong>Diag Menu.</strong>
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	<br /><br /><span style="color:#d35400;"><strong>6. Тестирование в многопользовательском режиме. (DayZDiag_x64 - server + client)</strong></span>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			Дальнейшие действия мы рассматриваем только в том случае если у вас уже создан свой DayZ Server, запущен и работает.<br />
			Для запуска сервера через <span><strong>DayZDiag_x64 </strong></span> нам понадобится создать новые server.cfg, а так же миссию с картой.<br />
			Со своего сервера копируем миссию от той карты с которой вы работаете в корень папки с игрой DayZ. Я использую карту Припять (D:\Games\SteamLibrary\steamapps\common\DayZ\mpmissions\serverMission.Pripyat)<br />
			Папку storage желательно удалить после того как скопируете миссию.<br />
			Так же со своего рабочего сервера копируем папку <strong>profiles </strong>и вставляем в корень папки игры DayZ (D:\Games\SteamLibrary\steamapps\common\DayZ\profiles)<br />
			Создаем файл <strong>server.cfg </strong>в корне папки с игрой DayZ (D:\Games\SteamLibrary\steamapps\common\DayZ\server.cfg)<br />
			Открываем <strong>server.cfg </strong> через Visual Studio Code (или Notepad++)  и вставляем код
		</p>

		<div class="ipsSpoiler" data-ipsspoiler="">
			<div class="ipsSpoiler_header">
				<span>Скрытый текст</span>
			</div>

			<div class="ipsSpoiler_contents">
				<pre class="ipsCode prettyprint lang-c prettyprinted">


<span class="pln">hostname </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Diag server your name"</span><span class="pun">;</span><span class="pln"> </span><span class="com">// Server name</span><span class="pln">
password </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">                  </span><span class="com">// Password to connect to the server</span><span class="pln">
passwordAdmin </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">             </span><span class="com">// Password to become a server admin</span><span class="pln">

enableWhitelist </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">            </span><span class="com">// Enable/disable whitelist (value 0-1)</span><span class="pln">
logAverageFps </span><span class="pun">=</span><span class="pln"> </span><span class="lit">60</span><span class="pun">;</span><span class="pln">			    </span><span class="com">// Logs the average server FPS (value in seconds), needs to have ''-doLogs'' launch parameter active</span><span class="pln">
logMemory </span><span class="pun">=</span><span class="pln"> </span><span class="lit">60</span><span class="pun">;</span><span class="pln">				    </span><span class="com">// Logs the server memory usage (value in seconds), needs to have the ''-doLogs'' launch parameter active</span><span class="pln">
maxPlayers </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pun">;</span><span class="pln">                 </span><span class="com">// Maximum amount of players</span><span class="pln">
</span><span class="typ">BattlEye</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">                   </span><span class="com">// turn off BE since diag exe does not run with it</span><span class="pln">
verifySignatures </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">           </span><span class="com">// if testing mods which aren't properly signed 0</span><span class="pln">
maxPing </span><span class="pun">=</span><span class="pln"> </span><span class="lit">200</span><span class="pun">;</span><span class="pln">					</span><span class="com">// Max ping value until server kick the user (value in milliseconds)</span><span class="pln">
forceSameBuild </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">             </span><span class="com">// When enabled, the server will allow the connection only to clients with same the .exe revision as the server (value 0-1)</span><span class="pln">
disableVoN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">                 </span><span class="com">// Enable/disable voice over network (value 0-1)</span><span class="pln">
vonCodecQuality </span><span class="pun">=</span><span class="pln"> </span><span class="lit">30</span><span class="pun">;</span><span class="pln">           </span><span class="com">// Voice over network codec quality, the higher the better (values 0-30)</span><span class="pln">
disable3rdPerson </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">             </span><span class="com">// Toggles the 3rd person view for players (value 0-1)</span><span class="pln">
disableCrosshair </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">             </span><span class="com">// Toggles the cross-hair (value 0-1)</span><span class="pln">
disablePersonalLight </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">       </span><span class="com">// Disables personal light for all clients connected to server</span><span class="pln">
lightingConfig </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">             </span><span class="com">// 0 for brighter night setup, 1 for darker night setup</span><span class="pln">
serverTime </span><span class="pun">=</span><span class="pln"> </span><span class="str">"2021/7/1/12/00"</span><span class="pun">;</span><span class="pln">     </span><span class="com">// Initial in-game time of the server. "SystemTime" means the local time of the machine. Another possibility is to set the time to some value in "YYYY/MM/DD/HH/MM" format, f.e. "2015/4/8/17/23" .</span><span class="pln">
serverTimeAcceleration </span><span class="pun">=</span><span class="pln"> </span><span class="lit">12</span><span class="pun">;</span><span class="pln">      </span><span class="com">// Accelerated Time (value 0-24)// This is a time multiplier for in-game time. In this case, the time would move 24 times faster than normal, so an entire day would pass in one hour.</span><span class="pln">
serverNightTimeAcceleration </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln"> </span><span class="com">// Accelerated Nigh Time - The numerical value being a multiplier (0.1-64) and also multiplied by serverTimeAcceleration value. Thus, in case it is set to 4 and serverTimeAcceleration is set to 2, night time would move 8 times faster than normal. An entire night would pass in 3 hours.</span><span class="pln">
serverTimePersistent </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">         </span><span class="com">// Persistent Time (value 0-1)// The actual server time is saved to storage, so when active, the next server start will use the saved time value.</span><span class="pln">
guaranteedUpdates </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">            </span><span class="com">// Communication protocol used with game server (use only number 1)</span><span class="pln">
loginQueueConcurrentPlayers </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pun">;</span><span class="pln">  </span><span class="com">// The number of players concurrently processed during the login process. Should prevent massive performance drop during connection when a lot of people are connecting at the same time.</span><span class="pln">
loginQueueMaxPlayers </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pun">;</span><span class="pln">         </span><span class="com">// The maximum number of players that can wait in login queue</span><span class="pln">
instanceId </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">                 </span><span class="com">// DayZ server instance id, to identify the number of instances per box and their storage folders with persistence files</span><span class="pln">
storeHouseStateDisabled </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln"> </span><span class="com">// Disable houses/doors persistence (value true/false), usable in case of problems with persistence</span><span class="pln">
storageAutoFix </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">             </span><span class="com">// Checks if the persistence files are corrupted and replaces corrupted ones with empty ones (value 0-1)</span><span class="pln">
allowFilePatching </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">			</span><span class="com">// if set to 1 it will enable connection of clients with "-filePatching" launch parameter enabled</span><span class="pln">
respawnTime </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
disableBaseDamage </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">			</span><span class="com">// set to 1 to disable damage/destruction of fence and watchtower</span><span class="pln">
disableContainerDamage </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">		</span><span class="com">// set to 1 to disable damage/destruction of tents, barrels, wooden crate and seachest</span><span class="pln">
disableRespawnDialog </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">       </span><span class="com">// set to 1 to disable the respawn dialog (new characters will be spawning as random)</span><span class="pln">
enableCfgGameplayFile </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">		</span><span class="com">//To enable the usage of the cfggameplay.json will be loaded and used by the game. </span><span class="pln">
defaultVisibility </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3000</span><span class="pun">;</span><span class="pln">			</span><span class="com">// highest terrain render distance on server (if higher than "viewDistance=" in DayZ client profile, clientside parameter applies)</span><span class="pln">
defaultObjectViewDistance </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3000</span><span class="pun">;</span><span class="pln">	</span><span class="com">// highest object render distance on server (if higher than "preferredObjectViewDistance=" in DayZ client profile, clientside parameter applies)</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Missions</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">DayZ</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		 </span><span class="kwd">template</span><span class="pun">=</span><span class="str">"D:\Games\SteamLibrary\steamapps\common\DayZ\mpmissions\serverMission.Pripyat"</span><span class="pun">;</span><span class="pln"> </span><span class="com">// Путь до вашей миссии с картой в моем случаем это карта Припять, если используете Черно то указываем соответсвующую папку с миссией допусти dayzOffline.chernarusplus</span><span class="pln">
	</span><span class="pun">};</span><span class="pln">
</span><span class="pun">};</span></pre>

				<p>
					 
				</p>
			</div>
		</div>

		<p>
			<br />
			Сохраняем <strong>server.cfg </strong>и закрываем.<br /><br />
			Создаем <strong>start_MPserver.bat</strong> для запуска серверной части, открываем через Visual Studio Code (или Notepad++)  и вставляем код<br />
			 
		</p>

		<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="lit">@echo</span><span class="pln"> off
start </span><span class="pun">/</span><span class="pln">D </span><span class="str">"D:\Games\SteamLibrary\steamapps\common\DayZ"</span><span class="pln"> </span><span class="typ">DayZDiag_x64</span><span class="pun">.</span><span class="pln">exe </span><span class="pun">-</span><span class="pln">newErrorsAreWarnings</span><span class="pun">=</span><span class="lit">1</span><span class="pln"> </span><span class="str">"-mod=D:\Games\SteamLibrary\steamapps\common\DayZ\!Workshop\@CF;D:\Games\SteamLibrary\steamapps\common\DayZ\!Workshop\@Dabs Framework;D:\Games\SteamLibrary\steamapps\common\DayZ\!Workshop\@Community-Online-Tools;D:\Games\SteamLibrary\steamapps\common\DayZ\!Workshop\@Pripyat (BETA);D:\Games\SteamLibrary\steamapps\common\DayZ\!Workshop\@GSC Gameworld Assets;P:\@GGmod;"</span><span class="pln"> </span><span class="str">"-mission=D:\Games\SteamLibrary\steamapps\common\DayZ\mpmissions\serverMission.Pripyat"</span><span class="pln"> </span><span class="str">"-config=D:\Games\SteamLibrary\steamapps\common\DayZ\serverDZ.cfg"</span><span class="pln"> </span><span class="str">"-profiles=D:\Games\SteamLibrary\steamapps\common\DayZ\profiles"</span><span class="pln"> </span><span class="pun">-</span><span class="pln">filePatching </span><span class="pun">-</span><span class="pln">server </span><span class="pun">-</span><span class="pln">port</span><span class="pun">=</span><span class="lit">2302</span></pre>

		<p>
			В этом <strong>start_MPserver.bat </strong>у нас прописаны пути до <abbr title="Модификации">модов</abbr> которые требуются нашему серверу.<br />
			В моем случае я использую карту Припять и мне требуется обязательно загрузить <abbr title="Модификации">моды</abbr> @CF, @Dabs Framework, @Community-Online-Tools, @Pripyat (BETA), @GSC Gameworld Assets. <br />
			Пути до этих <abbr title="Модификации">модов</abbr> обязательно прописать полностью. (видел конечно где то что можно прописывать таким образом - <strong>!Workshop\@CF;</strong> но не проверял)<br />
			Так же в конце всех подключенных <abbr title="Модификации">модов</abbr> прописываем путь до нашего запакованного <abbr title="Модификации">мода</abbr> <strong>P:\@GGmod;</strong><br />
			Учтите в обязательном порядке после каждого <abbr title="Модификации">мода</abbr> должна быть точка с запятой, а так же между точкой с запятой и новым модом не должно быть пробела.<br />
			Серверный батник для запуска сервера готов. Сохраняем, Запускаем и проверяем нет ли ошибок при запуске. Если нет то двигаемся дальше<br /><span style="color:#f1c40f;">На сегодняшний день я не смог запустить сервер с @VPPAdminTools ругается на override </span><br /><br />
			Создаем <strong>start_MPclient.bat</strong> для запуска клиентской части, открываем через Visual Studio Code (или Notepad++)  и вставляем код
		</p>

		<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="lit">@echo</span><span class="pln"> off
start </span><span class="pun">/</span><span class="pln">D </span><span class="str">"D:\Games\SteamLibrary\steamapps\common\DayZ"</span><span class="pln"> </span><span class="typ">DayZDiag_x64</span><span class="pun">.</span><span class="pln">exe </span><span class="pun">-</span><span class="pln">newErrorsAreWarnings</span><span class="pun">=</span><span class="lit">1</span><span class="pln"> </span><span class="str">"-mod=D:\Games\SteamLibrary\steamapps\common\DayZ\!Workshop\@CF;D:\Games\SteamLibrary\steamapps\common\DayZ\!Workshop\@Dabs Framework;D:\Games\SteamLibrary\steamapps\common\DayZ\!Workshop\@Community-Online-Tools;D:\Games\SteamLibrary\steamapps\common\DayZ\!Workshop\@Pripyat (BETA);D:\Games\SteamLibrary\steamapps\common\DayZ\!Workshop\@GSC Gameworld Assets;P:\@GGmod;"</span><span class="pln"> </span><span class="pun">-</span><span class="pln">filePatching </span><span class="pun">-</span><span class="pln">connect</span><span class="pun">=</span><span class="lit">127.0</span><span class="pun">.</span><span class="lit">0.1</span><span class="pln"> </span><span class="pun">-</span><span class="pln">port</span><span class="pun">=</span><span class="lit">2302</span></pre>

		<p>
			Сохраняем. Если закрыли серверную часть, то запускаем ее батником <strong>start_MPserver.bat. </strong>После того как увидели заветные<strong> Entering IN, </strong>запускаем клиента<strong> start_MPclient.bat. </strong>Вы должны подключиться на сервер.<br /><span>Жмем кнопки<strong> </strong></span><strong>Win+Alt</strong> должно открыться <strong>Diag Menu.</strong><br /><br />
			Создаем  <strong>KILLserver.bat</strong> который будет завершать работу сервера. Открываем через Visual Studio Code (или Notepad++)  и вставляем код
		</p>

		<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="pln">cd </span><span class="pun">%~</span><span class="pln">dp0
taskkill </span><span class="pun">/</span><span class="pln">f </span><span class="pun">/</span><span class="pln">im </span><span class="typ">DayZServer_x64</span><span class="pun">.</span><span class="pln">exe
taskkill </span><span class="pun">/</span><span class="pln">f </span><span class="pun">/</span><span class="pln">im </span><span class="typ">DZSALModServer</span><span class="pun">.</span><span class="pln">exe
taskkill </span><span class="pun">/</span><span class="pln">f </span><span class="pun">/</span><span class="pln">im </span><span class="typ">DayZDiag_x64</span><span class="pun">.</span><span class="pln">exe
taskkill </span><span class="pun">/</span><span class="pln">f </span><span class="pun">/</span><span class="pln">im </span><span class="typ">Bec</span><span class="pun">.</span><span class="pln">exe
taskkill </span><span class="pun">/</span><span class="pln">f </span><span class="pun">/</span><span class="pln">im CMD</span><span class="pun">.</span><span class="pln">exe
exit</span></pre>

		<p>
			Сохраняем и закрываем. Теперь когда нам нужно закрыть сервер то просто стартуем <strong>KILLserver.bat</strong><br />
			Если у кого он уже есть то просто добавьте строку<br />
			 
		</p>

		<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">taskkill /f /im DayZDiag_x64.exe</span></pre>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	<br /><span style="color:#d35400;"><strong>7. Настройка и работа в Workbench</strong></span>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			Ну вот мы и дошли до заветного пункта. Открываем <strong>Dayz Tools - Workbench.</strong><br />
			Первоочередное переходим во вкладку <strong>Workbench - Options</strong> и проверяем в <strong>Source data directory </strong>у вас должен быть указан корень диска<strong> Р ( P:\ )</strong><br />
			Сохраняем и закрываем <strong>Workbench.</strong><br />
			Создаем файл<strong> Workbench_mod.bat. </strong>Открываем через Visual Studio Code (или Notepad++)  и вставляем код для запуска Workbench с подключенными модами.
		</p>

		<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="pln">start </span><span class="pun">/</span><span class="pln">D </span><span class="str">"D:\Games\SteamLibrary\steamapps\common\DayZ Tools\Bin\Workbench"</span><span class="pln"> workbenchApp</span><span class="pun">.</span><span class="pln">exe </span><span class="pun">-</span><span class="pln">mod</span><span class="pun">=</span><span class="pln">P</span><span class="pun">:</span><span class="pln">\@</span><span class="typ">GGmod</span></pre>

		<p>
			Где:<br />
			- D:\Games\SteamLibrary\steamapps\common\DayZ Tools\Bin\Workbench - путь до файла Workbench который находится в папке с установленным DayZ Tools<br />
			- mod=P:\@GGmod - путь до нашего упакованного <abbr title="Модификации">мода</abbr>.<br />
			Сохраняем  и закрываем <strong>Workbench_mod.bat.</strong><br /><br />
			Перед запуском <strong>Workbench_mod.bat </strong>проверяем еще раз все что мы сделали<br />
			- в корне папки DayZ находятся символические ссылки - <strong>Scripts </strong>и <strong>GGmod</strong><br />
			- сервер запустился через <strong>start_MPserver.bat</strong><br />
			- клиент присоеденился через <strong>start_MPclient.bat<br /><br />
			Запускаем Workbench_mod.bat</strong><br />
			Переходим во вкладку<strong> Editors - Script Editor</strong><br />
			Должна появится заветная надпись <strong>Script Debugger - Game connected</strong><br />
			 
		</p>

		<div class="ipsSpoiler" data-ipsspoiler="">
			<div class="ipsSpoiler_header">
				<span>Скрытый текст</span>
			</div>

			<div class="ipsSpoiler_contents">
				<p>
					<img alt="image.png.78ac4987705afac694a0aea48faca44c.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16088" data-ratio="36.65" style="height:auto;" width="281" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2023_10/image.png.78ac4987705afac694a0aea48faca44c.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png" /></p>
			</div>
		</div>

		<p>
			<br />
			После переходим в окно <strong>Project </strong>и видим какой хаос там твориться. Находим папку <strong>World (script\4_World)</strong><br />
			В этой папке находим нашу папку GGmod которую указывали при создании <abbr title="Модификации">мода</abbr> (P:\GGmod \Scripts\4_World\GGscript)<br />
			Находим в этой папке наш <abbr title="Сценарий, выполняемый системой">скрипт</abbr> <strong>moddedPlayerBase.c </strong> и открываем его.<br />
			Теперь так как у нас запущен мультиплеер <abbr title="Файл, содержащий сведения об определённых событиях">логи</abbr> будут отображаться на стороне сервера. Переходим во вкладку Debug - Debug Server.<br />
			Если все хорошо у вас опять долна появиться заветная надпись <strong>Script Debugger - Game connected</strong>
		</p>

		<p>
			В Dayz советую в настройках сделать отображение в окне для того чтобы было видно статусную строку в Workbench. <br />
			Теперь разворачиваем клиент и пробуем прыгнуть в игре. После прыжка мы увидим как в логах во вкладке <strong>Output </strong>в <strong>Workbench </strong>появилась надпись <b style="color:rgb(241,196,15);">Мой первый </b><abbr style="color:rgb(241,196,15);font-weight:bold;" title="Модификация">мод</abbr><b style="color:rgb(241,196,15);">, Ура!!!</b><br />
			Соответственно чем больше мы прыгаем тем больше надписей появляется. <br />
			Теперь ради чего мы все это делали. В нашем открытом скрипте <strong>moddedPlayerBase.c </strong>изменяем текст на любой другой. Жмем <strong>Debug - Recompile File on Host. </strong><br />
			Переходим в клиент, прыгаем и видим заветную новую надпись в окошке <strong>Output. </strong>Радуемся что мы смогли настроить изменение <abbr title="Сценарий, выполняемый системой">скриптов</abbr> на лету и наконец-то сократили себе кучу времени с постоянным перезапуском сервера и клиента.<br />
			Теперь для удобства вы можете просто создавать любые свои <abbr title="Модификации">моды</abbr> (PBO)  и добавлять их в папку @MyMod они будут автоматически у вас подтягиваться на сервер/клиент и workbench. <br />
			Но не забывайте делать символическую ссылку на каждый новый PBO в корень папки DayZ<br />
			 
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted">

<span class="pun">Пример:</span><span class="pln">
</span><span class="pun">Сейчас</span><span class="pln"> </span><span class="pun">у</span><span class="pln"> </span><span class="pun">вас</span><span class="pln"> </span><span class="pun">есть</span><span class="pln"> </span><span class="pun">только</span><span class="pln"> </span><span class="pun">мод</span><span class="pln"> GGmod </span><span class="pun">не</span><span class="pln"> </span><span class="pun">запакованный</span><span class="pln"> </span><span class="pun">и</span><span class="pln"> GGmod</span><span class="pun">.</span><span class="pln">pbo </span><span class="pun">в</span><span class="pln"> </span><span class="pun">папке</span><span class="pln"> </span><span class="pun">@</span><span class="pln">MyMod</span><span class="pun">.</span><span class="pln"> </span><span class="pun">Так</span><span class="pln"> </span><span class="pun">же</span><span class="pln"> </span><span class="pun">символическая</span><span class="pln"> </span><span class="pun">ссылка</span><span class="pln"> GGmod </span><span class="pun">в</span><span class="pln"> </span><span class="pun">папке</span><span class="pln"> </span><span class="pun">с</span><span class="pln"> DayZ
</span><span class="pun">Вы</span><span class="pln"> </span><span class="pun">решили</span><span class="pln"> </span><span class="pun">создать</span><span class="pln"> </span><span class="pun">новый</span><span class="pln"> </span><span class="pun">мод</span><span class="pln"> HHmod</span><span class="pun">,</span><span class="pln"> </span><span class="pun">запаковали</span><span class="pln"> </span><span class="pun">его</span><span class="pln"> </span><span class="pun">в</span><span class="pln"> HHmod</span><span class="pun">.</span><span class="pln">pbo </span><span class="pun">в</span><span class="pln"> </span><span class="pun">папку</span><span class="pln"> </span><span class="pun">@</span><span class="pln">MyMod</span><span class="pun">.</span><span class="pln"> </span><span class="pun">И</span><span class="pln"> </span><span class="pun">обязательно</span><span class="pln"> </span><span class="pun">делаете</span><span class="pln"> </span><span class="pun">символическую</span><span class="pln"> </span><span class="pun">ссылку</span><span class="pln"> HHmod </span><span class="pun">в</span><span class="pln"> </span><span class="pun">папку</span><span class="pln"> </span><span class="pun">с</span><span class="pln"> DayZ</span></pre>

		<p>
			По поводу хаоса во вкладке <strong>Project </strong>есть решение  - <a href="https://github.com/InclementDab/DayZ-Utilities" rel="external nofollow">https://github.com/InclementDab/DayZ-Utilities</a><br />
			Скачиваем запускаем <strong>FixScripts.bat и теперь у вас все ванильные <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>
]]></description><guid isPermaLink="false">14984</guid><pubDate>Mon, 09 Oct 2023 19:23:08 +0000</pubDate></item><item><title>&#x420;&#x435;&#x433;&#x438;&#x441;&#x442;&#x440;&#x430;&#x446;&#x438;&#x44F; &#x430;&#x43D;&#x438;&#x43C;&#x430;&#x446;&#x438;&#x438; &#x43F;&#x440;&#x435;&#x434;&#x43C;&#x435;&#x442;&#x43E;&#x432; &#x432; &#x440;&#x443;&#x43A;&#x430;&#x445;</title><link>https://s-platoon.magicbyte.org/topic/10829-registraciya-animacii-predmetov-v-rukah/</link><description><![CDATA[
<p>
	Всем привет, я заметил что некоторые люди не до конца понимают что такое регистрация анимаций для предметов в руках, как ее правильно делать и для чего она нужна?<br><br>
	Для чего это нужно? Допустим вы добавляете предмет в игру и не привязываете его ни к какому объекту (создаете полностью с нуля, задаете свойства) и сталкиваетесь с тем что ваш объект без привязки не имеет должной анимации. А имеет стандартную анимацию банки консервы (в том числе и для предметов которые должны держаться в 2 руках), ну или вовсе предмет находиться в ногах у персонажа (примеры прикрепил скриншоты). Именно для этого и нужно привязывать анимацию положения объекта в руках через <abbr title="Сценарий, выполняемый системой">скрипт</abbr>.<br><br>
	На момент написания этого поста я знаю 3 вида регистрации анимаций для предметов в руках:<br>
	1. PlayerBase<br>
	2. JMAnimRegister<br>
	3. ModItemRegisterCallbacks<br><br>
	До создания последних 2 способов все использовали PlayerBase :<br>
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">modded class PlayerBase
{
    override void Init()
    {            
        DayzPlayerItemBehaviorCfg     fireArmsItemBehaviour = new DayzPlayerItemBehaviorCfg;        
        fireArmsItemBehaviour.SetFirearms();
        
        GetDayZPlayerType().AddItemInHandsProfileIK("MyModdedWeapon", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", fireArmsItemBehaviour, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm");        
        super.Init();     
    }
}</span></pre>

<p>
	Но у этого способа есть очень большой минус, это очень нестабильная штука. Нередко крашила сервера и имела ограничения на кол-во регистрации анимаций.<br>
	С такими большими минусами, мододеллы начали искать решения как можно сделать это более стабильно и оптимизированно. И такой способ нашли.<br><br>
	DayZPlayerTypeRegisterItems(DayZPlayerType Type) вот наше спасение, но тут тоже не все так просто, полумолчание это <abbr title="Набор команд и параметров">функция</abbr> внутри класса, а для поставленной задачи (иметь возможность безопасно  и стабильно вносить новую регистрацию предметов) это не подходит. Тогда разработчики <abbr title="Модификации">мода</abbr> <a href="https://steamcommunity.com/sharedfiles/filedetails/?id=1559212036" rel="external nofollow">CF</a> создали кастомный класс с использованием схожих <abbr title="Набор команд и параметров">функций</abbr> для регистрации анимаций положений предметов в руках. Этим классом является JMAnimRegister. Стабильная и оптимизированная <abbr title="Набор команд и параметров">функция</abbr>, которой очень просто пользоваться. Разумеется использовать вы сможете этот класс только при наличии в своей сборке <a href="https://steamcommunity.com/sharedfiles/filedetails/?id=1559212036" rel="external nofollow">CF</a> . Как им пользоваться?<br>
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">modded class JMAnimRegister
{
  override void OnRegisterFireArms( DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior )
  {
    super.OnRegisterFireArms( pType, pBehavior );
    pType..AddItemInHandsProfileIK("MyModdedWeapon", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", pBehavior, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm");    
  }
};</span></pre>

<p>
	Как самый простой пример. И так можно задавать любому количеству предметов положение в руках :<br>
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">modded class JMAnimRegister
{
  override void OnRegisterFireArms( DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior )
  {
    super.OnRegisterFireArms( pType, pBehavior );
    pType..AddItemInHandsProfileIK("MyModdedWeapon", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", pBehavior, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm");

   pType..AddItemInHandsProfileIK("MyModdedWeapon2", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", pBehavior, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm");      
  }
};</span></pre>

<p>
	Прошу обратить внимание, что мы используем modded, мы модифицируем уже существующий класс внутри <p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> </p>
<p><p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> </p>
<p><p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> </p>
]]></description><guid isPermaLink="false">10829</guid><pubDate>Fri, 26 Mar 2021 02:15:36 +0000</pubDate></item><item><title>[Info]&#x418;&#x434;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x442;&#x43E;&#x440;&#x44B; &#x438;&#x433;&#x440;&#x43E;&#x43A;&#x430; DayZ (BISID-UID-GUID-Steam64ID)</title><link>https://s-platoon.magicbyte.org/topic/9416-infoidentifikatory-igroka-dayz-bisid-uid-guid-steam64id/</link><description><![CDATA[
<p>
	<strong><span style="color:#27ae60;">Вижу крайне много любопытных вопросов по поводу идентификаторов игрока в игре. Что же, разжую для не знающих немного.</span></strong>
</p>

<p>
	 
</p>

<p>
	<span style="color:#e67e22;"><strong>В игре есть следующие типы идентификаторов:</strong></span>
</p>

<p>
	1. <strong>Steam64ID</strong> идентификатор профиля игрока (на пиратках его <strong>UID</strong> называют), примерно такой: <strong>765475....65</strong> (17 цифр).
</p>

<p>
	2. Так называемый мною, <strong>BIS ID</strong> -<strong> uid</strong> из окна (консоли) сервера игры и <strong>ADM</strong>-файлов <abbr title="Файл, содержащий сведения об определённых событиях">логов</abbr> сервера, который пишется самой игрой
</p>

<p>
	3. <strong><abbr title="Античит-система">Battleye</abbr> GUID</strong> игрока.
</p>

<p>
	 
</p>

<p>
	Первый идентификатор (<strong>Steam64ID</strong>) на ПК является прямым идентификатором стим-профиля игрока, уникальным у каждого игрока. Т.е. публичным идентификатором вашего профиля для большинства стим-игр (например, Counter-Strike).
</p>

<p>
	Второй идентификатор (<strong>BIS ID</strong>) является определенной хеш-суммой, полученной из <strong>Steam64ID</strong> посредством конвертации сначала в <strong>sha256</strong>, а затем в <strong>base64</strong>. Спасибо за это разъяснение и пример кода-конвертации авторам игры на своем официальном форуме.
</p>

<p>
	Третий идентификатор <strong>(<abbr title="Античит-система">Battleye</abbr> GUID</strong>) является публичным идентификатором <strong><abbr title="Античит-система">Battleye</abbr></strong> античита, получаемый также из <strong>Steam64I</strong>D поcредством получения его хеш-суммы <strong>MD5</strong>. Этот же идентификатор есть в логах сервера от <strong><abbr title="Античит-система">Battleye</abbr></strong>, в любых <strong>RCON</strong>-приложениях (<strong>DART, <abbr title="Battleye Extended Controls - программа для управления сервером">BEC</abbr></strong> и т.п.), также его можно конвертировать самим.
</p>

<p>
	 
</p>

<p>
	<span style="color:#27ae60;"><strong>Так вот, как же получить Steam64ID:</strong></span>
</p>

<p>
	1. Зайти на любой ресурс, предназначенный для сбора таких данных. например на: <a href="https://steamid.io/" rel="external nofollow">https://steamid.io/</a>
</p>

<p>
	2. Ввести ссылку на ваш стим-профиль
</p>

<p>
	3. Получить результат из кучи данных, одно поле из которых и будет содержать ваш <strong>Steam64ID</strong>
</p>

<p>
	 
</p>

<p>
	<span style="color:#27ae60;"><strong>Как получить BIS ID:</strong></span>
</p>

<p>
	1. Открыть любой <strong>Phyton v2.7 -конвертер</strong> в интернете, например: <a href="https://onecompiler.com/python2/3ycz55xew" rel="external nofollow">https://onecompiler.com/python2/3ycz55xew</a>
</p>

<p>
	2. Ввести в него следующий код:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln"># Hello World program in Python
from hashlib import sha256
from base64 import b64encode

def construct_bi_uid(steam_id):
    hashed = sha256()
    hashed.update(str(steam_id))
    return b64encode(hashed.digest())

print construct_bi_uid(76514925976798981)</span></pre>

<p>
	3. заменить 76514925976798981 на ваш <strong>Steam64ID</strong>
</p>

<p>
	4. Отправить код в исполнение, нажав <strong>Execute</strong>.
</p>

<p>
	5. Получить результат
</p>

<p>
	 
</p>

<p>
	<p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
</p>

<p>
	<strong>[Альтернатива] Метод на основе PHP:</strong>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pun">&lt;?</span><span class="pln">php
</span><span class="com">/**
* This is how you get user id (bohemia id) like you see in .ADM files from steam id.
*/</span><span class="pln">

$steam_id </span><span class="pun">=</span><span class="pln"> </span><span class="str">"76514925976798981"</span><span class="pun">;</span><span class="pln">
$user_id </span><span class="pun">=</span><span class="pln"> base64url_encode</span><span class="pun">(</span><span class="pln">hash</span><span class="pun">(</span><span class="str">'sha256'</span><span class="pun">,</span><span class="pln"> $steam_id</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">));</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> base64url_encode</span><span class="pun">(</span><span class="pln">$data</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  $b64 </span><span class="pun">=</span><span class="pln"> base64_encode</span><span class="pun">(</span><span class="pln">$data</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$b64 </span><span class="pun">===</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  $url </span><span class="pun">=</span><span class="pln"> strtr</span><span class="pun">(</span><span class="pln">$b64</span><span class="pun">,</span><span class="pln"> </span><span class="str">'+/'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'-_'</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">return</span><span class="pln"> $url</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
echo $user_id</span><span class="pun">;</span></pre>

<p>
	<strong>[Альтернатива] Метод для javascript - node.js:</strong>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">var crypto = require('crypto');

var body = "76514925976798981";

var hash = crypto.createHash("sha256");
var hash_result = hash.update(body, 'utf8').digest('base64');
console.log(hash_result);</span></pre>

<p>
	 
</p>

<p>
	<span style="color:#27ae60;"><strong>Как получить <abbr title="Античит-система">Battleye</abbr> GUID:</strong></span>
</p>

<p>
	1. Открыть любой ресурс с готовой формой конвертирования, например:
</p>

<p>
	<a href="https://armstalker.com/guid/" rel="external nofollow">https://armstalker.com/guid/</a>
</p>

<p>
	<a href="https://dayzrussia.com/f/index.php?pages/dayzguid/" rel="external nofollow">https://dayzrussia.com/f/index.php?pages/dayzguid/</a>
</p>

<p>
	либо написать свою, на основе данных, предложенных на странице Github
</p>

<p>
	<a href="https://gist.github.com/chris579/53053b6d6438df9a9718c23c0d6bbd69" rel="external nofollow">https://gist.github.com/chris579/53053b6d6438df9a9718c23c0d6bbd69</a>
</p>

<p>
	Оставлю ниже код для <strong>Phyton</strong>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln"># Thanks to gunlinux
import md5

steamid=76514925976798981
temp = ""
for i in range(8):
	temp +=  chr((steamid &amp; 0xFF))
	steamid &gt;&gt;= 8
m = md5.new("BE"+temp)

print m.hexdigest()</span></pre>

<p>
	Код для PHP:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">var crypto = require('crypto');

var body = "76514925976798981";

var hash = crypto.createHash("sha256");
var hash_result = hash.update(body, 'utf8').digest('base64');
console.log(hash_result);</span></pre>

<p>
	'2. Вставить в поле ввода <strong>UID(Steam64ID)</strong> ваш <strong>Steam64ID</strong>
</p>

<p>
	3. Нажать кнопку конвертирования или исполнить код, и получить в готовом виде <strong><abbr title="Античит-система">Battleye</abbr> GUID</strong>
</p>

<p>
	 
</p>

<p>
	Возможно имеются и другие методы и наработки в получении данных идентификаторов более простыми методами, на других языках, либо автоматически. Я описал лишь известные мне.
</p>

<p>
	Все желающие могут добавить в комментариях свои способы конвертаций, возможно это поможет кому-либо.
</p>
]]></description><guid isPermaLink="false">9416</guid><pubDate>Thu, 18 Jun 2020 17:31:43 +0000</pubDate></item><item><title>&#x41E;&#x445;&#x43B;&#x430;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x435; &#x435;&#x434;&#x44B; &#x438; &#x43A;&#x430;&#x441;&#x442;&#x440;&#x44E;&#x43B;&#x438; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x433;&#x43E;&#x442;&#x43E;&#x432;&#x43A;&#x438;</title><link>https://s-platoon.magicbyte.org/topic/9220-ohlazhdenie-edy-i-kastryuli-posle-gotovki/</link><description><![CDATA[
<p>
	Довольно тупое охлаждение жратвы и кастрюли если они оказались на земле
</p>

<p>
	Прикрутить охлаждение содержимого кастрюли как 2 байта сами знаете что
</p>

<p>
	Сделать охлаждение после снятия с костра и тп вобщем то же не проблема
</p>

<p>
	 
</p>

<p>
	Просто код и ничего лишнего
</p>

<p>
	 
</p>

<p>
	Комментарии к коду добавлю позже<br>
	Логгирование в коде закомментировано - раскомментируйте, что бы наблюдать за процессом
</p>

<p>
	 
</p>

<p>
	Для жратвы убавление температуры раз в 10 сек на 1 градус
</p>

<p>
	Для кастрюли на 2 градуса
</p>

<p>
	 
</p>

<p>
	Охлаждается до дневной температуры воздуха далее охлаждение прекращается
</p>

<p>
	У бгемотов есть 2 температуры воздуха - дневная и ночная
</p>

<p>
	Идиотизм? Однозначно
</p>

<p>
	Я пытался в погоде сделать ее плавное изменение в зависимости от Overcast, Rain и тп, но забил - потом как-нибудь
</p>

<p>
	 
</p>

<p>
	Есть вопросы, задавайте, отвечу если будет время.
</p>

<p>
	 
</p>

<p>
	Вобщем как-то так:<br>
	 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="com">//08.05.2020</span><span class="pln">

modded </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">ItemBase</span><span class="pln"> extends </span><span class="typ">InventoryItem</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	ref </span><span class="typ">Timer</span><span class="pln"> m_TemperatureDecrease</span><span class="pun">;</span><span class="pln">

	</span><span class="kwd">private</span><span class="pln"> </span><span class="typ">float</span><span class="pln"> m_InitTemperature</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">private</span><span class="pln"> </span><span class="typ">float</span><span class="pln"> m_DecreaseTempTime 	</span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">private</span><span class="pln"> </span><span class="typ">float</span><span class="pln"> m_TempDecreaseCoef	</span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">;</span><span class="pln">

	</span><span class="kwd">void</span><span class="pln"> </span><span class="typ">ItemBase</span><span class="pun">()</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		m_InitTemperature </span><span class="pun">=</span><span class="pln"> </span><span class="lit">12</span><span class="pun">;</span><span class="pln"> </span><span class="com">//g_Game.GetMission().GetWorldData().GetDayTemperature(); // Не работает ((( какого художника - я хз</span><span class="pln">
		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="typ">IsInherited</span><span class="pun">(</span><span class="typ">Pot</span><span class="pun">)</span><span class="pln"> </span><span class="com">/* GetInventory().GetCargo() */</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			m_TempDecreaseCoef </span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">2</span><span class="pun">;</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	override </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">AfterStoreLoad</span><span class="pun">()</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">	
		super</span><span class="pun">.</span><span class="typ">AfterStoreLoad</span><span class="pun">();</span><span class="pln">

		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="typ">IsInherited</span><span class="pun">(</span><span class="typ">FireplaceBase</span><span class="pun">))</span><span class="pln"> </span><span class="typ">TryToStartTempDecrease</span><span class="pun">();</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">TryToStartTempDecrease</span><span class="pun">()</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">GetTemperature</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="typ">GetInitTemperature</span><span class="pun">())</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="typ">GetHierarchyParent</span><span class="pun">())</span><span class="pln">
			</span><span class="pun">{</span><span class="pln">
				</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">m_TemperatureDecrease</span><span class="pun">)</span><span class="pln">
				</span><span class="pun">{</span><span class="pln">
					</span><span class="typ">Print</span><span class="pun">(</span><span class="str">"::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: Init: TryToStartTempDecrease: this: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">": GetHierarchyParent(): "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">GetHierarchyParent</span><span class="pun">()</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">": GetTemperature(): "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">GetTemperature</span><span class="pun">());</span><span class="pln">
					</span><span class="typ">StartTemperatureDecrease</span><span class="pun">();</span><span class="pln">
				</span><span class="pun">}</span><span class="pln">
			</span><span class="pun">}</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	override </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">EEItemLocationChanged</span><span class="pun">(</span><span class="pln">notnull </span><span class="typ">InventoryLocation</span><span class="pln"> oldLoc</span><span class="pun">,</span><span class="pln"> notnull </span><span class="typ">InventoryLocation</span><span class="pln"> newLoc</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		super</span><span class="pun">.</span><span class="typ">EEItemLocationChanged</span><span class="pun">(</span><span class="pln">oldLoc</span><span class="pun">,</span><span class="pln">newLoc</span><span class="pun">);</span><span class="pln">
		
		</span><span class="com">//Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: " + this + ": newLoc.GetType(): " + newLoc.GetType() + ": newLoc.GetParent(): " + newLoc.GetParent() + ": GetTemperature(): " + GetTemperature());</span><span class="pln">
		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">GetTemperature</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="typ">GetInitTemperature</span><span class="pun">())</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">newLoc</span><span class="pun">.</span><span class="typ">GetParent</span><span class="pun">()</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> newLoc</span><span class="pun">.</span><span class="typ">GetType</span><span class="pun">()</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="typ">InventoryLocationType</span><span class="pun">.</span><span class="pln">GROUND</span><span class="pun">)</span><span class="pln">
			</span><span class="pun">{</span><span class="pln">
				</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">m_TemperatureDecrease</span><span class="pun">)</span><span class="pln">
				</span><span class="pun">{</span><span class="pln">
					</span><span class="typ">Print</span><span class="pun">(</span><span class="str">"::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">": Begin decrease temperature: GetTemperature(): "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">GetTemperature</span><span class="pun">());</span><span class="pln">
					</span><span class="typ">StartTemperatureDecrease</span><span class="pun">();</span><span class="pln">
				</span><span class="pun">}</span><span class="pln">
			</span><span class="pun">}</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">m_TemperatureDecrease</span><span class="pun">)</span><span class="pln">
			</span><span class="pun">{</span><span class="pln">
				</span><span class="typ">Print</span><span class="pun">(</span><span class="str">"::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">": End decrease temperature: GetTemperature(): "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">GetTemperature</span><span class="pun">());</span><span class="pln">
				</span><span class="typ">StopTemperatureDecrease</span><span class="pun">();</span><span class="pln">
			</span><span class="pun">}</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">StartTemperatureDecrease</span><span class="pun">()</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		m_TemperatureDecrease </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Timer</span><span class="pun">(</span><span class="pln"> CALL_CATEGORY_SYSTEM </span><span class="pun">);</span><span class="pln">
		m_TemperatureDecrease</span><span class="pun">.</span><span class="typ">Run</span><span class="pun">(</span><span class="pln">m_DecreaseTempTime</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">this</span><span class="pun">,</span><span class="pln"> </span><span class="str">"DecreaseTemperature"</span><span class="pun">,</span><span class="pln"> NULL</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	
	</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">StopTemperatureDecrease</span><span class="pun">()</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		m_TemperatureDecrease</span><span class="pun">.</span><span class="typ">Stop</span><span class="pun">();</span><span class="pln">
		m_TemperatureDecrease </span><span class="pun">=</span><span class="pln"> NULL</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="kwd">void</span><span class="pln"> </span><span class="typ">DecreaseTemperature</span><span class="pun">()</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">GetTemperature</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="typ">GetInitTemperature</span><span class="pun">())</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			</span><span class="typ">AddTemperature</span><span class="pun">(</span><span class="typ">GetTempDecreaseCoef</span><span class="pun">());</span><span class="pln">
			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="typ">IsInherited</span><span class="pun">(</span><span class="typ">Pot</span><span class="pun">)</span><span class="pln"> </span><span class="com">/* GetInventory().GetCargo() */</span><span class="pun">)</span><span class="pln">
			</span><span class="pun">{</span><span class="pln">
				</span><span class="typ">DecreaseCargoTemperature</span><span class="pun">();</span><span class="pln">
			</span><span class="pun">}</span><span class="pln">
			</span><span class="typ">Print</span><span class="pun">(</span><span class="str">"::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseTemperature: this: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">": Decrease: GetTemperature(): "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">GetTemperature</span><span class="pun">());</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			</span><span class="typ">SetTemperature</span><span class="pun">(</span><span class="typ">GetInitTemperature</span><span class="pun">());</span><span class="pln">
			</span><span class="typ">StopTemperatureDecrease</span><span class="pun">();</span><span class="pln">
			</span><span class="typ">Print</span><span class="pun">(</span><span class="str">"::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseTemperature: this: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">": Stop decrease: GetTemperature(): "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">GetTemperature</span><span class="pun">());</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	
	</span><span class="kwd">void</span><span class="pln"> </span><span class="typ">DecreaseCargoTemperature</span><span class="pun">()</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="typ">ItemBase</span><span class="pln"> item</span><span class="pun">;</span><span class="pln">
		</span><span class="typ">int</span><span class="pln"> item_count </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetInventory</span><span class="pun">().</span><span class="typ">GetCargo</span><span class="pun">().</span><span class="typ">GetItemCount</span><span class="pun">();</span><span class="pln">
		</span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="typ">int</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> item_count</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			item </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ItemBase</span><span class="pun">.</span><span class="typ">Cast</span><span class="pun">(</span><span class="typ">GetInventory</span><span class="pun">().</span><span class="typ">GetCargo</span><span class="pun">().</span><span class="typ">GetItem</span><span class="pun">(</span><span class="pln">i</span><span class="pun">));</span><span class="pln">
			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">item</span><span class="pun">)</span><span class="pln">
			</span><span class="pun">{</span><span class="pln">
				</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">item</span><span class="pun">.</span><span class="typ">GetTemperature</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> item</span><span class="pun">.</span><span class="typ">GetInitTemperature</span><span class="pun">())</span><span class="pln">
				</span><span class="pun">{</span><span class="pln">
					item</span><span class="pun">.</span><span class="typ">AddTemperature</span><span class="pun">(</span><span class="pln">item</span><span class="pun">.</span><span class="typ">GetTempDecreaseCoef</span><span class="pun">());</span><span class="pln">
					</span><span class="typ">Print</span><span class="pun">(</span><span class="str">"::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseCargoTemperature: this: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">": Decrease: item: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item </span><span class="pun">+</span><span class="pln"> </span><span class="str">":  item.GetTemperature(): "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item</span><span class="pun">.</span><span class="typ">GetTemperature</span><span class="pun">());</span><span class="pln">
				</span><span class="pun">}</span><span class="pln">
				</span><span class="kwd">else</span><span class="pln">
				</span><span class="pun">{</span><span class="pln">
					item</span><span class="pun">.</span><span class="typ">SetTemperature</span><span class="pun">(</span><span class="pln">item</span><span class="pun">.</span><span class="typ">GetInitTemperature</span><span class="pun">());</span><span class="pln">
					</span><span class="typ">Print</span><span class="pun">(</span><span class="str">"::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseCargoTemperature: this: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">": Stop decrease: item: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item </span><span class="pun">+</span><span class="pln"> </span><span class="str">":  item.GetTemperature(): "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item</span><span class="pun">.</span><span class="typ">GetTemperature</span><span class="pun">());</span><span class="pln">
				</span><span class="pun">}</span><span class="pln">
			</span><span class="pun">}</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	
	</span><span class="typ">float</span><span class="pln"> </span><span class="typ">GetInitTemperature</span><span class="pun">()</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">return</span><span class="pln"> m_InitTemperature</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="typ">float</span><span class="pln"> </span><span class="typ">GetTempDecreaseCoef</span><span class="pun">()</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">return</span><span class="pln"> m_TempDecreaseCoef</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Немного переделал код
</p>

<p>
	Теперь охлаждается все если оно имеет Т выше 12, а если это кастрюля с содержимым, то и ее содержимое
</p>

<p>
	Получить Т воздуха в конструкторе не выходит потому указал руками
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">9220</guid><pubDate>Thu, 07 May 2020 23:05:56 +0000</pubDate></item><item><title>&#x41F;&#x430;&#x442;&#x440;&#x43E;&#x43D;&#x44B; &#x43F;&#x440;&#x438; &#x440;&#x430;&#x441;&#x43F;&#x430;&#x43A;&#x43E;&#x432;&#x43A;&#x435; &#x440;&#x430;&#x43D;&#x434;&#x43E;&#x43C;( &#x43E;&#x442; &#x441;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F; &#x43F;&#x430;&#x447;&#x43A;&#x438;)</title><link>https://s-platoon.magicbyte.org/topic/10639-patrony-pri-raspakovke-random-ot-sostoyaniya-pachki/</link><description><![CDATA[
<p>
	<span style="color:#2ecc71;">Данный <abbr title="Сценарий, выполняемый системой">скрипт</abbr></span> позволяет при распаковке пачек патронов получать разное кол-во пуль в зависимости от состояния коробки.<br><em><span style="color:#1abc9c;">Скрип является онли серверным</span></em>. 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="kwd">enum</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	NAIL</span><span class="pun">,</span><span class="pln"> </span><span class="com">// Перечислены коробки которые мы хотим сделать рандомное выпадения</span><span class="pln">
	AMMO556X45</span><span class="pun">,</span><span class="pln">
	AMMO556X45T</span><span class="pun">,</span><span class="pln">
	AMMO308WIN</span><span class="pun">,</span><span class="pln">
	AMMO308WINT</span><span class="pun">,</span><span class="pln">
	AMMO762X54</span><span class="pun">,</span><span class="pln">
	AMMO762X54T</span><span class="pun">,</span><span class="pln">
	AMMO762X39</span><span class="pun">,</span><span class="pln">
	AMMO762X39T</span><span class="pun">,</span><span class="pln">
	AMMO22</span><span class="pun">,</span><span class="pln">
	AMMO357</span><span class="pun">,</span><span class="pln">
	AMMO45ACP</span><span class="pun">,</span><span class="pln">
	AMMO9X19</span><span class="pun">,</span><span class="pln">
	AMMO380</span><span class="pun">,</span><span class="pln">
	AMMO00BUCK</span><span class="pun">,</span><span class="pln">
	AMMO12GASLUG</span><span class="pun">,</span><span class="pln">
	AMMO12GARUBBERSLUG</span><span class="pun">,</span><span class="pln">
	AMMO12GABEANBAG</span><span class="pun">,</span><span class="pln">
	AMMO545X39</span><span class="pun">,</span><span class="pln">
	AMMO545X39T</span><span class="pun">,</span><span class="pln">
	AMMO9X39AP</span><span class="pun">,</span><span class="pln">
	AMMO9X39
</span><span class="pun">}</span><span class="pln">

modded </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">ActionUnpackBox</span><span class="pun">:</span><span class="pln"> </span><span class="typ">ActionContinuousBase</span><span class="pln">
</span><span class="pun">{</span><span class="pln">	
	override </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">OnFinishProgressServer</span><span class="pun">(</span><span class="pln"> </span><span class="typ">ActionData</span><span class="pln"> action_data </span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> action_data</span><span class="pun">.</span><span class="pln">m_MainItem </span><span class="pun">&amp;&amp;</span><span class="pln"> action_data</span><span class="pun">.</span><span class="pln">m_MainItem</span><span class="pun">.</span><span class="typ">GetHierarchyRootPlayer</span><span class="pun">()</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> action_data</span><span class="pun">.</span><span class="pln">m_Player </span><span class="pun">)</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			</span><span class="typ">int</span><span class="pln"> boxType </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetBoxType</span><span class="pun">(</span><span class="pln">action_data</span><span class="pun">.</span><span class="pln">m_MainItem</span><span class="pun">.</span><span class="typ">GetType</span><span class="pun">());</span><span class="pln">
			</span><span class="typ">float</span><span class="pln"> quantityMinBD</span><span class="pun">;</span><span class="pln">
			</span><span class="typ">float</span><span class="pln"> quantityMaxBD</span><span class="pun">;</span><span class="pln">
			</span><span class="typ">float</span><span class="pln"> quantityMinD</span><span class="pun">;</span><span class="pln">
			</span><span class="typ">float</span><span class="pln"> quantityMaxD</span><span class="pun">;</span><span class="pln">
			</span><span class="typ">float</span><span class="pln"> quantityMinW</span><span class="pun">;</span><span class="pln">
			</span><span class="typ">float</span><span class="pln"> quantityMaxW</span><span class="pun">;</span><span class="pln">
			</span><span class="typ">float</span><span class="pln"> quantityMinP</span><span class="pun">;</span><span class="pln">
			</span><span class="typ">float</span><span class="pln"> quantityMaxP</span><span class="pun">;</span><span class="pln">
			</span><span class="kwd">bool</span><span class="pln"> hasPaper</span><span class="pun">;</span><span class="pln">
			
			</span><span class="kwd">switch</span><span class="pun">(</span><span class="pln">boxType</span><span class="pun">)</span><span class="pln">
			</span><span class="pun">{</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">NAIL</span><span class="pun">:</span><span class="pln"> </span><span class="com">// Добавляем тут тип тот же что и в ENUM</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="com">//Минимальный процент количества в стадии сильно поврежденного</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="com">//Максимальный процент количества в стадии сильно поврежденного</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="com">//Минимальный процент количества в стадии поврежденного</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="com">//Максимальный процент количества в стадии поврежденного</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="com">//Минимальный процент количества в стадии поношенного</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="com">//Максимальный процент количества в стадии поношенного</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="com">//Минимальный процент количества в стадии нетронутого</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="com">//Максимальный процент количества в стадии нетронутого</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="com">//Будет ли бумажка при распаковке  true \ false</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO556X45</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO556X45T</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO308WIN</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO308WINT</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO762X54</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO762X54T</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO762X39</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO762X39T</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO22</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO357</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO45ACP</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO9X19</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO380</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO00BUCK</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO12GASLUG</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO12GARUBBERSLUG</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO12GABEANBAG</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO545X39</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO545X39T</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO9X39AP</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO9X39</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.10</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.15</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.20</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.30</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.65</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.70</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="kwd">default</span><span class="pun">:</span><span class="pln">
					quantityMinBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
					quantityMaxBD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
					quantityMinD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
					quantityMaxD </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
					quantityMinW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
					quantityMaxW </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
					quantityMinP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
					quantityMaxP </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
					hasPaper </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
			</span><span class="pun">}</span><span class="pln">
			
			string path </span><span class="pun">=</span><span class="pln"> </span><span class="str">"CfgVehicles "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> action_data</span><span class="pun">.</span><span class="pln">m_MainItem</span><span class="pun">.</span><span class="typ">GetType</span><span class="pun">();</span><span class="pln">
			string child_name </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
			</span><span class="typ">int</span><span class="pln"> count</span><span class="pun">;</span><span class="pln">
			</span><span class="typ">array</span><span class="str">&lt;string&gt;</span><span class="pln"> resources </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">array</span><span class="str">&lt;string&gt;</span><span class="pun">;</span><span class="pln">
			
			</span><span class="kwd">if</span><span class="pun">(</span><span class="pln"> </span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">ConfigIsExisting</span><span class="pun">(</span><span class="pln"> path </span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> </span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">ConfigIsExisting</span><span class="pun">(</span><span class="pln"> path </span><span class="pun">+</span><span class="pln"> </span><span class="str">" Resources"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
			</span><span class="pun">{</span><span class="pln">
				path </span><span class="pun">=</span><span class="pln"> path </span><span class="pun">+</span><span class="pln"> </span><span class="str">" Resources"</span><span class="pun">;</span><span class="pln">
				count </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">ConfigGetChildrenCount</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> path </span><span class="pun">);</span><span class="pln">
				</span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="typ">int</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> count</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln">
				</span><span class="pun">{</span><span class="pln">
					</span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">ConfigGetChildName</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> path</span><span class="pun">,</span><span class="pln"> i</span><span class="pun">,</span><span class="pln"> child_name </span><span class="pun">);</span><span class="pln">
					
					</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">ConfigGetInt</span><span class="pun">(</span><span class="pln"> path </span><span class="pun">+</span><span class="pln"> </span><span class="str">" "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> child_name </span><span class="pun">+</span><span class="pln"> </span><span class="str">" value"</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
					</span><span class="pun">{</span><span class="pln">
						resources</span><span class="pun">.</span><span class="typ">Insert</span><span class="pun">(</span><span class="pln"> child_name </span><span class="pun">);</span><span class="pln">
					</span><span class="pun">}</span><span class="pln">
				</span><span class="pun">}</span><span class="pln">

				string itemType </span><span class="pun">=</span><span class="pln"> resources</span><span class="pun">.</span><span class="typ">Get</span><span class="pun">(</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
				
				string itemPath </span><span class="pun">=</span><span class="pln"> </span><span class="str">"CfgVehicles "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> itemType</span><span class="pun">;</span><span class="pln">
				</span><span class="typ">int</span><span class="pln"> quantityMax</span><span class="pun">;</span><span class="pln">
				</span><span class="typ">int</span><span class="pln"> itemCount </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">ConfigGetInt</span><span class="pun">(</span><span class="pln"> path </span><span class="pun">+</span><span class="pln"> </span><span class="str">" "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> itemType </span><span class="pun">+</span><span class="pln"> </span><span class="str">" value"</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
				
				</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">ConfigIsExisting</span><span class="pun">(</span><span class="pln">itemPath </span><span class="pun">+</span><span class="pln"> </span><span class="str">" varQuantityMax"</span><span class="pun">))</span><span class="pln">
				</span><span class="pun">{</span><span class="pln">
					quantityMax </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">ConfigGetInt</span><span class="pun">(</span><span class="pln">itemPath </span><span class="pun">+</span><span class="pln"> </span><span class="str">" varQuantityMax"</span><span class="pun">);</span><span class="pln">
				</span><span class="pun">}</span><span class="pln">
				</span><span class="kwd">else</span><span class="pln">
				</span><span class="pun">{</span><span class="pln">
					quantityMax </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="typ">Round</span><span class="pun">(</span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">ConfigGetFloat</span><span class="pun">(</span><span class="pln"> CFG_MAGAZINESPATH </span><span class="pun">+</span><span class="pln"> </span><span class="str">" "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> itemType </span><span class="pun">+</span><span class="pln"> </span><span class="str">" count"</span><span class="pln"> </span><span class="pun">));</span><span class="pln">
				</span><span class="pun">}</span><span class="pln">
				
				</span><span class="typ">int</span><span class="pln"> healthLevel </span><span class="pun">=</span><span class="pln"> action_data</span><span class="pun">.</span><span class="pln">m_MainItem</span><span class="pun">.</span><span class="typ">GetHealthLevel</span><span class="pun">();</span><span class="pln">
				</span><span class="kwd">switch</span><span class="pun">(</span><span class="pln">healthLevel</span><span class="pun">)</span><span class="pln">
				</span><span class="pun">{</span><span class="pln">
					</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">GameConstants</span><span class="pun">.</span><span class="pln">STATE_BADLY_DAMAGED</span><span class="pun">:</span><span class="com">//Стадия сильно поврежденного</span><span class="pln">
						itemCount </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="typ">Round</span><span class="pun">(</span><span class="typ">Math</span><span class="pun">.</span><span class="typ">RandomFloat</span><span class="pun">(</span><span class="pln">quantityMinBD</span><span class="pun">,</span><span class="pln">quantityMaxBD</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> quantityMax</span><span class="pun">);</span><span class="pln">
						</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">GameConstants</span><span class="pun">.</span><span class="pln">STATE_DAMAGED</span><span class="pun">:</span><span class="com">//Стадия поврежденного</span><span class="pln">
						itemCount </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="typ">Round</span><span class="pun">(</span><span class="typ">Math</span><span class="pun">.</span><span class="typ">RandomFloat</span><span class="pun">(</span><span class="pln">quantityMinD</span><span class="pun">,</span><span class="pln">quantityMaxD</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> quantityMax</span><span class="pun">);</span><span class="pln">
						</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">GameConstants</span><span class="pun">.</span><span class="pln">STATE_WORN</span><span class="pun">:</span><span class="com">//Стадия поношенного</span><span class="pln">
						itemCount </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="typ">Round</span><span class="pun">(</span><span class="typ">Math</span><span class="pun">.</span><span class="typ">RandomFloat</span><span class="pun">(</span><span class="pln">quantityMinW</span><span class="pun">,</span><span class="pln">quantityMaxW</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> quantityMax</span><span class="pun">);</span><span class="pln">
						</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
					</span><span class="kwd">case</span><span class="pln"> </span><span class="typ">GameConstants</span><span class="pun">.</span><span class="pln">STATE_PRISTINE</span><span class="pun">:</span><span class="com">//Стадия нетронуто</span><span class="pln">
						itemCount </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="typ">Round</span><span class="pun">(</span><span class="typ">Math</span><span class="pun">.</span><span class="typ">RandomFloat</span><span class="pun">(</span><span class="pln">quantityMinP</span><span class="pun">,</span><span class="pln">quantityMaxP</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> quantityMax</span><span class="pun">);</span><span class="pln">
						</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
				</span><span class="pun">}</span><span class="pln">
				
				</span><span class="typ">UnboxLambda</span><span class="pln"> lambda </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">UnboxLambda</span><span class="pun">(</span><span class="pln">action_data</span><span class="pun">.</span><span class="pln">m_MainItem</span><span class="pun">,</span><span class="pln"> itemType</span><span class="pun">,</span><span class="pln"> action_data</span><span class="pun">.</span><span class="pln">m_Player</span><span class="pun">,</span><span class="pln"> itemCount</span><span class="pun">);</span><span class="pln">
				action_data</span><span class="pun">.</span><span class="pln">m_Player</span><span class="pun">.</span><span class="typ">ServerReplaceItemInHandsWithNew</span><span class="pun">(</span><span class="pln">lambda</span><span class="pun">);</span><span class="pln">
				
				</span><span class="com">//spawns wrapping Paper</span><span class="pln">
				</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">hasPaper</span><span class="pun">)</span><span class="pln">
					</span><span class="typ">ItemBase</span><span class="pln"> paper </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ItemBase</span><span class="pun">.</span><span class="typ">Cast</span><span class="pun">(</span><span class="pln"> </span><span class="typ">GetGame</span><span class="pun">().</span><span class="typ">CreateObjectEx</span><span class="pun">(</span><span class="str">"Paper"</span><span class="pun">,</span><span class="pln"> action_data</span><span class="pun">.</span><span class="pln">m_Player</span><span class="pun">.</span><span class="typ">GetPosition</span><span class="pun">(),</span><span class="pln"> ECE_PLACE_ON_SURFACE</span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
				
				action_data</span><span class="pun">.</span><span class="pln">m_Player</span><span class="pun">.</span><span class="typ">GetSoftSkillsManager</span><span class="pun">().</span><span class="typ">AddSpecialty</span><span class="pun">(</span><span class="pln"> m_SpecialtyWeight </span><span class="pun">);</span><span class="pln">
			</span><span class="pun">}</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	
	</span><span class="typ">int</span><span class="pln"> </span><span class="typ">GetBoxType</span><span class="pun">(</span><span class="pln">string name</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="typ">int</span><span class="pln"> type </span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"NailBox"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">NAIL</span><span class="pun">;</span><span class="pln"> </span><span class="com">// Тут тоже добавляем что и в ENUM</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_556x45_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO556X45</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_556x45Tracer_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO556X45T</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_308Win_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO308WIN</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_308WinTracer_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO308WINT</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_762x54_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO762X54</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_762x54Tracer_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO762X54T</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_762x39_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO762X39</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_762x39Tracer_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO762X39T</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_22_50Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO22</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_357_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO357</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_45ACP_25rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO45ACP</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_9x19_25rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO9X19</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_380_35rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO380</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_00buck_10rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO00BUCK</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_12gaSlug_10Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO12GASLUG</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_12gaRubberSlug_10Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO12GARUBBERSLUG</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_12gaBeanbag_10Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO12GABEANBAG</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_545x39_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO545X39</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_545x39Tracer_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO545X39T</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_9x39AP_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO9X39AP</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> </span><span class="str">"AmmoBox_9x39_20Rnd"</span><span class="pun">)</span><span class="pln">
			type </span><span class="pun">=</span><span class="pln"> </span><span class="typ">BoxTypes</span><span class="pun">.</span><span class="pln">AMMO9X39</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">return</span><span class="pln"> type</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
</span><span class="pun">};</span></pre>

<p>
	Обновил <abbr title="Сценарий, выполняемый системой">скрипт</abbr> <span style="color:#2ecc71;">28.02.2021.</span><br><span style="color:#95a5a6;"><em>- Теперь можно добавить каждый тип коробок отдельно( задать ему минимальное \ максимальное кол-во патронов от состояния коробки).<br>
	- Теперь можно запретить или добавить выпадения бумажки при распаковке той или иной пачки.<br>
	- Возможно добавление моддовских пачек патронов и их регулирования количества.</em></span>
</p>
]]></description><guid isPermaLink="false">10639</guid><pubDate>Thu, 25 Feb 2021 18:11:27 +0000</pubDate></item><item><title>DAYZ enScript (&#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x44B;, &#x43E;&#x442;&#x432;&#x435;&#x442;&#x44B;)</title><link>https://s-platoon.magicbyte.org/topic/7036-dayz-enscript-voprosy-otvety/</link><description><![CDATA[
<p>
	Предлагаю все возможные гайды по enscript/моддингу публиковать в этой теме
</p>

<p>
	Ссылка на предыдущею версию темы по enscript версии 0.62 - там можно прочитать в общих чертах про этот язык
</p>
<iframe data-embedcontent="" frameborder="0" src="https://s-platoon.ru/applications/core/interface/js/spacer.png" data-embed-src="https://s-platoon.magicbyte.org/topic/6826-dayz-standalone-062063-enscript-izuchenie/?do=embed"></iframe>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7036</guid><pubDate>Mon, 24 Sep 2018 14:16:49 +0000</pubDate></item><item><title>#define #ifdef &#x43C;&#x43E;&#x434;&#x43E;&#x434;&#x435;&#x43B;&#x430;&#x43C;.</title><link>https://s-platoon.magicbyte.org/topic/15677-define-ifdef-mododelam/</link><description><![CDATA[
<p>
	Привет, нашёл на форуме DayZ хорошую статью про использование #define #ifdef и хотелось бы поделиться с вами, так как она очень полезная для мододелов и в целом чтобы помочь другим устранять конфликты с вашими модами и наоборот.
</p>

<p>
	 
</p>

<p>
	Оригинальная статья: <a href="https://forums.dayz.com/topic/252259-good-modding-practice-add-a-define-to-the-scripts-to-help-other-modders-to-fix-conflicts/" rel="external nofollow">**тык**</a>
</p>

<p>
	 
</p>

<p>
	<strong>Что такое #define и что он определяет:</strong>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			#define использует с #ifdef (#ifndef) и позволяет узнать, загружен <abbr title="Модификация">мод</abbr> или нет.
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	<strong>Как добавить #define</strong>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			Создайте файл, по пути:
		</p>

		<div>
			<a title="Copy to Clipboard" rel=""></a>/YourMod/Scripts/Common/define.c<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">/YourMod/Scripts/Common/define.c</span></pre>
			<span style="background:rgba(220,220,220,.5) url(&quot;//s-platoon.ru/applications/core/interface/ckeditor/ckeditor/plugins/widget/images/handle.png&quot;);"></span>
		</div>

		<p>
			Добавьте внутрь файла:
		</p>

		<div>
			<a title="Copy to Clipboard" rel=""></a>#define THE_NAME_OF_YOUR_MOD<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="com">#define</span><span class="pln"> THE_NAME_OF_YOUR_MOD</span></pre>
			<span style="background:rgba(220,220,220,.5) url(&quot;//s-platoon.ru/applications/core/interface/ckeditor/ckeditor/plugins/widget/images/handle.png&quot;);"></span>
		</div>

		<p>
			(Вы можете вписать вместо THE_NAME_OF_YOUR_MOD любое название, но оно должно быть уникально!)
		</p>

		<p>
			 
		</p>

		<p>
			<strong>Вот и все! Как видите, это очень просто, очень быстро и очень полезно!</strong>
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	<strong>Как использовать #define</strong><br />
	 
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			Если вы мододел/скриптер и у вас возник конфликт с другим модом, иногда вы можете добавить код в свой <abbr title="Модификация">мод</abbr>, чтобы исправить этот конфликт.
		</p>

		<p>
			 
		</p>

		<p>
			Но, делая это, вы можете добавить ошибки для тех, кто использует ваш <abbr title="Модификация">мод</abbr>, но у его нет <abbr title="Модификации">мода</abbr> который конфликтует (когда исправление должно ссылаться на переменные или классы, включенные в <abbr title="Модификация">мод</abbr>, которые конфликтуют (а этого <abbr title="Модификации">мода</abbr>, допустим нет)).
		</p>

		<p>
			 
		</p>

		<p>
			Чтобы решить эту ситуацию, вы можете использовать этот тип кода:
		</p>

		<div>
			<a title="Copy to Clipboard" rel=""></a>#ifdef THE_DEFINE_OF_THE_MOD_THAT_CONFLICT
// Код вашего исправления…
#endif<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="com">#ifdef</span><span class="pln"> THE_DEFINE_OF_THE_MOD_THAT_CONFLICT
</span><span class="com">// Код вашего исправления…</span><span class="pln">
</span><span class="com">#endif</span></pre>
			<span style="background:rgba(220,220,220,.5) url(&quot;//s-platoon.ru/applications/core/interface/ckeditor/ckeditor/plugins/widget/images/handle.png&quot;);"></span>
		</div>

		<p>
			или же
		</p>

		<div>
			<a title="Copy to Clipboard" rel=""></a>#ifndef THE_DEFINE_OF_THE_MOD_THAT_CONFLICT
// Код вашего исправления…
#endif<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="com">#ifndef</span><span class="pln"> THE_DEFINE_OF_THE_MOD_THAT_CONFLICT
</span><span class="com">// Код вашего исправления…</span><span class="pln">
</span><span class="com">#endif</span></pre>
			<span style="background:rgba(220,220,220,.5) url(&quot;//s-platoon.ru/applications/core/interface/ckeditor/ckeditor/plugins/widget/images/handle.png&quot;);"></span>
		</div>

		<p>
			Используйте <strong>#ifdef </strong>или <strong>#ifndef</strong> в зависимости от того, нужно ли загружать или не загружать конфликтующий <abbr title="Модификация">мод</abbr> для выполнения вашего исправления.
		</p>

		<p>
			 
		</p>

		<p>
			Последнее, что нужно сделать, это разрешить вашему моду находить файл, в котором находится #define.
		</p>

		<p>
			Для этого вам необходимо изменить свой корневой файл config.cpp.
		</p>

		<p>
			 
		</p>

		<p>
			Например, если ваше исправление находится в /scripts/5_mission/YourScript.c, вам нужно добавить в свой список путей к файлам
		</p>

		<div>
			<a title="Copy to Clipboard" rel=""></a>"missionScriptModule":
"TheModThatConflictName/Scripts/Common",<pre class="ipsCode prettyprint lang-html prettyprinted">

<span class="pln">"missionScriptModule":
"TheModThatConflictName/Scripts/Common",</span></pre>
			<span style="background:rgba(220,220,220,.5) url(&quot;//s-platoon.ru/applications/core/interface/ckeditor/ckeditor/plugins/widget/images/handle.png&quot;);"></span>
		</div>

		<p>
			поставьте его перед своей собственной миссией и не забудьте поставить « " » и « , » в конце пути.
		</p>

		<p>
			 
		</p>

		<p>
			Рекомендую распаковать <abbr title="Модификация">мод</abbr>, который конфликтует, для проверки в его корневом каталоге config.cpp путь, который он использует, потому что некоторые из них используют «префикс» перед именем <abbr title="Модификации">мода</abbr> (пример : PrefixName/ModName/Scripts/...).
		</p>

		<p>
			Если используется префикс, то он должен быть включен в путь к папке определения.
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	<strong>Дополнительно:</strong><br />
	 
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			Вам не нужно создавать <strong>#define</strong>, если ваш <abbr title="Модификация">мод</abbr> содержит только файлы config.cpp, потому что эта <abbr title="Набор команд и параметров">функция</abbr> касается только <abbr title="Сценарий, выполняемый системой">скриптов</abbr> в файле .c.
		</p>

		<p>
			 
		</p>

		<p>
			Вы можете добавить свой собственный внутренний <strong>#define</strong>, например <strong>#define MY_DEBUG_MOD_ACTIVE</strong>, тогда вам нужно только закомментировать / раскомментировать это определение, чтобы активировать / деактивировать код во всех соответствующих <strong>#ifdef</strong> сразу, где бы он ни находился в ваших скриптах.
		</p>

		<p>
			(Только не забудьте указать путь к вашему корневому каталогу config.cpp)
		</p>

		<p>
			 
		</p>

		<p>
			Вы можете использовать <strong>#ifdef SERVER</strong> для выполнения кода только на стороне сервера.
		</p>

		<p>
			 
		</p>

		<p>
			И, если верить официальной документации, он немного более оптимизирован, чем <strong>« if (IsDedicatedServer()) »</strong> или <strong>« if( GetGame().isServer() &amp;&amp; GetGame().IsMultiplayer() ) »</strong>.
		</p>

		<p>
			 
		</p>

		<p>
			<strong>Обратите внимание, что код, который не должен выполняться из-за #ifdef / #ifndef, вообще не компилируется при запуске сервера/игры (вот почему сервер #ifdef требует меньше ресурсов).</strong>
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	<strong>Вывод:</strong>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			 
		</p>

		<p>
			Я действительно думаю, что если большинство мододелов будут использовать это, то это значительно упростит решение конфликтов, но к сожалению, сегодня кажется, что только опытные мододелы знают и используют эту <abbr title="Набор команд и параметров">функцию</abbr>, в то время как сделать это очень просто.
		</p>

		<p>
			 
		</p>

		<p>
			Идеальным решением было бы, чтобы ванильная игра автоматически определяла, загружены <abbr title="Модификации">моды</abbr> или нет, но, насколько я знаю, это не так <span class="ipsEmoji">?</span>
		</p>

		<p>
			 
		</p>

		<p>
			<u><strong>Поделитесь этой информацией со всеми знакомыми мододелами если это возможно, использование #define по сути облегчит работу с вашим модом и в целом думаю, будет очень полезна для вас самих же потому что чем больше мододелов про это узнают и начнут использовать тем меньше проблем будет у нас с модами.</strong></u>
		</p>

		<p>
			 
		</p>
	</div>
</div>

<p>
	 
</p>
]]></description><guid isPermaLink="false">15677</guid><pubDate>Fri, 26 Apr 2024 13:44:44 +0000</pubDate></item><item><title>[Mods] &#x414;&#x435;&#x43B;&#x430;&#x435;&#x43C; &#x441;&#x432;&#x43E;&#x439; &#x44D;&#x43A;&#x440;&#x430;&#x43D; &#x437;&#x430;&#x433;&#x440;&#x443;&#x437;&#x43A;&#x438; &#x43D;&#x430; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;</title><link>https://s-platoon.magicbyte.org/topic/9362-mods-delaem-svoy-ekran-zagruzki-na-server/</link><description><![CDATA[
<p>
	Как и обещал, добавляю в гайды вам статейку по созданию собственного экрана загрузки на свой сервер.
</p>

<p>
	 
</p>

<p>
	<span style="color:#e74c3c;"><strong>Заранее предупреждаю:</strong></span>
</p>

<ul>
<li>
		Все, кто уже сделал такой экран сами - наврядли увидите что-то новое
	</li>
	<li>
		Создание такого экрана требует создания своего клиент-серверного <abbr title="Модификации">мода</abbr> для своего сервера (т.е. <abbr title="Модификация">мод</abbr> прийдется выкладывать в стим самим для своего сервера и предоставлять игрокам для входа)
	</li>
	<li>
		требуется наличие игры в Steam и на компьютере (инструмент DayZ Tools без этого не запустится)
	</li>
</ul>
<p>
	 
</p>

<p>
	<strong><span style="color:#27ae60;">Что необходимо:</span></strong>
</p>

<ol>
<li>
		Разумеется, шаблон-<abbr title="Модификация">мод</abbr> с мастерской, любезно предоставленный комьюнити: <span><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=1848020079" rel="external nofollow">https://steamcommunity.com/sharedfiles/filedetails/?id=1848020079</a> (на момент публикации статьи, по традиции </span><p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> <span>)</span>
	</li>
	<li>
		Программа PBO-manager для работы с pbo файлами: <a href="https://www.armaholic.com/page.php?id=16369" rel="external nofollow">https://www.armaholic.com/page.php?id=16369 </a><p class='ipsMessage ipsMessage_error cloak'>Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.</p> 
	</li>
	<li>
		DayZ Tools для работы с картинкой и выгрузкой своего <abbr title="Модификации">мода</abbr> в мастерскую. (раздел инструментов в мастерской)
	</li>
	<li>
		Готовая картинка или/и фоторедактор
	</li>
</ol>
<p>
	 
</p>

<p>
	<span style="color:#27ae60;"><strong>Необходимые (полезные) гайды:</strong></span>
</p>

<ul>
<li>
		<strong>Гайд по созданию своих ключей и подписей к своему моду:</strong> <a href="https://s-platoon.magicbyte.org/topic/7701-dayz-standalone-sozdanie-klyuchey-i-podpisey-k-modam-i-addonam/" rel="">https://s-platoon.ru/topic/7701-dayz-standalone-sozdanie-klyuchey-i-podpisey-k-modam-i-addonam/</a>
	</li>
	<li>
		<strong>Гайд по загрузке своей модификации в Steam:</strong> <a href="https://s-platoon.magicbyte.org/topic/7702-dayz-standalone-kak-zalitzakachat-svoy-mod-v-stim/" rel="">https://s-platoon.ru/topic/7702-dayz-standalone-kak-zalitzakachat-svoy-mod-v-stim/</a>
	</li>
</ul>
<p>
	 
</p>

<p>
	<span style="color:#2980b9;"><strong>И так, поехали:</strong></span>
</p>

<p>
	1. Первым делом выкачиваем сам шаблон-<abbr title="Модификация">мод</abbr> (п. 1 выше)
</p>

<p>
	2. Устанавливаем, если если еще не установлено, <strong>PBO Manager</strong>
</p>

<p>
	3. Открываем загруженный <abbr title="Модификация">мод</abbr>, находим "<strong>pbo-файлик</strong>" <abbr title="Модификации">мода</abbr> и жмем по нему правую кнопку мышки, выбираем "<strong>Pbo manager -&gt; Extract to Loadingscreen</strong>"
</p>

<p>
	<img alt="753982096_.png.d38b7955f9f63483a56a9a09feba5fdb.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6261" data-ratio="14.60" style="height:auto;" width="692" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_06/753982096_.png.d38b7955f9f63483a56a9a09feba5fdb.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"></p>

<p>
	4. Появится папка "<strong>Loadingscreen</strong>" рядом с "<strong>pbo-файлом</strong>". Заходим в нее. Нам нужен будет файлик с именем "<strong>loadingscreen.edds</strong>" - запоминаем его расположение.<span> </span>
</p>

<p>
	<img alt="289318759_.png.a4b3e9b9e74324b5981ef3c4d3dda865.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6263" data-ratio="25.25" style="height:auto;" width="594" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_06/289318759_.png.a4b3e9b9e74324b5981ef3c4d3dda865.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"></p>

<p>
	5. Создаем или находим готовую картинку для установки на экран.
</p>

<p>
	Вы можете использовать картинку с любым разрешением. Он масштабируется в полноэкранном режиме в зависимости от ваших настроек. Но лучше использовать 16 * масштабируемые разрешения, такие как <strong>2048*1024</strong> и т. д. (взято напрямую со слов автора <abbr title="Модификации">мода</abbr>)<br>
	P.S. Советую делать картинку в формате "<strong>.PNG</strong>", либо пересохранить ее в таком формате!
</p>

<p>
	6. Открываем папку с установленным инструментом "<strong>DayZ Tools</strong>" , затем идем в папку "<strong>bin</strong>", "<strong>Workbench</strong>", создаем любую папку с любым именем, например '<strong>Edit</strong>' и помещаем картинку в нее. Имя файла картинки должно быть такое же, т.е. <strong>loadingscreen</strong>
</p>

<p>
	7. Запускаем "<strong>DayZ Tools</strong>", выбираем инструмент "<strong>Workbench</strong>". Далее "<strong>Tools - browse files</strong>". Выбираем картинку из нашей папки '<strong>Edit</strong>'. Она откроется.
</p>

<p>
	8. Кликаем правой кнопкой по картинке и выбираем "<strong>Register and import</strong>". Получаем в результате в нашей папке '<strong>Edit</strong>' 2 файла с именем "<strong>loadingscreen.edds</strong>" (имя получилось такое же, как в папке с самим pbo-файлом, в этом и весь фокус) и "<strong>loadingscreen.edds.meta</strong>". 9. Настраиваем как нам нужно цветность, масштаб и прочее. Затем сохраняем ее обязательно.
</p>

<p>
	10. Копируем файлик формата "<strong>edds</strong>" из папки '<strong>Edit</strong>' в нашу папку с нашим модом (см. п. 4, говорил запомнить).
</p>

<p>
	11. Возвращаемся в расположению нашего "<strong>pbo-файлика</strong>" и папки "<strong>Loadingscreen</strong>". Жмем правую кнопку мышки прямо по папке "<strong>Loadingscreen</strong>" и выбираем теперь "<strong>Pbo manager -&gt; Pack into Loadingscreen.pbo</strong>"
</p>

<p>
	<img alt="1786528854_.png.2de165fc6492af853c38de637591434d.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6266" data-ratio="9.41" style="height:auto;" width="680" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_06/1786528854_.png.2de165fc6492af853c38de637591434d.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"></p>

<p>
	12. Удаляем файлик с расширением <strong>bak</strong> (это копия старого файла)
</p>

<p>
	<img alt="2049815813_.png.64a52497f7d13de5e8202560bb05a645.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6267" data-ratio="15.73" style="height:auto;" width="604" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2020_06/2049815813_.png.64a52497f7d13de5e8202560bb05a645.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png"></p>

<p>
	13. Далее зависит все от того, есть ли у вас свой <abbr title="Модификация">мод</abbr>.<br>
	Если есть - просто берете наш полученный "<strong>pbo-файл</strong>" и помещаете в папку "<strong>addons</strong>" вашего <abbr title="Модификации">мода</abbr>.
</p>

<p>
	Если нет - создаем папку с нашим будущим модом, например, "<strong>@MyMod</strong>". В ней создаем папку "<strong>Addons</strong>", и наш готовый "<strong>pbo-файлик</strong>" помещаем в эту папку.
</p>

<p>
	14. Подписываем своим ключем наши модики и выкладываем в мастерскую для игроков (как - см гайды выше)
</p>

<p>
	15. Ставим свой модик на сервер, и, разумеется, раздаем на клиент игры игрокам его. (если модик у вас уже был свой - просто обновляем его в "<strong>publisher</strong>" и потом на сервере)
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#27ae60;">Разное полезное на похожую тему:</span></strong>
</p>

<ol>
<li>
		<strong>UpgradedMainMenu+</strong> <a href="https://steamcommunity.com/sharedfiles/filedetails/?id=1854914078" rel="external nofollow">https://steamcommunity.com/sharedfiles/filedetails/?id=1854914078</a>
	</li>
	<li>
		<strong>Custom News Feed (UpgradedMainMenu+ Modification) </strong><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=1908067377" rel="external nofollow">https://steamcommunity.com/sharedfiles/filedetails/?id=1908067377</a>
	</li>
	<li>
		<strong>Custom MainMenu Music</strong> <a href="https://steamcommunity.com/sharedfiles/filedetails/?id=1850307865" rel="external nofollow">https://steamcommunity.com/sharedfiles/filedetails/?id=1850307865</a>
	</li>
</ol>
<p>
	 
</p>

<p>
	<strong><span style="color:#e74c3c;">Важно:</span></strong>
</p>

<p>
	<u>Для профессионалов: </u>Любое изменение главного меню с помощью текущего <abbr title="Модификации">мода</abbr>, а также любых других <abbr title="Модификации">модов</abbr> (например экранов загрузки игры или любых родных элементов в игре) грубыми методами (путем переписывания оригинального кода поверху, без основы на оригинальный код) не является корректным и может приводить к крашам игры, используйте все эти <abbr title="Модификации">моды</abbr> с данной темы на свой страх и риск.
</p>

<p>
	<u>Простым языком: </u>если игроки будут жаловаться на краши игры, рекоммендуется первым делом отключить все <abbr title="Модификации">моды</abbr>, связанные с материалом, описанном в данной теме!
</p>

<p>
	 
</p>

<p>
	P.S. Писал гайдик по памяти, сильно не бейте. Если что, будем корректировать <span class="ipsEmoji">?</span>
</p>
]]></description><guid isPermaLink="false">9362</guid><pubDate>Tue, 09 Jun 2020 10:12:57 +0000</pubDate></item><item><title>&#x417;&#x430;&#x449;&#x438;&#x442;&#x430; &#x43E;&#x442; &#x437;&#x43E;&#x43C;&#x431;&#x438; (&#x43D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; Armband Protection (RELIFE))</title><link>https://s-platoon.magicbyte.org/topic/15554-zaschita-ot-zombi-na-osnove-armband-protection-relife/</link><description><![CDATA[
<p>
	<span style="color:#2ecc71;"><strong>Привет</strong></span><span style="color:#ffffff;">, думаю многим </span><span style="color:#2ecc71;"><strong>администраторам серверов</strong></span><span style="color:#ffffff;"> понадобится, этот <abbr title="Модификация">мод</abbr> позволяет </span><span style="color:#2ecc71;"><strong>ограничить "агр" зомби на людей с надетыми определенными шмотками</strong>.</span><br />
	 
</p>

<p>
	<span style="color:#ffffff;"><u>Т.к. автор модификации разрешает, перепаковку и изменение его <abbr title="Модификации">мода</abbr>, объясню вам как поменять повязку (дефолтное что отключает агр зомби) на </u></span><span style="color:#2ecc71;"><u><strong>условно админскую шмотку надетую на игрока</strong></u></span><span style="color:#ffffff;"><u>.</u></span><br />
	 
</p>

<p>
	<strong><span style="color:#ffffff;">Это делается очень </span><span style="color:#2ecc71;">просто</span><span style="color:#ffffff;">:</span></strong>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<span style="color:#ffffff;">Первым делом идём и скачиваем <abbr title="Модификация">мод</abbr> по ссылке (</span><strong><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=2871588037" rel="external nofollow"><span style="color:#ffffff;">ТЫК</span></a></strong><span style="color:#ffffff;">)<br />
			Разархивируем PBO и получаем</span><br /><img alt="image.png.b26da23484c0511c57e174f919b8416c.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16836" data-ratio="63.74" style="height:auto;" width="171" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2024_03/image.png.b26da23484c0511c57e174f919b8416c.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png" /><br /><br /><span style="color:#ffffff;">Начнём с изменения </span><span style="color:#2ecc71;">PlayerBase.c</span><span style="color:#ffffff;"> <em>(Config.c изменять не обязательно, подробнее ниже)</em></span>
		</p>

		<div class="ipsSpoiler" data-ipsspoiler="">
			<div class="ipsSpoiler_header">
				<span>Скрытый текст</span>
			</div>

			<div class="ipsSpoiler_contents">
				<p>
					<img alt="image.png.da02b3c83d1e2b4dd5191c5195505e12.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16837" data-ratio="23.99" style="width:667px;height:160px;" width="667" data-src="https://s-platoon.magicbyte.org/uploads/monthly_2024_03/image.png.da02b3c83d1e2b4dd5191c5195505e12.png" src="https://s-platoon.magicbyte.org/applications/core/interface/js/spacer.png" /><br /><span style="color:#ffffff;">к примеру нам необходимо изменить с повязки на "админску майку" <em>(условно </em></span><span style="color:#2ecc71;"><em><strong>classname </strong></em></span><span style="color:#ffffff;"><em>этой майки будет </em></span><span style="color:#2ecc71;"><em><strong>DZ_Admin </strong></em></span><span style="color:#ffffff;"><em>и надевается она соответственно на тело </em></span><span style="color:#2ecc71;"><em><strong>"Body"</strong></em></span><span style="color:#ffffff;"><em>)</em><br />
					Вместо:</span><br /><span style="color:#2ecc71;">EntityAI armband = FindAttachmentBySlotName("Armband");</span><br /><span style="color:#ffffff;">Вставляем:</span><br /><span style="color:#2ecc71;">EntityAI armband = FindAttachmentBySlotName("Body");</span><br /><br /><span style="color:#ffffff;">Тем самым мы изменили с слота </span><span style="color:#2ecc71;">"повязки"</span><span style="color:#ffffff;"> на слот </span><span style="color:#2ecc71;">"тело"</span><br /><span style="color:#ffffff;">Далее чтобы сразу наше творение после компиляции и установки на сервер работало можете изменить:</span><br /><span style="color:#2ecc71;">Config.c</span>
				</p>

				<div class="ipsSpoiler" data-ipsspoiler="">
					<div class="ipsSpoiler_header">
						<span>Скрытый текст</span>
					</div>

					<div class="ipsSpoiler_contents">
						<p>
							<span style="color:#ffffff;">Найдете там:</span><br /><span style="color:#2ecc71;">HiddenClothes.Insert(new HiddenCloth("Armband_Green"));</span><br /><span style="color:#ffffff;">и замените на нашу "админ майку"</span><br /><span style="color:#2ecc71;">HiddenClothes.Insert(new HiddenCloth("DZ_Admin"));</span>
						</p>
					</div>
				</div>

				<p>
					<br /><span style="color:#ffffff;">Пакуем через </span><span style="color:#2ecc71;"><strong>addon builder / pboproject</strong></span><span style="color:#ffffff;"> <em>(можете подписать своим ключом)</em><br />
					Закидываем как </span><span style="color:#2ecc71;"><strong>серверный <abbr title="Модификация">мод</abbr></strong></span><span style="color:#ffffff;"> на ваш сервер <em>(не забываем подключить при запуске)</em>.<br /><br />
					Если не меняли </span><span style="color:#2ecc71;"><strong>Config.c</strong></span>
				</p>

				<div class="ipsSpoiler" data-ipsspoiler="">
					<div class="ipsSpoiler_header">
						<span>Скрытый текст</span>
					</div>

					<div class="ipsSpoiler_contents">
						<p>
							<span style="color:#ffffff;">После запуска сервера, дожидаемся полной загрузки, выключаем его<br />
							Заходим в </span><span style="color:#2ecc71;"><strong>profiles</strong></span><span style="color:#ffffff;">, папку </span><span style="color:#2ecc71;"><strong>relife </strong></span><span style="color:#ffffff;">и там находим </span><span style="color:#2ecc71;"><strong>_HiddenSlots.json</strong></span><br /><span style="color:#ffffff;">открываем и заменяем </span><span style="color:#2ecc71;"><strong>"Armband_Green"</strong></span><span style="color:#ffffff;"> на </span><span style="color:#2ecc71;"><strong>"DZ_Admin"</strong></span><span style="color:#ffffff;"> <em>(ваш classname "админ майки")</em></span><br /><span style="color:#2ecc71;"><strong>Вот и всё, зомби вас трогать не будут.</strong></span>
						</p>
					</div>
				</div>

				<p>
					 
				</p>
			</div>
		</div>

		<p>
			<br />
			 
		</p>

		<div class="ipsSpoiler" data-ipsspoiler="">
			<div class="ipsSpoiler_header">
				<span>Скрытый текст</span>
			</div>

			<div class="ipsSpoiler_contents">
				<p>
					<span style="color:#ffffff;"><strong>Приятного использования!</strong><br />
					За помощью можете обратиться в мой discord: </span><strong><a href="https://discord.gg/xt2GGzfFY7" rel="external nofollow"><span style="color:#ffffff;">https://discord.gg/xt2GGzfFY7</span></a></strong>
				</p>
			</div>
		</div>

		<p>
			 
		</p>
	</div>
</div>

<p>
	 
</p>
]]></description><guid isPermaLink="false">15554</guid><pubDate>Fri, 15 Mar 2024 05:45:57 +0000</pubDate></item><item><title>&#x425;&#x438;&#x43C;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x430;&#x44F; &#x433;&#x440;&#x435;&#x43B;&#x43A;&#x430;</title><link>https://s-platoon.magicbyte.org/topic/15551-himicheskaya-grelka/</link><description><![CDATA[
<p>
	<span style="color:#27ae60;"><strong>Привет</strong>, делюсь скриптом со своего сервера который позволяет <u>убрать отрицательную температуру если у вас в руках находится активированная <strong>Химическая грелка</strong></u>.</span>
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#27ae60;">Код <abbr title="Сценарий, выполняемый системой">скрипта</abbr>:</span></strong>
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="pln">modded </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Environment</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	override </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">BodyPartHeatProperties</span><span class="pun">(</span><span class="typ">array</span><span class="str">&lt;int&gt;</span><span class="pln"> pBodyPartIds</span><span class="pun">,</span><span class="pln"> </span><span class="typ">float</span><span class="pln"> pCoef</span><span class="pun">,</span><span class="pln"> out </span><span class="typ">float</span><span class="pln"> pHeatComfort</span><span class="pun">,</span><span class="pln"> out </span><span class="typ">float</span><span class="pln"> pHeat</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">m_Player</span><span class="pun">.</span><span class="typ">GetItemInHands</span><span class="pun">())</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			</span><span class="typ">Heatpack</span><span class="pln"> heatpack </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Heatpack</span><span class="pun">.</span><span class="typ">Cast</span><span class="pun">(</span><span class="pln">m_Player</span><span class="pun">.</span><span class="typ">GetItemInHands</span><span class="pun">());</span><span class="pln">
			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">heatpack </span><span class="pun">&amp;&amp;</span><span class="pln"> heatpack</span><span class="pun">.</span><span class="typ">IsAlive</span><span class="pun">())</span><span class="pln">
			</span><span class="pun">{</span><span class="pln">
				</span><span class="typ">float</span><span class="pln"> temp </span><span class="pun">=</span><span class="pln"> heatpack</span><span class="pun">.</span><span class="typ">GetTemperature</span><span class="pun">();</span><span class="pln">
				pHeat </span><span class="pun">+=</span><span class="pln"> temp </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
			</span><span class="pun">}</span><span class="pln">
			pHeatComfort </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">pHeatComfort </span><span class="pun">/</span><span class="pln"> pBodyPartIds</span><span class="pun">.</span><span class="typ">Count</span><span class="pun">())</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> pCoef</span><span class="pun">;</span><span class="pln">
			pHeat </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">pHeat </span><span class="pun">/</span><span class="pln"> pBodyPartIds</span><span class="pun">.</span><span class="typ">Count</span><span class="pun">())</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> pCoef</span><span class="pun">;</span><span class="pln">	
		</span><span class="pun">}</span><span class="pln">
		</span><span class="kwd">else</span><span class="pln">
			super</span><span class="pun">.</span><span class="typ">BodyPartHeatProperties</span><span class="pun">(</span><span class="pln">pBodyPartIds</span><span class="pun">,</span><span class="pln"> pCoef</span><span class="pun">,</span><span class="pln"> pHeatComfort</span><span class="pun">,</span><span class="pln"> pHeat</span><span class="pun">);</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
</span><span class="pun">};</span></pre>

<p>
	<span style="color:#27ae60;">Закиньте в свой <strong>клиентский</strong> <abbr title="Модификация">мод</abbr>.</span><br /><strong><span style="color:#ffffff;">Удачи! </span></strong>
</p>
]]></description><guid isPermaLink="false">15551</guid><pubDate>Thu, 14 Mar 2024 12:13:57 +0000</pubDate></item><item><title>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x435; &#x43C;&#x443;&#x437;&#x44B;&#x43A;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x430;</title><link>https://s-platoon.magicbyte.org/topic/15090-sozdanie-muzykalnogo-obekta/</link><description><![CDATA[
<p>
	Приветствую всех читателей, столкнулся с такой проблемой, а точнее нуждой.<br />
	Нуждаюсь в помощи, или того, кто может сделать это за меня, объясняю что нужно, 
</p>

<p>
	Создать объект (статический) который будет зациклино производить одну и туже музыку.<br />
	Если есть добродеятели, то буду рад научиться. Или же, буду готов заплатить за работу<br />
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">15090</guid><pubDate>Wed, 15 Nov 2023 21:21:13 +0000</pubDate></item></channel></rss>
