<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>STALKER-End - портал грандиозных модов по игре Сталкер</title>
		<link>https://stalker-end.ucoz.com/</link>
		<description>Форум фанатов игры S.T.A.L.K.E.R.</description>
		<lastBuildDate>Fri, 11 Nov 2011 18:04:30 GMT</lastBuildDate>
		<generator>uCoz Web-Service</generator>
		<atom:link href="https://stalker-end.ucoz.com/forum/rss" rel="self" type="application/rss+xml" />
		
		<item>
			<title>Бл0кнот</title>
			<link>https://stalker-end.ucoz.com/forum/86-541-1</link>
			<pubDate>Fri, 11 Nov 2011 18:04:30 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://stalker-end.ucoz.com/forum/86&quot;&gt;Статьи (уроки) по моддингу&lt;/a&gt;&lt;br /&gt;Автор темы: 4o_kavo&lt;br /&gt;Автор последнего сообщения: leiytinant&lt;br /&gt;Количество ответов: 3</description>
			<content:encoded>Я научу как пользовоться блокнотом в Сталкере начнём 1-ое откройте папку gamedata потом config(здесь находяться конфигурации практически всего) &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerY6aSvt&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerY6aSvt&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerY6aSvt&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerY6aSvt&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerY6aSvt&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoilerY6aSvt&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerY6aSvt&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerY6aSvt&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoilerY6aSvt&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;span style=&quot;color:red&quot;&gt;Урок 1-й&lt;/span&gt; &lt;br /&gt; Добовление Бармену больше оружий и всего остального &lt;br /&gt; Открываем конфигурации и находим папку misc здесь находятся все торговцы которые есть в игре дальше открываем shop_barman и открываем через блакнот barman_supl. Дальше находим строчки Амуниция, оружие, броники. Выбераем оружие, начинаем новую строчку я хочу добавить рпг я пишу (wpn_rpg7 = 10, 2) Буквы wpn_ обязательны =10 и 2 Это как часто попадается оружие а 10 это количество всё так можно добавлять всё что бы не путаться в названиях откройте в новом окне папку weapons там всё есть&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoiler3g73aC&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoiler3g73aC&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3g73aC&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3g73aC&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler3g73aC&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoiler3g73aC&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3g73aC&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler3g73aC&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoiler3g73aC&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;span style=&quot;color:red&quot;&gt;2-ой урок&lt;/span&gt; &lt;br /&gt; редактируем Меченого &lt;br /&gt; &lt;span style=&quot;color:orange&quot;&gt;1-я часть бесмертие&lt;/span&gt; &lt;br /&gt; Открываем конфигурации а потом открываем папку creatures и открываем конфигурацию actor и находим такие строки &lt;br /&gt;&lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;;коэффициенты иммунитета&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; strike_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; shock_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; wound_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; radiation_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; telepatic_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; chemical_burn_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; explosion_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; fire_wound_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt; &amp;#91;actor_immunities_gd_stalker]&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; burn_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;коэффициенты иммунитета&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; strike_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; shock_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; wound_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; radiation_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; telepatic_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; chemical_burn_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; explosion_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; fire_wound_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt; &amp;#91;actor_immunities_gd_veteran]&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; burn_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;коэффициенты иммунитета&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; strike_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; shock_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; wound_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; radiation_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; telepatic_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; chemical_burn_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; explosion_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; fire_wound_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt; &amp;#91;actor_immunities_gd_master]&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; burn_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;коэффициенты иммунитета&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; strike_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; shock_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; wound_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; radiation_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; telepatic_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; chemical_burn_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; explosion_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; fire_wound_immunity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt;&lt;br /&gt; ставим все нули как тут и всё а что бы сделать бессмертие от радиации находим такую строчку &lt;br /&gt;&lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;;скорость уменьшения радиации&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; radiation_v&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 99990.0001&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerd3t2K9&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerd3t2K9&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerd3t2K9&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerd3t2K9&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerd3t2K9&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoilerd3t2K9&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerd3t2K9&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerd3t2K9&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoilerd3t2K9&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;Высота прыжка меченого открываем actor находим строчки &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;jump_speed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 40&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; 40 метров хватит можно ставить больше&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoiler6zbqDx&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoiler6zbqDx&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler6zbqDx&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler6zbqDx&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler6zbqDx&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoiler6zbqDx&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler6zbqDx&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler6zbqDx&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoiler6zbqDx&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;span style=&quot;color:red&quot;&gt;3-Й УРОК&lt;/span&gt; &lt;br /&gt; редактирование оружия &lt;br /&gt; Открывам папку weapons здесь находяться все оружия. Я буду редоктировать пм &lt;br /&gt; находим строчку cost	= 280 это цена можете ставить любое число &lt;br /&gt;&lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;cam_relax_speed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 8;1.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;скорость возврата в исходное положение&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; cam_dispersion&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;увеличения угла (в градусах&amp;#41; с каждым выстрелом&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; cam_dispersion_inc&amp;nbsp;&amp;nbsp;= 0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;увеличениe cam_dispersion с каждым выстрелом&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; cam_dispertion_frac&amp;nbsp;&amp;nbsp;= 1.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;ствол будет подыматься на cam_dispersion*cam_dispertion_frac +- cam_dispersion*(1-cam_dispertion_frac&amp;#41;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; cam_max_angle&amp;nbsp;&amp;nbsp;&amp;nbsp;= 20.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;максимальный угол отдачи&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; cam_max_angle_horz&amp;nbsp;&amp;nbsp;= 5.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;(degree&amp;#41; maximum shot horizontal degree&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; cam_step_angle_horz&amp;nbsp;&amp;nbsp;= 1.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;(degree&amp;#41; size of step camera moved in horizontal position while shooting&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt;&lt;br /&gt; в этих строчках можно экмперементировать &lt;br /&gt;&lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Code&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;fire_dispersion_condition_factor= 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;увеличение дисперсии в процентах при максимальном износе&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; misfire_probability&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;вероятность осечки при максимальном износе&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; misfire_condition_k&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.05&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; condition_shot_dec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0.0009 ;увеличение износа при каждом выстреле&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerllKhZK&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerllKhZK&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerllKhZK&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerllKhZK&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerllKhZK&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoilerllKhZK&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerllKhZK&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerllKhZK&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoilerllKhZK&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;misfire_probability = 0.003	;вероятность осечки при максимальном износе &lt;br /&gt; в этой строчке ставим вот так &lt;br /&gt; misfire_probability = 0.00 ;вероятность осечки при максимальном износе &lt;br /&gt;&lt;br /&gt; а в этой так &lt;br /&gt; condition_shot_dec = 0.00 ;увеличение износа при каждом выстреле &lt;br /&gt;&lt;br /&gt; ammo_elapsed	 = 800 это кол-во патронов в обойме &lt;br /&gt; ammo_mag_size	 = 800	здесь тоже надо поменять &lt;br /&gt; hit_power = 99999 мощность оружия &lt;br /&gt;&lt;br /&gt; scope_zoom_factor	= 10 сколко приближает чем меньше число тем больше приближает &lt;br /&gt; zoom_rotate_x	 = -0.018 смещение прицела в лева &lt;br /&gt; zoom_rotate_y	 = 10.018 а это в права у меня стоит 10 в права гг оружие переместит в право&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Статьи (уроки) по моддингу</category>
			<dc:creator>4o_kavo</dc:creator>
			<guid>https://stalker-end.ucoz.com/forum/86-541-1</guid>
		</item>
		<item>
			<title>Обучение модостроению!</title>
			<link>https://stalker-end.ucoz.com/forum/86-624-1</link>
			<pubDate>Fri, 28 Oct 2011 17:47:56 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://stalker-end.ucoz.com/forum/86&quot;&gt;Статьи (уроки) по моддингу&lt;/a&gt;&lt;br /&gt;Автор темы: СеРЬIй&lt;br /&gt;Автор последнего сообщения: leiytinant&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>Кому нужено полное письменное подробное обочение по модостроение в ЛС.(Прошу если понравится благодарить в &lt;span style=&quot;color:green&quot;&gt;РЕПУ&lt;/span&gt;)</content:encoded>
			<category>Статьи (уроки) по моддингу</category>
			<dc:creator>СеРЬIй</dc:creator>
			<guid>https://stalker-end.ucoz.com/forum/86-624-1</guid>
		</item>
		<item>
			<title>FAQ по моддингу сталкер</title>
			<link>https://stalker-end.ucoz.com/forum/86-564-1</link>
			<pubDate>Tue, 27 Sep 2011 09:46:41 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://stalker-end.ucoz.com/forum/86&quot;&gt;Статьи (уроки) по моддингу&lt;/a&gt;&lt;br /&gt;Автор темы: 4o_kavo&lt;br /&gt;Автор последнего сообщения: 4o_kavo&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>&lt;img src=&quot;http://savepic.net/680178.gif&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerPjZaAs&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerPjZaAs&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerPjZaAs&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerPjZaAs&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerPjZaAs&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Как убрать-увеличить время для обычных квестов?&apos;);$(&apos;#uSpoilerPjZaAs&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerPjZaAs&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerPjZaAs&apos;)).val(&apos;[+] Как убрать-увеличить время для обычных квестов?&apos;);$(&apos;#uSpoilerPjZaAs&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Как убрать-увеличить время для обычных квестов?&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;В файле gamedata&amp;#92;config&amp;#92;misc &amp;#92;task_manager.ltx найти и изменить все строки вида time = 86400 &lt;br /&gt; Чтобы совсем убрать лимит - просто закомментировать их (--)&lt;!--/ust--&gt;&lt;!--usn(=Как убрать-увеличить время для обычных квестов?)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Статьи (уроки) по моддингу</category>
			<dc:creator>4o_kavo</dc:creator>
			<guid>https://stalker-end.ucoz.com/forum/86-564-1</guid>
		</item>
		<item>
			<title>Создание проводников в ЗП</title>
			<link>https://stalker-end.ucoz.com/forum/86-563-1</link>
			<pubDate>Tue, 27 Sep 2011 09:44:04 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://stalker-end.ucoz.com/forum/86&quot;&gt;Статьи (уроки) по моддингу&lt;/a&gt;&lt;br /&gt;Автор темы: 4o_kavo&lt;br /&gt;Автор последнего сообщения: 4o_kavo&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>Акт первый, основной ;-) &lt;br /&gt; Строго следуя рекомендациям БАТИ-STALKER`a создаем переход на нашу локацию(http://stalkerin.gameru.net/wiki/index.php/Подключение_локаций_к_ЧН_и_ЗП_с_помощью_программы_от_AMK_Team). Дальше идут цитаты (немного подправленные) из многим известного туториала вышеуказанного модмейкера ;-) &lt;br /&gt;&lt;br /&gt; Цитата: Соединение с остальными уровнями. &lt;br /&gt;&lt;br /&gt; Предлагаю вам не терять зря времени, просто бегая по подключенной локации, а замерить координаты для создания перехода. Координаты будем снимать на 2-х локациях: на той с которой будем переходить и на той на которую вы хотите сделать переход соответственно. На каждой локации нам нужно снять по одной координате(координата местоположения самого перехода на первой локации и координата места в которое будет бросать при переходе на подключенную локацию). Как снять координаты, я думаю все знают, поэтому объяснять здесь не буду. (в комплект с данным уроком я поместил архив koord.rar со скриптом для снятия координат, это для тех кому лень искать). &lt;br /&gt;&lt;br /&gt; Мы отмерили все необходимые нам координаты. &lt;br /&gt;&lt;br /&gt; Затем распаковываем сделанный нами ранее all.spawn. Теперь в нужных нам локациях, в alife_ файлах (для данного примера файл alife_zaton.ltx) добавляем следующую секцию спавна: (примечание от Freezer: в приведенном ниже коде имена и стартовые координаты указаны для уровня Затон, сам переход расположен левой верхней области карты уровня справа от дорожки, а конечные координаты для подключенного уровня Янтарь, ГГ появляется в бункере у Сахарова) &lt;br /&gt;&lt;br /&gt; [1] &lt;br /&gt; ; cse_abstract properties &lt;br /&gt; section_name = level_changer &lt;br /&gt; name = yan_actor_arrive_walk- уникальное имя &lt;br /&gt; position = -278.19274902344,12.461790084839,621.68505859375 - координаты перехода &lt;br /&gt; direction = 0,0,0 &lt;br /&gt; cse_abstract__unk1_h16 = 0x1 &lt;br /&gt; ; cse_alife_object properties &lt;br /&gt; game_vertex_id = 33 – геймвертексы перехода &lt;br /&gt; distance = 0 &lt;br /&gt; level_vertex_id = 389502 – левелвертексы перехода &lt;br /&gt; object_flags = 0xffffff3e &lt;br /&gt; ; cse_shape properties &lt;br /&gt; shapes = shape0 &lt;br /&gt; shape0:type = box &lt;br /&gt; shape0:axis_x = 1.25219917297363,0,0 &lt;br /&gt; shape0:axis_y = 0,3.09340000152588,0 &lt;br /&gt; shape0:axis_z = 0,0,1.25219917297363 &lt;br /&gt; shape0:offset = 0,0,0 &lt;br /&gt; ; cse_alife_space_restrictor properties &lt;br /&gt; restrictor_type = 3 &lt;br /&gt; ; cse_alife_level_changer properties &lt;br /&gt; dest_game_vertex_id = 934 – геймвертексы локи на которую ведет переход &lt;br /&gt; dest_level_vertex_id = 73102 - левелвертексы локи на которую ведет переход &lt;br /&gt; dest_position = 28.876106262207,-11.706871032715,-277.9711303710 - позиция куда кидает &lt;br /&gt; dest_direction = 0,0,0 - поворот гг &lt;br /&gt; dest_level_name = l07_yantar - на какую локу кидает &lt;br /&gt; dest_graph_point = start_actor_01 &lt;br /&gt; silent_mode = 1 &lt;br /&gt; ; se_level_changer properties &lt;br /&gt;&lt;br /&gt; Изменяем только те места, которые я прокомментировал, комментарии соответственно, удаляем. Конец цитаты: Итак сам переход мы создали можно собрать all.spawn и проверить работоспособность перехода. Перейдем к следующему этапу. &lt;br /&gt;&lt;br /&gt; [править] &lt;br /&gt; Акт второй, Гламурный ;-) &lt;br /&gt;&lt;br /&gt; Переход то мы собрали, вот только он невидимый, поэтому добавим гламура и поставим на место перехода всем известную аномалию «Пространственный Пузырь» aka шарик-телепортатор. Снова открываем alife_zaton.ltx (ибо переход мы разместили на нем), и добавляем следующую секцию: &lt;br /&gt;&lt;br /&gt; [2] &lt;br /&gt; ; cse_abstract properties &lt;br /&gt; section_name = space_restrictor &lt;br /&gt; name = zat_teleport_sphere_to_yan – уникальное имя секции &lt;br /&gt; position = -278.19274902344,12.461790084839,621.68505859375 – координаты шарика (они точно соответствуют координатам созданного нами ранее перехода) &lt;br /&gt; direction = 0,0,0 &lt;br /&gt;&lt;br /&gt; ; cse_alife_object properties &lt;br /&gt; game_vertex_id = 33 –геймвертекс шарика (соответствует геймвертексу перехода) &lt;br /&gt; distance = 0 &lt;br /&gt; level_vertex_id = 389502 –левелвертекс шарика (соответствует левелвертексу перехода) &lt;br /&gt; object_flags = 0xffffff3e &lt;br /&gt; custom_data = &lt; &lt;br /&gt; [logic] &lt;br /&gt; cfg = scripts&amp;#92;zaton&amp;#92;zat_teleport_sphere.ltx – уникальное имя используемого скрипта &lt;br /&gt; END &lt;br /&gt;&lt;br /&gt; ; cse_shape properties &lt;br /&gt; shapes = shape0 &lt;br /&gt; shape0:type = sphere &lt;br /&gt; shape0:offset = 0,0,0 &lt;br /&gt; shape0:radius = 1.40499997138977 &lt;br /&gt;&lt;br /&gt; ; cse_alife_space_restrictor properties &lt;br /&gt; restrictor_type = 3 &lt;br /&gt;&lt;br /&gt; Сохраняем файл (если юзали контрол+цэ контрол+вэ незабываем удалить комменты). &lt;br /&gt;&lt;br /&gt; Открываем way_zaton.ltx в него добавляем следующую секцию: &lt;br /&gt;&lt;br /&gt; [zat_teleport_sphere_to_yan] &lt;br /&gt; points = p0 &lt;br /&gt; p0:name = wp00 &lt;br /&gt; p0:flags = 0x1 &lt;br /&gt; p0:position = -278.19274902344,12.461790084839,621.68505859375 &lt;br /&gt; p0:game_vertex_id = 33 &lt;br /&gt; p0:level_vertex_id = 389502 &lt;br /&gt;&lt;br /&gt; Думаю, что комменты по координатам не нужны. Обратите внимание на имя секции, оно соответствует уникальному имени в alife файле. Все, пока с alife и way мы закончили, можно собрать all.spawn &lt;br /&gt;&lt;br /&gt; Далее необходимо создать скрипт для шарика, имя скрипта мы указали в alife файле. Итак, в папке с игрой в gamedata&amp;#92;configs&amp;#92;scripts&amp;#92;zaton создаем файл zat_teleport_sphere.ltx. В файле пишем: &lt;br /&gt;&lt;br /&gt; [logic] &lt;br /&gt; active = sr_particle@ zat_teleport_sphere_to_yan – имя активного партикла &lt;br /&gt;&lt;br /&gt; [sr_particle@ zat_teleport_sphere_to_yan] – собственно начало самого партикла &lt;br /&gt; name = anomaly2&amp;#92;anomaly_spatial_bubble_idle &lt;br /&gt; path = zat_teleport_sphere_to_yan – имя секции в way файле в которой описан шарик &lt;br /&gt; mode = 2 &lt;br /&gt; looped = true &lt;br /&gt;&lt;br /&gt; Сохраняем файл по указанному пути, вспоминаем что юзали cntrl+c, cntr+v, снова открываем файл и удаляем мои комменты ;-) &lt;br /&gt;&lt;br /&gt; Если все сделано правильно, то можно запустить игру и насладиться красивейшим явлением, аномалией «Пространственный Пузырь», расположенной в точке нашего перехода. &lt;br /&gt;&lt;br /&gt; [править] &lt;br /&gt; Акт третий, Ленивый &lt;br /&gt;&lt;br /&gt; Итак, переход создан, визуализирован и радует нас своей красотой и функциональностью, но думаю, что за время всех проверок вы уже изрядно стерли кнопки на клаве, бегая по зоне пешком туда-сюда, поэтому, как говорил один известный пендосовский миллионер: «Я так хорошо выгляжу потому, что я никогда на стоял если можно сидеть и никогда не сидел если можно лежать». Ну вот, запустили мы новую игру, давайте пробежим немного прямо. Кто это? Опа, нам на встречу идут пара неписей. Из беседы мы узнаем, что за энную сумму бабла они могут нас отвести хоть на край света, да вот досада эти два осла с автоматами ничерта не знают о нашей прекрасной аномалии «Пространственный Пузырь». За чем же встало дело? Давайте просветим невежд, и в будущем будем на законных основаниях пользоваться их услугами. Преступим. Для начала снова замерим координаты на местности куда нас приведут npc (я снял координаты на пару метров левее самой аномалии). Далее в файле alife_zaton.ltx добавим следующую секцию: &lt;br /&gt;&lt;br /&gt; [3] &lt;br /&gt; ; cse_abstract properties &lt;br /&gt; section_name = smart_terrain &lt;br /&gt; name = zat_b1000 – уникальное имя смарт террана на который нас приведут неписи &lt;br /&gt; position = -317.98794555664,19.28000831604,608.48858642578 –координаты конечной точки на которую нас приведут неписи &lt;br /&gt; direction = 0,0,0 &lt;br /&gt;&lt;br /&gt; ; cse_alife_object properties &lt;br /&gt; game_vertex_id = 212 &lt;br /&gt; distance = 0 &lt;br /&gt; level_vertex_id = 314120 &lt;br /&gt; object_flags = 0xffffff3e &lt;br /&gt; custom_data = &lt; &lt;br /&gt; [smart_terrain] &lt;br /&gt; cfg = scripts&amp;#92;zaton&amp;#92;smart&amp;#92;zat_b1000.ltx – уникальное имя используемого скрипта &lt;br /&gt; END &lt;br /&gt;&lt;br /&gt; ; cse_shape properties &lt;br /&gt; shapes = shape0 &lt;br /&gt; shape0:type = sphere &lt;br /&gt; shape0:offset = 0,0,0 &lt;br /&gt; shape0:radius = 2 &lt;br /&gt;&lt;br /&gt; ; cse_alife_space_restrictor properties &lt;br /&gt; restrictor_type = 3 &lt;br /&gt;&lt;br /&gt; ; se_smart_terrain properties &lt;br /&gt;&lt;br /&gt; Сохраняем файл &lt;br /&gt;&lt;br /&gt; Открываем way_zaton.ltx &lt;br /&gt; Добавляем следующие секции: &lt;br /&gt;&lt;br /&gt; В данной секции пишем координаты куда нас должны привести &lt;br /&gt; [zat_b1000_traveller_actor] &lt;br /&gt; points = p0 &lt;br /&gt; p0:name = wp00 &lt;br /&gt; p0:position = -317.98794555664,19.28000831604,608.48858642578 &lt;br /&gt; p0:game_vertex_id = 212 &lt;br /&gt; p0:level_vertex_id = 314120 &lt;br /&gt;&lt;br /&gt; Все секции, приведенные ниже это - вейпойнты для сопровождающих неписей, они нужны иначе никто никуда не идет, а все стоят и тупо гонят друг на друга, примерно так: &lt;br /&gt;&lt;br /&gt; ГГ: Я ж тебе сволочь денег дал, пошли!!! &lt;br /&gt;&lt;br /&gt; Непись: Да чет лениво мне как-то… ГГ: Тогда бабло верни!!!! Непись: Какое такое бабло? В это время движок уже отключил аи и управление, и как результат, ГГ кипит от злости за то, что его банально кинули на бабки, но даже в рожу неписю дать не может, а тот, скотина, стоит и ухмыляется. Вот такую картину я лицезрел пока не добавил нижеприведенные секции. Координаты в них я не менял, а секции банально скопировал из другого места, поэтому я иду к аномалии «Пространственный Пузырь», а сопровождающие неписи &quot;идут лесом&quot;, то есть к аномалии коготь (для желающих лицезреть проводников рядом с собой в конечной точке прибытия, небольшое домашнее задание по доработке координат в нижеприведенных секциях) &lt;br /&gt;&lt;br /&gt; [zat_b1000_traveller_squad] &lt;br /&gt; points = p0,p1 &lt;br /&gt; p0:name = wp00 &lt;br /&gt; p0:position = -24.9449501037598,1.29261004924774,-196.022598266602 &lt;br /&gt; p0:game_vertex_id = 56 &lt;br /&gt; p0:level_vertex_id = 895313 &lt;br /&gt; p0:links = p1(1) &lt;br /&gt;&lt;br /&gt; p1:name = wp01 &lt;br /&gt; p1:position = -26.4207763671875,1.04062795639038,-194.030059814453 &lt;br /&gt; p1:game_vertex_id = 56 &lt;br /&gt; p1:level_vertex_id = 892596 &lt;br /&gt;&lt;br /&gt; [zat_b1000_walker_1_look] &lt;br /&gt; points = p0 &lt;br /&gt; p0:name = wp00|a=sit_ass &lt;br /&gt; p0:flags = 0x1 &lt;br /&gt; p0:position = -35.1018524169922,0.350845992565155,-193.619186401367 &lt;br /&gt; p0:game_vertex_id = 56 &lt;br /&gt; p0:level_vertex_id = 876236 &lt;br /&gt;&lt;br /&gt; [zat_b1000_walker_1_walk] &lt;br /&gt; points = p0 &lt;br /&gt; p0:name = wp00 &lt;br /&gt; p0:flags = 0x1 &lt;br /&gt; p0:position = -33.450439453125,0.419611006975174,-192.414947509766 &lt;br /&gt; p0:game_vertex_id = 56 &lt;br /&gt; p0:level_vertex_id = 879043 &lt;br /&gt;&lt;br /&gt; [zat_b1000_walker_2_look] &lt;br /&gt; points = p0 &lt;br /&gt; p0:name = wp00|a=sit &lt;br /&gt; p0:flags = 0x1 &lt;br /&gt; p0:position = -35.8835983276367,0.317862987518311,-193.98469543457 &lt;br /&gt; p0:game_vertex_id = 56 &lt;br /&gt; p0:level_vertex_id = 874818 &lt;br /&gt;&lt;br /&gt; [zat_b1000_walker_2_walk] &lt;br /&gt; points = p0 &lt;br /&gt; p0:name = wp00 &lt;br /&gt; p0:flags = 0x1 &lt;br /&gt; p0:position = -35.9317092895508,0.310889005661011,-191.664642333984 &lt;br /&gt; p0:game_vertex_id = 56 &lt;br /&gt; p0:level_vertex_id = 874821 &lt;br /&gt;&lt;br /&gt; [zat_b1000_walker_3_look] &lt;br /&gt; points = p0 &lt;br /&gt; p0:name = wp00 &lt;br /&gt; p0:flags = 0x1 &lt;br /&gt; p0:position = -35.1221542358398,0.349720001220703,-193.500946044922 &lt;br /&gt; p0:game_vertex_id = 56 &lt;br /&gt; p0:level_vertex_id = 876237 &lt;br /&gt;&lt;br /&gt; [zat_b1000_walker_3_walk] &lt;br /&gt; points = p0 &lt;br /&gt; p0:name = wp00 &lt;br /&gt; p0:flags = 0x1 &lt;br /&gt; p0:position = -33.0930519104004,0.432388007640839,-191.15592956543 &lt;br /&gt; p0:game_vertex_id = 56 &lt;br /&gt; p0:level_vertex_id = 880435 &lt;br /&gt;&lt;br /&gt; Сохраняем файл. Можно собирать all.spawn. &lt;br /&gt;&lt;br /&gt; Теперь вспомним о том что мы упоминали некий уникальный скрипт, итак создадим его. В папке с игрой gamedata&amp;#92;configs&amp;#92;scripts&amp;#92;zaton&amp;#92;smart создадим файл zat_b1000.ltx В нем пишем: &lt;br /&gt;&lt;br /&gt; [smart_terrain] &lt;br /&gt; squad_id = 32 &lt;br /&gt; max_population = 1 &lt;br /&gt;&lt;br /&gt; [exclusive] &lt;br /&gt; ;please leave this for sim - stalkers only &lt;br /&gt; zat_b29_stalker_rival_leader = zaton&amp;#92;zat_b29_stalkers_rivals.ltx &lt;br /&gt; zat_b29_stalker_rival_2 = zaton&amp;#92;zat_b29_stalkers_rivals.ltx &lt;br /&gt; zat_b29_stalker_rival_3 = zaton&amp;#92;zat_b29_stalkers_rivals.ltx &lt;br /&gt;&lt;br /&gt; С содержимым файла разбираться времени не было, работает и ладно, оно тупо скопировано из другого подобного файла, так что вот вам еще одно домашнее задание: разберитесь для чего нужны последние 3 строки в этом файле. (да я лентяй ну и что ;-) прим. автора) &lt;br /&gt;&lt;br /&gt; Далее в папке с распакованной геймдатой gamedata&amp;#92;configs&amp;#92;text&amp;#92;rus находим файл st_land_names.xml и кладем его в папку с игрой путь gamedata&amp;#92;configs&amp;#92;text&amp;#92;rus. Открываем скопированный файл и добавляем в него следующую секцию: &lt;br /&gt;&lt;br /&gt; Пространственный Пузырь &lt;br /&gt;&lt;br /&gt; Сохраняем файл. &lt;br /&gt;&lt;br /&gt; Далее чешем в папку с распакованной геймдатой, там в gamedata&amp;#92;configs&amp;#92;misc&amp;#92; находим travel_manager.ltx и по аналогии с предыдущим файлом копируем его в папку с игрой. Открываем travel_manager.ltx Находим секции: «идентификатор st_&lt;комьюнити&gt;_zaton_smart_name_1» Пишем туда: &lt;br /&gt;&lt;br /&gt; zat_b1000 = st_stalker_zat_b1000 &lt;br /&gt;&lt;br /&gt; Далее ниже находим: &lt;br /&gt;&lt;br /&gt; [traveler] ; Перечень точек, куда проводники могут отвести за бабосы. &lt;br /&gt; zat_stalker_base_smart ; name смарта &lt;br /&gt;&lt;br /&gt; и пишем туда: &lt;br /&gt;&lt;br /&gt; zat_b1000 &lt;br /&gt;&lt;br /&gt; Ну и в конце: &lt;br /&gt;&lt;br /&gt; [zat_b1000] &lt;br /&gt; level = zaton &lt;br /&gt; name = st_zat_b1000_name &lt;br /&gt; condlist = true &lt;br /&gt;&lt;br /&gt; Все, сохраняем и запускаем игру!!!! &lt;br /&gt;&lt;br /&gt; [править] &lt;br /&gt; Авторы &lt;br /&gt;&lt;br /&gt; Ну вот, мы снова начали новую игру, давайте снова подойдем к известным нам ранее неписям и узнаем куда же они смогут нас отвести. О ЧУДО!!!! НЕПИСИ ЗНАЮТ О АНОМАЛИИ «Пространственный Пузырь»!!!! &lt;br /&gt;&lt;br /&gt; Прогуляемся? ;-) &lt;br /&gt;&lt;br /&gt; Конец третьего акта. Занавес. Бурные аплодисменты. Благодарности и цветы для: Freezer и БАТЯ-STALKER … &lt;br /&gt;&lt;br /&gt; Успехов вам в написании собственных «сказок»!!!! &lt;br /&gt;&lt;br /&gt; Авторы и ©: Александр Левашов aka Freezer при огромной поддержке БАТЯ-STALKER.</content:encoded>
			<category>Статьи (уроки) по моддингу</category>
			<dc:creator>4o_kavo</dc:creator>
			<guid>https://stalker-end.ucoz.com/forum/86-563-1</guid>
		</item>
		<item>
			<title>Создание достижения в ЗП</title>
			<link>https://stalker-end.ucoz.com/forum/86-562-1</link>
			<pubDate>Tue, 27 Sep 2011 09:43:17 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://stalker-end.ucoz.com/forum/86&quot;&gt;Статьи (уроки) по моддингу&lt;/a&gt;&lt;br /&gt;Автор темы: 4o_kavo&lt;br /&gt;Автор последнего сообщения: 4o_kavo&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>«Создание нового достижения в ЗП»-Автор: WillsherT &lt;br /&gt; Специально для сайта www.gsc-mod.ucoz.ru &lt;br /&gt; Для начала нужно распаковать игру анпакером. &lt;br /&gt; После распаковки идём в следующие директории и ищем следующие файлы: &lt;br /&gt; info_x.xml ---&gt; configs&amp;#92;gameplay&amp;#92; (где &quot;x&quot; название локации на которой хотим получить достижение например jupiter) этот файл нужен для просмотра списка квестов на локации, зачем нам это узнаете позже. &lt;br /&gt; achievements.ltx ---&gt; configs&amp;#92;misc&amp;#92; &lt;br /&gt; st_achievement.xml ---&gt; configs&amp;#92;text&amp;#92;rus&amp;#92; &lt;br /&gt; ui_actor_achivments.xml ---&gt; configs&amp;#92;ui&amp;#92;textures_descr&amp;#92; &lt;br /&gt; xr_statistic.script ---&gt; scripts&amp;#92; &lt;br /&gt; ui_actor_achivments.dds ---&gt; textures&amp;#92;ui&amp;#92; &lt;br /&gt; xr_conditions.script ---&gt; scripts&amp;#92; &lt;br /&gt; И так, приступаем к работе. &lt;br /&gt;&lt;br /&gt; Откроем файл achievements.ltx и ищем такую вот запись: &lt;br /&gt;&lt;br /&gt; [achievements] &lt;br /&gt; pioneer &lt;br /&gt; mutant_hunter &lt;br /&gt; detective &lt;br /&gt; one_of_the_lads &lt;br /&gt; kingpin &lt;br /&gt; herald_of_justice &lt;br /&gt; seeker &lt;br /&gt; battle_systems_master &lt;br /&gt; high_tech_master &lt;br /&gt; skilled_s talker &lt;br /&gt; leader &lt;br /&gt; diplomat &lt;br /&gt; research_man &lt;br /&gt; friend_of_duty &lt;br /&gt; friend_of_freedom &lt;br /&gt; balance_advocate &lt;br /&gt; wealthy &lt;br /&gt; keeper_of_secrets &lt;br /&gt; marked_by_zone &lt;br /&gt; inf ormation_dealer &lt;br /&gt; friend_of_stalkers &lt;br /&gt;&lt;br /&gt; Добавим в конце название_достижения_на_английском. Пример: &lt;br /&gt;&lt;br /&gt; [achievements] &lt;br /&gt; pioneer &lt;br /&gt; mutant_hunter &lt;br /&gt; detective &lt;br /&gt; one_of_the_lads &lt;br /&gt; kingpin &lt;br /&gt; herald_of_justice &lt;br /&gt; seeker &lt;br /&gt; battle_systems_master &lt;br /&gt; high_tech_master &lt;br /&gt; skilled_s talker &lt;br /&gt; leader &lt;br /&gt; diplomat &lt;br /&gt; research_man &lt;br /&gt; friend_of_duty &lt;br /&gt; friend_of_freedom &lt;br /&gt; balance_advocate &lt;br /&gt; wealthy &lt;br /&gt; keeper_of_secrets &lt;br /&gt; marked_by_zone &lt;br /&gt; inf ormation_dealer &lt;br /&gt; friend_of_stalkers &lt;br /&gt; all_stalkers_your_friend &lt;br /&gt;&lt;br /&gt; Идём в конец файла и добавляем следующее: &lt;br /&gt;&lt;br /&gt; [&quot;Название_достижения_на_английском_без_кавычек&quot;] &lt;br /&gt; icon = ui_inGame2_имя_иконки_на_английском &lt;br /&gt; hint = st_sp_achievement_22_hint &lt;--- То, что будет выводиться в КПК при наведении на иконку достижения (надо оставлять так же меняя только числа, чтоб они шли по порядку) &lt;br /&gt; name = st_sp_achievement_22_name &lt;--- Имя достижения &lt;br /&gt; desc = st_sp_achievement_22_descr &lt;--- Описание достижения &lt;br /&gt; functor = xr_statistic.название_достижения_на_английском_functor &lt;--- функция для получения нашего достижения &lt;br /&gt;&lt;br /&gt; закрываем сохраняя изменения в файле &lt;br /&gt;&lt;br /&gt; Далее откроем файл st_achievement.xml и добавим между: &lt;br /&gt;&lt;br /&gt; Друг сталкеров &lt;br /&gt;&lt;br /&gt; и &lt;br /&gt;&lt;br /&gt; Совокупность новых данных позволила профессорам Герману и Озёрскому синтезировать в условиях Зоны экспериментальный анабиотик. &lt;br /&gt;&lt;br /&gt; Следующее: &lt;br /&gt;&lt;br /&gt; Ваш текст который будет высвечиваться в КПК при наведении мышки на иконку достижения. &lt;br /&gt;&lt;br /&gt; Полное описание достижения. &lt;br /&gt;&lt;br /&gt; Имя достижения &lt;br /&gt;&lt;br /&gt; Закрываем с подтверждением на сохранение изменений &lt;br /&gt;&lt;br /&gt; Открываем xr_statistic.script идём в самый конец и добавляем следующее: &lt;br /&gt; function название_вашей_функции() &lt;br /&gt; if not has_alife_info(&quot;пишем_что_хотим_на_английсокм&quot;) then &lt;--- проверка на раннее получение этого достижения &lt;br /&gt; if has_alife_info(&quot;название_квеста_или_действия&quot;) &lt;--- квест или действие после которого будет получено достижение &lt;br /&gt; and has_alife_info(&quot;название_квеста_или_действия&quot;) &lt;--- эта функция если квестов несколько &lt;br /&gt; db.actor:give_info_portion(&quot;пишем_что_писали_в_проверке_на_получение_ранее_достижения&quot;) &lt;br /&gt; news_manager.send_tip(db.actor, &quot;st_ach_название_вашего_достижения_на_английском&quot;, nil, &quot;название_вашего_достижения_на_английском&quot;, nil, nil) &lt;br /&gt; xr_effects.inc_faction_goodwill_to_actor(db.actor, nil, {&quot;stalker&quot;, 100}) &lt;--- прибавление репутации сталкеров при получении данного достижения (если - то убавление), можно вписать любую другую группировку (использовать несколько команд если хотите прибавить или убавить репутацию у нескольких группировок) &lt;br /&gt; end &lt;br /&gt; end &lt;br /&gt; return has_alife_info(&quot;пишем_что_писали_в_проверке_на_получение_ранее_достижения&quot;) &lt;br /&gt; end &lt;br /&gt;&lt;br /&gt; Закрываем с подтверждением на сохранение изменений. &lt;br /&gt;&lt;br /&gt; Откроем xr_conditions.script найдём: &lt;br /&gt;&lt;br /&gt; friend_of_stalkers_functor = xr_statistic.friend_of_stalkers_functor &lt;br /&gt;&lt;br /&gt; и после пишем: &lt;br /&gt;&lt;br /&gt; название_вашей_функции = xr_statistic.название_вашей_функции &lt;br /&gt;&lt;br /&gt; Закрываем с подтверждением на сохранение изменений. &lt;br /&gt;&lt;br /&gt; Рисуем в ui_actor_achivments.dds иконку для нашего достижения (можно взять и старую). &lt;br /&gt;&lt;br /&gt; Открываем файл ui_actor_achivments.xml и добавляем там: &lt;br /&gt;&lt;br /&gt; Если рисовали собственную иконку то вписываем её координаты (по x и y осям), если решили взять уже имеющуюся то вписывайте её координаты (координаты определяются по левому верхнему углу иконки достижения) координаты можно посмотреть через WTV (Windows Texture Viewer) Удачной игры &lt;br /&gt;&lt;br /&gt; Автор: WillsherT &lt;br /&gt; Вопросы и ответы: &lt;br /&gt; Вопрос: &lt;br /&gt; координаты можно посмотреть через WTV &lt;br /&gt; Как это? &lt;br /&gt; Ответ: &lt;br /&gt; Очень просто: &lt;br /&gt; открываешь им текстуру и когда водишь по ней мышкой в верху окошка (там где кнопки: закрыть,свернуть ну и т.д.) будет такой параметр pos: это и есть координаты по x и y (соответственно первая цифра x, вторая y) &lt;br /&gt; Вопрос: &lt;br /&gt; Не знаешь где можно найти список этих команд и что они означают? &lt;br /&gt; (В файле xr_statistic.script) &lt;br /&gt; Ответ: &lt;br /&gt; Собственно списка команд у нас нет( &lt;br /&gt; Достаточно написать, что-нибудь логическое например: достижение не выдавалось.</content:encoded>
			<category>Статьи (уроки) по моддингу</category>
			<dc:creator>4o_kavo</dc:creator>
			<guid>https://stalker-end.ucoz.com/forum/86-562-1</guid>
		</item>
		<item>
			<title>Добавление Режима Freeplay в игру (Тень Чернобыля)</title>
			<link>https://stalker-end.ucoz.com/forum/86-561-1</link>
			<pubDate>Tue, 27 Sep 2011 09:42:54 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://stalker-end.ucoz.com/forum/86&quot;&gt;Статьи (уроки) по моддингу&lt;/a&gt;&lt;br /&gt;Автор темы: 4o_kavo&lt;br /&gt;Автор последнего сообщения: 4o_kavo&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>Делается это так: в файле gamedata/script/xr_effects.script ищем строку :function after_credits(actor, npc) и ниже находим вот что c:execute(&quot;disconnect&quot;) Меняем &quot;disconnect&quot; например на hud_crosshair 1 и все вместо того чтобы после концовок (похоже даже фальшивых) будет возможно продолжить игру... Теперь добавляйте точки перехода (например на Припять) и все freeplay работает.</content:encoded>
			<category>Статьи (уроки) по моддингу</category>
			<dc:creator>4o_kavo</dc:creator>
			<guid>https://stalker-end.ucoz.com/forum/86-561-1</guid>
		</item>
		<item>
			<title>Настройка логики (Часть 3)</title>
			<link>https://stalker-end.ucoz.com/forum/86-560-1</link>
			<pubDate>Tue, 27 Sep 2011 09:42:23 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://stalker-end.ucoz.com/forum/86&quot;&gt;Статьи (уроки) по моддингу&lt;/a&gt;&lt;br /&gt;Автор темы: 4o_kavo&lt;br /&gt;Автор последнего сообщения: 4o_kavo&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>НАСТРОЙКА ЛОГИКИ &lt;br /&gt; Часть 3 &lt;br /&gt;&lt;br /&gt; 3.8.1. Синтаксис скрипта Logic &lt;br /&gt; Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt; [logic] active = walker1 &lt;br /&gt; [walker1] path_walk = walk1 path_look = look1 on_actor_dist_le = 5 | walker2 &lt;br /&gt; [walker2] path_walk = walk2 path_look = look2 &lt;br /&gt; Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &quot;эффекты&quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt; Пример: &lt;br /&gt; on_actor_dist_le = 5 | {условие} walker2 %эффекты% &lt;br /&gt; Условия могут быть следующими: &lt;br /&gt; +infoportion - требуется присутствие infoportion у actor -infoportion - требуется отсутствие infoportion у actor =func - требуется, чтобы func вернула true !func - требуется, чтобы func вернулся false &lt;br /&gt; Эффекты могут быть следующими: &lt;br /&gt; +infoportion - в случае включения секции у actor будет установлен infoportion -infoportion - в случае включения секции у actor будет убран infoportion =func - в случае включения секции стартует функция func &lt;br /&gt; Несколько условия или эффектов разделяются проблемами: &lt;br /&gt; on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func% &lt;br /&gt; Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt; on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4 &lt;br /&gt; В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt; [logic] active = {=actor_friend} walker@friendly, walker@enemy В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например: combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...% &lt;br /&gt; Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают. &lt;br /&gt; Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие. &lt;br /&gt; [logic] active = sr_idle &lt;br /&gt; [sr_idle] on_actor_inside = nil %+esc_actor_inside% То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока. NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя ее. &lt;br /&gt; 3.8.2. Вот пример достаточно сложной логики: &lt;br /&gt; [logic] active = walker combat_ignore = combat_ignore on_hit = hit on_death = death &lt;br /&gt; [hit] on_info = %+alert% &lt;br /&gt; [death] on_info = %+alert +trup3% &lt;br /&gt; [walker] path_walk = walk_svoboda3 path_look = look_svoboda3 combat_ignore_cond = {-alert} on_timer = 25000 | remark &lt;br /&gt; [remark] anim = idle snd = stalker_talk_kampfire no_move = true no_rotate = true on_hit = hit on_death = death combat_ignore_cond = {-alert} &lt;br /&gt; [combat_ignore] &lt;br /&gt; Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит. &lt;br /&gt; А вот логика его противника: [logic] active = walker combat_ignore = combat_ignore &lt;br /&gt; [walker] path_walk = soldier_walk1 path_look = soldier_look1 combat_ignore_cond = always team = assault_group on_signal = assault | camper &lt;br /&gt; [camper] path_walk = soldier_walk1_2 path_look = soldier_look1_2 radius = 5 on_info = {+trup1 +trup2 +trup3} walker2 &lt;br /&gt; [walker2] path_walk = soldier_walk1_3 path_look = soldier_look1_3 &lt;br /&gt;&lt;br /&gt; [combat_ignore] &lt;br /&gt; Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру). &lt;br /&gt; 3.9. Схемы логики space_restrictor &lt;br /&gt; Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров. &lt;br /&gt; 3.9.1. Схема [sr_idle] &lt;br /&gt; Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы. Сама по себе схема ничего не делает. Пример настроек рестриктора: &lt;br /&gt; [logic] active = sr_idle &lt;br /&gt; [sr_idle] on_actor_inside = nil %+esc_actor_inside% &lt;br /&gt; Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil. Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит. &lt;br /&gt; файл &amp;#92;gamedata&amp;#92;scripts&amp;#92;sr_idle.script &lt;br /&gt; 3.9.2. Секция [sr_no_weapon] &lt;br /&gt; Данная схема убирает оружие у игрока при входе в зону. Пример настроек рестриктора: &lt;br /&gt; [logic] active = sr_no_weapon &lt;br /&gt; [sr_no_weapon] &lt;br /&gt; файл &amp;#92;gamedata&amp;#92;scripts&amp;#92;sr_no_weapon.script &lt;br /&gt;&lt;br /&gt; 3.9.3. Секция [sr_sound] &lt;br /&gt; snd = Перечень имён звуков разделенных запятыми. &lt;br /&gt; type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden. &lt;br /&gt; • delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0. &lt;br /&gt; • idle = Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0. &lt;br /&gt; • rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100. &lt;br /&gt; • position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока. &lt;br /&gt; • slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3 &lt;br /&gt; • slide_sound_once = true&amp;#92;false &lt;br /&gt; true - проиграть звук один раз, даже если он не дошел до последней точки пути. false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false. &lt;br /&gt; • play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет &lt;br /&gt; равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим. &lt;br /&gt; Предназначение данной схемы: отыграть звук при входе актёра в рестриктор. &lt;br /&gt; Поддерживается sound_end. &lt;br /&gt; Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка. &lt;br /&gt; Место, из которого может отыграться звук, задаётся одним из трёх: - случайное; - случайная вершина заданного пути; - позиция игрока. &lt;br /&gt; Пример настроек рестриктора: &lt;br /&gt; [logic] active = sr_sound &lt;br /&gt; [sr_sound] type = floor_wooden snd = ambient&amp;#92;wind1, ambient&amp;#92;sparks1 rnd = 50 position = random idle = 120 delay = 3 &lt;br /&gt; Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt; [logic] active = sr_sound &lt;br /&gt; [sr_sound] type = random position = way slide_velocity = 8 slide_sound_once = true &lt;br /&gt; Файл &amp;#92;gamedata&amp;#92;scripts&amp;#92;sr_sound.script &lt;br /&gt;&lt;br /&gt; 3.9.4. Секция [sr_tip] &lt;br /&gt; Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор &lt;br /&gt; name = Название новости. type = по умолчанию «news» Тип новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a &lt;br /&gt; • sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца. &lt;br /&gt; • cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону. &lt;br /&gt; • single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз, &lt;br /&gt; Пример настроек рестриктора: &lt;br /&gt; [logic] active = sr_tip &lt;br /&gt; [sr_tip] name = tips_esc_trader_about_pda type = tips cond = {+infoportion1 –infoportion2 } &lt;br /&gt; • showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО! &lt;br /&gt; Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку: on_actor_inside = nil &lt;br /&gt; файл &amp;#92;gamedata&amp;#92;scripts&amp;#92;sr_tip.script &lt;br /&gt; 3.9.5. Sr_light &lt;br /&gt; Зона, в которой фонарики у неписей будут включены независимо от времени суток. &lt;br /&gt; Работает следующим образом: &lt;br /&gt; [logic] &lt;br /&gt; active = sr_light &lt;br /&gt; [sr_light] &lt;br /&gt; light_on = true/false (свет включен/выключен) &lt;br /&gt; Также работает вместе с кондлистом: &lt;br /&gt; [logic] &lt;br /&gt; active = sr_light &lt;br /&gt; [sr_light] &lt;br /&gt; light_on = true/false (свет включен/выключен) &lt;br /&gt; on_info = {+info1} section %+info2% &lt;br /&gt; 3.9.6. Sr_territory &lt;br /&gt; Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора. Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий: &lt;br /&gt; [logic] active = sr_territory@outside &lt;br /&gt; [sr_territory@outside] on_actor_inside = sr_territory@inside &lt;br /&gt; [sr_territory@inside] on_actor_outside = sr_territory@outside territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit} %+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit% territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill% &lt;br /&gt;&lt;br /&gt; То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока. &lt;br /&gt;&lt;br /&gt; 3.9.7. Sr_mapspot &lt;br /&gt; При входе в рестриктор он сам себя подсвечивает на карте. &lt;br /&gt; Параметры: &lt;br /&gt; hint - id подсказки в string table (обязательный параметр) &lt;br /&gt; location - название типа подсветки (не обязательный параметр, по умолчанию &quot;crlc_small&quot;) &lt;br /&gt; Пример: [logic] active = sr_mapspot &lt;br /&gt; [sr_mapspot] hint = “gar_swamp” location = crcl_big &lt;br /&gt;&lt;br /&gt; 3.9.8. Sr_particle &lt;br /&gt; Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом: &lt;br /&gt; • Для партикловой системы с путем камеры: &lt;br /&gt; [sr_particle] &lt;br /&gt; name = explosions&amp;#92;campfire_03 -имя партикловой системы &lt;br /&gt; path = particle_test.anm -имя пути камеры &lt;br /&gt; mode = 1 (обязательно !!!) &lt;br /&gt; looped = true/false -флаг зацикленности партиклов &lt;br /&gt; (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути. &lt;br /&gt;&lt;br /&gt; • Для партикловой системы с обычным патрульным путем: &lt;br /&gt; [sr_particle] &lt;br /&gt; name = explosions&amp;#92;campfire_03 -имя партикловой системы &lt;br /&gt; path = part_points -имя патрульного пути &lt;br /&gt; mode = 2 (обязательно !!!) &lt;br /&gt; looped = true/false -флаг зацикленности партиклов &lt;br /&gt; В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах, если не задано, то 0). Далее, s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз... результат - партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше). &lt;br /&gt; При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все источники партиклов отыграют. Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил. &lt;br /&gt; 3.9.9. Sr_sound_act &lt;br /&gt; Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по PDA и прочие фейки. &lt;br /&gt; [sr_sound_act] &lt;br /&gt; • snd = ambient&amp;#92;random&amp;#92;new_drone1 --имя звукового файла &lt;br /&gt; • delay = 2000 --задержка перед проигрыванием &lt;br /&gt; • delay_max = 4000 -- между проигрыванием звука будет взят случайный промежуток между delay и delay_max. &lt;br /&gt; • on_signal = sound_end | nil --по сигналу можно перейти в другую секцию. &lt;br /&gt; • theme = &lt;имя темы из ph_sound_themes&gt; &lt;br /&gt; • stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться. &lt;br /&gt; Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист. &lt;br /&gt; 3.9.10 Sr_timer &lt;br /&gt; Пример использования: &lt;br /&gt; [logic] active = sr_timer@1 &lt;br /&gt; [sr_timer@1] type = dec start_value = 10000 on_value = 0 | sr_timer@2 &lt;br /&gt; [sr_timer@2] type = inc on_value = 15000 | nil %+info1% &lt;br /&gt; Описания полей: type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec). Если поле не задано - счетчик будет инкриментирующий start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0. &lt;br /&gt; Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например: &lt;br /&gt; on_value = 5000| %+info1% | 1000| %+info2% &lt;br /&gt; 3.9.11. Sr_psy_antenna &lt;br /&gt; Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений. &lt;br /&gt; Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt; eff_intensity = - увеличение/уменьшение в % от базового значения интенсивности излучения. hit_ intensity = - увеличение/уменьшение в % от базового значения наносимого повреждения. &lt;br /&gt; Пример зоны, которая добавляет 70% излучения: &lt;br /&gt; [logic] active = sr_psy_antenna &lt;br /&gt; [sr_psy_antenna] eff_intensity = 70 hit_ intensity = 70 &lt;br /&gt; Пример зоны, которая убирает 30% излучения: &lt;br /&gt; [logic] active = sr_psy_antenna &lt;br /&gt; [sr_psy_antenna] intensity = -30 &lt;br /&gt;&lt;br /&gt; 3.9.12. Sr_teleport &lt;br /&gt; Собственно, телепорт. Настраиваются следующим образом: &lt;br /&gt; [logic] active = sr_teleport &lt;br /&gt; [sr_teleport] timeout = 0 &lt;br /&gt; point1 = point1 look1 = look1 prob1 = 10 &lt;br /&gt; point2 = point2 look2 = look2 prob2 = 20 &lt;br /&gt; где: timeout - задержка в срабатывании телепорта в миллисекундах. point - одноточечный патрульный путь куда переместить look - одноточечный патрульный путь куда повернуть. &lt;br /&gt; Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания. &lt;br /&gt;&lt;br /&gt; 3.9.13. Sr_sleep и настройка снов. &lt;br /&gt; Появилась возможность задавать зоны сна. &lt;br /&gt; [sr_sleep] &lt;br /&gt; • cond = &lt;br /&gt; • type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны. &lt;br /&gt; • dream_prob = &lt;число от 0 до 100&gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран. &lt;br /&gt; Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую. Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep. &lt;br /&gt; В файле misc&amp;#92;dream.ltx задаются настройки снов. &lt;br /&gt; Секция videos. Полями задаются пути к видеофайлам со снами. &lt;br /&gt; Секция dreams. Поля: regular_probability = &lt;число от 0 до 100&gt; - вероятность проигрывания обычных сновидений в целом regular - список секций с настройками для обычных сновидений scene - список секций с настройками для сценарных сновидений &lt;br /&gt; Настройки обычных сновидений: dream - имя поля из секции videos probability = &lt;число больше 0&gt; - чем больше, тем больше вероятность проигрывания сна. type = nightmare/normal/happy - тип сна. &lt;br /&gt; Настройки сценарных сновидений: dream - имя поля из секции videos cond = - условия срабатывания to_regular = &lt;вероятность,тип&gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &lt;вероятность, тип&gt; аналогичны probability и type из настроек обычных сновидений соответственно. &lt;br /&gt; 3.9.14. Sr_cutscene &lt;br /&gt; Эта схема предназначена для проведения анимации камеры c некоторым эффектом (pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление. &lt;br /&gt; [sr_cutscene] point = &lt;имя пути&gt; - путь в первую точку которого переносится игрок look = &lt;имя пути&gt; - путь в первую точку которого смотрит игрок &lt;br /&gt; • pp_effector = &lt;имя файла с эффектом&gt; - файл, расположенный в папке &lt;br /&gt; gamedata&amp;#92;anims&amp;#92; и содержащий эффект (имя файла пишется без расширения) cam_effector = &lt;имя файла с анимацией камеры&gt; - файл, расположенный в папке gamedata&amp;#92;anims&amp;#92;camera_effects&amp;#92; и содержащий анимацию камеры (имя файла пишется без расширения) &lt;br /&gt;&lt;br /&gt; 3.10. Набор дополнительных настроек логики у разных объектов. &lt;br /&gt; Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты. &lt;br /&gt; 3.10.1. Схема работы двери, секция [ph_door] &lt;br /&gt; NB! Для двухстворчатых ворот задается все аналогично. &lt;br /&gt; locked = false&amp;#92;true Заперта ли дверь. По дефолту – false. &lt;br /&gt; Closed = false&amp;#92;true Закрыта ли дверь. По дефолту - true &lt;br /&gt; tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked) Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта. &lt;br /&gt; tip_close = (если locked == false, то tip_door_close, иначе пустое значение) Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта. &lt;br /&gt; snd_init = Звук, который будет отыгран сразу при включении схемы. &lt;br /&gt; snd_open_start = Звук, который будет отыгран при попытке открыть дверь. &lt;br /&gt; snd_close_start = Звук, который будет отыгран при попытке закрыть дверь. &lt;br /&gt; snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца. &lt;br /&gt; Примеры: Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock: &lt;br /&gt; [logic] active = ph_door@locked &lt;br /&gt; [ph_door@locked] locked = true snd_open_start = trader_door_locked on_info = {+esc_trader_can_leave} ph_door@unlocked &lt;br /&gt; [ph_door@unlocked] locked = false snd_init = trader_door_unlock snd_open_start = trader_door_open_start snd_close_start = trader_door_close_start snd_close_stop = trader_door_close_stop файл &amp;#92;gamedata&amp;#92;scripts&amp;#92;ph_door.script &lt;br /&gt; 3.10.2. Схема работы кнопки, секция [ph_button] &lt;br /&gt; При нажатии на кнопку переключает секции и выдает инфопоршн. &lt;br /&gt; [logic] active = ph_button@locked &lt;br /&gt; [ph_button@locked] anim_blend = false anim = button_false on_press = ph_button@unlocked %+cit_jail_door_opened% &lt;br /&gt; on_press – что происходит при нажатии anim – анимация, которая отигрывается при нажатии на кнопку anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true&amp;#92;false &lt;br /&gt; Файл &amp;#92;Gamedata&amp;#92;scripts&amp;#92;ph_button.script &lt;br /&gt; • tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать. &lt;br /&gt; Пример настройки кнопки: &lt;br /&gt; [logic] active = ph_button@active &lt;br /&gt; [ph_button@active] anim = lab_switcher_idle tooltip = tips_labx16switcher_press on_press = ph_button@deactivated %+terrain_test% &lt;br /&gt; [ph_button@deactivated] anim = lab_switcher_off &lt;br /&gt; Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например: &lt;br /&gt;&lt;br /&gt; Чтобы отключить чудо установку нажмите ($$ACTION_USE$$) &lt;br /&gt;&lt;br /&gt; Вот пример кнопки, которая срабатывает не всегда, а по определенному условию: &lt;br /&gt; [logic] active = ph_button@locked &lt;br /&gt; [ph_button@locked] anim = button_false – анимация несрабатывания кнопки. on_info = {+val_prisoner_door_unlocked} ph_button@unlocked on_press = ph_button@unlocked %+val_prisoner_door_unlocked% &lt;br /&gt; [ph_button@unlocked] anim = button_true on_info = {-val_prisoner_door_unlocked} ph_button@locked on_press = ph_button@locked %-val_prisoner_door_unlocked% &lt;br /&gt;&lt;br /&gt; Авторы статьи: GSC Game World</content:encoded>
			<category>Статьи (уроки) по моддингу</category>
			<dc:creator>4o_kavo</dc:creator>
			<guid>https://stalker-end.ucoz.com/forum/86-560-1</guid>
		</item>
		<item>
			<title>Настройка логики (Часть 2)</title>
			<link>https://stalker-end.ucoz.com/forum/86-559-1</link>
			<pubDate>Tue, 27 Sep 2011 09:41:57 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://stalker-end.ucoz.com/forum/86&quot;&gt;Статьи (уроки) по моддингу&lt;/a&gt;&lt;br /&gt;Автор темы: 4o_kavo&lt;br /&gt;Автор последнего сообщения: 4o_kavo&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>НАСТРОЙКА ЛОГИКИ &lt;br /&gt; Часть 2 &lt;br /&gt;&lt;br /&gt; 3.3.7. Секция dont_spawn_character_supplies &lt;br /&gt; Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле. &lt;br /&gt; [dont_spawn_character_supplies] &lt;br /&gt; 3.3.8. Секция no_smart &lt;br /&gt; Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам. [no_smart] &lt;br /&gt;&lt;br /&gt; 3.3.9. Секция treshhold &lt;br /&gt; Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два: &lt;br /&gt; max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса. &lt;br /&gt; ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них. &lt;br /&gt; В секции логики либо в текущей схеме указываете: &lt;br /&gt; threshold = threshold@tratata &lt;br /&gt; [threshold@tratata] max_ignore_distance = ignore_monster = &lt;br /&gt; Второй параметр следует менять ОЧЕНЬ осторожно. &lt;br /&gt; 3.3.10. Использование danger &lt;br /&gt; Настройка может задаваться только в какой-то схеме, например: &lt;br /&gt; [walker] danger = danger_condition &lt;br /&gt; [danger_condition] ignore_distance = 50 (расстояние указывается в метрах) ignore_ distance_grenade = ignore_ distance_corpse = ignore_ distance_hit = ignore_ distance_sound = &lt;br /&gt; Можно также указывать время ожидания для денжера в зависимости от типа: &lt;br /&gt; danger_inertion_time_grenade = danger_inertion_time_corpse = danger_inertion_time_hit = danger_inertion_time_sound = &lt;br /&gt; Дефолтовые настройки: danger_inertion_time_grenade = 20000 danger_inertion_time_corpse = 10000 danger_inertion_time_hit = 60000 danger_inertion_time_sound = 15000 &lt;br /&gt; NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил. &lt;br /&gt; Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее. &lt;br /&gt; В данный момент установлены следующие дефолты: &lt;br /&gt; ignore_distance = 50 &lt;br /&gt; ignore_distance_grenade = 15 &lt;br /&gt; ignore_distance_corpse = 10 &lt;br /&gt; ignore_distance_hit = 50 &lt;br /&gt; ignore_distance_sound = 50 &lt;br /&gt; NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее. &lt;br /&gt; • danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс. &lt;br /&gt; • danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс. &lt;br /&gt; 3.3.11. Байки из склепа (Истории у костра) &lt;br /&gt; Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &quot;научить&quot; истории. Делается это так: в кастом дате пишется секция: &lt;br /&gt; [game_info] &lt;br /&gt; stories = &quot;story_01, legend_01&quot; &lt;br /&gt; В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды: &lt;br /&gt; story_01 - Граница зоны и граната за 1 действие. &lt;br /&gt; story_02 - Про трамплин и про камешки. &lt;br /&gt; story_03 - Про то как группа Вильнова вернулась. &lt;br /&gt; story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре. &lt;br /&gt; story_05 - Про то как духманам с контролером стражаться. &lt;br /&gt; story_06 - Про дверцу, водку и избушку. &lt;br /&gt; legend_01 - Про эксперимент в Зоне, который производят инопланетяне. &lt;br /&gt; legend_02 - Об особо засекреченных лабораториях в зоне. &lt;br /&gt; legend_03 - Легенда о проводнике. &lt;br /&gt; legend_04 - Легенда о темном сталкере. &lt;br /&gt; legend_05 - Легенда о том что глубоко в Зоне спать нельзя. &lt;br /&gt; О, том какие истории и легенды в каком лагере на каком уровня можно и нельзя юзать, узнавать о Профа. &lt;br /&gt; 3.3.12. dont_spawn_loot &lt;br /&gt; Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию [dont_spawn_loot] &lt;br /&gt; 3.4. Оверрайды &lt;br /&gt; Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны): &lt;br /&gt; • meet_enabled = true (запускает схему встречи). &lt;br /&gt; o meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога). &lt;br /&gt; o meet_dialog = &lt;название диалога&gt;, который будет запущен при юзе. &lt;br /&gt; o meet_state = &lt;название состояния&gt; он определяет, в каком состоянии будет находиться персонаж, если открылось диалоговое окно общения и торговли. &lt;br /&gt; o wounded_enabled = true (включает NPC возможность использовать схему раненого). &lt;br /&gt; o combat_ignore_cond = см. выше. &lt;br /&gt; o combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – только в случае стрельбы со стороны игрока!) &lt;br /&gt; o combat_type = {условие} scheme - тип боя, которым будет пользоваться NPC из данной схемы. &lt;br /&gt; o on_combat = см. выше. &lt;br /&gt; • companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)). &lt;br /&gt; 3.5. Схемы для монстров &lt;br /&gt; 3.5.1. Схема mob_walker. &lt;br /&gt; Работает аналогично схеме обычного walker. Но есть некоторые отличия &lt;br /&gt; Флаги пути движения s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic Флаги пути обзора: t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) В customdata персонажа задайте (* отмечены обязательные поля): [walker] path_walk = путь перемещения path_look = путь обзора &lt;br /&gt; • no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false. &lt;br /&gt; • actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false. &lt;br /&gt; • npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного). &lt;br /&gt; • friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false. &lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;mob_walker.script &lt;br /&gt; У кровосососов можно управлять невидимостью: [mob_walker] &lt;br /&gt; ... &lt;br /&gt; state = vis &lt;br /&gt; или &lt;br /&gt; state = invis &lt;br /&gt; Задает значение по умолчанию. &lt;br /&gt; Также в флагах walk пути mob_walker-а можно использовать флажок b &lt;br /&gt; (behaviour) с теми же параметрами: &lt;br /&gt; wp00|b=vis &lt;br /&gt; wp00|b=invis &lt;br /&gt;&lt;br /&gt; 3.5.2. Схема mob_eluder &lt;br /&gt; Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться. &lt;br /&gt; • path = ... - работает как обычно path_walk. Набор точек патрульного пути. &lt;br /&gt; • Time_capture = ... (время в секундах) время, которое монстр находится под этой схемой. Default – 10. &lt;br /&gt; • Time_release = ... (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10. &lt;br /&gt; • Min_dist = ... (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5. &lt;br /&gt; • Max_dist = ... (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default - 10. &lt;br /&gt; Замечание – работает нестабильно. Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;mob_eluder.script &lt;br /&gt; 3.5.3. Схема mob_remark &lt;br /&gt; Ремарковая схема, только не для сталкеров, а для монстров. &lt;br /&gt; • state = специфическое состояние данного конкретного монстра (для кровососов - невидимость) &lt;br /&gt; • dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога &lt;br /&gt; • anim = анимации монстра, перечисляются через запятую. &lt;br /&gt; • anim.head = анимации головы монстра, через запятую перечисляются &lt;br /&gt; • tip = какой значок подсветится, при наведении на него курсора &lt;br /&gt; • snd = какой звук издает &lt;br /&gt; • time = время проигрывания анимаций, используется только для отладки. &lt;br /&gt; Файл &amp;#92;gamedata&amp;#92;scripts&amp;#92;mob_remark.script На этой схеме сделан торговец. &lt;br /&gt;&lt;br /&gt; 3.5.4. Схема mob_combat, mob_death &lt;br /&gt; Работают точно также как и у сталкеров соответствующие схемы. Файлы: &amp;#92;gamedata&amp;#92;scripts&amp;#92;mob_combat.script, &amp;#92;gamedata&amp;#92;scripts&amp;#92;mob_death.script &lt;br /&gt; 3.5.6 Схема mob_jump (монстр-пружинка) &lt;br /&gt; Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка. &lt;br /&gt; Пример: &lt;br /&gt; [logic] active = mob_jump &lt;br /&gt; [mob_jump] path_jump = path ph_jump_factor =2.8 offset = 0,10,0 on_signal = jumped | nil &lt;br /&gt; path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset. offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8 &lt;br /&gt; Примечание: Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &quot;on_signal = jumped | имя_схемы_или_nil&quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше. При выборе позиции используется первая точка патрульного пути (0-вой индекс) &lt;br /&gt; 3.5.7. Mob_camp &lt;br /&gt; Механика: &lt;br /&gt; 1. Сидит на позиции, смотрит в точку &lt;br /&gt; 2. Можно задать несколько позиций и время смены позиции. &lt;br /&gt; 3. Перемещается между позициями бегом &lt;br /&gt; 4. При виде врага переходит под универсальную схему (комбат/паника и т.д) &lt;br /&gt; 5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции &lt;br /&gt; 6. Если враг уходит далеко - монстр возвращается на позицию &lt;br /&gt; Использование: &lt;br /&gt; [logic] active = mob_camp &lt;br /&gt; [mob_camp] path_look = way_look path_home = way_home time_change_point = 30000 home_min_radius = 20 home_max_radius = 50 skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести) &lt;br /&gt; Описание параметров: &lt;br /&gt; • path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt; path_look - путь, состоящий из точек, в которые будет смотреть монстр &lt;br /&gt; • time_change_point - время изменения текущей camp-точки (по-умолчанию10000), мс &lt;br /&gt; • home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м &lt;br /&gt; • home_max_radius - максимальный радиус от врага до camp-точки (по-умолчанию 40), м &lt;br /&gt; Особенности: &lt;br /&gt; Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius. &lt;br /&gt; Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага. &lt;br /&gt; Выбор текущей позиции производится случайным образом &lt;br /&gt; Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look) &lt;br /&gt; Единственным необходимым параметром является path_look Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне. &lt;br /&gt; Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек. &lt;br /&gt; Обязательные требования: home_min_radius &lt; home_max_radius Количество точек путей path_look и path_home должно быть равным P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами &lt;br /&gt; 3.5.8. Mob_home &lt;br /&gt; Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt; Пример: [mob_home] path_home = path1 home_min_radius = 10 home_max_radius = 30 aggressive_home - в назначенную точку path_home монстры бегут а не идут. &lt;br /&gt; Описание: Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо». &lt;br /&gt; Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно. &lt;br /&gt; 3.5.9. Mob_fake_death &lt;br /&gt; Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби... Использование: &lt;br /&gt; [logic] active = mob_fake_death &lt;br /&gt; [mob_fake_death] on_actor_dist_le = 5 | nil &lt;br /&gt; При входе в схему зомби падает, при выходе из схемы встает. &lt;br /&gt;&lt;br /&gt; 3.6. Оверрайды для монстров: &lt;br /&gt; • actor_friendly = если true, то монстр не атакует актера, до первой атаки на него &lt;br /&gt; • npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него &lt;br /&gt; • friendly = если true, то монстр не атакует никого до первой атаки на него &lt;br /&gt; • braindead = если true, то монстр игнорирует любые атаки. &lt;br /&gt; Секции для монстров [mob_death], [mob_hit] &lt;br /&gt; 3.7. Секция spawner &lt;br /&gt; Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic Работает spawner следующим образом: &lt;br /&gt; [spawner] cond = {+info -info =func !func} &lt;br /&gt; Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн. Пример: [spawner] cond = {=is_day} (объект заспавниться днем и уйдет в оффлайн ночью) &lt;br /&gt; После того, как объект заспавнился, его берет под управление скрипт Logic &lt;br /&gt; 3.7.1. Спавн монстров дневных и ночных. &lt;br /&gt; [spawner] cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day}) check_distance = true – проверка на наличие персонажа рядом. min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много). &lt;br /&gt; 3.8. Скрипт logic &lt;br /&gt; NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!) &lt;br /&gt; Скрипт logic управляет переключением схем. В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt; Функции, на которые ссылается секция [logic] должны находится в файлах &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_effects.script или &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_conditions.script. &lt;br /&gt; В секции должно присутствовать одно из полей: active = активная схема, запускающаяся первой. cfg = имя_ltx_файла_с_настройками &lt;br /&gt; Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. Пример. Настройки простого walker-а: &lt;br /&gt; [logic] active = walker &lt;br /&gt; [walker] path_walk = walk1 path_look = look1 &lt;br /&gt; Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: Список доступных схем перечислен в главе схемы. Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д. &lt;br /&gt; on_actor_dist_le = number | scheme - дистанция до игрока &lt;= number on_actor_dist_le_nvis = number | scheme - дистанция до игрока &lt;= number без проверки на видимость on_actor_dist_ge = number | scheme - если дистанция до игрока &gt; number on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &gt; number без проверки на видимость on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы on_info = scheme - срабатывает всегда on_timer = msec | scheme - срабатывает через msec мс после включения схемы on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора) on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора) on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами &lt;br /&gt; NB: с любыми из вышеперечисленных параметров можно работать следующим образом: on_info = {….} %...% on_info2 = {….} %...% on_info3 = {…} %...% и так далее до посинения &lt;br /&gt;&lt;br /&gt; а также условия для переключения на описанные выше секции. combat_ignore_cond = on_hit = on_death = on_combat = on_use = &lt;br /&gt;&lt;br /&gt; Авторы статьи: GSC Game World</content:encoded>
			<category>Статьи (уроки) по моддингу</category>
			<dc:creator>4o_kavo</dc:creator>
			<guid>https://stalker-end.ucoz.com/forum/86-559-1</guid>
		</item>
		<item>
			<title>Настройка логики (часть 1)</title>
			<link>https://stalker-end.ucoz.com/forum/86-558-1</link>
			<pubDate>Tue, 27 Sep 2011 09:41:32 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://stalker-end.ucoz.com/forum/86&quot;&gt;Статьи (уроки) по моддингу&lt;/a&gt;&lt;br /&gt;Автор темы: 4o_kavo&lt;br /&gt;Автор последнего сообщения: 4o_kavo&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>НАСТРОЙКА ЛОГИКИ ДЛЯ СТАЛКЕРОВ &lt;br /&gt; Часть 1 &lt;br /&gt;&lt;br /&gt; 3. Настройки логики &lt;br /&gt; 3.1. Система флагов (path_walk, path_look) &lt;br /&gt; В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &quot;wp00&quot;: wp00|flag1|flag2. &lt;br /&gt; • Флаги точек пути path_walk: &lt;br /&gt; a=state &lt;br /&gt; Выбирает состояние тела при перемещении (Только из раздела – Ходячие состояния). Список состояний можно взять в gamedata&amp;#92;scripts&amp;#92;state_lib.script. &lt;br /&gt; p=percent &lt;br /&gt; Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки. &lt;br /&gt; sig=name &lt;br /&gt; Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt; • Флаги точек пути path_look: &lt;br /&gt; a=state &lt;br /&gt; Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния) Список состояний можно взять в gamedata&amp;#92;scripts&amp;#92;state_lib.script &lt;br /&gt; t=msec &lt;br /&gt; Время в миллисекундах, которое персонаж должен смотреть в заданную точку. ‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000. Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно. &lt;br /&gt; sig=name &lt;br /&gt; После поворота в точку path_look, установить сигнал с именем name. &lt;br /&gt; syn &lt;br /&gt; Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию. &lt;br /&gt; sigtm=signal &lt;br /&gt; Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt; В пути path_look можно сделать: wp00 | a=press | t=0 | sigtm=pressed &lt;br /&gt; А затем переключить схему: on_signal = pressed | другая_схема &lt;br /&gt; 3.1.1. Более подробное описание путей (walker) &lt;br /&gt; Настройка: &lt;br /&gt; На карту для каждого walker&apos;а нужно поставить: &lt;br /&gt; • Путь path_walk, по которому walker ходит. &lt;br /&gt; • Путь path_look, состоящий из точек, в которые walker смотрит. &lt;br /&gt; Walker&apos;ов может быть от одного или больше. Они могут действовать независимо, или взаимодействовать друг с другом. &lt;br /&gt; [walker] &lt;br /&gt; • team = ... - имя команды, произвольная текстовая строка. Все walker&apos;ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker&apos;ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя. &lt;br /&gt; • path_walk = ... - имя пути, описанного в п. 1 &lt;br /&gt; • path_look = ... - (не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать. Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look. &lt;br /&gt; Правила расстановки флажков в путях рассмотрим на нескольких примерах. &lt;br /&gt;&lt;br /&gt; • Пример 1: &lt;br /&gt; Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt; Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки. У каждого вейпоинта есть имя: wp00, wp01 и т.д. Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишется a = anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a = threat, то персонаж пойдет в состоянии danger, если a = raid - то побежит с оружием наизготовку, и т.д. &lt;br /&gt; В точках пути path_walk используются анимации только из раздела «Ходячие состояния»! &lt;br /&gt;&lt;br /&gt; • Пример 2: &lt;br /&gt; Разговор персонажа. &lt;br /&gt; Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существует поле: s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую. &lt;br /&gt;&lt;br /&gt; • Пример 3: &lt;br /&gt; В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически. Остальные параметры (sp, sf, st) задавать не рекомендуется, значения по умолчанию приемлемы для большинства скриптов. Параметр sa также использовать не рекомендуется. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе. Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look. &lt;br /&gt;&lt;br /&gt; • Пример 4: &lt;br /&gt; Усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него. Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется. &lt;br /&gt; Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1. Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком. &lt;br /&gt; Если точка path_walk не помечена флажком, персонаж проходит ее не останавливаясь. Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек. &lt;br /&gt; По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение: &lt;br /&gt; • p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400). Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100. По умолчанию у всех точек p = 100. &lt;br /&gt; • t = ... время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек) &lt;br /&gt;&lt;br /&gt; • Пример 5: &lt;br /&gt; В этом примере, проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд. &lt;br /&gt; По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch. Если требуется другая анимация, можно ее указать с помощью флажка: &lt;br /&gt; • a = имя_анимации (по умолчанию idle). Пишется a = anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a = hide, то персонаж сядет в состоянии danger, если a = guard, то встанет с оружием наизготовку и т.д. &lt;br /&gt; В точках пути path_look используются анимации только из раздела «Ходячие состояния»! &lt;br /&gt; 3.2. Схемы поведения сталкеров &lt;br /&gt; Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем. &lt;br /&gt; В файле &amp;#92;gamedata&amp;#92;scripts&amp;#92;modules.script указаны все загружаемые схемы. &lt;br /&gt; 3.2.1. Схема walker &lt;br /&gt; Это базовая схема, в которой персонаж перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt; [walker] &lt;br /&gt; • path_walk = имя пути - основной путь, по которому ходит NPC &lt;br /&gt; • path_look = имя пути - путь, куда смотрит NPC &lt;br /&gt; • team - команда для синхронизации &lt;br /&gt; В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию. &lt;br /&gt; • def_state_moving1 - состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию) &lt;br /&gt; • def_state_moving2 - состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию) &lt;br /&gt; • def_state_moving3 - состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию) &lt;br /&gt; • def_state_standing - дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние. &lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_walker.script &lt;br /&gt; 3.2.2. Схема remark &lt;br /&gt; Схема используется для синхронизации&amp;#92;связки других схем. &lt;br /&gt; [remark] &lt;br /&gt; • snd_anim_synс = true/false - Указывает на то необходимо ли синхронизировать звук с анимацией либо нет &lt;br /&gt; • snd - звук ремарка, по умолчанию nil &lt;br /&gt; • anim - анимация ремарка, по умолчанию wait &lt;br /&gt; • target - куда смотрит сталкер. Есть следующие варианты &lt;br /&gt; o story_id – числовое значение &lt;br /&gt; o actor – без комментариев &lt;br /&gt; o nil – позиция вычисленная АИ автоматически &lt;br /&gt; o &lt;имя работы&gt;,&lt;имя гулага&gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка). &lt;br /&gt; Пример: &lt;br /&gt; target = logic@cit_killers_base_guard, cit_killers , - можно указывать смотреть в вершину патрульного пути (&lt;имя пути&gt;, &lt;имя точки&gt;). &lt;br /&gt; Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает AI. &lt;br /&gt; Стандартные сигналы для remark: &lt;br /&gt; • sound_end – по окончании проигрывания звуковой схемы &lt;br /&gt; • anim_end – по окончании проигрывания анимации &lt;br /&gt; • action_end – по окончании проигрывания и того и другого, если они синхронизированы &lt;br /&gt; Пример синхронизации анимации и звука в схеме remark: &lt;br /&gt; [remark] &lt;br /&gt; • anim - анимация &lt;br /&gt; • snd - звук &lt;br /&gt; • snd_anim_sync = true - синхронизация &lt;br /&gt; • on_signal = action_end | следующая схема &lt;br /&gt; 3.2.3. Схема sleeper &lt;br /&gt; Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из одного поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt; [sleeper] &lt;br /&gt; • path_main = ... - имя пути &lt;br /&gt; • wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет) &lt;br /&gt;&lt;br /&gt; Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную). &lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_sleeper.script &lt;br /&gt; 3.2.4. Схема kamp &lt;br /&gt; Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке. &lt;br /&gt; [kamp] &lt;br /&gt; • center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться. &lt;br /&gt; • radius = 2 - насколько далеко сталкер будет сидеть от центра лагеря, 2 - по умолчанию. &lt;br /&gt; • def_state_moving = run - дефолтное состояние, в котором сталкер будет идети к точке кампа. &lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_kamp.script &lt;br /&gt; Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой равно: &lt;br /&gt; _task &lt;br /&gt; • path_walk = _task &lt;br /&gt; Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо. &lt;br /&gt; 3.2.5. Схема camper &lt;br /&gt; Свойства кемперов: &lt;br /&gt; • Кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям &lt;br /&gt; • Кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt; • В любых других случаях действуют по собственной скриптовой схеме. Если видим врага - стреляем. Если слышим danger - то смотрим в направление в danger. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt; • Кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение. &lt;br /&gt; [camper] &lt;br /&gt; • path_walk = patrol_path &lt;br /&gt; • path_look = patrol_path &lt;br /&gt; • radius = ... – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам. &lt;br /&gt; • no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов. &lt;br /&gt; • def_state_moving = ... - (состояние из стейт менеджера), в котором мы движемся на ближайшую точку пути при враге. &lt;br /&gt; • def_state_moving_fire = ... - (состояние из стейт менеджера (sneak_fire)), в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути. &lt;br /&gt; • def_state_campering = ... - (состояние из стейт менеджера (hide)), в котором мы ожидаем врага, находясь на пути. &lt;br /&gt; • def_state_campering_fire = ... (состояние из стейт менеджера (hide_fire)), в котором мы отстреливаемся от врага, находясь на пути. &lt;br /&gt; • attack_sound = имя_звуковой_темы - возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &quot;fight_attack&quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера пустой атрибут. &lt;br /&gt; • shoot = ... - Задаем тип стрельбы. Возможные значения: &lt;br /&gt; o always - значение по умолчанию, стреляет всегда, когда можно &lt;br /&gt; o none - не стреляет вообще. &lt;br /&gt; o terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен. &lt;br /&gt; У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули. Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов. &lt;br /&gt; 3.2.5.1. Схема sniper &lt;br /&gt; Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек. Внимание! Ставить снайперу только 2 точки look. &lt;br /&gt; В кастом дате кемпера прописать: &lt;br /&gt; sniper = true &lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_camper.script &lt;br /&gt; 3.2.6. Схема follower &lt;br /&gt; В custom_data прописан как follower. NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются. &lt;br /&gt; [follower] &lt;br /&gt; • leader = ... - story_id лидера из game.ltx (число!). &lt;br /&gt; • formation_line = true - постарается идти сбоку от лидера, в противном случае будет идти сзади. &lt;br /&gt; • distance = ... - расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров. &lt;br /&gt; • state_if_leader_in_meet - это есть строка с именем состояния из state_manager, которое будет назначено follower&apos;ам, если командир пребывает в состоянии meet. &lt;br /&gt; • anim_walk = state - состояние, в котором фолловер идет за лидером. &lt;br /&gt; • anim_run = state - состояние, в котором фолловер бежит за лидером. &lt;br /&gt; • anim_sprint = state - состояние, в котором фолловер спринтует за лидером. &lt;br /&gt;&lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_ attendant.script &lt;br /&gt; Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию логики в файле скрипта. Пример: &lt;br /&gt; t = { section = &quot;logic@bar_arena_follower_2&quot;, &lt;br /&gt; idle = 0, &lt;br /&gt; prior = 7, state = {0}, squad = squad, group = groups[0], &lt;br /&gt; in_rest = &quot;&quot;, out_rest = &quot;&quot;, &lt;br /&gt; dependent = &quot;logic@bar_arena_leader&quot;, &lt;br /&gt; predicate = function(obj) &lt;br /&gt; return obj:character_community() == &quot;dolg&quot; &lt;br /&gt; end &lt;br /&gt; } &lt;br /&gt; 3.2.7. Схема zoneguard &lt;br /&gt; NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt; [zoneguard] &lt;br /&gt; • path_walk = ... - путь перемещения &lt;br /&gt; • path_look = ... - путь обзора &lt;br /&gt; • team = ... - имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока) &lt;br /&gt; • zone_guard = ... - имя зоны, в пределах которой игрок будет атакован &lt;br /&gt; • zone_warn = ... - имя зоны, в пределах которой начинать разговор с игроком &lt;br /&gt; • walker_team = ... - team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team) &lt;br /&gt; • no_move = ... - если true, персонаж окликнет игрока с места и не будет подбегать к нему &lt;br /&gt; • snd_greet = ... - имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа &lt;br /&gt; • ignore_friends = ... - true - будет игнорировать дружественных ему персонажей. &lt;br /&gt; • ignore_cond = {+info -info =func !func} - условия, при которых NPC игнорирует игрока &lt;br /&gt; • no_danger = ... - если true, то не отыгрывает угрожающую анимацию, нейтралам. &lt;br /&gt; • anim = ... - какую отыгрывает анимацию, если игрок ему не враждебен. &lt;br /&gt; • snd_anim_sync = ... - если true, то npc будет синхронизировать звук с анимацией &lt;br /&gt;&lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_zoneguard.script &lt;br /&gt; 3.2.8. Схема wounded (раненый) &lt;br /&gt; [logic] &lt;br /&gt; wounded = wounded &lt;br /&gt;&lt;br /&gt; [walker] &lt;br /&gt; wounded = wounded &lt;br /&gt;&lt;br /&gt; [wounded] &lt;br /&gt; hp_state = HP|condstate@condsound|HP|condstate@condsound &lt;br /&gt; hp_state_see = HP|condstate@condsound|HP|condstate@condsound &lt;br /&gt; psy_state = PSY|condstate@condsound|PSY|condstate@condsound &lt;br /&gt; hp_victim = HP|condvictim|HP|condvictim &lt;br /&gt; hp_cover = HP|condbool|HP|condbool &lt;br /&gt; hp_fight = HP|condbool|HP|condbool &lt;br /&gt; syndata = state@sound|state@sound &lt;br /&gt; help_dialog = story_id &lt;br /&gt; help_start_dialog = story_id &lt;br /&gt; Где: &lt;br /&gt; • condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока &lt;br /&gt; • condsound – кондлист, возвращающий саунд тему. &lt;br /&gt; • HP – пороговые значение здоровья персонажа &lt;br /&gt; • PSY – пороговые значения пси здоровья персонажа &lt;br /&gt; • condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди. &lt;br /&gt; • condbool – кондлист, возвращаюзий true либо false. &lt;br /&gt; Значения полей: &lt;br /&gt; • hp_state – поведение персонажа когда он не видит игрока &lt;br /&gt; • hp_state_see – поведение персонажа, когда он видит игрока &lt;br /&gt; • psy_state – поведение персонажа при псиатаках &lt;br /&gt; • hp_victim – куда смотреть, в зависимости от ХП &lt;br /&gt; • hp_cover – идти в укрытие или нет, в зависимости от ХП &lt;br /&gt; • hp_fight – разрешено воевать или нет, в зависимости от ХП &lt;br /&gt; • syndata – синхропары для красоты. &lt;br /&gt; • help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога. &lt;br /&gt; Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog. &lt;br /&gt; Пример. В качестве примера взята дефолтная настройка. &lt;br /&gt; hp_state = 30|help_me@help|10|wounded_heavy@help_heavy &lt;br /&gt; hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy &lt;br /&gt; psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| &lt;br /&gt; {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy &lt;br /&gt; hp_victim = 30|actor|10|nil &lt;br /&gt; hp_cover = 30|true|10|false &lt;br /&gt; hp_fight = 30|true|10|false &lt;br /&gt; syndata = wounded@help &lt;br /&gt; Где: &lt;br /&gt; • best_pistol – проверка на то, что лучшее оружие НПС является пистолетом. &lt;br /&gt;&lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_wounded.script &lt;br /&gt; 3.2.9. Схема rest &lt;br /&gt; Чувак гуляет, хавает, спит. Пока нормально не работает. &lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_rest.script &lt;br /&gt; 3.2.10. Схема heli_hunter &lt;br /&gt; Может стрелять, либо не стрелять по вертолету в зависимости от условий. Делается это так: &lt;br /&gt; [camper@bar_freedom_attack_sniper_1] &lt;br /&gt;&lt;br /&gt; path_walk = camper_1_walk &lt;br /&gt; path_look = camper_1_look &lt;br /&gt; on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor% &lt;br /&gt; meet_talk_enabled = true &lt;br /&gt; meet_dialog = bar_svoboda_dialog &lt;br /&gt; heli_hunter = {-bar_ecolog_crush_heli_down} true, false &lt;br /&gt; Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена. &lt;br /&gt; 3.2.11. Patrol &lt;br /&gt; Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее: &lt;br /&gt; [patrol] &lt;br /&gt;&lt;br /&gt; path_walk = path_walk &lt;br /&gt; path_look = path_look &lt;br /&gt; formation = back &lt;br /&gt; commander = true &lt;br /&gt; move_type = ... &lt;br /&gt; • formation - описывет способ построения и не является обязательным. Возможны следующие варианты: &lt;br /&gt; o back - мужики идут чуть позади командира в два ряда (по умолчанию) &lt;br /&gt; o line - шеренга &lt;br /&gt; o around - вокруг командира &lt;br /&gt; • commander = true - типа назначат командиром, желательно, чтобы такой красивый он был один. &lt;br /&gt; • move_type = ... - задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib. &lt;br /&gt; При остановке командора в meet мужики останавливаются. &lt;br /&gt; Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом: &lt;br /&gt; ret=0...2 &lt;br /&gt; • 0 - линия &lt;br /&gt; • 1 – вокруг старшего &lt;br /&gt; • 2 – по бокам &lt;br /&gt; При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a = assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют. &lt;br /&gt; Что еще не сделано или глючит: &lt;br /&gt; • нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе) &lt;br /&gt; • все идут молча (когда будет манагер баек, то сделаем) &lt;br /&gt; • командор пока не отдает команд (нет озвучки) &lt;br /&gt; • не рекомендуется включать спринт (глючит) &lt;br /&gt; 3.3. Секции. &lt;br /&gt; 3.3.1. Секция combat &lt;br /&gt; Показывает, что происходит, когда NPC срывается в бой. &lt;br /&gt; on_combat = combat &lt;br /&gt; [combat] &lt;br /&gt; • on_info = %+info -info =func% - эффекты, которые вызываются на каждом раунде боя. &lt;br /&gt; Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type. &lt;br /&gt; В следующем примере сталкер сражается: &lt;br /&gt; • по-кемперски, если враг = актёр и он дальше Х метров &lt;br /&gt; • по-монолитовски, если любой враг дальше Y метров &lt;br /&gt; • иначе - движковый бой &lt;br /&gt; [logic] &lt;br /&gt; active = walker &lt;br /&gt; on_combat = combat &lt;br /&gt;&lt;br /&gt; [walker] &lt;br /&gt; path_walk = ... &lt;br /&gt;&lt;br /&gt; [combat] &lt;br /&gt; combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith &lt;br /&gt; Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров NPC переходил бы в кемперский комбат. &lt;br /&gt; function fighting_dist_ge_20(actor, npc) &lt;br /&gt; return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &gt;= 400 &lt;br /&gt; end &lt;br /&gt; Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов. &lt;br /&gt; Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый: &lt;br /&gt; [logic] &lt;br /&gt; active = nil &lt;br /&gt; on_combat = combat &lt;br /&gt;&lt;br /&gt; [combat] &lt;br /&gt; combat_type = zombied &lt;br /&gt; Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом combat_type. Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так: &lt;br /&gt; [logic] &lt;br /&gt; active = walker1 &lt;br /&gt; on_combat = combat &lt;br /&gt;&lt;br /&gt; [walker1] &lt;br /&gt; ... &lt;br /&gt; [walker2] &lt;br /&gt; ... &lt;br /&gt; [walker3] &lt;br /&gt; ... &lt;br /&gt; [walker4] &lt;br /&gt; ... &lt;br /&gt; [walker5] &lt;br /&gt; ... &lt;br /&gt; combat_type = monolith &lt;br /&gt;&lt;br /&gt; [combat] &lt;br /&gt; combat_type = camper &lt;br /&gt; • scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой) &lt;br /&gt; • disable_combat_handler – функция отключающая секцию combat. &lt;br /&gt;&lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_combat.script &lt;br /&gt; 3.3.2 Секция death &lt;br /&gt; Схема показывает, что происходит при смерти NPC. &lt;br /&gt; on_death = death &lt;br /&gt; [death] &lt;br /&gt; on_info = %+info -info =func% &lt;br /&gt;&lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_death.script &lt;br /&gt; 3.3.3. Cекция hit &lt;br /&gt; Схема показывает, что происходит при нанесении повреждения NPC. &lt;br /&gt; Причем on_hit не срабатывает на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как агрессия (игрок отстреливает, скажем, собак, а на него срывается охрана). &lt;br /&gt; on_hit = hit &lt;br /&gt; [hit] &lt;br /&gt; on_info = %+info -info =func% &lt;br /&gt;&lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_hit.script &lt;br /&gt; 3.3.4. Секция actor_dialogs &lt;br /&gt; Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме. &lt;br /&gt; actor_dialogs = actor_dialogs &lt;br /&gt; [actor_dialogs] &lt;br /&gt; • id = ... - доступные диалоги через запятую. &lt;br /&gt; • disable = ... - запрещенные диалоги, тоже через запятую. &lt;br /&gt;&lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_meet.script &lt;br /&gt; 3.3.5. Секция use &lt;br /&gt; Схема показывает, что произойдет, если игрок юзнет NPC. &lt;br /&gt; on_use = use &lt;br /&gt; [use] &lt;br /&gt; on_info = %+info -info =func% &lt;br /&gt;&lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_use.script &lt;br /&gt; 3.3.6. Секция combat_ignore &lt;br /&gt; Если NPC в этой схеме то он не переходит в боевой режим. В любой другой схеме: &lt;br /&gt; [walker] &lt;br /&gt; • combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется). &lt;br /&gt; В схеме нет дополнительных полей. &lt;br /&gt; [walker] &lt;br /&gt; combat_ignore = combat_ignore &lt;br /&gt;&lt;br /&gt; [combat_ignore] &lt;br /&gt; Функции, используемые для работы с кондлистом комбат игнора: &lt;br /&gt; • fighting_dist_ge_20 - текущий враг на расстоянии больше или равном 20 м. &lt;br /&gt; • fighting_dist_ge (х) – (х - расстояние в метрах)универсальная функция для combat_ignore, проверка расстояния для игрока. &lt;br /&gt; • fighting_actor - текущий враг - актёр? &lt;br /&gt; • check_fighting - проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка. &lt;br /&gt;&lt;br /&gt; Файл: &amp;#92;gamedata&amp;#92;scripts&amp;#92;xr_combat_ignore.script &lt;br /&gt;&lt;br /&gt; Статья создана: GSC Game World</content:encoded>
			<category>Статьи (уроки) по моддингу</category>
			<dc:creator>4o_kavo</dc:creator>
			<guid>https://stalker-end.ucoz.com/forum/86-558-1</guid>
		</item>
		<item>
			<title>Создание спального мешка в ЗП</title>
			<link>https://stalker-end.ucoz.com/forum/86-557-1</link>
			<pubDate>Tue, 27 Sep 2011 09:40:46 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://stalker-end.ucoz.com/forum/86&quot;&gt;Статьи (уроки) по моддингу&lt;/a&gt;&lt;br /&gt;Автор темы: 4o_kavo&lt;br /&gt;Автор последнего сообщения: 4o_kavo&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>В этой статье я расскажу вам как создать спальный мешок в ЗП &lt;br /&gt; Для начала заходим в файл gamedata&amp;#92;configs&amp;#92;misc&amp;#92;items.ltx &lt;br /&gt; И в самый конец добавляем вот это: &lt;br /&gt; ; Спальник &lt;br /&gt; [spalnik]:identity_immunities &lt;br /&gt; discovery_dependency = &lt;br /&gt; $spawn = &quot;food and drugs&amp;#92;antirad&quot; &lt;br /&gt; $prefetch = 32 &lt;br /&gt; class = S_FOOD &lt;br /&gt; cform = skeleton &lt;br /&gt; ; eatable item &lt;br /&gt; eat_health = 0 &lt;br /&gt; eat_satiety = 0 &lt;br /&gt; eat_power = 0 &lt;br /&gt; eat_radiation = 0 &lt;br /&gt; eat_alcohol = 0 &lt;br /&gt; wounds_heal_perc = 0 &lt;br /&gt; eat_portions_num = 1 &lt;br /&gt; ; food item &lt;br /&gt; animation_slot = 4 &lt;br /&gt; ;hud item &lt;br /&gt; hud = wpn_vodka_hud &lt;br /&gt; visual = dynamics&amp;#92;workshop_room&amp;#92;banka_kraski_1.ogf &lt;br /&gt; description = enc_spalnik &lt;br /&gt; inv_name = spalnik &lt;br /&gt; inv_name_short = spalnik_s &lt;br /&gt; inv_weight = 1 &lt;br /&gt; inv_grid_width = 2 &lt;br /&gt; inv_grid_height = 2 &lt;br /&gt; inv_grid_x = 14 &lt;br /&gt; inv_grid_y = 23 &lt;br /&gt; cost = 2200 &lt;br /&gt; Сохраняем… &lt;br /&gt; Теперь идём в файл bind_stalker.script и после строчек &lt;br /&gt; get_console():execute(&quot;snd_volume_eff 0&quot;) &lt;br /&gt; else &lt;br /&gt; пишем вот это: &lt;br /&gt; if (spalnik) then spalnik.use_inventory_item(s_obj) end --Idler используем спальник? &lt;br /&gt; end &lt;br /&gt; сохраняем… &lt;br /&gt; Теперь в папке gamedata&amp;#92;scripts создадим файл spalnik.script и в него впишем: &lt;br /&gt; --[[ &lt;br /&gt; File: spalnik.script &lt;br /&gt; rev: 12/10/09.01 &lt;br /&gt; Обработчик для спальника &lt;br /&gt; ]] &lt;br /&gt;&lt;br /&gt; -- функции АМК &lt;br /&gt; function spawn_item_in_inv(spawn_item, npc) &lt;br /&gt; if npc==nil then &lt;br /&gt; npc=db.actor &lt;br /&gt; end &lt;br /&gt; return alife():create(spawn_item, &lt;br /&gt; npc:position(), &lt;br /&gt; npc:level_vertex_id(), &lt;br /&gt; npc:game_vertex_id(), &lt;br /&gt; npc:id()) &lt;br /&gt; end &lt;br /&gt;&lt;br /&gt; -- функции спальника &lt;br /&gt; function use(s_obj) &lt;br /&gt; if not s_obj then return end &lt;br /&gt; if (surge_manager.actor_in_cover()) then &lt;br /&gt; ui_sleep_dialog.sleep() &lt;br /&gt; give_info(&quot;sleep_active&quot;) &lt;br /&gt; else &lt;br /&gt; news_manager.send_tip(db.actor, game.translate_string(&quot;st_spalnik_nosleep&quot;)) &lt;br /&gt; end &lt;br /&gt;&lt;br /&gt; spawn_item_in_inv(&quot;spalnik&quot;) &lt;br /&gt; end &lt;br /&gt;&lt;br /&gt; function use_inventory_item(s_obj) &lt;br /&gt; if s_obj and s_obj.section_name and s_obj:section_name()==&quot;spalnik&quot; then &lt;br /&gt; use(s_obj) &lt;br /&gt; end &lt;br /&gt; end &lt;br /&gt; все можно сохранять... &lt;br /&gt; Теперь идем в файл gamadata&amp;#92;configs&amp;#92;text&amp;#92;rus&amp;#92;st_items_equipment.xml &lt;br /&gt; И в конце перед строчкой вписываем вот это: &lt;br /&gt;&lt;br /&gt; Спальный мешок &lt;br /&gt;&lt;br /&gt; Спальный мешок &lt;br /&gt;&lt;br /&gt; Походный спальный мешок. Пожалуй, самый удобный способ переночевать в Зоне. Но от радиации не спасёт, поэтому для ночевки нужно искать места по-укромнее. Например такие, где можно переждать выброс. &lt;br /&gt;&lt;br /&gt; Сохраняем… &lt;br /&gt; Теперь идем в туже папку в файл ui_st_screen.xml и в конце перед строчкой пишем вот это: &lt;br /&gt;&lt;br /&gt; В этом месте не заснуть. Нужно найти укрытие в котором можно переждать выброс. &lt;br /&gt;&lt;br /&gt; Теперь идем в файл: &lt;br /&gt; Gamedata&amp;#92;configs&amp;#92;gamepley&amp;#92;character_desc_general.xml и там после строчки: &lt;br /&gt; stalker_outfit &amp;#92;n &lt;br /&gt; пишем: &lt;br /&gt; spalnik &amp;#92;n &lt;br /&gt; Сохраняем… &lt;br /&gt; Все можно заходить в игру и проверять…Спальный мешок появится у вас в начале новой игры!!! &lt;br /&gt; НО ЕСТЬ ДВА НЕДОСТАТКА!!!У СПАЛЬНОГО МЕШКА НЕТ ИКОНКИ ИНВЕНТАРЯ И У МОДЕЛЬ У НЕГО НЕ СПАЛЬНОГО МЕШКА, А БАНКИ КРАСКИ…ИКОНКУ СДЕЛАЙТЕ САМИ, ДУМАЮ ЗНАЕТЕ КАК, НУ А ЕСЛИ У ВАС И МОДЕЛЬ СПАЛЬНОГО МЕШКА ЕСТЬ ТО ЭТО ВООБЩЕ ОТЛИЧНО…ДУМАЮ КАК ЕЁ ВСТАВИТЬ ВЫ ТОЖЕ ЗНАТЕ… &lt;br /&gt; Так по моему не чего не забыл… &lt;br /&gt; (Статья от ак101) &lt;br /&gt; НА ЧИСТОЙ ВЕРСИИ 1.6.00 ВСЕ РАБОТАЛО ОТЛИЧНО &lt;br /&gt;&lt;br /&gt; спать можно только в тех местах где можно укрыться от выброса!</content:encoded>
			<category>Статьи (уроки) по моддингу</category>
			<dc:creator>4o_kavo</dc:creator>
			<guid>https://stalker-end.ucoz.com/forum/86-557-1</guid>
		</item>
	</channel>
</rss>