<?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>Всё для Warcraft 3</title>
		<link>http://warcraft3ft.info/</link>
		<description>Форум о Warcraft 3</description>
		<lastBuildDate>Fri, 04 Sep 2015 00:56:49 GMT</lastBuildDate>
		<generator>uCoz Web-Service</generator>
		<atom:link href="https://warcraft3ft.clan.su/forum/rss" rel="self" type="application/rss+xml" />
		
		<item>
			<title>[JASS] Урок 5. Циклы</title>
			<link>https://warcraft3ft.clan.su/forum/60-57668-1</link>
			<pubDate>Fri, 04 Sep 2015 00:56:49 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://warcraft3ft.clan.su/forum/60&quot;&gt;GUI / Jass&lt;/a&gt;&lt;br /&gt;Автор темы: Волчачка&lt;br /&gt;Автор последнего сообщения: sumert&lt;br /&gt;Количество ответов: 30</description>
			<content:encoded>Приветствую вас дорогие мои друзья, сегодня я вместо Дуосоры Солстикова , поясню о циклах. Начнём с того, что он именуется начальным ключевым словом - &lt;b&gt;loop&lt;/b&gt; и закрывается ключевым словом &lt;b&gt;endloop&lt;/b&gt;, а условный оператор выхода называется - &lt;b&gt;exitwhen&lt;/b&gt;, который прерывает цикл, если условие становиться истинным. &lt;br /&gt; loop - начало цикла &lt;br /&gt; exitwhen - условный выхода из цикла. Условный выход будет выполнен, если условие для выхода из цикла станет истинным. &lt;br /&gt; endloop - конец цикла &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;Код&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;function Test takes nothing returns nothing &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local integer i = 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;loop &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set i = i + 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exitwhen i == 12 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endloop &lt;br /&gt; endfunction&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt;&lt;br /&gt; Цикл может повторяться неограниченное кол-во раз, но однако в зависимости от мощности процессора может обрабатывать в течении микро времени n-ое кол-во повтором, или зациклится совсем или сломает поток, в котором он работает. Это было проверенно в ходе тестов, когда просто тестировал может ли он делать больше повторов. &lt;br /&gt; Когда поставил условие выхода примерно больше 10000 раз, то он неожиданного не завершался, проверял через таймер, было всего 9820 повторов, на другой машине по мощнее он делал больше. &lt;br /&gt;&lt;br /&gt; &lt;b&gt;exitwhen&lt;/b&gt; {Условие 1,Условие N ...} может принимать несколько условий. &lt;br /&gt; i &gt;= 12 or b or not b2 &lt;br /&gt;&lt;br /&gt; Примеры: &lt;br /&gt; exitwhen i == 12; exitwhen p == null or b; exitwhen not b; и т.д. &lt;br /&gt; Рекомендую использовать для выхода из цикла or для двух условий и использовал логическую переменную. &lt;br /&gt; Не рекомендую использовать and, т.к. считаю не особо полезным для цикла. &lt;br /&gt;&lt;br /&gt; Для циклов с шагом, который использует локальную переменную или одну и туже глобальную переменную, которая используется разными циклами нужно обнулять. &lt;br /&gt;&lt;br /&gt; Чаще всего циклы используются для инициализации по умолчанию переменных, в основном глобальных переменных массивов, а так же для для того зарегистрировать несколько игроков на 1 триггер. Самое наибольшее применение для охвата боевых единиц вокруг определённого воина. &lt;br /&gt;&lt;br /&gt; А теперь мы рассмотрим один из вариантов использования цикла в данном примере. &lt;br /&gt;&lt;br /&gt; Допустим, у нас есть карта, где герой по имени Николай исцеляет здоровье всем союзникам и себе в размере 100 ед., каждые 120 секунд. И нам нужно написать код, который делал бы всё сие данное действие. Для этого мы напишем функцию HealNicholas, в который будет цикл, сортирующий воинов, которые будут исцелены согласно условию. &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;Код&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;function HealNicholas takes nothing returns nothing &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local unit p = null &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call GroupEnumUnitsInRange( udg_Group, GetUnitX(udg_Unit&amp;#41;, GetUnitY(udg_Unit&amp;#41;, 500., null &amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;loop &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set p = FirstOfGroup( udg_Group &amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exitwhen p == null &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if not IsUnitType( p, UNIT_TYPE_DEAD &amp;#41; and IsUnitAlly( p, udg_Player &amp;#41; and&amp;nbsp;&amp;nbsp;not IsUnitType( p, UNIT_TYPE_ANCIENT &amp;#41; and not IsUnitType( p, UNIT_TYPE_STRUCTURE &amp;#41; then &lt;br /&gt;&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;call SetUnitState( p, UNIT_STATE_LIFE, GetUnitState( p, UNIT_STATE_LIFE &amp;#41; + 100. &amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call GroupRemoveUnit( udg_Group, p &amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endloop &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set p = null &lt;br /&gt; endfunction&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt;&lt;br /&gt; native GroupEnumUnitsInRange takes group whichGroup&lt;sup&gt;1&lt;/sup&gt;, real x&lt;sup&gt;2&lt;/sup&gt;, real y&lt;sup&gt;3&lt;/sup&gt;, real radius&lt;sup&gt;4&lt;/sup&gt;, boolexpr filter&lt;sup&gt;5&lt;/sup&gt; returns nothing &lt;br /&gt; Охватывает вокруг точки координат x,y боевых единиц. &lt;br /&gt; 1 - группа, в которую добавляются боевые единицы сие данной функцией. &lt;br /&gt; 2,3 - координаты, где функция перебирает боевых единиц. &lt;br /&gt; 4 - радиус, по площади которого функция перебирает боевых единиц &lt;br /&gt; boolexpr filter - фильтр которому, данная боевая единица будет добавлена в группу, иначе сие добавления не будет. Используемый тип для данного filterfunc, для этого создаётся функция фильтра, с возвращением логического значения. Внутри фильтр функции можно написать условия, для включения перечисляемой боевой единицы в группу(Отряд). &lt;br /&gt; native FirstOfGroup takes group whichGroup returns unit - Возвращает первую боевую единицу в группе(Отряде). &lt;br /&gt;&lt;br /&gt; constant native IsUnitType takes unit whichUnit, unittype whichUnitType returns boolean - возвращает логическое значение , является ли боевая единица относится к данному типу или классификации. &lt;br /&gt; UNIT_TYPE_DEAD - Если боевая единица труп (т.е. мертвая), то вернёт истину. &lt;br /&gt; UNIT_TYPE_ANCIENT - Если боевая едина древо, то вернёт истину. &lt;br /&gt; UNIT_TYPE_STRUCTURE - Если боевая едина постройка, то вернёт истину. &lt;br /&gt; constant native IsUnitAlly takes unit whichUnit, player whichPlayer returns boolean - возвращает логическое значение, выявляет является ли данная боевая единица союзником для данного игрока. &lt;br /&gt;&lt;br /&gt; native SetUnitState takes unit whichUnit, unitstate whichUnitState, real newVal returns nothing - устанавливает текущее значение маны или здоровья боевой единицы. &lt;br /&gt; constant native GetUnitState takes unit whichUnit, unitstate whichUnitState returns real - возвращает текущее или максимальное значение маны или здоровья боевой единицы. &lt;br /&gt; UNIT_STATE_LIFE - текущее значение жизни(здоровья) &lt;br /&gt; native GroupRemoveUnit takes group whichGroup, unit whichUnit returns nothing - удаляет боевую единицу из группы. &lt;br /&gt;&lt;br /&gt; В данном примере, мы просто используем условие, по которому отбирается нам нужная боевая единица для исцеления. Цикл завершиться, когда группа станет пустой, т.е. при получении б.е. в переменную p будет равна null (Это будет говорит о том, что группа пуста). &lt;br /&gt;&lt;br /&gt; &lt;div align=&quot;right&quot;&gt;&lt;i&gt;Версия 0.2&lt;/i&gt;&lt;/div&gt;</content:encoded>
			<category>GUI / Jass</category>
			<dc:creator>Волчачка</dc:creator>
			<guid>https://warcraft3ft.clan.su/forum/60-57668-1</guid>
		</item>
		<item>
			<title>[Вопрос] Random в WarCraft 3</title>
			<link>https://warcraft3ft.clan.su/forum/60-57251-1</link>
			<pubDate>Thu, 20 Aug 2015 06:37:20 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://warcraft3ft.clan.su/forum/60&quot;&gt;GUI / Jass&lt;/a&gt;&lt;br /&gt;Описание темы: Как насчёт... разобраться? :)&lt;br /&gt;Автор темы: Duosora&lt;br /&gt;Автор последнего сообщения: 1vann&lt;br /&gt;Количество ответов: 13</description>
			<content:encoded>Всё началось&lt;a class=&quot;link&quot; href=&quot;http://warcraft3ft.info/forum/22-57242-1&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt; вот с этой темы&lt;/a&gt;. Но, думаю, сделать тут обсуждение будет намного лучше. &lt;br /&gt; Предлагаю разобраться в механике работы GetRandomInt/Real. &lt;br /&gt; Для анализа через Preload Exploit я вынул &lt;a class=&quot;link&quot; href=&quot;https://warcraft3ft.clan.su/go?http://paste.ubuntu.com/10620797/&quot; title=&quot;http://paste.ubuntu.com/10620797/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;значения случайных чисел при конкретных Random Seed&lt;/a&gt; - от 0 до 5999 (могу дополнить аж до 2147483647. &lt;br /&gt;&lt;br /&gt; &lt;i&gt;Доподлинно известно, что Варкрафт применяет псевдослучайные числа, генерируемые в определённой последовательности. &lt;br /&gt; Сама последовательность - математическая рекуррентная формула, которая состоит из определённых действий и из предыдущего члена выводит следующий. Первым членом такой последовательности является некое значение Random Seed. В Варкрафте им управляют функции SetRandomSeed и GetRandomSeed (изменение и получение).&lt;/i&gt; &lt;br /&gt;&lt;br /&gt; Задача - вывести данную рекуррентную формулу. Если у кого-то есть какие-то соображения о том, что стоит попробовать или сделать - обсудим. &lt;br /&gt; Всё-таки, этот вопрос в варкрафте ещё открыт. &lt;br /&gt;&lt;br /&gt; Upd.: Из интересного материала на эту тему - распределение случайных чисел варкрафта, которое используется в атаках, уже исследовали в далёком 2008 году и прочитать об этом можно &lt;a class=&quot;link&quot; href=&quot;https://warcraft3ft.clan.su/go?http://www.playdota.com/forums/showthread.php?t=7993&quot; title=&quot;http://www.playdota.com/forums/showthread.php?t=7993&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;в теме на плейдоте&lt;/a&gt;. &lt;br /&gt; Статья на английском языке, но содержит неплохие табличные данные, основанные на математике.</content:encoded>
			<category>GUI / Jass</category>
			<dc:creator>Duosora</dc:creator>
			<guid>https://warcraft3ft.clan.su/forum/60-57251-1</guid>
		</item>
		<item>
			<title>[Система] Anti-Leak Library</title>
			<link>https://warcraft3ft.clan.su/forum/60-26099-1</link>
			<pubDate>Mon, 17 Aug 2015 13:00:17 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://warcraft3ft.clan.su/forum/60&quot;&gt;GUI / Jass&lt;/a&gt;&lt;br /&gt;Описание темы: Автоматическое удаление утечек в GUI&lt;br /&gt;Автор темы: SirNikolas&lt;br /&gt;Автор последнего сообщения: SirNikolas&lt;br /&gt;Количество ответов: 117</description>
			<content:encoded>Данная библиотека предназначена для тех, кто не хочет или не может изучать JASS, но имеет проблемы с утечками. Для использования необходимо: &lt;br /&gt; 1. Установить &lt;a class=&quot;link&quot; href=&quot;29-37497&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;JASS NewGen Pack&lt;/a&gt;. &lt;br /&gt; 2. Скачать, собственно, саму библиотеку и закинуть ее в папку ...&amp;#92;jassnewgenpack5d&amp;#92;AdicHelper&amp;#92;lib&amp;#92; &lt;br /&gt; 3. В своей карте написать в нестандартном коде: include &quot;ALL.j&quot;[spoiler=&quot;Нестандартный код здесь&quot;]&lt;img src=&quot;http://savepic.net/2358780.png&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;[/spoiler]4. Забыть об утечках. &lt;br /&gt;&lt;br /&gt; Результат - такое действие, как, например, &quot;Боевая единица - Move (Triggering unit) to ((Position of (Target unit of ability being cast)) offset by 200.00 towards (Angle from (Position of (Triggering unit)) to (Position of (Target unit of ability being cast))) degrees)&quot; &lt;b&gt;не будет оставлять утечных точек&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt; Если же Вам нужно, к примеру, занести точку или эффект в переменную для дальнейшей работы с ними, перед этим действием нужно прописать Личным сценарием (Custom script): ALL_Remove = false, а после него - ALL_Remove = true. &lt;br /&gt;&lt;br /&gt; Однако повторюсь, лучше использовать JASS, ведь вручную можно сделать все гораздо лучше. &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerZkO1WS&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerZkO1WS&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerZkO1WS&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerZkO1WS&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerZkO1WS&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Код&apos;);$(&apos;#uSpoilerZkO1WS&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerZkO1WS&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerZkO1WS&apos;)).val(&apos;[+] Код&apos;);$(&apos;#uSpoilerZkO1WS&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;[code=jass]#guard Anti_Leak_Library &lt;br /&gt;&lt;br /&gt; library ALL { &lt;br /&gt; include &quot;cj_types_priv.j&quot; &lt;br /&gt; native int GetPlayerUnitTypeCount(player p, int unitid) &lt;br /&gt; //Убираем конфликты с AntiBJ base &lt;br /&gt; setdef GetPlayerStartLocationLoc(p) = ALL_RemoveLocation(GetStartLocation##Loc(GetPlayerStartLocation(p))) &lt;br /&gt; setdef GetUnitsInRangeOfLocAll(r, l) = ALL_DestroyGroup(ALL_GetUnitsInRangeOfLocMatching(r, l, null)) &lt;br /&gt; setdef GetUnitsInRectAll&amp;reg; = ALL_DestroyGroup(ALL_GetUnitsInRectMatching(r, null)) &lt;br /&gt; setdef GetUnitsOfPlayerAll(p) = ALL_DestroyGroup(ALL_GetUnitsOfPlayerMatching(p, null)) &lt;br /&gt; setdef &lt;call AddSpecialEffectLocBJ&gt;(l, s) = call ALL_AddSpecialEffectLocBJ(l, s) &lt;br /&gt; setdef &lt;call AddSpecialEffectTargetUnitBJ&gt;(a, w, s) = call ALL_AddSpecialEffectTargetUnitBJ(a, w, s) &lt;br /&gt; //Области, созданные в функции CreateRegions, не будут прогоняться через RemoveRect &lt;br /&gt; setdef Rect(minX, minY, maxX, maxY) = ALL_RemoveRect(Re##ct(minX, minY, maxX, maxY)) &lt;br /&gt; define { &lt;br /&gt; &lt;InitCustomTriggers()&gt; = { InitCustom##Triggers(); ALL_Remove = true } &lt;br /&gt; GetPlayerStartLocationLoc(p) = GetStartLocationLoc(GetPlayerStartLocation(p)) &lt;br /&gt; GetUnitsInRangeOfLocAll(r, l) = GetUnitsInRangeOfLocMatching(r, l, null) &lt;br /&gt; GetUnitsInRectAll&amp;reg; = GetUnitsInRectMatching(r, null) &lt;br /&gt; GetUnitsOfPlayerAll(p) = GetUnitsOfPlayerMatching(p, null) &lt;br /&gt; &lt;call AddSpecialEffectLocBJ&gt;(l, s) = bj_lastCreatedEffect = AddSpecialEffectLoc(s, l) &lt;br /&gt; &lt;call AddSpecialEffectTargetUnitBJ&gt;(a, w, s) = bj_lastCreatedEffect = AddSpecialEffectTarget(a, w, s) &lt;br /&gt;&lt;br /&gt; &lt;GetCameraEyePositionLoc()&gt; = ALL_RemoveLocation(GetCameraEyePosition##Loc()) &lt;br /&gt; &lt;GetCameraTargetPositionLoc()&gt; = ALL_RemoveLocation(GetCameraTargetPosition##Loc()) &lt;br /&gt; GetDestructableLoc(d) = ALL_RemoveLocation(ALL_GetWidgetLoc(d)) &lt;br /&gt; GetItemLoc(i) = ALL_RemoveLocation(ALL_GetWidgetLoc(i)) &lt;br /&gt; &lt;GetOrderPointLoc()&gt; = ALL_RemoveLocation(GetOrderPoint##Loc()) &lt;br /&gt; GetRandomLocInRect&amp;reg; = ALL_RemoveLocation(GetRandom##LocInRect&amp;reg;) &lt;br /&gt; GetRectCenter&amp;reg; = ALL_RemoveLocation(GetRect##Center&amp;reg;) &lt;br /&gt; &lt;GetSpellTargetLoc()&gt; = ALL_RemoveLocation(GetSpellTarget##Loc()) &lt;br /&gt; GetStartLocationLoc(i) = ALL_RemoveLocation(GetStartLocation##Loc(i)) &lt;br /&gt; GetUnitLoc(u) = ALL_RemoveLocation(GetUnit##Loc(u)) &lt;br /&gt; Location(x, y) = ALL_RemoveLocation(Loc##ation(x, y)) &lt;br /&gt; MeleeGetLocWithinRect(l, r) = ALL_RemoveLocation(ALL_MeleeGetLocWithinRect(l, r)) &lt;br /&gt; MeleeGetProjectedLoc(l, targ, dist, a) = ALL_RemoveLocation(MeleeGet##ProjectedLoc(l, targ, dist, a)) &lt;br /&gt; OffsetLocation(l, x, y) = ALL_RemoveLocation(OffsetLoc##ation(l, x, y)) &lt;br /&gt; PolarProjectionBJ(l, r, a) = ALL_RemoveLocation(ALL_PolarProjectionBJ(l, r, a)) &lt;br /&gt; WaygateGetDestinationLocBJ(u) = ALL_RemoveLocation(Waygate##GetDestinationLocBJ(u)) &lt;br /&gt; GetRectFromCircleBJ(l, r) = ALL_RemoveRect(ALL_RectFromCenterSizeBJ_GetRectFromCircleBJ(l, r, .0, false)) &lt;br /&gt; OffsetRectBJ(r, x, y) = ALL_RemoveRect(OffsetRect##BJ(r, x, y)) &lt;br /&gt; Rect(minX, minY, maxX, maxY) = Re##ct(minX, minY, maxX, maxY) &lt;br /&gt; RectFromCenterSizeBJ(l, width, heigth) = ALL_RemoveRect(ALL_RectFromCenterSizeBJ_GetRectFromCircleBJ(l, width, heigth, true)) &lt;br /&gt; RectFromLoc(min, max) = ALL_RemoveRect(RectFrom##Loc(min, max)) &lt;br /&gt; CountLivingPlayerUnitsOfTypeId(id, p) = GetPlayerUnitTypeCount(p, id) &lt;br /&gt; GetUnitsInRangeOfLocMatching(r, l, b) = ALL_DestroyGroup(ALL_GetUnitsInRangeOfLocMatching(r, l, b)) &lt;br /&gt; GetUnitsInRectMatching(r, b) = ALL_DestroyGroup(ALL_GetUnitsInRectMatching(r, b)) &lt;br /&gt; GetUnitsInRectOfPlayer(r, p) = ALL_DestroyGroup(ALL_GetUnitsInRectOfPlayer(r, p)) &lt;br /&gt; GetUnitsOfPlayerAndTypeId(p, id) = ALL_DestroyGroup(ALL_GetUnitsOfPlayerAndTypeId(p, id)) &lt;br /&gt; GetUnitsOfPlayerMatching(p, b) = ALL_DestroyGroup(ALL_GetUnitsOfPlayerMatching(p, b)) &lt;br /&gt; GetUnitsOfTypeIdAll(id) = ALL_DestroyGroup(ALL_GetUnitsOfTypeIdAll(id)) &lt;br /&gt; GetUnitsSelectedAll(p) = ALL_DestroyGroup(ALL_GetUnitsSelectedAll(p)) &lt;br /&gt; GetForceOfPlayer(p) = ALL_DestroyForce(ALL_GetForceOfPlayer(p)) &lt;br /&gt; GetPlayersAllies(p) = ALL_DestroyForce(ALL_GetPlayersAllies(p)) &lt;br /&gt; GetPlayersByMapControl(mc) = ALL_DestroyForce(ALL_GetPlayersByMapControl(mc)) &lt;br /&gt; GetPlayersEnemies(p) = ALL_DestroyForce(ALL_GetPlayersEnemies(p)) &lt;br /&gt; GetPlayersMatching(b) = ALL_DestroyForce(ALL_GetPlayersMatching(b)) &lt;br /&gt; MultiboardSetItemStyleBJ(mb, col, row, showVal, showIcon) = ALL_MultiboardSetItemStyleBJ(mb, col, row, showVal, showIcon) &lt;br /&gt; MultiboardSetItemValueBJ(mb, col, row, val) = ALL_MultiboardSetItemValueBJ(mb, col, row, val) &lt;br /&gt; MultiboardSetItemColorBJ(mb, col, row, r, g, b, t) = ALL_MultiboardSetItemValueColorBJ(mb, col, row, r, g, b, t) &lt;br /&gt; MultiboardSetItemWidthBJ(mb, col, row, width) = ALL_MultiboardSetItemWidthBJ(mb, col, row, width) &lt;br /&gt; MultiboardSetItemIconBJ(mb, col, row, icon) = ALL_MultiboardSetItemIconBJ(mb, col, row, icon) &lt;br /&gt; &lt;call ALL_AddSpecialEffectLocBJ&gt;(l, s) = { &lt;br /&gt; if ALL_Remove { &lt;br /&gt; bj_lastCreatedEffect = null &lt;br /&gt; DestroyEffect(AddSpecialEffectLoc(s, l)) &lt;br /&gt; } else { &lt;br /&gt; bj_lastCreatedEffect = AddSpecialEffectLoc(s, l) &lt;br /&gt; } &lt;br /&gt; } &lt;br /&gt; &lt;call ALL_AddSpecialEffectTargetUnitBJ&gt;(a, w, s) = { &lt;br /&gt; if ALL_Remove { &lt;br /&gt; bj_lastCreatedEffect = null &lt;br /&gt; DestroyEffect(AddSpecialEffectTarget(s, w, a)) &lt;br /&gt; } else { &lt;br /&gt; bj_lastCreatedEffect = AddSpecialEffectTarget(s, w, a) &lt;br /&gt; } &lt;br /&gt; } &lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; enum (ALL_Leak) { &lt;br /&gt; private LocationLeak &lt;br /&gt; private RectLeak &lt;br /&gt; private GroupLeak &lt;br /&gt; private ForceLeak &lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; private constant timer Timer = CreateTimer() &lt;br /&gt; private int MaxVar = -1 &lt;br /&gt; private int array LeakNum &lt;br /&gt; private location array LocationVar &lt;br /&gt; private rect array RectVar &lt;br /&gt; private group array GroupVar &lt;br /&gt; private force array ForceVar &lt;br /&gt; private group Group &lt;br /&gt; private force Force &lt;br /&gt; public bool Remove = false &lt;br /&gt;&lt;br /&gt; private void RemoveLeak() { &lt;br /&gt; do { &lt;br /&gt; if MaxVar:LeakNum &lt; GroupLeak { &lt;br /&gt; if MaxVar:LeakNum &lt; RectLeak { &lt;br /&gt; RemoveLocation(MaxVar:LocationVar) &lt;br /&gt; } else { &lt;br /&gt; RemoveRect(MaxVar:RectVar) &lt;br /&gt; } &lt;br /&gt; } elseif MaxVar:LeakNum &lt; ForceLeak { &lt;br /&gt; DestroyGroup(MaxVar:GroupVar) &lt;br /&gt; } else { &lt;br /&gt; DestroyForce(MaxVar:ForceVar) &lt;br /&gt; } &lt;br /&gt; } whilenot --MaxVar &lt; 0 &lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; public rect RemoveRect(rect leak) { &lt;br /&gt; if Remove { &lt;br /&gt; MaxVar++ &lt;br /&gt; MaxVar:RectVar = leak &lt;br /&gt; MaxVar:LeakNum = RectLeak &lt;br /&gt; if MaxVar == 0 { TimerStart(Timer, .0, false, function RemoveLeak) } &lt;br /&gt; } &lt;br /&gt; return leak &lt;br /&gt; } &lt;br /&gt; public rect RectFromCenterSizeBJ_GetRectFromCircleBJ(location l, real width, real height, bool b) { &lt;br /&gt; real x = GetLocationX(l), y = GetLocationY(l) &lt;br /&gt; if b { &lt;br /&gt; width *= .5 &lt;br /&gt; height *= .5 &lt;br /&gt; return Re##ct(x - width, y - height, x + width, y + height) &lt;br /&gt; } &lt;br /&gt; return Re##ct(x - width, y - width, x + width, y + width) &lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; public location RemoveLocation(location leak) { &lt;br /&gt; if Remove { &lt;br /&gt; MaxVar++ &lt;br /&gt; MaxVar:LocationVar = leak &lt;br /&gt; MaxVar:LeakNum = LocationLeak &lt;br /&gt; if MaxVar == 0 { TimerStart(Timer, .0, false, function RemoveLeak) } &lt;br /&gt; } &lt;br /&gt; return leak &lt;br /&gt; } &lt;br /&gt; public location GetWidgetLoc(widget w) { &lt;br /&gt; return Loc##ation(GetWidgetX(w), GetWidgetY(w)) &lt;br /&gt; } &lt;br /&gt; public location PolarProjection##BJ(location l, real r, real a) { &lt;br /&gt; a *= .0174533 &lt;br /&gt; return Loc##ation(GetLocationX(l) + Cos(a) * r, GetLocationY(l) + Sin(a) * r) &lt;br /&gt; } &lt;br /&gt; public location MeleeGetLoc##WithinRect(location l, rect r) { &lt;br /&gt; real minX = GetRectMinX&amp;reg;, maxX = GetRectMaxX&amp;reg;, &amp;#92; &lt;br /&gt; minY = GetRectMinY&amp;reg;, maxY = GetRectMaxY&amp;reg; &lt;br /&gt; real x = GetLocationX(l), y = GetLocationY(l) &lt;br /&gt; if x &lt; minX { &lt;br /&gt; x = minX &lt;br /&gt; } elseif x &gt; maxX { &lt;br /&gt; x = maxX &lt;br /&gt; } &lt;br /&gt; if y &lt; minY { &lt;br /&gt; return Loc##ation(x, minY) &lt;br /&gt; } elseif y &gt; maxY { &lt;br /&gt; return Loc##ation(x, maxY) &lt;br /&gt; } &lt;br /&gt; return Loc##ation(x, y) &lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; public group DestroyGroup(group leak) { &lt;br /&gt; if Remove { &lt;br /&gt; MaxVar++ &lt;br /&gt; MaxVar:GroupVar = leak &lt;br /&gt; MaxVar:LeakNum = GroupLeak &lt;br /&gt; if MaxVar == 0 { TimerStart(Timer, .0, false, function RemoveLeak) } &lt;br /&gt; } &lt;br /&gt; return leak &lt;br /&gt; } &lt;br /&gt; public group GetUnitsInRange##OfLocMatching(real r, location l, boolexpr b) { &lt;br /&gt; Group = CreateGroup() &lt;br /&gt; GroupEnumUnitsInRangeOfLoc(Group, l, r, b) &lt;br /&gt; return Group &lt;br /&gt; } &lt;br /&gt; public group GetUnitsInRect##Matching(rect r, boolexpr b) { &lt;br /&gt; Group = CreateGroup() &lt;br /&gt; GroupEnumUnitsInRect(Group, r, b) &lt;br /&gt; return Group &lt;br /&gt; } &lt;br /&gt; public group GetUnitsInRect##OfPlayer(rect r, player p) { &lt;br /&gt; Group = CreateGroup() &lt;br /&gt; bj_groupEnumOwningPlayer = p &lt;br /&gt; GroupEnumUnitsInRect(Group, r, filterGetUnitsInRectOfPlayer) &lt;br /&gt; return Group &lt;br /&gt; } &lt;br /&gt; public group GetUnitsOfPlayer##Matching(player p, boolexpr b) { &lt;br /&gt; Group = CreateGroup() &lt;br /&gt; GroupEnumUnitsOfPlayer(Group, p, b) &lt;br /&gt; return Group &lt;br /&gt; } &lt;br /&gt; public group GetUnitsOfPlayer##AndTypeId(player p, int id) { &lt;br /&gt; Group = CreateGroup() &lt;br /&gt; bj_groupEnumTypeId = id &lt;br /&gt; GroupEnumUnitsOfPlayer(Group, p, filterGetUnitsOfPlayerAndTypeId) &lt;br /&gt; return Group &lt;br /&gt; } &lt;br /&gt; public group GetUnitsOfTypeId##All(int id) { &lt;br /&gt; group g = CreateGroup() &lt;br /&gt; bj_groupAddGroupDest = CreateGroup() &lt;br /&gt; bj_groupEnumTypeId = id &lt;br /&gt; for (int i = 0) { &lt;br /&gt; GroupEnumUnitsOfPlayer(g, Player(i), filterGetUnitsOfTypeIdAll) &lt;br /&gt; ForGroup(g, function GroupAddGroupEnum) &lt;br /&gt; exitwhen i == 15 &lt;br /&gt; i++ &lt;br /&gt; } &lt;br /&gt; Destroy##Group(g) &lt;br /&gt; g = null &lt;br /&gt; return bj_groupAddGroupDest &lt;br /&gt; } &lt;br /&gt; public group GetUnits##SelectedAll(player p) { &lt;br /&gt; Group = CreateGroup() &lt;br /&gt; SyncSelections() &lt;br /&gt; GroupEnumUnitsSelected(Group, p, null) &lt;br /&gt; return Group &lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; public force DestroyForce(force leak) { &lt;br /&gt; if Remove { &lt;br /&gt; MaxVar++ &lt;br /&gt; MaxVar:ForceVar = leak &lt;br /&gt; MaxVar:LeakNum = ForceLeak &lt;br /&gt; if MaxVar == 0 { TimerStart(Timer, .0, false, function RemoveLeak) } &lt;br /&gt; } &lt;br /&gt; return leak &lt;br /&gt; } &lt;br /&gt; public force GetForce##OfPlayer(player p) { &lt;br /&gt; Force = CreateForce() &lt;br /&gt; ForceAddPlayer(Force, p) &lt;br /&gt; return Force &lt;br /&gt; } &lt;br /&gt; public force GetPlay##ersAllies(player p) { &lt;br /&gt; Force = CreateForce() &lt;br /&gt; ForceEnumAllies(Force, p, null) &lt;br /&gt; return Force &lt;br /&gt; } &lt;br /&gt; public force GetPlayersByMap##Control(mapcontrol mc) { &lt;br /&gt; player p = Player(0) &lt;br /&gt; Force = CreateForce() &lt;br /&gt; for (int i = 0) { &lt;br /&gt; if GetPlayerController(p) == mc { &lt;br /&gt; ForceAddPlayer(Force, p) &lt;br /&gt; } &lt;br /&gt; exitwhen i == 15 &lt;br /&gt; p = Player(++i) &lt;br /&gt; } &lt;br /&gt; p = null &lt;br /&gt; return Force &lt;br /&gt; } &lt;br /&gt; public force GetPlay##ersEnemies(player p) { &lt;br /&gt; Force = CreateForce() &lt;br /&gt; ForceEnumEnemies(Force, p, null) &lt;br /&gt; return Force &lt;br /&gt; } &lt;br /&gt; public force GetPlay##ersMatching(boolexpr b) { &lt;br /&gt; Force = CreateForce() &lt;br /&gt; ForceEnumPlayers(Force, b) &lt;br /&gt; return Force &lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; //! textmacro ALL__RegisterMultiboardUpdater takes NAME, ARGS, PARAMS, PRE &lt;br /&gt; public void Multiboard##SetItem$NAME$BJ(multiboard mb, int col, int row, $ARGS$) { &lt;br /&gt; int rows = MultiboardGetRowCount(mb) &lt;br /&gt; int cols = MultiboardGetColumnCount(mb) &lt;br /&gt; multiboarditem mbi &lt;br /&gt; $PRE$ &lt;br /&gt; if col == 0 { &lt;br /&gt; if row == 0 { &lt;br /&gt; MultiboardSetItems$NAME$(mb, $PARAMS$) &lt;br /&gt; } else { &lt;br /&gt; row-- &lt;br /&gt; for (int i = 0; i &lt; cols; i++) { &lt;br /&gt; mbi = MultiboardGetItem(mb, row, i) &lt;br /&gt; MultiboardSetItem$NAME$(mbi, $PARAMS$) &lt;br /&gt; MultiboardReleaseItem(mbi) &lt;br /&gt; } &lt;br /&gt; } &lt;br /&gt; } elseif row == 0 { &lt;br /&gt; col-- &lt;br /&gt; for (int i = 0; i &lt; rows; i++) { &lt;br /&gt; mbi = MultiboardGetItem(mb, i, col) &lt;br /&gt; MultiboardSetItem$NAME$(mbi, $PARAMS$) &lt;br /&gt; MultiboardReleaseItem(mbi) &lt;br /&gt; } &lt;br /&gt; } else { &lt;br /&gt; mbi = MultiboardGetItem(mb, row - 1, col - 1) &lt;br /&gt; MultiboardSetItem$NAME$(mbi, $PARAMS$) &lt;br /&gt; MultiboardReleaseItem(mbi) &lt;br /&gt; } &lt;br /&gt; mbi = null &lt;br /&gt; } &lt;br /&gt; //! endtextmacro &lt;br /&gt; //! runtextmacro ALL__RegisterMultiboardUpdater(&quot;Style&quot;, &quot;bool showVal, bool showIcon&quot;, &quot;showVal, showIcon&quot;, &quot;&quot;) &lt;br /&gt; //! runtextmacro ALL__RegisterMultiboardUpdater(&quot;Value&quot;, &quot;string val&quot;, &quot;val&quot;, &quot;&quot;) &lt;br /&gt; //! runtextmacro ALL__RegisterMultiboardUpdater(&quot;ValueColor&quot;, &quot;real red, real green, real blue, real trans&quot;, &quot;r, g, b, t&quot;, &quot;int r = R2I(red * 2.55), g = R2I(green * 2.55), b = R2I(blue * 2.55), t = 255 - R2I(trans * 2.55)&quot;) &lt;br /&gt; //! runtextmacro ALL__RegisterMultiboardUpdater(&quot;Width&quot;, &quot;real width&quot;, &quot;width&quot;, &quot;width *= .01&quot;) &lt;br /&gt; //! runtextmacro ALL__RegisterMultiboardUpdater(&quot;Icon&quot;, &quot;string icon&quot;, &quot;icon&quot;, &quot;&quot;) &lt;br /&gt; }[/code]&lt;!--/ust--&gt;&lt;!--usn(=Код)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>GUI / Jass</category>
			<dc:creator>SirNikolas</dc:creator>
			<guid>https://warcraft3ft.clan.su/forum/60-26099-1</guid>
		</item>
		<item>
			<title>Number Key Press Event v1.1</title>
			<link>https://warcraft3ft.clan.su/forum/60-57624-1</link>
			<pubDate>Wed, 12 Aug 2015 06:34:37 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://warcraft3ft.clan.su/forum/60&quot;&gt;GUI / Jass&lt;/a&gt;&lt;br /&gt;Автор темы: Samedy_&lt;br /&gt;Автор последнего сообщения: Samedy_&lt;br /&gt;Количество ответов: 11</description>
			<content:encoded>&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://puu.sh/jxgq7/90bd7bc99c.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;&lt;/div&gt; &lt;br /&gt; &lt;hr /&gt;Наверное многие это уже видели, но я все же сообщу, так как есть вопросы по поводу того как отследить какие-то кнопки. Так вот, &lt;a class=&quot;link&quot; href=&quot;https://warcraft3ft.clan.su/go?http://www.hiveworkshop.com/forums/members/quilnez/&quot; title=&quot;http://www.hiveworkshop.com/forums/members/quilnez/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Quilnez&lt;/a&gt; относительно недавно написал систему отлова клавиш 1, 2... - ...9, 0. &lt;br /&gt; Мне система жутко понравилась тем, что теперь можно биндить способности в rpg-шках так же, как WoWке. &lt;br /&gt; Единственный недостаток, который я заметил, система вроде как юзает дамми. С юнита слетает выбор в момент нажатия клавиши. Если я правильно понял, то там отслеживается бинд даммика, а не сама нажатая клавиша. Тем не менее, это все равно круто.)) &lt;br /&gt; &lt;hr /&gt; &lt;br /&gt; &lt;a class=&quot;link&quot; href=&quot;https://warcraft3ft.clan.su/go?http://www.hiveworkshop.com/forums/spells.php?p=download&amp;id=0ukcx7&amp;toast=3cc5ae3888799dfe4354e5571594de41&amp;dateline=1439277030&quot; title=&quot;http://www.hiveworkshop.com/forums/spells.php?p=download&amp;id=0ukcx7&amp;toast=3cc5ae3888799dfe4354e5571594de41&amp;dateline=1439277030&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;скачать Number Key Press Event v1.1&lt;/a&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerCQNY4v&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerCQNY4v&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerCQNY4v&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerCQNY4v&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerCQNY4v&apos;)).val(&apos;[&amp;#92;&amp;#8211;] vjass&apos;);$(&apos;#uSpoilerCQNY4v&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerCQNY4v&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerCQNY4v&apos;)).val(&apos;[+] vjass&apos;);$(&apos;#uSpoilerCQNY4v&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] vjass&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;library NumberKeyEvent initializer init uses Table &lt;br /&gt;&lt;br /&gt; // Configurations &lt;br /&gt; globals &lt;br /&gt; // Hot key dummy&apos;s raw code in OE &lt;br /&gt; private constant integer DUMMY_ID = &apos;h000&apos; &lt;br /&gt;&lt;br /&gt; // Location of dummy, better to be an invisible spot &lt;br /&gt; // in your map &lt;br /&gt; private constant real DUMMY_X = 2521.32 &lt;br /&gt; private constant real DUMMY_Y = -2827.15 &lt;br /&gt;&lt;br /&gt; // Delay after calibration to activate the event &lt;br /&gt; private constant real ACTIVE_DELAY = 0.25 &lt;br /&gt;&lt;br /&gt; endglobals &lt;br /&gt;&lt;br /&gt; /******************************************************* &lt;br /&gt; * &lt;br /&gt; * NumberKeyEvent v1.1 &lt;br /&gt; * ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ &lt;br /&gt; * &lt;br /&gt; * Description &lt;br /&gt; * ¯¯¯¯¯¯¯¯¯¯¯ &lt;br /&gt; * Allows you to do actions when a player presses &lt;br /&gt; * any number key (0-9) &lt;br /&gt; * &lt;br /&gt; * &lt;br /&gt; * Cons &lt;br /&gt; * ¯¯¯¯ &lt;br /&gt; * - Needs calibration (check demo) &lt;br /&gt; * - Disturbs unit selection &lt;br /&gt; * &lt;br /&gt; * &lt;br /&gt; * Requires &lt;br /&gt; * ¯¯¯¯¯¯¯¯ &lt;br /&gt; * - Table by Bribe | hiveworkshop.com/forums/jass-resources-412/snippet-new-table-188084/ &lt;br /&gt; * &lt;br /&gt; * &lt;br /&gt; * How to import &lt;br /&gt; * ¯¯¯¯¯¯¯¯¯¯¯¯¯ &lt;br /&gt; * - Copy dummy unit from object editor to your map &lt;br /&gt; * - Copy the trigger folder to your map &lt;br /&gt; * - Configure the system properly &lt;br /&gt; * &lt;br /&gt; * &lt;br /&gt; * API &lt;br /&gt; * ¯¯¯ &lt;br /&gt; * function CalibrateKeys takes integer playerId returns nothing &lt;br /&gt; * &lt;br /&gt; * function RegisterAnyNumberKeyEvent takes boolexpr func returns triggercondition &lt;br /&gt; * &lt;br /&gt; * function UnregisterAnyNumberKeyEvent takes triggercondition tc returns nothing &lt;br /&gt; * &lt;br /&gt; * function GetPressedNumberKey takes nothing returns integer &lt;br /&gt; * &lt;br /&gt; * function GetPressingPlayer takes nothing returns player &lt;br /&gt; * &lt;br /&gt; * &lt;br /&gt; * Notes &lt;br /&gt; * ¯¯¯¯¯ &lt;br /&gt; * - Better to preserve an invisible area for dummy &lt;br /&gt; * units to avoid unwanted camera panning &lt;br /&gt; * - You will surely need some work around in adapting &lt;br /&gt; * the system to your map &lt;br /&gt; * - Player must press CTRL when CalibrateKeys function &lt;br /&gt; * is called &lt;br /&gt; * - You must allow players to calibrate their keys &lt;br /&gt; * anytime whenever they want, in case the calibration &lt;br /&gt; * is failed, since there is no &quot;fast&quot; way to validate &lt;br /&gt; * the calibration (perhaps not yet) &lt;br /&gt; * &lt;br /&gt; * &lt;br /&gt; ********************************************************/ &lt;br /&gt;&lt;br /&gt; globals &lt;br /&gt; private unit array KeyUnit &lt;br /&gt; private boolean array IsCalibrated &lt;br /&gt; private boolean array IsRegistered &lt;br /&gt; private timer array DelayTimer &lt;br /&gt; private trigger Handler = CreateTrigger() &lt;br /&gt; private integer EventPressed &lt;br /&gt; private player EventPresser &lt;br /&gt; private Table Ht &lt;br /&gt; endglobals &lt;br /&gt;&lt;br /&gt; private function onSelection takes nothing returns boolean &lt;br /&gt;&lt;br /&gt; local unit u = GetTriggerUnit() &lt;br /&gt; local player p = GetOwningPlayer(u) &lt;br /&gt; local integer id = GetPlayerId(p) &lt;br /&gt;&lt;br /&gt; if GetLocalPlayer() == p then &lt;br /&gt; call ClearSelection() &lt;br /&gt; endif &lt;br /&gt; if IsCalibrated[id] then &lt;br /&gt; set EventPresser = p &lt;br /&gt; set EventPressed = Ht.integer[GetHandleId(u)] &lt;br /&gt; call TriggerEvaluate(Handler) &lt;br /&gt; set EventPressed = 0 &lt;br /&gt; set EventPresser = null &lt;br /&gt; endif &lt;br /&gt; set u = null &lt;br /&gt;&lt;br /&gt; return false &lt;br /&gt; endfunction &lt;br /&gt;&lt;br /&gt; private function activate takes nothing returns nothing &lt;br /&gt; set IsCalibrated[Ht.integer[GetHandleId(GetExpiredTimer())]] = true &lt;br /&gt; endfunction &lt;br /&gt;&lt;br /&gt; function CalibrateKeys takes integer playerId returns nothing &lt;br /&gt;&lt;br /&gt; local integer i &lt;br /&gt;&lt;br /&gt; if IsRegistered[playerId] then &lt;br /&gt; set IsCalibrated[playerId] = false &lt;br /&gt; if GetLocalPlayer() == Player(playerId) then &lt;br /&gt; set i = 0 &lt;br /&gt; loop &lt;br /&gt; exitwhen i &gt; 9 &lt;br /&gt; call ClearSelection() &lt;br /&gt; call SelectUnit(KeyUnit[playerId*0xA+i], true) &lt;br /&gt; call ForceUIKey(I2S(i)) &lt;br /&gt; set i = i + 1 &lt;br /&gt; endloop &lt;br /&gt; call ClearSelection() &lt;br /&gt; endif &lt;br /&gt; call TimerStart(DelayTimer[playerId], ACTIVE_DELAY, false, function activate) &lt;br /&gt; endif &lt;br /&gt;&lt;br /&gt; endfunction &lt;br /&gt;&lt;br /&gt; function GetPressedNumberKey takes nothing returns integer &lt;br /&gt; return EventPressed &lt;br /&gt; endfunction &lt;br /&gt;&lt;br /&gt; function GetPressingPlayer takes nothing returns player &lt;br /&gt; return EventPresser &lt;br /&gt; endfunction &lt;br /&gt;&lt;br /&gt; function RegisterAnyNumberKeyEvent takes boolexpr func returns triggercondition &lt;br /&gt; return TriggerAddCondition(Handler, func) &lt;br /&gt; endfunction &lt;br /&gt;&lt;br /&gt; function UnregisterAnyNumberKeyEvent takes triggercondition tc returns nothing &lt;br /&gt; call TriggerRemoveCondition(Handler, tc) &lt;br /&gt; endfunction &lt;br /&gt;&lt;br /&gt; private function init takes nothing returns nothing &lt;br /&gt;&lt;br /&gt; local trigger t = CreateTrigger() &lt;br /&gt; local integer i = 0 &lt;br /&gt; local integer j &lt;br /&gt; local integer k &lt;br /&gt; local player p &lt;br /&gt;&lt;br /&gt; set Ht = Table.create() &lt;br /&gt; call TriggerAddCondition(t, Condition(function onSelection)) &lt;br /&gt; loop &lt;br /&gt; exitwhen i &gt; 11 &lt;br /&gt; set p = Player(i) &lt;br /&gt; set IsRegistered[i] = GetPlayerController(p) == MAP_CONTROL_USER and GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING &lt;br /&gt; if IsRegistered[i] then &lt;br /&gt; set DelayTimer[i] = CreateTimer() &lt;br /&gt; set Ht.integer[GetHandleId(DelayTimer[i])] = i &lt;br /&gt; set j = 0 &lt;br /&gt; loop &lt;br /&gt; exitwhen j &gt; 9 &lt;br /&gt; set k = i*0xA+j &lt;br /&gt; set KeyUnit[k] = CreateUnit(p, DUMMY_ID, DUMMY_X, DUMMY_Y, 0) &lt;br /&gt; call TriggerRegisterUnitEvent(t, KeyUnit[k], EVENT_UNIT_SELECTED) &lt;br /&gt; set Ht.integer[GetHandleId(KeyUnit[k])] = j &lt;br /&gt; call PauseUnit(KeyUnit[k], true) &lt;br /&gt; set j = j + 1 &lt;br /&gt; endloop &lt;br /&gt; endif &lt;br /&gt; set i = i + 1 &lt;br /&gt; endloop &lt;br /&gt;&lt;br /&gt; endfunction &lt;br /&gt;&lt;br /&gt; endlibrary&lt;!--/ust--&gt;&lt;!--usn(=vjass)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>GUI / Jass</category>
			<dc:creator>Samedy_</dc:creator>
			<guid>https://warcraft3ft.clan.su/forum/60-57624-1</guid>
		</item>
		<item>
			<title>[ВАЖНО] Общалка кодеров</title>
			<link>https://warcraft3ft.clan.su/forum/60-36350-1</link>
			<pubDate>Wed, 15 Jul 2015 19:34:47 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://warcraft3ft.clan.su/forum/60&quot;&gt;GUI / Jass&lt;/a&gt;&lt;br /&gt;Описание темы: Обмен опытом | Обсуждение проблем&lt;br /&gt;Автор темы: [DUОS]&lt;br /&gt;Автор последнего сообщения: Hormonij&lt;br /&gt;Количество ответов: 449</description>
			<content:encoded>У всех общалка есть, давайте у нас тоже сделаем &lt;img rel=&quot;usm&quot; src=&quot;http://warcraft3ft.info/image/smiles/smile.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;:)&quot; /&gt; &lt;br /&gt; Правило одно - следовать тематике, не нарушая &lt;a class=&quot;link&quot; href=&quot;http://warcraft3ft.info/forum/0-0-0-36&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;правила форума&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt; Апните, кто-нибудь &lt;img rel=&quot;usm&quot; src=&quot;http://warcraft3ft.info/image/smiles/smile.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;:)&quot; /&gt;</content:encoded>
			<category>GUI / Jass</category>
			<dc:creator>[DUОS]</dc:creator>
			<guid>https://warcraft3ft.clan.su/forum/60-36350-1</guid>
		</item>
		<item>
			<title>Вопросы про RtC и WarSoc</title>
			<link>https://warcraft3ft.clan.su/forum/60-41638-1</link>
			<pubDate>Fri, 19 Jun 2015 18:07:45 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://warcraft3ft.clan.su/forum/60&quot;&gt;GUI / Jass&lt;/a&gt;&lt;br /&gt;Автор темы: ENAleksey&lt;br /&gt;Автор последнего сообщения: ENAleksey&lt;br /&gt;Количество ответов: 11</description>
			<content:encoded>Я нашёл в файле RtCCommon.j вот это, вроде называется WarSoc API: &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;native SocTCPConnect&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes string ip, integer port, integer mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocTCPListen&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer port, integer maxqueue, integer mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocTCPAccept&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer socket, integer mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocTCPIP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer socket&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns string &lt;br /&gt; native SocSetNagle&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer socket, boolean on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocTCPConnected&amp;nbsp;&amp;nbsp;takes integer socket&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;&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;&amp;nbsp;&amp;nbsp;returns boolean &lt;br /&gt; native SocUDPConnect&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer port, integer mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocSendUDPMessage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer udpsocket, string ip, integer port, integer buffer&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;returns integer &lt;br /&gt; native SocSendTCPMessage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer tcpsocket, integer buffer&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;&amp;nbsp;returns integer &lt;br /&gt; native SocReceiveMessage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer socket, integer length, integer buffer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocPeekMessage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer socket, integer length, integer buffer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocSetFormat&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer socket, integer mode, string delimiter&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocGetLastInIP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes nothing&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;&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;&amp;nbsp;&amp;nbsp;returns string &lt;br /&gt; native SocGetLastInPort&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes nothing&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;&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;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocSetSync&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer socket, integer mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocCloseSocket&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer socket&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;&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;&amp;nbsp;&amp;nbsp;returns boolean &lt;br /&gt; native SocGetSocketLastError&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes integer socket&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;&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;&amp;nbsp;&amp;nbsp;returns integer &lt;br /&gt; native SocGetMyHost&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes nothing&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;&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;&amp;nbsp;&amp;nbsp;returns string &lt;br /&gt; native SocCompareIp&amp;nbsp;&amp;nbsp;&amp;nbsp;takes string ip, string mask&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returns boolean &lt;br /&gt; native SocExit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes nothing&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;&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;&amp;nbsp;&amp;nbsp;returns boolean &lt;br /&gt; native SocStart&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes nothing&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;&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;&amp;nbsp;&amp;nbsp;returns boolean &lt;br /&gt; native SocNetConnected&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;takes nothing&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;&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;&amp;nbsp;&amp;nbsp;returns boolean&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Расскажите, пожалуйста, как этим можно пользоваться. Ещё смотрел на Хайве, но там не очень понятно объясняется, точнее там вообще объяснений не нашёл.</content:encoded>
			<category>GUI / Jass</category>
			<dc:creator>ENAleksey</dc:creator>
			<guid>https://warcraft3ft.clan.su/forum/60-41638-1</guid>
		</item>
		<item>
			<title>[Библиотека] Битовые сдвиги в WarCraft</title>
			<link>https://warcraft3ft.clan.su/forum/60-57252-1</link>
			<pubDate>Sun, 14 Jun 2015 18:24:16 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://warcraft3ft.clan.su/forum/60&quot;&gt;GUI / Jass&lt;/a&gt;&lt;br /&gt;Автор темы: Duosora&lt;br /&gt;Автор последнего сообщения: Samedy_&lt;br /&gt;Количество ответов: 31</description>
			<content:encoded>&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;Код&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;library BitShifting initializer Init &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;globals &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private integer array PowerOfTwo&amp;#91;12] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endglobals &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function ShiftLeft takes integer x, integer bits returns integer &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return x*PowerOfTwo&amp;#91;bits] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endfunction &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function ShiftRight takes integer x, integer bits returns integer &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return x/PowerOfTwo&amp;#91;bits] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endfunction &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private function Init takes nothing returns nothing &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local integer i = 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;loop &lt;br /&gt;&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;exitwhen i &gt; 11 &lt;br /&gt;&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;set PowerOfTwo&amp;#91;i] = Pow(2,i&amp;#41; &lt;br /&gt;&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;set i=i+1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endloop &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endfunction &lt;br /&gt; endlibrary&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt;&lt;br /&gt; Написал простую библиотечку для реализации битового сдвига в варкрафте. Хотел бы узнать мнения знающих людей о том, как можно её оптимизировать. =)</content:encoded>
			<category>GUI / Jass</category>
			<dc:creator>Duosora</dc:creator>
			<guid>https://warcraft3ft.clan.su/forum/60-57252-1</guid>
		</item>
		<item>
			<title>[Вопрос] scope</title>
			<link>https://warcraft3ft.clan.su/forum/60-57311-1</link>
			<pubDate>Tue, 28 Apr 2015 10:39:31 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://warcraft3ft.clan.su/forum/60&quot;&gt;GUI / Jass&lt;/a&gt;&lt;br /&gt;Описание темы: vJass&lt;br /&gt;Автор темы: abidin&lt;br /&gt;Автор последнего сообщения: abidin&lt;br /&gt;Количество ответов: 5</description>
			<content:encoded>Вот допустим создали мы обычный триггер B,который расположен выше триггера A.После компиляции все функции в триггере B будут выше A?И можно ли вызывать функции из того триггера? &lt;br /&gt; Если заключить наши функции в триггере B в область,то где будет распологаться наша область,так же как я описал выше или по другому принципу?</content:encoded>
			<category>GUI / Jass</category>
			<dc:creator>abidin</dc:creator>
			<guid>https://warcraft3ft.clan.su/forum/60-57311-1</guid>
		</item>
		<item>
			<title>_allocate и _deallocate в структурах</title>
			<link>https://warcraft3ft.clan.su/forum/60-57249-1</link>
			<pubDate>Thu, 23 Apr 2015 20:33:45 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://warcraft3ft.clan.su/forum/60&quot;&gt;GUI / Jass&lt;/a&gt;&lt;br /&gt;Автор темы: Волчачка&lt;br /&gt;Автор последнего сообщения: Duosora&lt;br /&gt;Количество ответов: 7</description>
			<content:encoded>Код который генерирует vJass &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;Код&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; &lt;br /&gt; //Generated allocator of Ex &lt;br /&gt; function s__Ex__allocate takes nothing returns integer &lt;br /&gt;&amp;nbsp;&amp;nbsp;local integer this=si__Ex_F &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (this!=0&amp;#41; then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set si__Ex_F=si__Ex_V&amp;#91;this] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set si__Ex_I=si__Ex_I+1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set this=si__Ex_I &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (this&gt;8190&amp;#41; then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call DisplayTimedTextToPlayer(GetLocalPlayer(&amp;#41;,0,0,1000.,&quot;Unable to allocate id for an object of type: Ex&quot;&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// установка знчений &gt;&gt;&gt;&gt;| &lt;br /&gt;&amp;nbsp;&amp;nbsp;return this &lt;br /&gt; endfunction &lt;br /&gt;&lt;br /&gt; //Generated destructor of Ex &lt;br /&gt; function s__Ex_deallocate takes integer this returns nothing &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if this==null then &lt;br /&gt;&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;call DisplayTimedTextToPlayer(GetLocalPlayer(&amp;#41;,0,0,1000.,&quot;Attempt to destroy a null struct of type: Ex&quot;&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elseif (si__Ex_V&amp;#91;this]!=-1&amp;#41; then &lt;br /&gt;&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;call DisplayTimedTextToPlayer(GetLocalPlayer(&amp;#41;,0,0,1000.,&quot;Double free of type: Ex&quot;&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set si__Ex_V&amp;#91;this]=si__Ex_F &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set si__Ex_F=this &lt;br /&gt; endfunction &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&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;Код&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; &lt;br /&gt; function _allocate takes nothing returns integer &lt;br /&gt;&amp;nbsp;&amp;nbsp;local this = 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (si_&lt;stuct name&gt;_N &gt; 0&amp;#41; then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set this = si_&lt;stuct name&gt;_S&amp;#91;si_&lt;stuct name&gt;_N] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;set si_&lt;stuct name&gt;_N = si_&lt;stuct name&gt;_N - 1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (this&gt;8190&amp;#41; then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call BJDebugMsg(&quot;Unable to allocate id for an object of type: Ex&quot;&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return -2 //-2 is full &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set si_&lt;stuct name&gt;_I=si_&lt;stuct name&gt;_I+1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set this=si_&lt;stuct name&gt;_N_I &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// установка знчений &gt;&gt;&gt;&gt;| &lt;br /&gt;&amp;nbsp;&amp;nbsp;return this &lt;br /&gt; endfunction &lt;br /&gt;&lt;br /&gt; function _deallocate takes integer this returns nothing &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if this == -1 then //-1 is empty &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;call BJDebugMsg(&quot;Attempt to destroy a null struct of type: Ex&quot;&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;set si_&lt;stuct name&gt;_N = si_&lt;stuct name&gt;_N + 1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;set this = si_&lt;stuct name&gt;_S&amp;#91;si_&lt;stuct name&gt;_N] = this &lt;br /&gt;&amp;nbsp;&amp;nbsp;endif &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; endfunction &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;</content:encoded>
			<category>GUI / Jass</category>
			<dc:creator>Волчачка</dc:creator>
			<guid>https://warcraft3ft.clan.su/forum/60-57249-1</guid>
		</item>
		<item>
			<title>Протестил call TriggerRegisterDeathEvent() на предметах.</title>
			<link>https://warcraft3ft.clan.su/forum/60-57291-1</link>
			<pubDate>Thu, 16 Apr 2015 14:26:52 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://warcraft3ft.clan.su/forum/60&quot;&gt;GUI / Jass&lt;/a&gt;&lt;br /&gt;Описание темы: Называется&lt;br /&gt;Автор темы: Волчачка&lt;br /&gt;Автор последнего сообщения: Волчачка&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>Я протестировал на предметах, но результат меня дико огорчил. &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;Код&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;native TriggerRegisterDeathEvent takes trigger whichTrigger, widget whichWidget returns event&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Это функция вызвалась 4 раза, когда предмет сдыхал. &lt;br /&gt; Теперь к делу: я использовал сравнение виджета с предметом. Путём получения объекта такого предмет через GetTriggerWidget(), оно работает. Но одно но!!!!!!!!! &lt;br /&gt; Стоит одному предмету сдохнуть, сразу срабатывает другое.. Это как понимать? &lt;br /&gt; Оказывается для этого События смерти - Удаление Предмета тоже считается как смерть. &lt;br /&gt;&lt;br /&gt; Зачем я делаю такое, что убирать утечки от некоторых предметов типа книг, которые не убираются по донной воле метелей. &lt;br /&gt; Для чего я это сделал такой тест? - ну конечно ради интереса &lt;img rel=&quot;usm&quot; src=&quot;http://warcraft3ft.info/image/smiles/biggrin.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;:D&quot; /&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;Код&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; &lt;br /&gt; //?Library NoItemLeaks &lt;br /&gt; scope NoItemLeaks initializer InitFunc &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;globals &lt;br /&gt;&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;//Items Zone &lt;br /&gt;&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;private constant integer ItemStock_A = 0 &lt;br /&gt;&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;private constant integer ItemStock_Max_A = 4045 &lt;br /&gt;&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;private constant integer ItemStock_B = 4045 &lt;br /&gt;&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;private constant integer ItemStock_Max_B = 8090 &lt;br /&gt;&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;private integer ItemStock_I = 0 &lt;br /&gt;&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;private item array ItemStock &lt;br /&gt;&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;private item array ItemTempStock &lt;br /&gt;&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;//Triggers Zone &lt;br /&gt;&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;trigger TriggerZone = null &lt;br /&gt;&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;private triggeraction TriggerAct = null &lt;br /&gt;&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;private timer TriggerZoneTimer = null &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endglobals &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private function RefreshItem takes nothing returns nothing &lt;br /&gt;&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;local integer i = ItemStock_A &lt;br /&gt;&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;local integer max = ItemStock_Max_A &lt;br /&gt;&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;local integer stock = 0 &lt;br /&gt;&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;if ItemStock_I != max then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set max = ItemStock_I &lt;br /&gt;&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;endif &lt;br /&gt;&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;loop&amp;nbsp;&amp;nbsp;&lt;br /&gt;&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;exitwhen i == max &lt;br /&gt;&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;if ItemStock&amp;#91;i] != null then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set ItemTempStock&amp;#91;stock] = ItemStock&amp;#91;i] &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set stock = stock + 1 &lt;br /&gt;&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;endif &lt;br /&gt;&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;set i = i + 1 &lt;br /&gt;&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;endloop &lt;br /&gt;&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;set ItemStock_I = stock &lt;br /&gt;&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;loop&amp;nbsp;&amp;nbsp;&lt;br /&gt;&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;exitwhen i == ItemStock_I &lt;br /&gt;&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;if ItemStock&amp;#91;i] != null then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set ItemStock&amp;#91;i] = ItemTempStock&amp;#91;i] &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set stock = stock + 1 &lt;br /&gt;&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;endif &lt;br /&gt;&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;set i = i + 1 &lt;br /&gt;&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;endloop &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endfunction &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function RegisterItem takes item whichItem returns nothing &lt;br /&gt;&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;if ItemStock_I &lt;= ItemStock_Max_B then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set ItemStock&amp;#91;ItemStock_I] = whichItem &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set ItemStock_I = ItemStock_I + 1 &lt;br /&gt;&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;else &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;call RemoveItem(whichItem&amp;#41; &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;call BJDebugMsg(&quot;I don&apos;t registly greather items&quot;&amp;#41; &lt;br /&gt;&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;endif &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endfunction &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private function SeekItem takes widget whichItem returns item &lt;br /&gt;&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;local integer i = ItemStock_A &lt;br /&gt;&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;local integer max = ItemStock_Max_A &lt;br /&gt;&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;local boolean b = false &lt;br /&gt;&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;if ItemStock_I &lt; max then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set max = ItemStock_I &lt;br /&gt;&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;endif &lt;br /&gt;&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;loop &lt;br /&gt;&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;exitwhen i == ItemStock_Max_A or b &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;if whichItem == ItemStock&amp;#91;i] then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set b = true &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set i = i + 1 &lt;br /&gt;&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;endloop &lt;br /&gt;&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;if not b and ItemStock_I &gt;= ItemStock_B then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set i = ItemStock_B &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;loop &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;exitwhen i == ItemStock_I or b &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;if whichItem == ItemStock&amp;#91;i] then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set b = true &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set i = i + 1 &lt;br /&gt;&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;endloop &lt;br /&gt;&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;endif &lt;br /&gt;&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;if not b then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null &lt;br /&gt;&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;endif &lt;br /&gt;&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;return ItemStock&amp;#91;i] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endfunction &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private function ItemDeathEvent takes nothing returns nothing &lt;br /&gt;&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;local item t = SeekItem(GetTriggerWidget(&amp;#41;&amp;#41; &lt;br /&gt;&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;call BJDebugMsg(&quot;What?&quot;&amp;#41; &lt;br /&gt;&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;if t != null then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;call RemoveItem(t&amp;#41; &lt;br /&gt;&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;endif &lt;br /&gt;&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;call RefreshItem(&amp;#41; &lt;br /&gt;&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;set t = null &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endfunction &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private function callduos takes nothing returns nothing &lt;br /&gt;&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;local integer i = ItemStock_A &lt;br /&gt;&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;local integer max = ItemStock_Max_A &lt;br /&gt;&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;call TriggerRemoveAction(TriggerZone,TriggerAct&amp;#41; &lt;br /&gt;&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;call DestroyTrigger(TriggerZone&amp;#41; &lt;br /&gt;&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;set TriggerZone = CreateTrigger(&amp;#41; &lt;br /&gt;&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;set TriggerAct = TriggerAddAction(TriggerZone, function ItemDeathEvent&amp;#41; &lt;br /&gt;&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;if ItemStock_I != max then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;set max = ItemStock_I &lt;br /&gt;&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;endif &lt;br /&gt;&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;loop&amp;nbsp;&amp;nbsp;&lt;br /&gt;&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;exitwhen i == max &lt;br /&gt;&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;if ItemStock&amp;#91;i] != null then &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;call TriggerRegisterDeathEvent( TriggerZone, ItemStock&amp;#91;i] &amp;#41;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&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;endif &lt;br /&gt;&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;set i = i + 1 &lt;br /&gt;&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;endloop &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endfunction &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private function InitFunc takes nothing returns nothing &lt;br /&gt;&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;set TriggerZoneTimer = CreateTimer(&amp;#41; &lt;br /&gt;&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;set TriggerZone = CreateTrigger(&amp;#41; &lt;br /&gt;&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;set TriggerAct = TriggerAddAction(TriggerZone, function ItemDeathEvent&amp;#41; &lt;br /&gt;&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;call TimerStart( TriggerZoneTimer, 300., true, function callduos &amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endfunction &lt;br /&gt; endscope &lt;br /&gt;&lt;br /&gt; function RegisterItemDeathEvent takes item whichItem returns nothing &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call RegisterItem(whichItem&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call TriggerRegisterDeathEvent( TriggerZone, whichItem &amp;#41;&amp;nbsp;&amp;nbsp;&lt;br /&gt; endfunction &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&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;Код&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; &lt;br /&gt; scope Test initializer Vexbugallant&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private function Vexbugallant takes nothing returns nothing &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call RegisterItemDeathEvent( gg_item_tint_0003 &amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call RegisterItemDeathEvent( gg_item_manh_0004 &amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call RegisterItemDeathEvent( gg_item_tint_0002 &amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call RegisterItemDeathEvent( gg_item_manh_0005 &amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endfunction &lt;br /&gt; endscope &lt;br /&gt; &lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;</content:encoded>
			<category>GUI / Jass</category>
			<dc:creator>Волчачка</dc:creator>
			<guid>https://warcraft3ft.clan.su/forum/60-57291-1</guid>
		</item>
	</channel>
</rss>