<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.appsalutecreator.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vefimov</id>
	<title>wiki.appsalutecreator.com - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.appsalutecreator.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vefimov"/>
	<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Vefimov"/>
	<updated>2026-10-17T02:12:27Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.31.15</generator>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Taskorganizer&amp;diff=8130</id>
		<title>Taskorganizer</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Taskorganizer&amp;diff=8130"/>
		<updated>2016-04-19T12:23:12Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Механизм многоуровневых достижений */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
[[Object|Объект]] Taskorganizer - Менеджер задач и квестов&lt;br /&gt;
&lt;br /&gt;
=Свойства=&lt;br /&gt;
[[Файл:Task.jpg|250px|thumb|right]]&lt;br /&gt;
[[Файл:Task_1.jpg|250px|thumb|right]]&lt;br /&gt;
'''Общие параметры'''&lt;br /&gt;
*'''economics''' - Объект типа экономикс.&lt;br /&gt;
*'''предметы''' - Объект типа eitems.&lt;br /&gt;
*'''таблица''' - Таблица куда будут помещены иконки заданий. При тапе на таблицу объекту Taskorganizer вызывается состояние show. Иконки подтягиваются из текстовой базы (icon1).&lt;br /&gt;
*'''добавлять иконки''' - 1 - добавлять в таблицу иконки, 0 - тексты из текстового id (поле word).&lt;br /&gt;
*'''шаблон предмета''' - Объект типа etaskitem будет использоваться при показе превью задания.&lt;br /&gt;
*'''фильтрация''' - Категория, которые должны будут отобразиться в таблице логов при вызове состояния logbook. Пустая строка - все.&lt;br /&gt;
*'''таблица логов''' - Таблица куда будут помещены записи логбука.&lt;br /&gt;
*'''новая запись''' - Объект, которому будет вызвано состояние show при добавлении новой записи в логбук.&lt;br /&gt;
*'''новое задание''' - Графический ресурс, который будет отмечать новые задания. Смещение должно достигаться пивотом.&lt;br /&gt;
*'''прочитанное задание''' - Графический ресурс, который будет отмечать прочитанные задания. Смещение должно достигаться пивотом (возможно указать анимацию, скорость смены кадров указываем в ресурсной базе).&lt;br /&gt;
*'''выполненное задание''' - Графический ресурс, который будет отмечать выполненные задания. Смещение должно достигаться пивотом (возможно указать анимацию, скорость смены кадров указываем в ресурсной базе)&lt;br /&gt;
*'''уведомление''' - Текстовый айди заголовка связанных с задачами уведомлений (Должно быть заполнено поле sense 4 - т.к. рандомно его будет постить).&lt;br /&gt;
*'''вероятность уведомления''' - Подменная вероятность нахождения предмета нужного для задания по уведомлению с которого мы пришли. 0 - использовать значение по умолчанию.&lt;br /&gt;
*'''выполнять непрочитанные''' - 1 - выполнять непрочитанные таски, 0 - нет.&lt;br /&gt;
*'''хронологический порядок''' - 1 - записывать задачи в хронологическом порядке, 0 - нет.&lt;br /&gt;
*'''картинки в логбук''' - Расположение картинки до или после текста.&lt;br /&gt;
*'''сдвиг уровней''' - число на которое сдвинутся требования к уровню игрока в taskorganizer_setup для каждой задачи;&lt;br /&gt;
*'''refresh при показе окна''' - 0 - нет, 1 - да. Ставим = 0 ( &amp;quot;нет&amp;quot; ), если хотим чтобы при тапе по таблице отложить сортировку и обновление статуса таска ( в определённый момент ( к примеру, когда открылось окно таска), передаём состояние '''refresh''' и таблица обновится).&lt;br /&gt;
*'''использовать накопление ошибки''' - 0 - нет, 1 - да. Ставим = 1 ( &amp;quot;да&amp;quot; ), если хотим чтобы нахождение предметов в хиддене, по таску не превышало n-раз  ( к примеру p= 0.5  (1/0.5=2 , т.е. предмет должны найти не более чем за две игры в хидн), если количество сыгранных игр &amp;gt;= максимальному по вероятности, то предмет попадает в таблицу ( мы его нашли)). Если стоит - 0 ( &amp;quot;нет&amp;quot; ), то вне зависимости от количества заходов, будет браться вероятность.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Для огранизации логбука необходимо текст поместить в sentenсe 1. Картинка, что будет отображаться с этим текстом, должна быть icon 2. Также есть возможность использовать эту картинку в качестве фона. Тогда текст, который будет отображаться поверх этой картинки, нужно разместить в sentenсe 2.&lt;br /&gt;
&amp;lt;/pre&amp;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;
*'''машина''' - Объект, которому при активации будет вызвано состояние show. Она же после угадайки будет переведена в состояние win или fail.&lt;br /&gt;
*'''иконка''' - Объект, в который сложим иконку предмета.&lt;br /&gt;
*'''иконка для таблицы''' - Иконка соответствующая угадайке в таблице задач.&lt;br /&gt;
*'''ресурс 1''' - Деньги даваемые за выполнение задания.&lt;br /&gt;
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.&lt;br /&gt;
*'''опыт''' - Опыт даваемый за выполнение задания.&lt;br /&gt;
*'''награда ресурс 1''' - Счетчик, которому будет присвоено количество призового ресурса 1.&lt;br /&gt;
*'''награда ресурс 2''' - Счетчик, которому будет присвоено количество призового ресурса 2.&lt;br /&gt;
*'''награда опыт''' - Счетчик, которому будет присвоено количество призового опыта.&lt;br /&gt;
'''Группа рулетка'''&lt;br /&gt;
&lt;br /&gt;
На самом деле название &amp;quot;рулетка&amp;quot; весьма условное. В этом разделе можно поместить любое периодически повторяющееся задание.&lt;br /&gt;
&lt;br /&gt;
*'''показывать через''' - Через какое количество обычных задач показывать рулетку.&lt;br /&gt;
*'''с уровня''' - Рулетка будет генерироваться только начиная с данного уровня.&lt;br /&gt;
*'''машина''' - Объект, которому при активации будет вызвано состояние show.&lt;br /&gt;
*'''иконка для таблицы''' - Иконка соответствующая рулетке в таблице задач.&lt;br /&gt;
'''Группа генерируемые'''&lt;br /&gt;
&lt;br /&gt;
В этой группе находятся периодически генерируемые задания на прохождение локаций.&lt;br /&gt;
&lt;br /&gt;
*'''активных задач''' - Эти задачи будут генерироваться, когда активных задач столько или меньше.&lt;br /&gt;
*'''с уровня''' - Эти задачи будут генерироваться только начиная с данного уровня.&lt;br /&gt;
*'''максимально''' - Будет сгенерированно случайное количество задач от 1 до n.&lt;br /&gt;
*'''машина''' - Объект, которому при активации будет вызвано состояние show. Она же после угадайки будет переведена в состояние win или fail.&lt;br /&gt;
*'''название''' - Текстовый объект, в который будет сложено название локации.&lt;br /&gt;
*'''превью''' - Объект, в который сложим превью локации для генерируемой задачи.&lt;br /&gt;
*'''иконка для таблицы''' - Иконка соответствующая генерируемому таску в таблице задач.&lt;br /&gt;
*'''ресурс 1''' - Деньги даваемые за выполнение задания.&lt;br /&gt;
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.&lt;br /&gt;
*'''опыт''' - Опыт даваемый за выполнение задания.&lt;br /&gt;
*'''награда ресурс 1''' - Счетчик, которому будет присвоено количество призового ресурса 1.&lt;br /&gt;
*'''награда ресурс 2''' - Счетчик, которому будет присвоено количество призового ресурса 2.&lt;br /&gt;
*'''награда опыт''' - Счетчик, которому будет присвоено количество призового опыта.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Если перед генерацией случайного таска на исследование локации указать параметру gen_loc значение от 0 до n, то ближайшая генерируемая задача будет для конкретной локации под указанным номером. После генерации параметр gen_loc становится -1.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Если перед генерацией случайного таска от персоанжа указать параметру gen_face значение от 0 до n, то ближайшая генерируемая задача будет от персонажа под указанным номером. После генерации параметр gen_face становится -1.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Группа угадаечные задачи'''&lt;br /&gt;
&lt;br /&gt;
В этой группе указываем диапазоны для генерации тасков-викторин и способ генерации.&lt;br /&gt;
&lt;br /&gt;
*'''стандартная генерация''':&lt;br /&gt;
::'''нет''' - особая генерация задач, при которой с начало генерируем задачи из _очереди 1_, потом задачи из _очереди 2_ ( Если в первой очереди мы не можем сгенерировать задачу, пытаемся сгенерировать из второй очереди). Если мы не сгенерировали задачу из обоих очередей, то мы обнуляем все таски из обоих очередей ( и сразу генерим из _очереди 1_ задачу);&lt;br /&gt;
::'''да''' - стандартная генерация одной угадайки ( начинаем сверху вниз генерить;&lt;br /&gt;
*'''очередь 1''' - Основная очередь, пытаемся из неё сгенерировать задачу, при получении Taskorganizer сост. _generate_guess_, если в предыдущем поле стоит '''нет'''. Каждая задача из этой очереди имеет условия для появления ( прохождение сюжетного таска к примеру);&lt;br /&gt;
*'''очередь 2''' - Очередь затычка, задачи из этой очереди без условий. Предназначена когда в первой очереди нету доступных тасков для генерации;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
У таскорганайзера есть поле disabled, если при каждом запуске приложения после конца туториала писать туда 1 - это приведет к удалению старого сейва и несозданию нового. Несколько килобайт выгоды в опциях + использовать только для туториального таскорганайзера, когда он отработает.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Taskorganizer setup=&lt;br /&gt;
[[Файл:Task_2.jpg|600px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
*'''id''' - Идентификатор задания. Используется в других заданиях. По общей концепции - строковый айди. Перетаскивается из текстовой базы.&lt;br /&gt;
 '''Для каждого задания(записи в logbook) должен быть свой уникальный id.'''&lt;br /&gt;
*'''хинт''' - Список строк-подсказок для задачи. Перетаскиваются из текстовой базы. Таким образом, добавив несколько записей из базы, увидим выпадающий список.&lt;br /&gt;
*'''название (объект)''' - Текстовый объект, в который мы сложим название задания. Описание подтягивается из текстовой базы из первого столбика (word) текстового id задания.&lt;br /&gt;
*'''машина''' - Объект, которому при активации задания будет вызвано состояние show, а при повторном открытии задания show_old.&lt;br /&gt;
*'''портрет''' - Объект, которому при активации задания будет устанорвлен графический ресурс рожи.&lt;br /&gt;
*'''таблица''' - Таблица куда будут помещены темплейты предметов данного задания.&lt;br /&gt;
*'''описание (объект)''' - Текстовый объект, в который мы сложим описание задания. Описание подтягивается из текстовой базы из второго столбика (sentence1) текстового id задания.&lt;br /&gt;
*'''награда (ресурс 1)''' - Счетчик отображающий награду в ресурсе 1 за выполнение задания.&lt;br /&gt;
*'''награда (ресурс 2)''' - Счетчик отображающий награду в ресурсе 2 за выполнение задания.&lt;br /&gt;
*'''награда (опыт)''' - Счетчик отображающий награду в опыте за выполнение задания.&lt;br /&gt;
*'''таблица хинта''' - Таблица, в которую будем складывать хинты.&lt;br /&gt;
&lt;br /&gt;
'''Необходимое для логбука'''&lt;br /&gt;
&lt;br /&gt;
*'''для журнала''' - 0 - задача предназначена для списка задач, 1 - задача предназначена для журнала.&lt;br /&gt;
*'''категория''' - Категория к которой относится задача/запись. Пока используется только задачами для логбука.&lt;br /&gt;
&lt;br /&gt;
'''Критерии появления'''&lt;br /&gt;
&lt;br /&gt;
*'''уровень''' - Минимальный уровень, при котором может появиться задание.&lt;br /&gt;
*'''аномалия''' - В какой-либо локации присутствует аномалия данного типа. -1 - не учитывать условие.&lt;br /&gt;
*'''локация''' - Локация для которой будем проверять мастерство. -1 - не учитывать условие.&lt;br /&gt;
*'''мастерство''' - Уровень мастерства, который должен быть достигнут в локиции. -1 - не учитывать условие.&lt;br /&gt;
*'''завершены до''' - Задания, которые должны быть завершены до появления этого.&lt;br /&gt;
*'''получены до''' - Задания, которые должны быть получены до появления этого.&lt;br /&gt;
*'''не завершены до''' - Задания, которые должны быть НЕ завершены до появления этого.&lt;br /&gt;
*'''объект до''' - Объект, который должен находиться в состоянии_до для появления задания.&lt;br /&gt;
*'''состояние до''' - Состояние объекта_до, в котором вызывается генерация задания.&lt;br /&gt;
*'''коллекционные''' - Коллекционные предметы, которые должны быть найдены для появления задания.&lt;br /&gt;
*'''вероятность нужного''' - Когда мы будем проходить локации, в которых есть предметы необходимые для задания - мы будем подменять вероятность из локации вот этой вероятностью.  0 - использовать дефолтную.&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;
*'''состояние''' - Состояние объекта, в котором вызывается проверка задания.&lt;br /&gt;
&lt;br /&gt;
'''Награда'''&lt;br /&gt;
&lt;br /&gt;
*'''ресурс 1''' - Деньги даваемые за выполнение задания.&lt;br /&gt;
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.&lt;br /&gt;
*'''опыт''' - Опыт даваемый за выполнение задания.&lt;br /&gt;
*'''перевести объект''' - При выполнении задания этот объект будет переведен в новое состояние.&lt;br /&gt;
*'''в состояние''' - Состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
==Изменить состояние объекта - новое задание==&lt;br /&gt;
&lt;br /&gt;
Позволяет изменять состояние объекту каждый раз при появлении нового задания, находится в taskorganizer setup.&lt;br /&gt;
&lt;br /&gt;
=Состояния=&lt;br /&gt;
&lt;br /&gt;
*'''show''' - При вызове этого состояния из таблицы с иконками заданий открывается соответствующая машина задания, прописанная в группе '''задание'''.&lt;br /&gt;
*'''check''' - При вызове проверяется выполнение текущих заданий(заданий добавленных в таблицу). Для того чтобы таскорганайзер добавил таски в таблицу после загрузки приложения ему нужно передать refresh.&lt;br /&gt;
*'''generate''' - При вызове подбирается подходящее задание в зависимости от прогресса игрока.&lt;br /&gt;
*'''generate_plot''' - При вызове генерится задача с персонажем ( поле генерируемые с персонажами), если перед этим передать в поле gen_face номер персонажа, то сгенерируем с указанным персонажем, после параметр обнулится ( значение -1 ). Перед вызовом данного состояния, '''обязательнo''' в поле _param_ вбить &amp;quot;1&amp;quot;.&lt;br /&gt;
*'''log_check''' - При вызове состояния проверяется доступны ли новые записи в логбук.&lt;br /&gt;
*'''log_show''' - Заполняет таблицу логбука записями с текущим фильтром.&lt;br /&gt;
*'''refresh''' - Удаляет иконку выполненного задания из таблицы. Лучше всего вызывать после Check.&lt;br /&gt;
*'''cancel''' - Удаляет задание без награды, которое указано как ID в параметре param таскорганайзера, т.е. объекту Taskorganizer в param указываем ID таска (например 1933 - берется из options.xml или текстовой базы), а потом вызываем состояние cancel.&lt;br /&gt;
*'''add_hint''' - Добавляет в таблицу хинтов следующий текстовый ID из поля хинты текущего таска. Если все хинты показаны, то в опции записывается параметр haveHints=0.&lt;br /&gt;
*'''task_prev''' - Используется, если открыта машина-шаблон текущего задания. В этом состоянии показывается предыдущее по списку таблицы задание.&lt;br /&gt;
*'''task_next''' - Показывает следующее по списку таблицы задание.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Состояния task_prev и task_next работают циклически, после первой задачи показывают последнюю и наоборот.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*'''show_id''' - Показать окно задачи, взяв ее id из параметра.&lt;br /&gt;
*'''show_last_plot''' - Открыть последнюю сгенерированную сюжетную задачу.&lt;br /&gt;
*'''guess''' - Ответить на текущую угадайку, взяв ответ из параметра (param). Taskorganizer также хранит правильный ответ на текущую угадайку в параметре ''guess_answer'', его можно использовать, если нужно оставить игроку меньше вариантов для угадывания.&lt;br /&gt;
*'''add_hint_last''' - Добавить подсказку последней добавленной задаче.&lt;br /&gt;
*'''add_hint_top''' - Добавить подсказку верхней задаче в таблице.&lt;br /&gt;
*'''guess_who_reward''' - начислить награду за последнюю угадайку.&lt;br /&gt;
*'''roulette_complete''' -состояние, вызываемое при выполнении текущей задачи &amp;quot;рулетка&amp;quot;.&lt;br /&gt;
*'''cheat_complete''' - если его вызвать, то при следующем check выполнится задача, для которой последней показывали превью.&lt;br /&gt;
*'''skip''' - При вызове этого состояния выполнится последний открытый таск. Цена скипа указывается внутри самого таска.&lt;br /&gt;
*'''check_multiple''' - Проверить выполнение задач не выходя из проверки после первой найденной.&lt;br /&gt;
&lt;br /&gt;
Состояния для работы с тасками-угадайками по типу викторины ( в taskorganizer_setup - тип = &amp;quot;угадайка&amp;quot;):&lt;br /&gt;
*'''answer''' - ответить на открытую угадайку ( в поле '''param''' должно находиться число, номер нажатой кнопки от 0 до 3 ). Вешаем на кнопки варианты-ответа ( пишем param = 0 - 3 , после передаёт _answer_); &lt;br /&gt;
*'''generate_guess''' - сгенерировать угадайку-викторину ( выберет доступные задачи из диапазона указанном в очередях ( 1 и 2) поле _угадаечные задачи_ taskorganizer). При открытии угадайки, в поле _cur_guess_answer_ объекта Taskorganizer записывается номер кнопки где лежит правильный ответ ( от 0 до 3 );&lt;br /&gt;
&lt;br /&gt;
ПРИМЕЧАНИЕ:  при проверке задач для логбука для последней выполненной будет перезаписано поле filter автоматически.&lt;br /&gt;
&lt;br /&gt;
При кажом refresh таскорганайзер заполняет у себя поля:&lt;br /&gt;
*'''tasks_in_table''' - задач в таблице&lt;br /&gt;
*'''tasks_total''' - задач в таблице + скрытых задач&lt;br /&gt;
&lt;br /&gt;
=Запись в опции=&lt;br /&gt;
&lt;br /&gt;
В процессе работы таскорганайзер записывает параметры в опции. Для конкретной задачи этот параметр представляет следующую строку:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;tasks(id таскорганайзера в проекте).t(id текстового объекта - идентификатора задания).s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Возможные значения:&lt;br /&gt;
* '''0''' - таск не активен (не добавлен путем вызова generate таскорганайзеру);&lt;br /&gt;
* '''1''' - таск сгенерирован ;&lt;br /&gt;
* '''2''' - таск прочитан (вызвано состояние show);&lt;br /&gt;
* '''3''' - таск выполнен;&lt;br /&gt;
* '''4''' - отложенное состояние таска (условия появления выполнены, но время его появления еще не прийшло);&lt;br /&gt;
* '''5''' - таск выполнен, но награда ещё не забиралась ( таск будет оставаться в таблице, если таски не выполняются автоматически);&lt;br /&gt;
&lt;br /&gt;
=Сопутствующие объекты=&lt;br /&gt;
&lt;br /&gt;
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:&lt;br /&gt;
&lt;br /&gt;
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. &lt;br /&gt;
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. &lt;br /&gt;
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета. &lt;br /&gt;
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.&lt;br /&gt;
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.&lt;br /&gt;
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.&lt;br /&gt;
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Вычитаемые параметры:=&lt;br /&gt;
Каждая таскорганайзер пишет в пользователя следующие параметры:&lt;br /&gt;
*'''public.TaskOrganizerCompletedTasks''' - количество выполненных одноразовых задач;&lt;br /&gt;
*'''public.TaskOrganizerCompletedTasksAll''' - количество выполненных задач с учётом повторяемых;&lt;br /&gt;
&lt;br /&gt;
=Механизм многоуровневых достижений=&lt;br /&gt;
С помощью таскорганайзера можно организовать систему многоуровневых достижений. Для этого используется [[Etasktemplate|темплейт задачи]]. Данные темплейты складываются в таблицу темплейтов таскорганайзера. При этом в самом таскорганайзере должна быть указанна таблица для иконок задач, хоть она и не используется (желательно вынести за границы экрана).&lt;br /&gt;
&lt;br /&gt;
Каждый уровень достижения представляет собой отдельный таск с подзадачей на опции. В поле опций этой подзадачи указываем параметр, который отображает прогресс по достижению. Чтобы создать несколько уровней достижения, нужно несколько задач одного типа (с возрастающими требованиями).&lt;br /&gt;
&lt;br /&gt;
Часть контента для достижения задается чрез текстовый объект - id таска. В текстовом объекте указываем название (word), описание невыполненной (sentence1) и выполненной (sentence2) ачивки. А также ресурс иконки ачивки (ico1), ресурс звезд для невыполненной (ico2) и выполененной (ico3) задачи.&lt;br /&gt;
Награду за достижения ачивки указываем как награду за выполнение таска. Также с помощью обработчика завершения задачи можем запустить анимацию получения ачивки.&lt;br /&gt;
&lt;br /&gt;
Для заполнения таблицы темплейтов нужно вызвать состояние '''refresh_templates''', при вызове '''check''' задача, условия которой были выполнены изменит свое состояние, при этом будут переключены ресурсы звезд, описание ачивки и спрятана кнопка темплейта '''btn'''. &lt;br /&gt;
&lt;br /&gt;
Для контроля того, какая задача будет вызвана при вызове '''check''' можно использовать следующий способ. К задаче добавляем еще одну подзадачу на опции. Когда прогресс по первой подзадаче на опции будет &amp;gt;= требуемого значения для задачи будет отображаться кнопка темплейта '''btn'''. При нажатии на эту кнопку, которая должна вызывать '''take''' темплейту задачи, в него пишется параметр clicked_task_id, по этому параметру определяем у какой задачи нужно выполнить вторую подзадачу на опции и вызываем '''check''' таскорганайзеру.&lt;br /&gt;
&lt;br /&gt;
Пример&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample&lt;br /&gt;
&lt;br /&gt;
Complex_achievements.zip&lt;br /&gt;
&lt;br /&gt;
=Пример проекта=&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample\Taskorganizer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Economics]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Taskorganizer&amp;diff=8129</id>
		<title>Taskorganizer</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Taskorganizer&amp;diff=8129"/>
		<updated>2016-04-19T11:44:28Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
[[Object|Объект]] Taskorganizer - Менеджер задач и квестов&lt;br /&gt;
&lt;br /&gt;
=Свойства=&lt;br /&gt;
[[Файл:Task.jpg|250px|thumb|right]]&lt;br /&gt;
[[Файл:Task_1.jpg|250px|thumb|right]]&lt;br /&gt;
'''Общие параметры'''&lt;br /&gt;
*'''economics''' - Объект типа экономикс.&lt;br /&gt;
*'''предметы''' - Объект типа eitems.&lt;br /&gt;
*'''таблица''' - Таблица куда будут помещены иконки заданий. При тапе на таблицу объекту Taskorganizer вызывается состояние show. Иконки подтягиваются из текстовой базы (icon1).&lt;br /&gt;
*'''добавлять иконки''' - 1 - добавлять в таблицу иконки, 0 - тексты из текстового id (поле word).&lt;br /&gt;
*'''шаблон предмета''' - Объект типа etaskitem будет использоваться при показе превью задания.&lt;br /&gt;
*'''фильтрация''' - Категория, которые должны будут отобразиться в таблице логов при вызове состояния logbook. Пустая строка - все.&lt;br /&gt;
*'''таблица логов''' - Таблица куда будут помещены записи логбука.&lt;br /&gt;
*'''новая запись''' - Объект, которому будет вызвано состояние show при добавлении новой записи в логбук.&lt;br /&gt;
*'''новое задание''' - Графический ресурс, который будет отмечать новые задания. Смещение должно достигаться пивотом.&lt;br /&gt;
*'''прочитанное задание''' - Графический ресурс, который будет отмечать прочитанные задания. Смещение должно достигаться пивотом (возможно указать анимацию, скорость смены кадров указываем в ресурсной базе).&lt;br /&gt;
*'''выполненное задание''' - Графический ресурс, который будет отмечать выполненные задания. Смещение должно достигаться пивотом (возможно указать анимацию, скорость смены кадров указываем в ресурсной базе)&lt;br /&gt;
*'''уведомление''' - Текстовый айди заголовка связанных с задачами уведомлений (Должно быть заполнено поле sense 4 - т.к. рандомно его будет постить).&lt;br /&gt;
*'''вероятность уведомления''' - Подменная вероятность нахождения предмета нужного для задания по уведомлению с которого мы пришли. 0 - использовать значение по умолчанию.&lt;br /&gt;
*'''выполнять непрочитанные''' - 1 - выполнять непрочитанные таски, 0 - нет.&lt;br /&gt;
*'''хронологический порядок''' - 1 - записывать задачи в хронологическом порядке, 0 - нет.&lt;br /&gt;
*'''картинки в логбук''' - Расположение картинки до или после текста.&lt;br /&gt;
*'''сдвиг уровней''' - число на которое сдвинутся требования к уровню игрока в taskorganizer_setup для каждой задачи;&lt;br /&gt;
*'''refresh при показе окна''' - 0 - нет, 1 - да. Ставим = 0 ( &amp;quot;нет&amp;quot; ), если хотим чтобы при тапе по таблице отложить сортировку и обновление статуса таска ( в определённый момент ( к примеру, когда открылось окно таска), передаём состояние '''refresh''' и таблица обновится).&lt;br /&gt;
*'''использовать накопление ошибки''' - 0 - нет, 1 - да. Ставим = 1 ( &amp;quot;да&amp;quot; ), если хотим чтобы нахождение предметов в хиддене, по таску не превышало n-раз  ( к примеру p= 0.5  (1/0.5=2 , т.е. предмет должны найти не более чем за две игры в хидн), если количество сыгранных игр &amp;gt;= максимальному по вероятности, то предмет попадает в таблицу ( мы его нашли)). Если стоит - 0 ( &amp;quot;нет&amp;quot; ), то вне зависимости от количества заходов, будет браться вероятность.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Для огранизации логбука необходимо текст поместить в sentenсe 1. Картинка, что будет отображаться с этим текстом, должна быть icon 2. Также есть возможность использовать эту картинку в качестве фона. Тогда текст, который будет отображаться поверх этой картинки, нужно разместить в sentenсe 2.&lt;br /&gt;
&amp;lt;/pre&amp;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;
*'''машина''' - Объект, которому при активации будет вызвано состояние show. Она же после угадайки будет переведена в состояние win или fail.&lt;br /&gt;
*'''иконка''' - Объект, в который сложим иконку предмета.&lt;br /&gt;
*'''иконка для таблицы''' - Иконка соответствующая угадайке в таблице задач.&lt;br /&gt;
*'''ресурс 1''' - Деньги даваемые за выполнение задания.&lt;br /&gt;
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.&lt;br /&gt;
*'''опыт''' - Опыт даваемый за выполнение задания.&lt;br /&gt;
*'''награда ресурс 1''' - Счетчик, которому будет присвоено количество призового ресурса 1.&lt;br /&gt;
*'''награда ресурс 2''' - Счетчик, которому будет присвоено количество призового ресурса 2.&lt;br /&gt;
*'''награда опыт''' - Счетчик, которому будет присвоено количество призового опыта.&lt;br /&gt;
'''Группа рулетка'''&lt;br /&gt;
&lt;br /&gt;
На самом деле название &amp;quot;рулетка&amp;quot; весьма условное. В этом разделе можно поместить любое периодически повторяющееся задание.&lt;br /&gt;
&lt;br /&gt;
*'''показывать через''' - Через какое количество обычных задач показывать рулетку.&lt;br /&gt;
*'''с уровня''' - Рулетка будет генерироваться только начиная с данного уровня.&lt;br /&gt;
*'''машина''' - Объект, которому при активации будет вызвано состояние show.&lt;br /&gt;
*'''иконка для таблицы''' - Иконка соответствующая рулетке в таблице задач.&lt;br /&gt;
'''Группа генерируемые'''&lt;br /&gt;
&lt;br /&gt;
В этой группе находятся периодически генерируемые задания на прохождение локаций.&lt;br /&gt;
&lt;br /&gt;
*'''активных задач''' - Эти задачи будут генерироваться, когда активных задач столько или меньше.&lt;br /&gt;
*'''с уровня''' - Эти задачи будут генерироваться только начиная с данного уровня.&lt;br /&gt;
*'''максимально''' - Будет сгенерированно случайное количество задач от 1 до n.&lt;br /&gt;
*'''машина''' - Объект, которому при активации будет вызвано состояние show. Она же после угадайки будет переведена в состояние win или fail.&lt;br /&gt;
*'''название''' - Текстовый объект, в который будет сложено название локации.&lt;br /&gt;
*'''превью''' - Объект, в который сложим превью локации для генерируемой задачи.&lt;br /&gt;
*'''иконка для таблицы''' - Иконка соответствующая генерируемому таску в таблице задач.&lt;br /&gt;
*'''ресурс 1''' - Деньги даваемые за выполнение задания.&lt;br /&gt;
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.&lt;br /&gt;
*'''опыт''' - Опыт даваемый за выполнение задания.&lt;br /&gt;
*'''награда ресурс 1''' - Счетчик, которому будет присвоено количество призового ресурса 1.&lt;br /&gt;
*'''награда ресурс 2''' - Счетчик, которому будет присвоено количество призового ресурса 2.&lt;br /&gt;
*'''награда опыт''' - Счетчик, которому будет присвоено количество призового опыта.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Если перед генерацией случайного таска на исследование локации указать параметру gen_loc значение от 0 до n, то ближайшая генерируемая задача будет для конкретной локации под указанным номером. После генерации параметр gen_loc становится -1.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Если перед генерацией случайного таска от персоанжа указать параметру gen_face значение от 0 до n, то ближайшая генерируемая задача будет от персонажа под указанным номером. После генерации параметр gen_face становится -1.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Группа угадаечные задачи'''&lt;br /&gt;
&lt;br /&gt;
В этой группе указываем диапазоны для генерации тасков-викторин и способ генерации.&lt;br /&gt;
&lt;br /&gt;
*'''стандартная генерация''':&lt;br /&gt;
::'''нет''' - особая генерация задач, при которой с начало генерируем задачи из _очереди 1_, потом задачи из _очереди 2_ ( Если в первой очереди мы не можем сгенерировать задачу, пытаемся сгенерировать из второй очереди). Если мы не сгенерировали задачу из обоих очередей, то мы обнуляем все таски из обоих очередей ( и сразу генерим из _очереди 1_ задачу);&lt;br /&gt;
::'''да''' - стандартная генерация одной угадайки ( начинаем сверху вниз генерить;&lt;br /&gt;
*'''очередь 1''' - Основная очередь, пытаемся из неё сгенерировать задачу, при получении Taskorganizer сост. _generate_guess_, если в предыдущем поле стоит '''нет'''. Каждая задача из этой очереди имеет условия для появления ( прохождение сюжетного таска к примеру);&lt;br /&gt;
*'''очередь 2''' - Очередь затычка, задачи из этой очереди без условий. Предназначена когда в первой очереди нету доступных тасков для генерации;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
У таскорганайзера есть поле disabled, если при каждом запуске приложения после конца туториала писать туда 1 - это приведет к удалению старого сейва и несозданию нового. Несколько килобайт выгоды в опциях + использовать только для туториального таскорганайзера, когда он отработает.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Taskorganizer setup=&lt;br /&gt;
[[Файл:Task_2.jpg|600px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
*'''id''' - Идентификатор задания. Используется в других заданиях. По общей концепции - строковый айди. Перетаскивается из текстовой базы.&lt;br /&gt;
 '''Для каждого задания(записи в logbook) должен быть свой уникальный id.'''&lt;br /&gt;
*'''хинт''' - Список строк-подсказок для задачи. Перетаскиваются из текстовой базы. Таким образом, добавив несколько записей из базы, увидим выпадающий список.&lt;br /&gt;
*'''название (объект)''' - Текстовый объект, в который мы сложим название задания. Описание подтягивается из текстовой базы из первого столбика (word) текстового id задания.&lt;br /&gt;
*'''машина''' - Объект, которому при активации задания будет вызвано состояние show, а при повторном открытии задания show_old.&lt;br /&gt;
*'''портрет''' - Объект, которому при активации задания будет устанорвлен графический ресурс рожи.&lt;br /&gt;
*'''таблица''' - Таблица куда будут помещены темплейты предметов данного задания.&lt;br /&gt;
*'''описание (объект)''' - Текстовый объект, в который мы сложим описание задания. Описание подтягивается из текстовой базы из второго столбика (sentence1) текстового id задания.&lt;br /&gt;
*'''награда (ресурс 1)''' - Счетчик отображающий награду в ресурсе 1 за выполнение задания.&lt;br /&gt;
*'''награда (ресурс 2)''' - Счетчик отображающий награду в ресурсе 2 за выполнение задания.&lt;br /&gt;
*'''награда (опыт)''' - Счетчик отображающий награду в опыте за выполнение задания.&lt;br /&gt;
*'''таблица хинта''' - Таблица, в которую будем складывать хинты.&lt;br /&gt;
&lt;br /&gt;
'''Необходимое для логбука'''&lt;br /&gt;
&lt;br /&gt;
*'''для журнала''' - 0 - задача предназначена для списка задач, 1 - задача предназначена для журнала.&lt;br /&gt;
*'''категория''' - Категория к которой относится задача/запись. Пока используется только задачами для логбука.&lt;br /&gt;
&lt;br /&gt;
'''Критерии появления'''&lt;br /&gt;
&lt;br /&gt;
*'''уровень''' - Минимальный уровень, при котором может появиться задание.&lt;br /&gt;
*'''аномалия''' - В какой-либо локации присутствует аномалия данного типа. -1 - не учитывать условие.&lt;br /&gt;
*'''локация''' - Локация для которой будем проверять мастерство. -1 - не учитывать условие.&lt;br /&gt;
*'''мастерство''' - Уровень мастерства, который должен быть достигнут в локиции. -1 - не учитывать условие.&lt;br /&gt;
*'''завершены до''' - Задания, которые должны быть завершены до появления этого.&lt;br /&gt;
*'''получены до''' - Задания, которые должны быть получены до появления этого.&lt;br /&gt;
*'''не завершены до''' - Задания, которые должны быть НЕ завершены до появления этого.&lt;br /&gt;
*'''объект до''' - Объект, который должен находиться в состоянии_до для появления задания.&lt;br /&gt;
*'''состояние до''' - Состояние объекта_до, в котором вызывается генерация задания.&lt;br /&gt;
*'''коллекционные''' - Коллекционные предметы, которые должны быть найдены для появления задания.&lt;br /&gt;
*'''вероятность нужного''' - Когда мы будем проходить локации, в которых есть предметы необходимые для задания - мы будем подменять вероятность из локации вот этой вероятностью.  0 - использовать дефолтную.&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;
*'''состояние''' - Состояние объекта, в котором вызывается проверка задания.&lt;br /&gt;
&lt;br /&gt;
'''Награда'''&lt;br /&gt;
&lt;br /&gt;
*'''ресурс 1''' - Деньги даваемые за выполнение задания.&lt;br /&gt;
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.&lt;br /&gt;
*'''опыт''' - Опыт даваемый за выполнение задания.&lt;br /&gt;
*'''перевести объект''' - При выполнении задания этот объект будет переведен в новое состояние.&lt;br /&gt;
*'''в состояние''' - Состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
==Изменить состояние объекта - новое задание==&lt;br /&gt;
&lt;br /&gt;
Позволяет изменять состояние объекту каждый раз при появлении нового задания, находится в taskorganizer setup.&lt;br /&gt;
&lt;br /&gt;
=Состояния=&lt;br /&gt;
&lt;br /&gt;
*'''show''' - При вызове этого состояния из таблицы с иконками заданий открывается соответствующая машина задания, прописанная в группе '''задание'''.&lt;br /&gt;
*'''check''' - При вызове проверяется выполнение текущих заданий(заданий добавленных в таблицу). Для того чтобы таскорганайзер добавил таски в таблицу после загрузки приложения ему нужно передать refresh.&lt;br /&gt;
*'''generate''' - При вызове подбирается подходящее задание в зависимости от прогресса игрока.&lt;br /&gt;
*'''generate_plot''' - При вызове генерится задача с персонажем ( поле генерируемые с персонажами), если перед этим передать в поле gen_face номер персонажа, то сгенерируем с указанным персонажем, после параметр обнулится ( значение -1 ). Перед вызовом данного состояния, '''обязательнo''' в поле _param_ вбить &amp;quot;1&amp;quot;.&lt;br /&gt;
*'''log_check''' - При вызове состояния проверяется доступны ли новые записи в логбук.&lt;br /&gt;
*'''log_show''' - Заполняет таблицу логбука записями с текущим фильтром.&lt;br /&gt;
*'''refresh''' - Удаляет иконку выполненного задания из таблицы. Лучше всего вызывать после Check.&lt;br /&gt;
*'''cancel''' - Удаляет задание без награды, которое указано как ID в параметре param таскорганайзера, т.е. объекту Taskorganizer в param указываем ID таска (например 1933 - берется из options.xml или текстовой базы), а потом вызываем состояние cancel.&lt;br /&gt;
*'''add_hint''' - Добавляет в таблицу хинтов следующий текстовый ID из поля хинты текущего таска. Если все хинты показаны, то в опции записывается параметр haveHints=0.&lt;br /&gt;
*'''task_prev''' - Используется, если открыта машина-шаблон текущего задания. В этом состоянии показывается предыдущее по списку таблицы задание.&lt;br /&gt;
*'''task_next''' - Показывает следующее по списку таблицы задание.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Состояния task_prev и task_next работают циклически, после первой задачи показывают последнюю и наоборот.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*'''show_id''' - Показать окно задачи, взяв ее id из параметра.&lt;br /&gt;
*'''show_last_plot''' - Открыть последнюю сгенерированную сюжетную задачу.&lt;br /&gt;
*'''guess''' - Ответить на текущую угадайку, взяв ответ из параметра (param). Taskorganizer также хранит правильный ответ на текущую угадайку в параметре ''guess_answer'', его можно использовать, если нужно оставить игроку меньше вариантов для угадывания.&lt;br /&gt;
*'''add_hint_last''' - Добавить подсказку последней добавленной задаче.&lt;br /&gt;
*'''add_hint_top''' - Добавить подсказку верхней задаче в таблице.&lt;br /&gt;
*'''guess_who_reward''' - начислить награду за последнюю угадайку.&lt;br /&gt;
*'''roulette_complete''' -состояние, вызываемое при выполнении текущей задачи &amp;quot;рулетка&amp;quot;.&lt;br /&gt;
*'''cheat_complete''' - если его вызвать, то при следующем check выполнится задача, для которой последней показывали превью.&lt;br /&gt;
*'''skip''' - При вызове этого состояния выполнится последний открытый таск. Цена скипа указывается внутри самого таска.&lt;br /&gt;
*'''check_multiple''' - Проверить выполнение задач не выходя из проверки после первой найденной.&lt;br /&gt;
&lt;br /&gt;
Состояния для работы с тасками-угадайками по типу викторины ( в taskorganizer_setup - тип = &amp;quot;угадайка&amp;quot;):&lt;br /&gt;
*'''answer''' - ответить на открытую угадайку ( в поле '''param''' должно находиться число, номер нажатой кнопки от 0 до 3 ). Вешаем на кнопки варианты-ответа ( пишем param = 0 - 3 , после передаёт _answer_); &lt;br /&gt;
*'''generate_guess''' - сгенерировать угадайку-викторину ( выберет доступные задачи из диапазона указанном в очередях ( 1 и 2) поле _угадаечные задачи_ taskorganizer). При открытии угадайки, в поле _cur_guess_answer_ объекта Taskorganizer записывается номер кнопки где лежит правильный ответ ( от 0 до 3 );&lt;br /&gt;
&lt;br /&gt;
ПРИМЕЧАНИЕ:  при проверке задач для логбука для последней выполненной будет перезаписано поле filter автоматически.&lt;br /&gt;
&lt;br /&gt;
При кажом refresh таскорганайзер заполняет у себя поля:&lt;br /&gt;
*'''tasks_in_table''' - задач в таблице&lt;br /&gt;
*'''tasks_total''' - задач в таблице + скрытых задач&lt;br /&gt;
&lt;br /&gt;
=Запись в опции=&lt;br /&gt;
&lt;br /&gt;
В процессе работы таскорганайзер записывает параметры в опции. Для конкретной задачи этот параметр представляет следующую строку:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;tasks(id таскорганайзера в проекте).t(id текстового объекта - идентификатора задания).s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Возможные значения:&lt;br /&gt;
* '''0''' - таск не активен (не добавлен путем вызова generate таскорганайзеру);&lt;br /&gt;
* '''1''' - таск сгенерирован ;&lt;br /&gt;
* '''2''' - таск прочитан (вызвано состояние show);&lt;br /&gt;
* '''3''' - таск выполнен;&lt;br /&gt;
* '''4''' - отложенное состояние таска (условия появления выполнены, но время его появления еще не прийшло);&lt;br /&gt;
* '''5''' - таск выполнен, но награда ещё не забиралась ( таск будет оставаться в таблице, если таски не выполняются автоматически);&lt;br /&gt;
&lt;br /&gt;
=Сопутствующие объекты=&lt;br /&gt;
&lt;br /&gt;
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:&lt;br /&gt;
&lt;br /&gt;
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. &lt;br /&gt;
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. &lt;br /&gt;
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета. &lt;br /&gt;
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.&lt;br /&gt;
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.&lt;br /&gt;
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.&lt;br /&gt;
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Вычитаемые параметры:=&lt;br /&gt;
Каждая таскорганайзер пишет в пользователя следующие параметры:&lt;br /&gt;
*'''public.TaskOrganizerCompletedTasks''' - количество выполненных одноразовых задач;&lt;br /&gt;
*'''public.TaskOrganizerCompletedTasksAll''' - количество выполненных задач с учётом повторяемых;&lt;br /&gt;
&lt;br /&gt;
=Механизм многоуровневых достижений=&lt;br /&gt;
&lt;br /&gt;
=Пример проекта=&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample\Taskorganizer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Economics]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&amp;diff=8128</id>
		<title>Absolutist Framework</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&amp;diff=8128"/>
		<updated>2016-04-19T11:17:32Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Game mechanic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
'''[[:category:main|Категории]]'''&lt;br /&gt;
== Новости ==&lt;br /&gt;
Вышла новая игра HOG созданная с помощью AppSalute Game Сreator. Созданы новые уникальные эффекты и механики для обеспечения незабываемых впечатлений.&lt;br /&gt;
Описание и видео:&lt;br /&gt;
http://time-gap.com/&lt;br /&gt;
&lt;br /&gt;
== AppSalute Game Сreator ==&lt;br /&gt;
* [[Примеры приложений]]&lt;br /&gt;
* [[Введение в AppSalute Game Сreator]]&lt;br /&gt;
* [[Установка и настройка]]&lt;br /&gt;
* [[Интерфейс ScenceEditor ]]&lt;br /&gt;
* [[Интерфейс ResourceEditor ]]&lt;br /&gt;
* [[Интерфейс TextEditor ]]&lt;br /&gt;
*[[Интерфейс Viewer ]]&lt;br /&gt;
* [[Книга жалоб и пожеланий]]&lt;br /&gt;
* [[Roadmap]]&lt;br /&gt;
&lt;br /&gt;
== Обучение ==&lt;br /&gt;
&lt;br /&gt;
* [[Learning|Уроки по освоению фреймворка]]&lt;br /&gt;
* [[Примеры реализации в играх]]&lt;br /&gt;
* [[Основные понятия объектов физического мира]]&lt;br /&gt;
* [[Использование AppSalute Debugger при отладке]]&lt;br /&gt;
* [[FAQ]]&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;
* [[Lua|Использование lua-скриптов]]&lt;br /&gt;
&lt;br /&gt;
== Встроенные объекты редактора==&lt;br /&gt;
&lt;br /&gt;
=== Common objects  ===&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Screen.png]] - [[Screen]]'' - экран&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Scene.png]] - [[Scene]]'' - сцена&lt;br /&gt;
&lt;br /&gt;
=== Main objects ===&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Objects.png]] - [[Object]]'' - общие параметры для всех игровых объектов&lt;br /&gt;
&lt;br /&gt;
* [[Файл:Kub.png]] - [[Azmanager]] - менеджер активных зон&lt;br /&gt;
* [[Файл:Kub.png]] - [[Active zone]] - активная зона&lt;br /&gt;
* [[Файл:Picture.png]] - [[Image]] - картинка&lt;br /&gt;
* [[Файл:Kub.png]] - [[Statistic]] - объект для отправки событий статистики.&lt;br /&gt;
* [[Файл:Button.png]] - [[Button]] - кнопка&lt;br /&gt;
* [[Файл:Text.png]] - [[Text]] - текст&lt;br /&gt;
* [[Файл:Machine.png]] - [[Machine]] - машина состояний&lt;br /&gt;
* [[Файл:Tableicon.png]] - [[Table]] - таблица&lt;br /&gt;
* [[Файл:Checkbox.png]] - [[Checkbox]] - чекбокс (кнопка в 2-х состояниях)&lt;br /&gt;
* [[Файл:Checkgroup.png]] - [[Groupbox]] - группа, содержащая несколько чекбоксов&lt;br /&gt;
* [[Файл:Timer.png]] - [[Timer]] - цифровой таймер&lt;br /&gt;
** [[Файл:Kub.png]] - [[Globaltimer]] - таймер &amp;quot;реального времени&amp;quot;&lt;br /&gt;
* [[Файл:Counter2.png]] - [[Counter]] - счетчик сделанных кликов в игре и т.п.&lt;br /&gt;
* [[Файл:Progressbar.png]] - [[Progress]] - прогресс прохождения игры (эчивмент)&lt;br /&gt;
* [[Файл:Particle.png]] - [[Flyer]] - флаер (патиклы)&lt;br /&gt;
* [[Файл:Rectangle.png]] - [[Rectangle]] - прямоугольник&lt;br /&gt;
* [[Файл:Kub.png]] - [[Isomover]] - объект движения в изометрической карте&lt;br /&gt;
* [[Файл:Group.png]] - [[Group]] - группа&lt;br /&gt;
* [[Файл:Groupset.png‎]] - [[Groupset]] - группа&lt;br /&gt;
* [[Файл:Effect.jpg|20px]] - [[Effect]] - Создание различных эффектов&lt;br /&gt;
* [[Файл:Graphprogress.png]] - [[Graphprogress]] - создание мини-карты для отображения прогресса прохождения игры.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Statesmanager]] - очередь работы с объектами&lt;br /&gt;
* [[Файл:Slider icons.png]] - [[Slider]] - объект реализующий листание списка.&lt;br /&gt;
* [[Файл:Ribbon.png]] - [[Ribbon]] - объект отображения графики по сплайну&lt;br /&gt;
* [[Файл:Kub.png]] - [[Animation]] - объект различных анимаций&lt;br /&gt;
* [[Файл:Kub.png]] - [[Magicparticles]] - объект файлов Magic Particles&lt;br /&gt;
&lt;br /&gt;
=== Game mechanic ===&lt;br /&gt;
&lt;br /&gt;
* [[Файл:Puzzle.png]] - [[Puzzle]] - игра пазл&lt;br /&gt;
* [[Файл:Memory.png]] - [[Memory]] - класс игр с memory-механикой&lt;br /&gt;
* [[Файл:Patchwork.png]] - [[Patchwork]] - класс игр с Patchwork-механикой&lt;br /&gt;
* [[Файл:Match3.png]] - [[Match]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:Collaps.png]] - [[Collapse]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:Bejewelled.png]] - [[Bejewelled]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:BubbleShooter.png]] - [[Bubble Shooter]] - класс Bubble игр включая механику Снукер&lt;br /&gt;
* [[Файл:Tapthebubble.png]] - [[TapTheBubble]] - механика игры Tap The Bubble&lt;br /&gt;
* [[Файл:GemSlider.jpg]] - [[Gem Slider]] - механика игры Gem Slider&lt;br /&gt;
* [[Файл:W-57.png]] - [[Words]] - механика игры Words&lt;br /&gt;
* [[Файл:Kub.png]] - [[2048]] - механика игры 2048&lt;br /&gt;
* [[Файл:Kub.png]] - [[Planet]] - игра &amp;quot;Планетки&amp;quot;&lt;br /&gt;
* [[Файл:Kub.png]] - [[Unblock]] - механика игры unblock&lt;br /&gt;
* [[Файл:Matchbattle.png]] - [[Match Battle]] - настройка глобальных параметров для мини-игр&lt;br /&gt;
* [[Файл:Move box.png]] - [[DragBox]] - класс игр с dragbox-механикой&lt;br /&gt;
* [[Файл:Labyrinth.png]] - [[Labyrinth]] - класс игр лабиринт&lt;br /&gt;
* [[Файл:Pipes.png]] - [[Pipes]] - класс игр трубы&lt;br /&gt;
* [[Файл:Search object.png]] - [[HiddenObject]] - поисковый объект в хидден играх&lt;br /&gt;
* [[Файл:Object list.png]] - [[HiddenList]] - список поисковых объектов в хидден играх&lt;br /&gt;
* [[Файл:Hint.png]] - [[HiddenHint]] - подсказка (указатель на спрятанный объект)&lt;br /&gt;
* [[Файл:Kub.png]] - [[HiddenHighLighter]] - позволяет показать не найденные объекты в хиддене.&lt;br /&gt;
* [[Файл:Collection.png]] - [[Collection]] - &amp;quot;коллекция&amp;quot; поисковых объектов для хидден игр&lt;br /&gt;
* [[Файл:Inventory.png]] - [[Inventory]] - &amp;quot;инвентарь&amp;quot; список применяемых объектов для игр&lt;br /&gt;
* [[Файл:Tool.png]] - [[Tool]] - &amp;quot;применение&amp;quot; - объект, который можно применить для игр&lt;br /&gt;
* [[Файл:Kub.png]] - [[Isomap]] - изометрическая карта&lt;br /&gt;
* [[Файл:Slotmachine.png]] - [[Slotmachine]] - объект типа &amp;quot;slot&amp;quot;&lt;br /&gt;
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер&lt;br /&gt;
** [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря/магазина и экономики &lt;br /&gt;
** [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина &lt;br /&gt;
** [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря &lt;br /&gt;
** [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета.&lt;br /&gt;
** [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий &lt;br /&gt;
*** [[Файл:Kub.png]] - [[Etasktemplate]] - шаблон задачи для таблицы темплейтов.&lt;br /&gt;
** [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания&lt;br /&gt;
** [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции&lt;br /&gt;
* [[Файл:Paint.png‎]] - [[Paint]] - объект для рисования &lt;br /&gt;
* [[Файл:Physicsworld.png]] - [[Physicsworld]] - физический мир Box2D&lt;br /&gt;
** [[Файл:Physicsobject.png]] - [[Physicsobject]] - физические объекты&lt;br /&gt;
** [[Файл:Physics links.png]] - [[Physicsjoint]] - физические соединения&lt;br /&gt;
*  [[Файл:Eraser.png]] - [[Eraser]] - стирачка&lt;br /&gt;
* [[Файл:Kub.png]] - [[trivia]] - игровая механика - миллионер (trivia)&lt;br /&gt;
* [[Файл:Kub.png]] - [[Dailybonus]] - объект для управления механизмом ежедневного бонуса за вход в игру.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Pet]] - объект питомца.&lt;br /&gt;
* [[Файл:Kub.png]] - [[PetCollectionTemplate]] - объект шаблона ячейки с коллекцией.&lt;br /&gt;
* [[Файл:Kub.png]] - [[PetTemplate]] - объект шаблона ячейки с животным.&lt;br /&gt;
&lt;br /&gt;
=== Global score ===&lt;br /&gt;
* [[Файл:Gamecenter.png]] - [[Gamecenter]] - объект для отправки данных на GameCenter iTunse&lt;br /&gt;
**[[Файл:Kub.png]] - [[Achievementitem]] -  шаблон локального достижения (оффлайн ачивка)&lt;br /&gt;
* [[Файл:Gamecircle.jpg]] - [[Amazon GameCircle]] - объект для отправки данных Amazon GameCircle&lt;br /&gt;
* [[Файл:Google-play-games-android.jpg‎]] - [[Google Play services]] - объект для отправки данных на Google Play services&lt;br /&gt;
* [[Файл:Localtoplist.png]] - [[Localtoplist]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
* [[Файл:Globaltoplist.png]] - [[Globaltoplist]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
* [[Файл:Globaltopsender.png]] - [[Globaltopsender]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
* [[Файл:Options.png]] - [[Options]] - общие настройки игры&lt;br /&gt;
* [[Файл:Gamedata.png]] - [[Gamedata]] -&lt;br /&gt;
* [[Файл:Controls.png]] - [[Controls]] - обьект для работы с клавишами клавиатуры или девайса &lt;br /&gt;
* [[Файл:Editicon.png]] - [[Edit]] - ввод текста&lt;br /&gt;
* [[Файл:Store.png]] - [[Store]] - настройки InApp покупок в игре&lt;br /&gt;
** [[Файл:Kub.png]] - [[Wallet]] - объект для начисления игровой валюты при InApp покупках через объект economics&lt;br /&gt;
* [[Файл:Notification.png]] - [[Notification]] - push-уведомления&lt;br /&gt;
* [[Файл:Imagepicker.png]] - [[Imagepiker]] - объект для загрузки фото из галереи&lt;br /&gt;
* [[Файл:Video.png]] - [[Video]] - объект для просмотра видео&lt;br /&gt;
* [[Файл:Webview.png]] - [[Webview]] - объект для просмотра интернет страниц в приложении&lt;br /&gt;
* [[Файл:Flurryobject.png]] - [[Flurry]] - настройки системы статистики для приложений https://dev.flurry.com&lt;br /&gt;
* [[Файл:Moregames.png]] - [[MoreGamesList]] - запрос банеров рекламируемых игр&lt;br /&gt;
* [[Файл:Advertisement.png]] - [[Advertisement]] - банерная система flurry, amazon&lt;br /&gt;
* [[Файл:Splitmanager.png]] - [[Splitmanager or A\B Testing]] - менеджер сплитов&lt;br /&gt;
* [[Файл:Tapjoy.png]] - [[Tapjoy]] - система рекламы игр&lt;br /&gt;
* [[Файл:Playhaven.png|24px]] - [[Playhaven]] - система рекламы игр с внутренними up-sale&lt;br /&gt;
* [[Файл:Mobileapptracker.png|24px]] - [[Mobileapptracking]] -&lt;br /&gt;
* [[Файл:Chartboost-logo-new.jpeg]] - [[Chartboost]] -  Chartboost-logo-new.jpeg&lt;br /&gt;
* [[Файл:Kub.png]] - [[SuperSonic]] -  провайдер рекламы SuperSonic&lt;br /&gt;
* [[Файл:Kub.png]] - [[System]] - объект для доступа к системным настройкам&lt;br /&gt;
* [[Файл:Kub.png]] - [[Salesmanager]] - менеджер акций&lt;br /&gt;
* [[Файл:Kub.png]] - [[Cloud]] - объект для синхронизации в облаке&lt;br /&gt;
* [[Файл:Kub.png]] - [[Game]] - объект для отправки событий&lt;br /&gt;
&lt;br /&gt;
=== Social ===&lt;br /&gt;
* [[Файл:Facebook.png]] - [[Facebook]] - настройки расшаривания Facebook&lt;br /&gt;
** [[Файл:Esocialfrienditem.png]] - [[Esocialitem]] - Шаблон для ячейки списка друзей&lt;br /&gt;
** [[Файл:Kub.png]] - [[Esocialgiftitem]] - Шаблон для ячейки с предметом, который можно подарить другу&lt;br /&gt;
** [[Файл:Esocial.png]] - [[Esocial]] - объект для взаимодействия с Facebook'ом&lt;br /&gt;
* [[Файл:Twitter.png]] - [[Twitter]] - настройки расшаривания Twitter&lt;br /&gt;
* [[Файл:Odnoklassniki.png]] - [[Odnoklassniki]] - настройки для социальной сети Одноклассники&lt;br /&gt;
* [[Файл:Googleplus.png]] - [[GooglePlus]] - настройки для социальной сети GooglePlus&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
* [[Файл:Forward.png]] - [[SendMail]] - отправка письма через почтовый клиент&lt;br /&gt;
* [[Файл:footer-icon-rate.png]] - [[Rate]] - вызов окна оценки приложения&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;50px&amp;quot; heights=&amp;quot;50px&amp;quot; &amp;gt;&lt;br /&gt;
Изображение:Who.png&lt;br /&gt;
Изображение:AnimalHideSeek.png&lt;br /&gt;
Изображение:travel.png&lt;br /&gt;
Изображение:Game_Adventure_Train.png&lt;br /&gt;
Изображение:Gmae_Match_MoveTheDolly.png&lt;br /&gt;
Изображение:Game_Patchwork_BigEyes.png&lt;br /&gt;
Изображение:Game_Patchwork_Chameleon.png&lt;br /&gt;
Изображение:Game_Patchwork_Logicly.png‎&lt;br /&gt;
Изображение:Game_Patchwork_Stickers.png‎&lt;br /&gt;
Изображение:Elephant.png&lt;br /&gt;
Изображение:Elephant2.png&lt;br /&gt;
Изображение:Cinderella.png&lt;br /&gt;
Изображение:Pigs.png&lt;br /&gt;
Изображение:Bremenskye.png&lt;br /&gt;
Изображение:Book_SnowWhite.png&lt;br /&gt;
Изображение:Book_PussInBoots.png&lt;br /&gt;
Изображение:Call.png&lt;br /&gt;
Изображение:GreatestArtists.png&lt;br /&gt;
Изображение:Game_Puzzle_Kids.png&lt;br /&gt;
Изображение:Game_Puzzle_Architect.png‎&lt;br /&gt;
Изображение:Game_Puzzle_Science.png&lt;br /&gt;
Изображение:Ico_1_114_Full.png&lt;br /&gt;
Изображение:Game_Adventure_Dreams.png&lt;br /&gt;
Изображение:Abc.png&lt;br /&gt;
Изображение:Ico_114_Full.png&lt;br /&gt;
Изображение:Ico_114_Paints.png&lt;br /&gt;
Изображение:Ico_114_Puzzle.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:main]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Etasktemplate&amp;diff=8127</id>
		<title>Etasktemplate</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Etasktemplate&amp;diff=8127"/>
		<updated>2016-04-19T11:15:22Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: Новая страница: «{{TOC right}} Данный объект представляет собой темплейт задач, которые будут помещены в…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
Данный [[Object|объект]] представляет собой темплейт задач, которые будут помещены в таблицу для шаблонов (tabletemplate) [[Taskorganizer|таскорганайзера]].&lt;br /&gt;
[[Файл:Etasktemplate.png|right|thumb]]&lt;br /&gt;
&lt;br /&gt;
=Параметры=&lt;br /&gt;
&lt;br /&gt;
*'''taskorganizer''' - Объект типа taskorganizer, который использует темплейт;&lt;br /&gt;
*'''название''' - Текстовый объект куда будет занесено название задачи, берется из поля word текстового id задачи;&lt;br /&gt;
*'''описание''' - Текстовый объект куда будет занесено описание задачи, берется из поля sentence1 текстового id задача для активной задачи и sentence2 - для выполненной;&lt;br /&gt;
*'''иконка''' - Иконка задания (ico1);&lt;br /&gt;
*'''иконка 2''' - Вторая иконка задания, для активной задачи ресурс ico2, для выполненной ico3;&lt;br /&gt;
*'''выполнено''' - Счетчик, куда буде занесен текущий прогресс;&lt;br /&gt;
*'''всего''' - Счетчик, куда буде занесен необходимый прогресс;&lt;br /&gt;
*'''прогресс''' - Прогресс (отношение текущего к необходимому);&lt;br /&gt;
*'''награда ресурс 1''' - Счетчик награды ресурс 1;&lt;br /&gt;
*'''награда ресурс 2''' - Счетчик награды ресурс 2;&lt;br /&gt;
*'''награда опыт''' - Счетчик награды опыта;&lt;br /&gt;
*'''кнопка''' - Отображается для активных задач, для которой текущий прогресс меньше необходимого;&lt;br /&gt;
*'''кнопка2''' - Отображается для активных задач, для которой текущий прогресс равен необходимому;&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;
*'''take''' - должно вызываться кнопкой или кнопкой2, при вызове состояния в объект записываются параметры:&lt;br /&gt;
**'''clicked_task_id''' - id таска, на темплейте которого была нажата кнопка или кнопка2;&lt;br /&gt;
**'''clicked_task_x''' - координата x центра ячейки, относительно пивота таблицы, в которой была нажата кнопка или кнопка2;&lt;br /&gt;
**'''clicked_task_y''' - координата y центра ячейки, относительно пивота таблицы, в которой была нажата кнопка или кнопка2;&lt;br /&gt;
&lt;br /&gt;
[[Category:Game mechanic]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Etasktemplate.png&amp;diff=8126</id>
		<title>Файл:Etasktemplate.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Etasktemplate.png&amp;diff=8126"/>
		<updated>2016-04-19T10:32:47Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&amp;diff=8115</id>
		<title>Absolutist Framework</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&amp;diff=8115"/>
		<updated>2016-04-05T11:02:27Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Main objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
'''[[:category:main|Категории]]'''&lt;br /&gt;
== Новости ==&lt;br /&gt;
Вышла новая игра HOG созданная с помощью AppSalute Game Сreator. Созданы новые уникальные эффекты и механики для обеспечения незабываемых впечатлений.&lt;br /&gt;
Описание и видео:&lt;br /&gt;
http://time-gap.com/&lt;br /&gt;
&lt;br /&gt;
== AppSalute Game Сreator ==&lt;br /&gt;
* [[Примеры приложений]]&lt;br /&gt;
* [[Введение в AppSalute Game Сreator]]&lt;br /&gt;
* [[Установка и настройка]]&lt;br /&gt;
* [[Интерфейс ScenceEditor ]]&lt;br /&gt;
* [[Интерфейс ResourceEditor ]]&lt;br /&gt;
* [[Интерфейс TextEditor ]]&lt;br /&gt;
*[[Интерфейс Viewer ]]&lt;br /&gt;
* [[Книга жалоб и пожеланий]]&lt;br /&gt;
* [[Roadmap]]&lt;br /&gt;
&lt;br /&gt;
== Обучение ==&lt;br /&gt;
&lt;br /&gt;
* [[Learning|Уроки по освоению фреймворка]]&lt;br /&gt;
* [[Примеры реализации в играх]]&lt;br /&gt;
* [[Основные понятия объектов физического мира]]&lt;br /&gt;
* [[Использование AppSalute Debugger при отладке]]&lt;br /&gt;
* [[FAQ]]&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;
* [[Lua|Использование lua-скриптов]]&lt;br /&gt;
&lt;br /&gt;
== Встроенные объекты редактора==&lt;br /&gt;
&lt;br /&gt;
=== Common objects  ===&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Screen.png]] - [[Screen]]'' - экран&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Scene.png]] - [[Scene]]'' - сцена&lt;br /&gt;
&lt;br /&gt;
=== Main objects ===&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Objects.png]] - [[Object]]'' - общие параметры для всех игровых объектов&lt;br /&gt;
&lt;br /&gt;
* [[Файл:Kub.png]] - [[Azmanager]] - менеджер активных зон&lt;br /&gt;
* [[Файл:Kub.png]] - [[Active zone]] - активная зона&lt;br /&gt;
* [[Файл:Picture.png]] - [[Image]] - картинка&lt;br /&gt;
* [[Файл:Kub.png]] - [[Statistic]] - объект для отправки событий статистики.&lt;br /&gt;
* [[Файл:Button.png]] - [[Button]] - кнопка&lt;br /&gt;
* [[Файл:Text.png]] - [[Text]] - текст&lt;br /&gt;
* [[Файл:Machine.png]] - [[Machine]] - машина состояний&lt;br /&gt;
* [[Файл:Tableicon.png]] - [[Table]] - таблица&lt;br /&gt;
* [[Файл:Checkbox.png]] - [[Checkbox]] - чекбокс (кнопка в 2-х состояниях)&lt;br /&gt;
* [[Файл:Checkgroup.png]] - [[Groupbox]] - группа, содержащая несколько чекбоксов&lt;br /&gt;
* [[Файл:Timer.png]] - [[Timer]] - цифровой таймер&lt;br /&gt;
** [[Файл:Kub.png]] - [[Globaltimer]] - таймер &amp;quot;реального времени&amp;quot;&lt;br /&gt;
* [[Файл:Counter2.png]] - [[Counter]] - счетчик сделанных кликов в игре и т.п.&lt;br /&gt;
* [[Файл:Progressbar.png]] - [[Progress]] - прогресс прохождения игры (эчивмент)&lt;br /&gt;
* [[Файл:Particle.png]] - [[Flyer]] - флаер (патиклы)&lt;br /&gt;
* [[Файл:Rectangle.png]] - [[Rectangle]] - прямоугольник&lt;br /&gt;
* [[Файл:Kub.png]] - [[Isomover]] - объект движения в изометрической карте&lt;br /&gt;
* [[Файл:Group.png]] - [[Group]] - группа&lt;br /&gt;
* [[Файл:Groupset.png‎]] - [[Groupset]] - группа&lt;br /&gt;
* [[Файл:Effect.jpg|20px]] - [[Effect]] - Создание различных эффектов&lt;br /&gt;
* [[Файл:Graphprogress.png]] - [[Graphprogress]] - создание мини-карты для отображения прогресса прохождения игры.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Statesmanager]] - очередь работы с объектами&lt;br /&gt;
* [[Файл:Slider icons.png]] - [[Slider]] - объект реализующий листание списка.&lt;br /&gt;
* [[Файл:Ribbon.png]] - [[Ribbon]] - объект отображения графики по сплайну&lt;br /&gt;
* [[Файл:Kub.png]] - [[Animation]] - объект различных анимаций&lt;br /&gt;
* [[Файл:Kub.png]] - [[Magicparticles]] - объект файлов Magic Particles&lt;br /&gt;
&lt;br /&gt;
=== Game mechanic ===&lt;br /&gt;
&lt;br /&gt;
* [[Файл:Puzzle.png]] - [[Puzzle]] - игра пазл&lt;br /&gt;
* [[Файл:Memory.png]] - [[Memory]] - класс игр с memory-механикой&lt;br /&gt;
* [[Файл:Patchwork.png]] - [[Patchwork]] - класс игр с Patchwork-механикой&lt;br /&gt;
* [[Файл:Match3.png]] - [[Match]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:Collaps.png]] - [[Collapse]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:Bejewelled.png]] - [[Bejewelled]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:BubbleShooter.png]] - [[Bubble Shooter]] - класс Bubble игр включая механику Снукер&lt;br /&gt;
* [[Файл:Tapthebubble.png]] - [[TapTheBubble]] - механика игры Tap The Bubble&lt;br /&gt;
* [[Файл:GemSlider.jpg]] - [[Gem Slider]] - механика игры Gem Slider&lt;br /&gt;
* [[Файл:W-57.png]] - [[Words]] - механика игры Words&lt;br /&gt;
* [[Файл:Kub.png]] - [[2048]] - механика игры 2048&lt;br /&gt;
* [[Файл:Kub.png]] - [[Unblock]] - механика игры unblock&lt;br /&gt;
* [[Файл:Matchbattle.png]] - [[Match Battle]] - настройка глобальных параметров для мини-игр&lt;br /&gt;
* [[Файл:Move box.png]] - [[DragBox]] - класс игр с dragbox-механикой&lt;br /&gt;
* [[Файл:Labyrinth.png]] - [[Labyrinth]] - класс игр лабиринт&lt;br /&gt;
* [[Файл:Pipes.png]] - [[Pipes]] - класс игр трубы&lt;br /&gt;
* [[Файл:Search object.png]] - [[HiddenObject]] - поисковый объект в хидден играх&lt;br /&gt;
* [[Файл:Object list.png]] - [[HiddenList]] - список поисковых объектов в хидден играх&lt;br /&gt;
* [[Файл:Hint.png]] - [[HiddenHint]] - подсказка (указатель на спрятанный объект)&lt;br /&gt;
* [[Файл:Kub.png]] - [[HiddenHighLighter]] - позволяет показать не найденные объекты в хиддене.&lt;br /&gt;
* [[Файл:Collection.png]] - [[Collection]] - &amp;quot;коллекция&amp;quot; поисковых объектов для хидден игр&lt;br /&gt;
* [[Файл:Inventory.png]] - [[Inventory]] - &amp;quot;инвентарь&amp;quot; список применяемых объектов для игр&lt;br /&gt;
* [[Файл:Tool.png]] - [[Tool]] - &amp;quot;применение&amp;quot; - объект, который можно применить для игр&lt;br /&gt;
* [[Файл:Kub.png]] - [[Isomap]] - изометрическая карта&lt;br /&gt;
* [[Файл:Slotmachine.png]] - [[Slotmachine]] - объект типа &amp;quot;slot&amp;quot;&lt;br /&gt;
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер&lt;br /&gt;
** [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря/магазина и экономики &lt;br /&gt;
** [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина &lt;br /&gt;
** [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря &lt;br /&gt;
** [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета.&lt;br /&gt;
** [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий &lt;br /&gt;
** [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания&lt;br /&gt;
** [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции&lt;br /&gt;
* [[Файл:Paint.png‎]] - [[Paint]] - объект для рисования &lt;br /&gt;
* [[Файл:Physicsworld.png]] - [[Physicsworld]] - физический мир Box2D&lt;br /&gt;
** [[Файл:Physicsobject.png]] - [[Physicsobject]] - физические объекты&lt;br /&gt;
** [[Файл:Physics links.png]] - [[Physicsjoint]] - физические соединения&lt;br /&gt;
*  [[Файл:Eraser.png]] - [[Eraser]] - стирачка&lt;br /&gt;
* [[Файл:Kub.png]] - [[trivia]] - игровая механика - миллионер (trivia)&lt;br /&gt;
* [[Файл:Kub.png]] - [[Dailybonus]] - объект для управления механизмом ежедневного бонуса за вход в игру.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Pet]] - объект питомца.&lt;br /&gt;
* [[Файл:Kub.png]] - [[PetCollectionTemplate]] - объект шаблона ячейки с коллекцией.&lt;br /&gt;
* [[Файл:Kub.png]] - [[PetTemplate]] - объект шаблона ячейки с животным.&lt;br /&gt;
&lt;br /&gt;
=== Global score ===&lt;br /&gt;
* [[Файл:Gamecenter.png]] - [[Gamecenter]] - объект для отправки данных на GameCenter iTunse&lt;br /&gt;
**[[Файл:Kub.png]] - [[Achievementitem]] -  шаблон локального достижения (оффлайн ачивка)&lt;br /&gt;
* [[Файл:Gamecircle.jpg]] - [[Amazon GameCircle]] - объект для отправки данных Amazon GameCircle&lt;br /&gt;
* [[Файл:Google-play-games-android.jpg‎]] - [[Google Play services]] - объект для отправки данных на Google Play services&lt;br /&gt;
* [[Файл:Localtoplist.png]] - [[Localtoplist]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
* [[Файл:Globaltoplist.png]] - [[Globaltoplist]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
* [[Файл:Globaltopsender.png]] - [[Globaltopsender]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
* [[Файл:Options.png]] - [[Options]] - общие настройки игры&lt;br /&gt;
* [[Файл:Gamedata.png]] - [[Gamedata]] -&lt;br /&gt;
* [[Файл:Controls.png]] - [[Controls]] - обьект для работы с клавишами клавиатуры или девайса &lt;br /&gt;
* [[Файл:Editicon.png]] - [[Edit]] - ввод текста&lt;br /&gt;
* [[Файл:Store.png]] - [[Store]] - настройки InApp покупок в игре&lt;br /&gt;
** [[Файл:Kub.png]] - [[Wallet]] - объект для начисления игровой валюты при InApp покупках через объект economics&lt;br /&gt;
* [[Файл:Notification.png]] - [[Notification]] - push-уведомления&lt;br /&gt;
* [[Файл:Imagepicker.png]] - [[Imagepiker]] - объект для загрузки фото из галереи&lt;br /&gt;
* [[Файл:Video.png]] - [[Video]] - объект для просмотра видео&lt;br /&gt;
* [[Файл:Webview.png]] - [[Webview]] - объект для просмотра интернет страниц в приложении&lt;br /&gt;
* [[Файл:Flurryobject.png]] - [[Flurry]] - настройки системы статистики для приложений https://dev.flurry.com&lt;br /&gt;
* [[Файл:Moregames.png]] - [[MoreGamesList]] - запрос банеров рекламируемых игр&lt;br /&gt;
* [[Файл:Advertisement.png]] - [[Advertisement]] - банерная система flurry, amazon&lt;br /&gt;
* [[Файл:Splitmanager.png]] - [[Splitmanager or A\B Testing]] - менеджер сплитов&lt;br /&gt;
* [[Файл:Tapjoy.png]] - [[Tapjoy]] - система рекламы игр&lt;br /&gt;
* [[Файл:Playhaven.png|24px]] - [[Playhaven]] - система рекламы игр с внутренними up-sale&lt;br /&gt;
* [[Файл:Mobileapptracker.png|24px]] - [[Mobileapptracking]] -&lt;br /&gt;
* [[Файл:Chartboost-logo-new.jpeg]] - [[Chartboost]] -  Chartboost-logo-new.jpeg&lt;br /&gt;
* [[Файл:Kub.png]] - [[SuperSonic]] -  провайдер рекламы SuperSonic&lt;br /&gt;
* [[Файл:Kub.png]] - [[System]] - объект для доступа к системным настройкам&lt;br /&gt;
* [[Файл:Kub.png]] - [[Salesmanager]] - менеджер акций&lt;br /&gt;
* [[Файл:Kub.png]] - [[Cloud]] - объект для синхронизации в облаке&lt;br /&gt;
* [[Файл:Kub.png]] - [[Game]] - объект для отправки событий&lt;br /&gt;
&lt;br /&gt;
=== Social ===&lt;br /&gt;
* [[Файл:Facebook.png]] - [[Facebook]] - настройки расшаривания Facebook&lt;br /&gt;
** [[Файл:Esocialfrienditem.png]] - [[Esocialitem]] - Шаблон для ячейки списка друзей&lt;br /&gt;
** [[Файл:Kub.png]] - [[Esocialgiftitem]] - Шаблон для ячейки с предметом, который можно подарить другу&lt;br /&gt;
** [[Файл:Esocial.png]] - [[Esocial]] - объект для взаимодействия с Facebook'ом&lt;br /&gt;
* [[Файл:Twitter.png]] - [[Twitter]] - настройки расшаривания Twitter&lt;br /&gt;
* [[Файл:Odnoklassniki.png]] - [[Odnoklassniki]] - настройки для социальной сети Одноклассники&lt;br /&gt;
* [[Файл:Googleplus.png]] - [[GooglePlus]] - настройки для социальной сети GooglePlus&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
* [[Файл:Forward.png]] - [[SendMail]] - отправка письма через почтовый клиент&lt;br /&gt;
* [[Файл:footer-icon-rate.png]] - [[Rate]] - вызов окна оценки приложения&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;50px&amp;quot; heights=&amp;quot;50px&amp;quot; &amp;gt;&lt;br /&gt;
Изображение:Who.png&lt;br /&gt;
Изображение:AnimalHideSeek.png&lt;br /&gt;
Изображение:travel.png&lt;br /&gt;
Изображение:Game_Adventure_Train.png&lt;br /&gt;
Изображение:Gmae_Match_MoveTheDolly.png&lt;br /&gt;
Изображение:Game_Patchwork_BigEyes.png&lt;br /&gt;
Изображение:Game_Patchwork_Chameleon.png&lt;br /&gt;
Изображение:Game_Patchwork_Logicly.png‎&lt;br /&gt;
Изображение:Game_Patchwork_Stickers.png‎&lt;br /&gt;
Изображение:Elephant.png&lt;br /&gt;
Изображение:Elephant2.png&lt;br /&gt;
Изображение:Cinderella.png&lt;br /&gt;
Изображение:Pigs.png&lt;br /&gt;
Изображение:Bremenskye.png&lt;br /&gt;
Изображение:Book_SnowWhite.png&lt;br /&gt;
Изображение:Book_PussInBoots.png&lt;br /&gt;
Изображение:Call.png&lt;br /&gt;
Изображение:GreatestArtists.png&lt;br /&gt;
Изображение:Game_Puzzle_Kids.png&lt;br /&gt;
Изображение:Game_Puzzle_Architect.png‎&lt;br /&gt;
Изображение:Game_Puzzle_Science.png&lt;br /&gt;
Изображение:Ico_1_114_Full.png&lt;br /&gt;
Изображение:Game_Adventure_Dreams.png&lt;br /&gt;
Изображение:Abc.png&lt;br /&gt;
Изображение:Ico_114_Full.png&lt;br /&gt;
Изображение:Ico_114_Paints.png&lt;br /&gt;
Изображение:Ico_114_Puzzle.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:main]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Statistic&amp;diff=8114</id>
		<title>Statistic</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Statistic&amp;diff=8114"/>
		<updated>2016-04-05T10:57:43Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Окно настройки событий событий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:Statistic 4.png|thumb|right]]&lt;br /&gt;
[[Object|Объект]] '''Statistic''' предназначен для отправки игровых событий на сервер статистики. Для работы объекту нужны ссылки на объекты [[Economics|экономики]] и [[Options|опций]].&lt;br /&gt;
&lt;br /&gt;
Также в проекте должен быть [[Flurry|объект для отправки статистики]]. &lt;br /&gt;
&lt;br /&gt;
'''Важно!''' Все параметры нужно указывать через объект Statistic. Механизм отправки статистики с непосредственным указанием параметров объекту statesender является устаревшим и приводит к появлению ворнингов. &lt;br /&gt;
&lt;br /&gt;
Для настройки событий нужно открыть окно объекта (двойной клик по объекту в дереве проекта или на области свойств)&lt;br /&gt;
&lt;br /&gt;
==Окно настройки событий событий==&lt;br /&gt;
[[Файл:Statistic 1.png|border|400 px|right]]&lt;br /&gt;
В данном окне мы можем добавлять и редактировать группы для событий и сами события. &lt;br /&gt;
[[Файл:Statistic 5.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 6.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 7.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 8.png|border|left]]&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;
&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;
&lt;br /&gt;
Каждое событие может иметь произвольное количество параметров, которое ограничено [[Flurry#Ограничения для разных сервисов статистики|сервисом статистики]], куда отправляются данные. Каждое событие может включать статические и пользовательские параметры. Пользовательские параметры добавляются как подобъекты события. Статические события выбираются из списка слева&lt;br /&gt;
[[Файл:Statistic 3.png|border|right]]&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;
'''''receiver''''' - Система статистики, которой нужно отправлять события.&lt;br /&gt;
*'''Flurry'''&lt;br /&gt;
*'''AppStat'''&lt;br /&gt;
*'''Google''' &lt;br /&gt;
*'''Amazon''' &lt;br /&gt;
&lt;br /&gt;
'''''static_events''''' - Статические параметры событий&lt;br /&gt;
*'''exp''' - опыт внутри уровня.&lt;br /&gt;
*'''level''' - уровень игрока.&lt;br /&gt;
*'''xplevel''' - уровень игрока.&lt;br /&gt;
*'''res1''' - количество ресурса 1.&lt;br /&gt;
*'''coins_left''' - количество ресурса 1.&lt;br /&gt;
*'''res2''' - количество ресурса 2.&lt;br /&gt;
*'''diams_left''' - количество ресурса 2.&lt;br /&gt;
*'''en''' - текущая энергия&lt;br /&gt;
[[Файл:Statistic 2.png|border|right]]&lt;br /&gt;
*'''res1log''' - логарифмический остаток монет.&lt;br /&gt;
*'''res1logfl''' - логарифмический остаток монет.&lt;br /&gt;
*'''coins_left_log''' - логарифмический остаток монет.&lt;br /&gt;
*'''res1sp''' - количество потраченного ресурса 1.&lt;br /&gt;
*'''res2sp''' - количество потраченного ресурса 2.&lt;br /&gt;
*'''res1ea''' - количество заработанного ресурса 1.&lt;br /&gt;
*'''res2ea''' - количество заработанного ресурса 2.&lt;br /&gt;
*'''t_log_ses''' - 24 * log(время сессии).&lt;br /&gt;
&lt;br /&gt;
Также для всех событий автоматически добавляются параметры t_log_cal и t_log_play, которые представляют логарифмическое календарное и игровое время.&lt;br /&gt;
Также для всех событий можно добавить пользовательский параметр, который будет добавляться автоматически.&lt;br /&gt;
&lt;br /&gt;
==Использование объекта==&lt;br /&gt;
Для того, что бы отправить событие объекту Statistic нужно вызвать состояние, соответствующие имени события. (На пример для события указанного на рисунке нужно вызвать состояние my_event). Следовательно имя каждого события должно быть уникально.&lt;br /&gt;
&lt;br /&gt;
Иногда возникает необходимость отправлять несколько событий, которые отличаются частью имени. Что бы не добавлять несколько событий можно использовать заменяемую часть имени. Вместо части, которую мы будем заменять, нужно указать %r%. Перед отправкой данного события объекту нужно установить в параметр replace_string строку, на которую мы заменим %r%.&lt;br /&gt;
&lt;br /&gt;
Если в событии нужно отправлять параметр, который вычисляется с помощью математики, то все вычисления делаем в [[Machine|машине состояний]], пишем их куда-то (можно в эту же машину), а в событии вычитываем эти параметры.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample&lt;br /&gt;
&lt;br /&gt;
Statistic_test.zip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Main objects]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Statistic&amp;diff=8113</id>
		<title>Statistic</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Statistic&amp;diff=8113"/>
		<updated>2016-04-05T10:57:25Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Окно настройки событий событий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:Statistic 4.png|thumb|right]]&lt;br /&gt;
[[Object|Объект]] '''Statistic''' предназначен для отправки игровых событий на сервер статистики. Для работы объекту нужны ссылки на объекты [[Economics|экономики]] и [[Options|опций]].&lt;br /&gt;
&lt;br /&gt;
Также в проекте должен быть [[Flurry|объект для отправки статистики]]. &lt;br /&gt;
&lt;br /&gt;
'''Важно!''' Все параметры нужно указывать через объект Statistic. Механизм отправки статистики с непосредственным указанием параметров объекту statesender является устаревшим и приводит к появлению ворнингов. &lt;br /&gt;
&lt;br /&gt;
Для настройки событий нужно открыть окно объекта (двойной клик по объекту в дереве проекта или на области свойств)&lt;br /&gt;
&lt;br /&gt;
==Окно настройки событий событий==&lt;br /&gt;
[[Файл:Statistic 1.png|border|400 px|right]]&lt;br /&gt;
В данном окне мы можем добавлять и редактировать группы для событий и сами события. &lt;br /&gt;
[[Файл:Statistic 5.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 6.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 7.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 8.png|border|left]]&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;
&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;
Каждое событие может иметь произвольное количество параметров, которое ограничено [[Flurry#Ограничения для разных сервисов статистики|сервисом статистики]], куда отправляются данные. Каждое событие может включать статические и пользовательские параметры. Пользовательские параметры добавляются как подобъекты события. Статические события выбираются из списка слева&lt;br /&gt;
[[Файл:Statistic 3.png|border|right]]&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;
'''''receiver''''' - Система статистики, которой нужно отправлять события.&lt;br /&gt;
*'''Flurry'''&lt;br /&gt;
*'''AppStat'''&lt;br /&gt;
*'''Google''' &lt;br /&gt;
*'''Amazon''' &lt;br /&gt;
&lt;br /&gt;
'''''static_events''''' - Статические параметры событий&lt;br /&gt;
*'''exp''' - опыт внутри уровня.&lt;br /&gt;
*'''level''' - уровень игрока.&lt;br /&gt;
*'''xplevel''' - уровень игрока.&lt;br /&gt;
*'''res1''' - количество ресурса 1.&lt;br /&gt;
*'''coins_left''' - количество ресурса 1.&lt;br /&gt;
*'''res2''' - количество ресурса 2.&lt;br /&gt;
*'''diams_left''' - количество ресурса 2.&lt;br /&gt;
*'''en''' - текущая энергия&lt;br /&gt;
[[Файл:Statistic 2.png|border|right]]&lt;br /&gt;
*'''res1log''' - логарифмический остаток монет.&lt;br /&gt;
*'''res1logfl''' - логарифмический остаток монет.&lt;br /&gt;
*'''coins_left_log''' - логарифмический остаток монет.&lt;br /&gt;
*'''res1sp''' - количество потраченного ресурса 1.&lt;br /&gt;
*'''res2sp''' - количество потраченного ресурса 2.&lt;br /&gt;
*'''res1ea''' - количество заработанного ресурса 1.&lt;br /&gt;
*'''res2ea''' - количество заработанного ресурса 2.&lt;br /&gt;
*'''t_log_ses''' - 24 * log(время сессии).&lt;br /&gt;
&lt;br /&gt;
Также для всех событий автоматически добавляются параметры t_log_cal и t_log_play, которые представляют логарифмическое календарное и игровое время.&lt;br /&gt;
Также для всех событий можно добавить пользовательский параметр, который будет добавляться автоматически.&lt;br /&gt;
&lt;br /&gt;
==Использование объекта==&lt;br /&gt;
Для того, что бы отправить событие объекту Statistic нужно вызвать состояние, соответствующие имени события. (На пример для события указанного на рисунке нужно вызвать состояние my_event). Следовательно имя каждого события должно быть уникально.&lt;br /&gt;
&lt;br /&gt;
Иногда возникает необходимость отправлять несколько событий, которые отличаются частью имени. Что бы не добавлять несколько событий можно использовать заменяемую часть имени. Вместо части, которую мы будем заменять, нужно указать %r%. Перед отправкой данного события объекту нужно установить в параметр replace_string строку, на которую мы заменим %r%.&lt;br /&gt;
&lt;br /&gt;
Если в событии нужно отправлять параметр, который вычисляется с помощью математики, то все вычисления делаем в [[Machine|машине состояний]], пишем их куда-то (можно в эту же машину), а в событии вычитываем эти параметры.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample&lt;br /&gt;
&lt;br /&gt;
Statistic_test.zip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Main objects]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Statistic&amp;diff=8112</id>
		<title>Statistic</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Statistic&amp;diff=8112"/>
		<updated>2016-04-05T10:57:18Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Окно настройки событий событий */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:Statistic 4.png|thumb|right]]&lt;br /&gt;
[[Object|Объект]] '''Statistic''' предназначен для отправки игровых событий на сервер статистики. Для работы объекту нужны ссылки на объекты [[Economics|экономики]] и [[Options|опций]].&lt;br /&gt;
&lt;br /&gt;
Также в проекте должен быть [[Flurry|объект для отправки статистики]]. &lt;br /&gt;
&lt;br /&gt;
'''Важно!''' Все параметры нужно указывать через объект Statistic. Механизм отправки статистики с непосредственным указанием параметров объекту statesender является устаревшим и приводит к появлению ворнингов. &lt;br /&gt;
&lt;br /&gt;
Для настройки событий нужно открыть окно объекта (двойной клик по объекту в дереве проекта или на области свойств)&lt;br /&gt;
&lt;br /&gt;
==Окно настройки событий событий==&lt;br /&gt;
[[Файл:Statistic 1.png|border|400 px|right]]&lt;br /&gt;
В данном окне мы можем добавлять и редактировать группы для событий и сами события. &lt;br /&gt;
[[Файл:Statistic 5.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 6.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 7.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 8.png|border|left]]&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;
&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;
Каждое событие может иметь произвольное количество параметров, которое ограничено [[Flurry#Ограничения для разных сервисов статистики|сервисом статистики]], куда отправляются данные. Каждое событие может включать статические и пользовательские параметры. Пользовательские параметры добавляются как подобъекты события. Статические события выбираются из списка слева&lt;br /&gt;
[[Файл:Statistic 3.png|border|right]]&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;
'''''receiver''''' - Система статистики, которой нужно отправлять события.&lt;br /&gt;
*'''Flurry'''&lt;br /&gt;
*'''AppStat'''&lt;br /&gt;
*'''Google''' &lt;br /&gt;
*'''Amazon''' &lt;br /&gt;
&lt;br /&gt;
'''''static_events''''' - Статические параметры событий&lt;br /&gt;
*'''exp''' - опыт внутри уровня.&lt;br /&gt;
*'''level''' - уровень игрока.&lt;br /&gt;
*'''xplevel''' - уровень игрока.&lt;br /&gt;
*'''res1''' - количество ресурса 1.&lt;br /&gt;
*'''coins_left''' - количество ресурса 1.&lt;br /&gt;
*'''res2''' - количество ресурса 2.&lt;br /&gt;
*'''diams_left''' - количество ресурса 2.&lt;br /&gt;
*'''en''' - текущая энергия&lt;br /&gt;
[[Файл:Statistic 2.png|border|right]]&lt;br /&gt;
*'''res1log''' - логарифмический остаток монет.&lt;br /&gt;
*'''res1logfl''' - логарифмический остаток монет.&lt;br /&gt;
*'''coins_left_log''' - логарифмический остаток монет.&lt;br /&gt;
*'''res1sp''' - количество потраченного ресурса 1.&lt;br /&gt;
*'''res2sp''' - количество потраченного ресурса 2.&lt;br /&gt;
*'''res1ea''' - количество заработанного ресурса 1.&lt;br /&gt;
*'''res2ea''' - количество заработанного ресурса 2.&lt;br /&gt;
*'''t_log_ses''' - 24 * log(время сессии).&lt;br /&gt;
&lt;br /&gt;
Также для всех событий автоматически добавляются параметры t_log_cal и t_log_play, которые представляют логарифмическое календарное и игровое время.&lt;br /&gt;
Также для всех событий можно добавить пользовательский параметр, который будет добавляться автоматически.&lt;br /&gt;
&lt;br /&gt;
==Использование объекта==&lt;br /&gt;
Для того, что бы отправить событие объекту Statistic нужно вызвать состояние, соответствующие имени события. (На пример для события указанного на рисунке нужно вызвать состояние my_event). Следовательно имя каждого события должно быть уникально.&lt;br /&gt;
&lt;br /&gt;
Иногда возникает необходимость отправлять несколько событий, которые отличаются частью имени. Что бы не добавлять несколько событий можно использовать заменяемую часть имени. Вместо части, которую мы будем заменять, нужно указать %r%. Перед отправкой данного события объекту нужно установить в параметр replace_string строку, на которую мы заменим %r%.&lt;br /&gt;
&lt;br /&gt;
Если в событии нужно отправлять параметр, который вычисляется с помощью математики, то все вычисления делаем в [[Machine|машине состояний]], пишем их куда-то (можно в эту же машину), а в событии вычитываем эти параметры.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample&lt;br /&gt;
&lt;br /&gt;
Statistic_test.zip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Main objects]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Statistic&amp;diff=8111</id>
		<title>Statistic</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Statistic&amp;diff=8111"/>
		<updated>2016-04-05T10:55:19Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: Новая страница: «{{TOC right}}  right Объект '''Statistic''' предназначен для отправки игровых с…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:Statistic 4.png|thumb|right]]&lt;br /&gt;
[[Object|Объект]] '''Statistic''' предназначен для отправки игровых событий на сервер статистики. Для работы объекту нужны ссылки на объекты [[Economics|экономики]] и [[Options|опций]].&lt;br /&gt;
&lt;br /&gt;
Также в проекте должен быть [[Flurry|объект для отправки статистики]]. &lt;br /&gt;
&lt;br /&gt;
'''Важно!''' Все параметры нужно указывать через объект Statistic. Механизм отправки статистики с непосредственным указанием параметров объекту statesender является устаревшим и приводит к появлению ворнингов. &lt;br /&gt;
&lt;br /&gt;
Для настройки событий нужно открыть окно объекта (двойной клик по объекту в дереве проекта или на области свойств)&lt;br /&gt;
&lt;br /&gt;
==Окно настройки событий событий==&lt;br /&gt;
[[Файл:Statistic 1.png|border|400 px|right]]&lt;br /&gt;
В данном окне мы можем добавлять и редактировать группы для событий и сами события. &lt;br /&gt;
[[Файл:Statistic 5.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 6.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 7.png|border|left]]&lt;br /&gt;
[[Файл:Statistic 8.png|border|left]]&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;
&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;
Каждое событие может иметь произвольное количество параметров, которое ограничено [[Flurry#Ограничения для разных сервисов статистики|сервисом статистики]], куда отправляются данные. Каждое событие может включать статические и пользовательские параметры. Пользовательские параметры добавляются как подобъекты события. Статические события выбираются из списка слева&lt;br /&gt;
[[Файл:Statistic 3.png|border|right]]&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;
'''''receiver''''' - Система статистики, которой нужно отправлять события.&lt;br /&gt;
*'''Flurry'''&lt;br /&gt;
*'''AppStat'''&lt;br /&gt;
*'''Google''' &lt;br /&gt;
*'''Amazon''' &lt;br /&gt;
&lt;br /&gt;
'''''static_events''''' - Статические параметры событий&lt;br /&gt;
*'''exp''' - опыт внутри уровня.&lt;br /&gt;
*'''level''' - уровень игрока.&lt;br /&gt;
*'''xplevel''' - уровень игрока.&lt;br /&gt;
*'''res1''' - количество ресурса 1.&lt;br /&gt;
*'''coins_left''' - количество ресурса 1.&lt;br /&gt;
*'''res2''' - количество ресурса 2.&lt;br /&gt;
*'''diams_left''' - количество ресурса 2.&lt;br /&gt;
*'''en''' - текущая энергия&lt;br /&gt;
[[Файл:Statistic 2.png|border|right]]&lt;br /&gt;
*'''res1log''' - логарифмический остаток монет.&lt;br /&gt;
*'''res1logfl''' - логарифмический остаток монет.&lt;br /&gt;
*'''coins_left_log''' - логарифмический остаток монет.&lt;br /&gt;
*'''res1sp''' - количество потраченного ресурса 1.&lt;br /&gt;
*'''res2sp''' - количество потраченного ресурса 2.&lt;br /&gt;
*'''res1ea''' - количество заработанного ресурса 1.&lt;br /&gt;
*'''res2ea''' - количество заработанного ресурса 2.&lt;br /&gt;
*'''t_log_ses''' - 24 * log(время сессии).&lt;br /&gt;
&lt;br /&gt;
Также для всех событий автоматически добавляются параметры t_log_cal и t_log_play, которые представляют логарифмическое календарное и игровое время.&lt;br /&gt;
Также для всех событий можно добавить пользовательский параметр, который будет добавляться автоматически.&lt;br /&gt;
&lt;br /&gt;
==Использование объекта==&lt;br /&gt;
Для того, что бы отправить событие объекту Statistic нужно вызвать состояние, соответствующие имени события. (На пример для события указанного на рисунке нужно вызвать состояние my_event). Следовательно имя каждого события должно быть уникально.&lt;br /&gt;
&lt;br /&gt;
Иногда возникает необходимость отправлять несколько событий, которые отличаются частью имени. Что бы не добавлять несколько событий можно использовать заменяемую часть имени. Вместо части, которую мы будем заменять, нужно указать %r%. Перед отправкой данного события объекту нужно установить в параметр replace_string строку, на которую мы заменим %r%.&lt;br /&gt;
&lt;br /&gt;
Если в событии нужно отправлять параметр, который вычисляется с помощью математики, то все вычисления делаем в [[Machine|машине состояний]], пишем их куда-то (можно в эту же машину), а в событии вычитываем эти параметры.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample&lt;br /&gt;
&lt;br /&gt;
Statistic_test.zip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Main objects]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_3.png&amp;diff=8110</id>
		<title>Файл:Statistic 3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_3.png&amp;diff=8110"/>
		<updated>2016-04-05T09:24:17Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: Vefimov загрузил новую версию Файл:Statistic 3.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_1.png&amp;diff=8109</id>
		<title>Файл:Statistic 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_1.png&amp;diff=8109"/>
		<updated>2016-04-05T09:04:35Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: Vefimov загрузил новую версию Файл:Statistic 1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_2.png&amp;diff=8108</id>
		<title>Файл:Statistic 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_2.png&amp;diff=8108"/>
		<updated>2016-04-05T09:03:36Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: Vefimov загрузил новую версию Файл:Statistic 2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_8.png&amp;diff=8107</id>
		<title>Файл:Statistic 8.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_8.png&amp;diff=8107"/>
		<updated>2016-04-05T08:38:44Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_7.png&amp;diff=8106</id>
		<title>Файл:Statistic 7.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_7.png&amp;diff=8106"/>
		<updated>2016-04-05T08:38:38Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_6.png&amp;diff=8105</id>
		<title>Файл:Statistic 6.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_6.png&amp;diff=8105"/>
		<updated>2016-04-05T08:38:33Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_5.png&amp;diff=8104</id>
		<title>Файл:Statistic 5.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_5.png&amp;diff=8104"/>
		<updated>2016-04-05T08:38:27Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_4.png&amp;diff=8103</id>
		<title>Файл:Statistic 4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_4.png&amp;diff=8103"/>
		<updated>2016-04-05T07:01:24Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_3.png&amp;diff=8102</id>
		<title>Файл:Statistic 3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_3.png&amp;diff=8102"/>
		<updated>2016-04-05T07:01:18Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_2.png&amp;diff=8101</id>
		<title>Файл:Statistic 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_2.png&amp;diff=8101"/>
		<updated>2016-04-05T07:00:05Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_1.png&amp;diff=8100</id>
		<title>Файл:Statistic 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Statistic_1.png&amp;diff=8100"/>
		<updated>2016-04-05T06:59:53Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Salesmanager&amp;diff=8099</id>
		<title>Salesmanager</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Salesmanager&amp;diff=8099"/>
		<updated>2016-04-05T06:02:53Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
[[Object|Объект]] '''Salesmaneger''' предназначается для управления всплывающими окошками с различными акциями: скидками, выгодными предложениями и т. д. Для того, чтобы наиболее выгодным образом показывать человеку акции, этот объект будет сам определяет категорию пользователя, и в зависимости от нее показывает игроку различные события. За основу взято окно настройки локации из объекта [[Economics|Economics]].&lt;br /&gt;
&lt;br /&gt;
==Окно акций==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SM Actions.png|600 px|right]]&lt;br /&gt;
В данном окне добавляются и редактируются акции, которые потом включаются в сценарии. Каждая запись слева представляет одну акцию. Справа расположены настройки акции. Некоторые из них оставлены для совместимости с [[Salesmanager (Предыдущая версия)|предыдущей версией]] менеджера акций. &lt;br /&gt;
&lt;br /&gt;
Используемые параметры:&lt;br /&gt;
*'''id события'''  - id акции, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''объект'''  - Машина-обработчик акции должна иметь состояния '''show_first''' (первый показ акции), '''show'''(показать акцию), '''delete''' - удалить акцию; также в эту машину пишется id сценария, в который входит акция, как параметр '''sales_scenario'''.&lt;br /&gt;
*'''Длительность акции'''  - время в секундах, в течении которого, акция активна.&lt;br /&gt;
*'''Количество показов '''  - сколько раз акция будет показана игроку (для акции будет вызвано show и show_first)&lt;br /&gt;
Также можно добавить произвольное количество условий окончания акции. Все условия объединяются логическим &amp;quot;И&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Окно групп пользователей==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SM Groups.png|600 px|right]]&lt;br /&gt;
Есть 6 групп пользователей, в зависимости от их действий в игре:&lt;br /&gt;
*1. Не платившие, покинувшие игру;&lt;br /&gt;
*2. Платившие, но переставшие платить, продолжающие играть;&lt;br /&gt;
*3. Платившие, покинувшие игру;&lt;br /&gt;
*4. Не платившие, продолжающие играть;&lt;br /&gt;
*5. Платящие, играющие;&lt;br /&gt;
*6. Сломали игру.&lt;br /&gt;
Изменить количество групп в редакторе нельзя. Но это можно сделать через редактирование лейаута (Но я вам об этом не говорил.)&lt;br /&gt;
Эти группы определяются рядом параметров, по которым происходит определение игрока в одну из них. Эти параметры на протяжении игры меняются, поэтому одни и те же игроки со временем могут менять группу.&lt;br /&gt;
&lt;br /&gt;
'''Важно!''' Данные параметры нужно подобрать таким образом, что бы группы не имели пересечений, т.е. в один момент времени игрок может попасть только в одну группу. Иначе сценарии будут отрабатывать некорректно.&lt;br /&gt;
[[Файл:SM Switch.png|400 px|right]]&lt;br /&gt;
Параметры группы:&lt;br /&gt;
*'''от последней сессии мин''' ''(t_last_ses_min)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней сессии макс''' ''(t_last_ses_max)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней покупки мин''' ''(t_last_buy_min)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''от последней покупки макc''' ''(t_last_buy_max)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''суток в игре мин''' ''(t_days_min)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
*'''суток в игре макс''' ''(t_days_max)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы мы можем добавлять произвольное количество сценариев. Сценарий может включать произвольное количество акций. Для добавления акций в сценарий нужно переключить вид окна групп (кнопка &amp;quot;Switch&amp;quot;) и выбрать нужные акции для сценария.&lt;br /&gt;
&lt;br /&gt;
Для активации сценария должны быть выполнены все его условия. Каждый сценарий имеет следующие параметры (описаны только актуальные параметры): &lt;br /&gt;
&lt;br /&gt;
*'''id сценария'''  - id сценария, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''события сценария'''  - список акций, которые входят в этот сценарий.&lt;br /&gt;
*'''поле в опциях'''  - Поле в опциях, откуда будет взят прогресс игрока.&lt;br /&gt;
*'''min уровень'''  - Минимальный уровень при котором срабатывает событие.&lt;br /&gt;
*'''уровни'''  - Через запятую значения для предыдущего поля, при которых сработает событие.&lt;br /&gt;
*'''события до'''  - События, которые должны были сработать до этого.&lt;br /&gt;
*'''время от инсталла min'''  - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки min'''  - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события min'''  - Время от последнего события в секундах.&lt;br /&gt;
*'''время от инсталла max'''  - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки max'''  - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события max'''  - Время от последнего события в секундах.&lt;br /&gt;
*'''использовать дату'''  - 0 - не использовать, 1 - проверять месяц и день, 2 - проверять и год тоже.&lt;br /&gt;
*'''год'''  - Год, когда сработает оповещение.&lt;br /&gt;
*'''месяц'''  - Месяц, когда сработает оповещение.&lt;br /&gt;
*'''день'''  - День, когда сработает оповещение.&lt;br /&gt;
*'''повторяемое'''  - Повторяемое ли событие нет=0, да=1.&lt;br /&gt;
Также для сценария можно добавить произвольное количество условий начала сценария.&lt;br /&gt;
&lt;br /&gt;
==Состояния==&lt;br /&gt;
&lt;br /&gt;
*'''check_multiple''' - определяется группа игрока, проверяет есть ли сценарии, которые можно запустить;&lt;br /&gt;
*'''ok''' - сценарий завершился успехом(покупкой), перед вызовом состояния Salesmamnager'у нужно установить в param id сценария (пишется в машину-обработчик акции, как sales_scenario);&lt;br /&gt;
*'''cancel''' - завершить текущую акцию в сценарии, перед вызовом указать id сценария;&lt;br /&gt;
*'''cancel_scenario''' - завершить сценарий, указанный в param Salesmamnager'у (ожидается);&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
При вызове объекту состояния &amp;quot;check_multiple&amp;quot; сначала определяется группа игрока, после чего проверяются все сценарии этой группы.&lt;br /&gt;
Если есть сценарий, для которого выполнились условия, то он активируется. При этом машина-обработчик первой акции в сценарии переходит в &amp;quot;show_first&amp;quot;. В этом состоянии обработчика настраиваем первый показ акции.&lt;br /&gt;
Если на момент вызова состояния &amp;quot;check_multiple&amp;quot; были активные акции, то информация о них будет обновлена а машина-обработчик акции перейдет в &amp;quot;show&amp;quot;. В этом состоянии настраиваем обновление акции (оставшееся время и т.д.).&lt;br /&gt;
Если акция закончилась (по времени или количеству показов), то при следующей проверке будет показана следующая акция из данного сценария.&lt;br /&gt;
Сценарий может закончиться 3 способами:&lt;br /&gt;
# Закончились все акции сценария&lt;br /&gt;
# Отменой сценария &lt;br /&gt;
# Покупкой акции&lt;br /&gt;
При отмене/покупки акции ее обработчик перейдет в состояние &amp;quot;delete&amp;quot;, если будет корректно вызвано соответствующее состояние.&lt;br /&gt;
&lt;br /&gt;
==Запись в опции==&lt;br /&gt;
объект пишет опции в текущего пользователя, в следующем виде:&lt;br /&gt;
  &amp;lt;salesmanager%d ev3=&amp;quot;1&amp;quot; act_group=&amp;quot;4&amp;quot; last_ev=&amp;quot;1459770112&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;ev3 tl=&amp;quot;915&amp;quot; skip=&amp;quot;0&amp;quot; aen=&amp;quot;-1&amp;quot; aes=&amp;quot;1459770112&amp;quot; ae=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/salesmanager%d&amp;gt;&lt;br /&gt;
В теге ''salesmanager%d'':&lt;br /&gt;
*'''ev%d''' - число активаций сценария (отдельно от прочей информации по сценарию из-за обратной совместимости);&lt;br /&gt;
*'''act_group''' - номер группы пользователя (начиная с 0) по последней проверке;&lt;br /&gt;
*'''last_ev''' - время активации последнего сценария;&lt;br /&gt;
&lt;br /&gt;
В теге ''ev%d'':&lt;br /&gt;
*'''tl''' - оставшееся время;&lt;br /&gt;
*'''skip''' - 1 - событие отменено, при следующей проверке попытаемся перейти на следующее;&lt;br /&gt;
*'''aen''' - оставшееся число его показов;&lt;br /&gt;
*'''aes''' - дата старта текущего события;&lt;br /&gt;
*'''ae''' - текущее событие для активного сценария, -1 для неактивного;&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample&lt;br /&gt;
&lt;br /&gt;
salesmanager_test.zip&lt;br /&gt;
&lt;br /&gt;
[[Category:Options|*]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Salesmanager&amp;diff=8098</id>
		<title>Salesmanager</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Salesmanager&amp;diff=8098"/>
		<updated>2016-04-05T05:36:09Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Состояния */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
[[Object|Объект]] '''Salesmaneger''' предназначается для управления всплывающими окошками с различными акциями: скидками, выгодными предложениями и т. д. Для того, чтобы наиболее выгодным образом показывать человеку акции, этот объект будет сам определяет категорию пользователя, и в зависимости от нее показывает игроку различные события. За основу взято окно настройки локации из объекта [[Economics|Economics]].&lt;br /&gt;
&lt;br /&gt;
==Окно акций==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SM Actions.png|600 px|right]]&lt;br /&gt;
В данном окне добавляются и редактируются акции, которые потом включаются в сценарии. Каждая запись слева представляет одну акцию. Справа расположены настройки акции. Некоторые из них оставлены для совместимости с [[Salesmanager (Предыдущая версия)|предыдущей версией]] менеджера акций. &lt;br /&gt;
&lt;br /&gt;
Используемые параметры:&lt;br /&gt;
*'''id события'''  - id акции, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''объект'''  - Машина-обработчик акции должна иметь состояния '''show_first''' (первый показ акции), '''show'''(показать акцию), '''delete''' - удалить акцию; также в эту машину пишется id сценария, в который входит акция, как параметр '''sales_scenario'''.&lt;br /&gt;
*'''Длительность акции'''  - время в секундах, в течении которого, акция активна.&lt;br /&gt;
*'''Количество показов '''  - сколько раз акция будет показана игроку (для акции будет вызвано show и show_first)&lt;br /&gt;
Также можно добавить произвольное количество условий окончания акции. Все условия объединяются логическим &amp;quot;И&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Окно групп пользователей==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SM Groups.png|600 px|right]]&lt;br /&gt;
Есть 6 групп пользователей, в зависимости от их действий в игре:&lt;br /&gt;
*1. Не платившие, покинувшие игру;&lt;br /&gt;
*2. Платившие, но переставшие платить, продолжающие играть;&lt;br /&gt;
*3. Платившие, покинувшие игру;&lt;br /&gt;
*4. Не платившие, продолжающие играть;&lt;br /&gt;
*5. Платящие, играющие;&lt;br /&gt;
*6. Сломали игру.&lt;br /&gt;
Изменить количество групп в редакторе нельзя. Но это можно сделать через редактирование лейаута (Но я вам об этом не говорил.)&lt;br /&gt;
Эти группы определяются рядом параметров, по которым происходит определение игрока в одну из них. Эти параметры на протяжении игры меняются, поэтому одни и те же игроки со временем могут менять группу.&lt;br /&gt;
&lt;br /&gt;
'''Важно!''' Данные параметры нужно подобрать таким образом, что бы группы не имели пересечений, т.е. в один момент времени игрок может попасть только в одну группу. Иначе сценарии будут отрабатывать некорректно.&lt;br /&gt;
[[Файл:SM Switch.png|400 px|right]]&lt;br /&gt;
Параметры группы:&lt;br /&gt;
*'''от последней сессии мин''' ''(t_last_ses_min)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней сессии макс''' ''(t_last_ses_max)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней покупки мин''' ''(t_last_buy_min)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''от последней покупки макc''' ''(t_last_buy_max)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''суток в игре мин''' ''(t_days_min)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
*'''суток в игре макс''' ''(t_days_max)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы мы можем добавлять произвольное количество сценариев. Сценарий может включать произвольное количество акций. Для добавления акций в сценарий нужно переключить вид окна групп (кнопка &amp;quot;Switch&amp;quot;) и выбрать нужные акции для сценария.&lt;br /&gt;
&lt;br /&gt;
Для активации сценария должны быть выполнены все его условия. Каждый сценарий имеет следующие параметры (описаны только актуальные параметры): &lt;br /&gt;
&lt;br /&gt;
*'''id сценария'''  - id сценария, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''события сценария'''  - список акций, которые входят в этот сценарий.&lt;br /&gt;
*'''поле в опциях'''  - Поле в опциях, откуда будет взят прогресс игрока.&lt;br /&gt;
*'''min уровень'''  - Минимальный уровень при котором срабатывает событие.&lt;br /&gt;
*'''уровни'''  - Через запятую значения для предыдущего поля, при которых сработает событие.&lt;br /&gt;
*'''события до'''  - События, которые должны были сработать до этого.&lt;br /&gt;
*'''время от инсталла min'''  - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки min'''  - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события min'''  - Время от последнего события в секундах.&lt;br /&gt;
*'''время от инсталла max'''  - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки max'''  - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события max'''  - Время от последнего события в секундах.&lt;br /&gt;
*'''использовать дату'''  - 0 - не использовать, 1 - проверять месяц и день, 2 - проверять и год тоже.&lt;br /&gt;
*'''год'''  - Год, когда сработает оповещение.&lt;br /&gt;
*'''месяц'''  - Месяц, когда сработает оповещение.&lt;br /&gt;
*'''день'''  - День, когда сработает оповещение.&lt;br /&gt;
*'''повторяемое'''  - Повторяемое ли событие нет=0, да=1.&lt;br /&gt;
Также для сценария можно добавить произвольное количество условий начала сценария.&lt;br /&gt;
&lt;br /&gt;
==Состояния==&lt;br /&gt;
&lt;br /&gt;
*'''check_multiple''' - определяется группа игрока, проверяет есть ли сценарии, которые можно запустить;&lt;br /&gt;
*'''ok''' - сценарий завершился успехом(покупкой), перед вызовом состояния Salesmamnager'у нужно установить в param id сценария (пишется в машину-обработчик акции, как sales_scenario);&lt;br /&gt;
*'''cancel''' - завершить текущую акцию в сценарии, перед вызовом указать id сценария;&lt;br /&gt;
*'''cancel_scenario''' - завершить сценарий, указанный в param Salesmamnager'у (ожидается);&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
При вызове объекту состояния &amp;quot;check_multiple&amp;quot; сначала определяется группа игрока, после чего проверяются все сценарии этой группы.&lt;br /&gt;
Если есть сценарий, для которого выполнились условия, то он активируется. При этом машина-обработчик первой акции в сценарии переходит в &amp;quot;show_first&amp;quot;. В этом состоянии обработчика настраиваем первый показ акции.&lt;br /&gt;
Если на момент вызова состояния &amp;quot;check_multiple&amp;quot; были активные акции, то информация о них будет обновлена а машина-обработчик акции перейдет в &amp;quot;show&amp;quot;. В этом состоянии настраиваем обновление акции (оставшееся время и т.д.).&lt;br /&gt;
Если акция закончилась (по времени или количеству показов), то при следующей проверке будет показана следующая акция из данного сценария.&lt;br /&gt;
Сценарий может закончиться 3 способами:&lt;br /&gt;
# Закончились все акции сценария&lt;br /&gt;
# Отменой акции &lt;br /&gt;
# Покупкой акции&lt;br /&gt;
При отмене/покупки акции Salesmanager'у нужно указать сценарий и вызвать состояние &amp;quot;cancel&amp;quot;/&amp;quot;ok&amp;quot;, при этом обработчик перейдет в состояние &amp;quot;delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Запись в опции==&lt;br /&gt;
объект пишет опции в текущего пользователя, в следующем виде:&lt;br /&gt;
  &amp;lt;salesmanager5 ev3=&amp;quot;1&amp;quot; act_group=&amp;quot;4&amp;quot; last_ev=&amp;quot;1459770112&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;ev3 tl=&amp;quot;915&amp;quot; skip=&amp;quot;0&amp;quot; aen=&amp;quot;-1&amp;quot; aes=&amp;quot;1459770112&amp;quot; ae=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/salesmanager5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Options|*]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Salesmanager&amp;diff=8097</id>
		<title>Salesmanager</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Salesmanager&amp;diff=8097"/>
		<updated>2016-04-05T05:35:42Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Состояния */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
[[Object|Объект]] '''Salesmaneger''' предназначается для управления всплывающими окошками с различными акциями: скидками, выгодными предложениями и т. д. Для того, чтобы наиболее выгодным образом показывать человеку акции, этот объект будет сам определяет категорию пользователя, и в зависимости от нее показывает игроку различные события. За основу взято окно настройки локации из объекта [[Economics|Economics]].&lt;br /&gt;
&lt;br /&gt;
==Окно акций==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SM Actions.png|600 px|right]]&lt;br /&gt;
В данном окне добавляются и редактируются акции, которые потом включаются в сценарии. Каждая запись слева представляет одну акцию. Справа расположены настройки акции. Некоторые из них оставлены для совместимости с [[Salesmanager (Предыдущая версия)|предыдущей версией]] менеджера акций. &lt;br /&gt;
&lt;br /&gt;
Используемые параметры:&lt;br /&gt;
*'''id события'''  - id акции, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''объект'''  - Машина-обработчик акции должна иметь состояния '''show_first''' (первый показ акции), '''show'''(показать акцию), '''delete''' - удалить акцию; также в эту машину пишется id сценария, в который входит акция, как параметр '''sales_scenario'''.&lt;br /&gt;
*'''Длительность акции'''  - время в секундах, в течении которого, акция активна.&lt;br /&gt;
*'''Количество показов '''  - сколько раз акция будет показана игроку (для акции будет вызвано show и show_first)&lt;br /&gt;
Также можно добавить произвольное количество условий окончания акции. Все условия объединяются логическим &amp;quot;И&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Окно групп пользователей==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SM Groups.png|600 px|right]]&lt;br /&gt;
Есть 6 групп пользователей, в зависимости от их действий в игре:&lt;br /&gt;
*1. Не платившие, покинувшие игру;&lt;br /&gt;
*2. Платившие, но переставшие платить, продолжающие играть;&lt;br /&gt;
*3. Платившие, покинувшие игру;&lt;br /&gt;
*4. Не платившие, продолжающие играть;&lt;br /&gt;
*5. Платящие, играющие;&lt;br /&gt;
*6. Сломали игру.&lt;br /&gt;
Изменить количество групп в редакторе нельзя. Но это можно сделать через редактирование лейаута (Но я вам об этом не говорил.)&lt;br /&gt;
Эти группы определяются рядом параметров, по которым происходит определение игрока в одну из них. Эти параметры на протяжении игры меняются, поэтому одни и те же игроки со временем могут менять группу.&lt;br /&gt;
&lt;br /&gt;
'''Важно!''' Данные параметры нужно подобрать таким образом, что бы группы не имели пересечений, т.е. в один момент времени игрок может попасть только в одну группу. Иначе сценарии будут отрабатывать некорректно.&lt;br /&gt;
[[Файл:SM Switch.png|400 px|right]]&lt;br /&gt;
Параметры группы:&lt;br /&gt;
*'''от последней сессии мин''' ''(t_last_ses_min)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней сессии макс''' ''(t_last_ses_max)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней покупки мин''' ''(t_last_buy_min)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''от последней покупки макc''' ''(t_last_buy_max)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''суток в игре мин''' ''(t_days_min)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
*'''суток в игре макс''' ''(t_days_max)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы мы можем добавлять произвольное количество сценариев. Сценарий может включать произвольное количество акций. Для добавления акций в сценарий нужно переключить вид окна групп (кнопка &amp;quot;Switch&amp;quot;) и выбрать нужные акции для сценария.&lt;br /&gt;
&lt;br /&gt;
Для активации сценария должны быть выполнены все его условия. Каждый сценарий имеет следующие параметры (описаны только актуальные параметры): &lt;br /&gt;
&lt;br /&gt;
*'''id сценария'''  - id сценария, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''события сценария'''  - список акций, которые входят в этот сценарий.&lt;br /&gt;
*'''поле в опциях'''  - Поле в опциях, откуда будет взят прогресс игрока.&lt;br /&gt;
*'''min уровень'''  - Минимальный уровень при котором срабатывает событие.&lt;br /&gt;
*'''уровни'''  - Через запятую значения для предыдущего поля, при которых сработает событие.&lt;br /&gt;
*'''события до'''  - События, которые должны были сработать до этого.&lt;br /&gt;
*'''время от инсталла min'''  - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки min'''  - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события min'''  - Время от последнего события в секундах.&lt;br /&gt;
*'''время от инсталла max'''  - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки max'''  - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события max'''  - Время от последнего события в секундах.&lt;br /&gt;
*'''использовать дату'''  - 0 - не использовать, 1 - проверять месяц и день, 2 - проверять и год тоже.&lt;br /&gt;
*'''год'''  - Год, когда сработает оповещение.&lt;br /&gt;
*'''месяц'''  - Месяц, когда сработает оповещение.&lt;br /&gt;
*'''день'''  - День, когда сработает оповещение.&lt;br /&gt;
*'''повторяемое'''  - Повторяемое ли событие нет=0, да=1.&lt;br /&gt;
Также для сценария можно добавить произвольное количество условий начала сценария.&lt;br /&gt;
&lt;br /&gt;
==Состояния==&lt;br /&gt;
&lt;br /&gt;
*'''check_multiple''' - определяется группа игрока, проверяет есть ли сценарии, которые можно запустить;&lt;br /&gt;
*'''ok''' - сценарий завершился успехом(покупкой), перед вызовом состояния Salesmamnager'у нужно установить в param id сценария (пишется в машину-обработчик акции, как sales_scenario);&lt;br /&gt;
*'''cancel''' - завершить текущую акцию в сценарии, перед вызовом указать id сценария;&lt;br /&gt;
*'''cancel_scenario''' - завершить сценарий, указанный в param Salesmamnager'у;&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
При вызове объекту состояния &amp;quot;check_multiple&amp;quot; сначала определяется группа игрока, после чего проверяются все сценарии этой группы.&lt;br /&gt;
Если есть сценарий, для которого выполнились условия, то он активируется. При этом машина-обработчик первой акции в сценарии переходит в &amp;quot;show_first&amp;quot;. В этом состоянии обработчика настраиваем первый показ акции.&lt;br /&gt;
Если на момент вызова состояния &amp;quot;check_multiple&amp;quot; были активные акции, то информация о них будет обновлена а машина-обработчик акции перейдет в &amp;quot;show&amp;quot;. В этом состоянии настраиваем обновление акции (оставшееся время и т.д.).&lt;br /&gt;
Если акция закончилась (по времени или количеству показов), то при следующей проверке будет показана следующая акция из данного сценария.&lt;br /&gt;
Сценарий может закончиться 3 способами:&lt;br /&gt;
# Закончились все акции сценария&lt;br /&gt;
# Отменой акции &lt;br /&gt;
# Покупкой акции&lt;br /&gt;
При отмене/покупки акции Salesmanager'у нужно указать сценарий и вызвать состояние &amp;quot;cancel&amp;quot;/&amp;quot;ok&amp;quot;, при этом обработчик перейдет в состояние &amp;quot;delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Запись в опции==&lt;br /&gt;
объект пишет опции в текущего пользователя, в следующем виде:&lt;br /&gt;
  &amp;lt;salesmanager5 ev3=&amp;quot;1&amp;quot; act_group=&amp;quot;4&amp;quot; last_ev=&amp;quot;1459770112&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;ev3 tl=&amp;quot;915&amp;quot; skip=&amp;quot;0&amp;quot; aen=&amp;quot;-1&amp;quot; aes=&amp;quot;1459770112&amp;quot; ae=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/salesmanager5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Options|*]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Salesmanager&amp;diff=8096</id>
		<title>Salesmanager</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Salesmanager&amp;diff=8096"/>
		<updated>2016-04-05T05:23:03Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Окно групп пользователей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
[[Object|Объект]] '''Salesmaneger''' предназначается для управления всплывающими окошками с различными акциями: скидками, выгодными предложениями и т. д. Для того, чтобы наиболее выгодным образом показывать человеку акции, этот объект будет сам определяет категорию пользователя, и в зависимости от нее показывает игроку различные события. За основу взято окно настройки локации из объекта [[Economics|Economics]].&lt;br /&gt;
&lt;br /&gt;
==Окно акций==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SM Actions.png|600 px|right]]&lt;br /&gt;
В данном окне добавляются и редактируются акции, которые потом включаются в сценарии. Каждая запись слева представляет одну акцию. Справа расположены настройки акции. Некоторые из них оставлены для совместимости с [[Salesmanager (Предыдущая версия)|предыдущей версией]] менеджера акций. &lt;br /&gt;
&lt;br /&gt;
Используемые параметры:&lt;br /&gt;
*'''id события'''  - id акции, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''объект'''  - Машина-обработчик акции должна иметь состояния '''show_first''' (первый показ акции), '''show'''(показать акцию), '''delete''' - удалить акцию; также в эту машину пишется id сценария, в который входит акция, как параметр '''sales_scenario'''.&lt;br /&gt;
*'''Длительность акции'''  - время в секундах, в течении которого, акция активна.&lt;br /&gt;
*'''Количество показов '''  - сколько раз акция будет показана игроку (для акции будет вызвано show и show_first)&lt;br /&gt;
Также можно добавить произвольное количество условий окончания акции. Все условия объединяются логическим &amp;quot;И&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Окно групп пользователей==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SM Groups.png|600 px|right]]&lt;br /&gt;
Есть 6 групп пользователей, в зависимости от их действий в игре:&lt;br /&gt;
*1. Не платившие, покинувшие игру;&lt;br /&gt;
*2. Платившие, но переставшие платить, продолжающие играть;&lt;br /&gt;
*3. Платившие, покинувшие игру;&lt;br /&gt;
*4. Не платившие, продолжающие играть;&lt;br /&gt;
*5. Платящие, играющие;&lt;br /&gt;
*6. Сломали игру.&lt;br /&gt;
Изменить количество групп в редакторе нельзя. Но это можно сделать через редактирование лейаута (Но я вам об этом не говорил.)&lt;br /&gt;
Эти группы определяются рядом параметров, по которым происходит определение игрока в одну из них. Эти параметры на протяжении игры меняются, поэтому одни и те же игроки со временем могут менять группу.&lt;br /&gt;
&lt;br /&gt;
'''Важно!''' Данные параметры нужно подобрать таким образом, что бы группы не имели пересечений, т.е. в один момент времени игрок может попасть только в одну группу. Иначе сценарии будут отрабатывать некорректно.&lt;br /&gt;
[[Файл:SM Switch.png|400 px|right]]&lt;br /&gt;
Параметры группы:&lt;br /&gt;
*'''от последней сессии мин''' ''(t_last_ses_min)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней сессии макс''' ''(t_last_ses_max)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней покупки мин''' ''(t_last_buy_min)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''от последней покупки макc''' ''(t_last_buy_max)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''суток в игре мин''' ''(t_days_min)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
*'''суток в игре макс''' ''(t_days_max)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы мы можем добавлять произвольное количество сценариев. Сценарий может включать произвольное количество акций. Для добавления акций в сценарий нужно переключить вид окна групп (кнопка &amp;quot;Switch&amp;quot;) и выбрать нужные акции для сценария.&lt;br /&gt;
&lt;br /&gt;
Для активации сценария должны быть выполнены все его условия. Каждый сценарий имеет следующие параметры (описаны только актуальные параметры): &lt;br /&gt;
&lt;br /&gt;
*'''id сценария'''  - id сценария, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''события сценария'''  - список акций, которые входят в этот сценарий.&lt;br /&gt;
*'''поле в опциях'''  - Поле в опциях, откуда будет взят прогресс игрока.&lt;br /&gt;
*'''min уровень'''  - Минимальный уровень при котором срабатывает событие.&lt;br /&gt;
*'''уровни'''  - Через запятую значения для предыдущего поля, при которых сработает событие.&lt;br /&gt;
*'''события до'''  - События, которые должны были сработать до этого.&lt;br /&gt;
*'''время от инсталла min'''  - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки min'''  - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события min'''  - Время от последнего события в секундах.&lt;br /&gt;
*'''время от инсталла max'''  - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки max'''  - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события max'''  - Время от последнего события в секундах.&lt;br /&gt;
*'''использовать дату'''  - 0 - не использовать, 1 - проверять месяц и день, 2 - проверять и год тоже.&lt;br /&gt;
*'''год'''  - Год, когда сработает оповещение.&lt;br /&gt;
*'''месяц'''  - Месяц, когда сработает оповещение.&lt;br /&gt;
*'''день'''  - День, когда сработает оповещение.&lt;br /&gt;
*'''повторяемое'''  - Повторяемое ли событие нет=0, да=1.&lt;br /&gt;
Также для сценария можно добавить произвольное количество условий начала сценария.&lt;br /&gt;
&lt;br /&gt;
==Состояния==&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
При вызове объекту состояния &amp;quot;check_multiple&amp;quot; сначала определяется группа игрока, после чего проверяются все сценарии этой группы.&lt;br /&gt;
Если есть сценарий, для которого выполнились условия, то он активируется. При этом машина-обработчик первой акции в сценарии переходит в &amp;quot;show_first&amp;quot;. В этом состоянии обработчика настраиваем первый показ акции.&lt;br /&gt;
Если на момент вызова состояния &amp;quot;check_multiple&amp;quot; были активные акции, то информация о них будет обновлена а машина-обработчик акции перейдет в &amp;quot;show&amp;quot;. В этом состоянии настраиваем обновление акции (оставшееся время и т.д.).&lt;br /&gt;
Если акция закончилась (по времени или количеству показов), то при следующей проверке будет показана следующая акция из данного сценария.&lt;br /&gt;
Сценарий может закончиться 3 способами:&lt;br /&gt;
# Закончились все акции сценария&lt;br /&gt;
# Отменой акции &lt;br /&gt;
# Покупкой акции&lt;br /&gt;
При отмене/покупки акции Salesmanager'у нужно указать сценарий и вызвать состояние &amp;quot;cancel&amp;quot;/&amp;quot;ok&amp;quot;, при этом обработчик перейдет в состояние &amp;quot;delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Запись в опции==&lt;br /&gt;
объект пишет опции в текущего пользователя, в следующем виде:&lt;br /&gt;
  &amp;lt;salesmanager5 ev3=&amp;quot;1&amp;quot; act_group=&amp;quot;4&amp;quot; last_ev=&amp;quot;1459770112&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;ev3 tl=&amp;quot;915&amp;quot; skip=&amp;quot;0&amp;quot; aen=&amp;quot;-1&amp;quot; aes=&amp;quot;1459770112&amp;quot; ae=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/salesmanager5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Options|*]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Salesmanager&amp;diff=8095</id>
		<title>Salesmanager</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Salesmanager&amp;diff=8095"/>
		<updated>2016-04-04T14:00:21Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
[[Object|Объект]] '''Salesmaneger''' предназначается для управления всплывающими окошками с различными акциями: скидками, выгодными предложениями и т. д. Для того, чтобы наиболее выгодным образом показывать человеку акции, этот объект будет сам определяет категорию пользователя, и в зависимости от нее показывает игроку различные события. За основу взято окно настройки локации из объекта [[Economics|Economics]].&lt;br /&gt;
&lt;br /&gt;
==Окно акций==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SM Actions.png|600 px|right]]&lt;br /&gt;
В данном окне добавляются и редактируются акции, которые потом включаются в сценарии. Каждая запись слева представляет одну акцию. Справа расположены настройки акции. Некоторые из них оставлены для совместимости с [[Salesmanager (Предыдущая версия)|предыдущей версией]] менеджера акций. &lt;br /&gt;
&lt;br /&gt;
Используемые параметры:&lt;br /&gt;
*'''id события'''  - id акции, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''объект'''  - Машина-обработчик акции должна иметь состояния '''show_first''' (первый показ акции), '''show'''(показать акцию), '''delete''' - удалить акцию; также в эту машину пишется id сценария, в который входит акция, как параметр '''sales_scenario'''.&lt;br /&gt;
*'''Длительность акции'''  - время в секундах, в течении которого, акция активна.&lt;br /&gt;
*'''Количество показов '''  - сколько раз акция будет показана игроку (для акции будет вызвано show и show_first)&lt;br /&gt;
Также можно добавить произвольное количество условий окончания акции. Все условия объединяются логическим &amp;quot;И&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Окно групп пользователей==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SM Groups.png|600 px|right]]&lt;br /&gt;
Есть 6 групп пользователей, в зависимости от их действий в игре:&lt;br /&gt;
*1. Не платившие, покинувшие игру;&lt;br /&gt;
*2. Платившие, но переставшие платить, продолжающие играть;&lt;br /&gt;
*3. Платившие, покинувшие игру;&lt;br /&gt;
*4. Не платившие, продолжающие играть;&lt;br /&gt;
*5. Платящие, играющие;&lt;br /&gt;
*6. Сломали игру.&lt;br /&gt;
Изменить количество групп в редакторе нельзя. Но это можно сделать через редактирование лейаута (Но я вам об этом не говорил.)&lt;br /&gt;
Эти группы определяются рядом параметров, по которым происходит определение игрока в одну из них. Эти параметры на протяжении игры меняются, поэтому одни и те же игроки со временем могут менять группу.&lt;br /&gt;
'''Важно!''' Данные параметры нужно подобрать таким образом, что бы группы не имели пересечений, т.е. в один момент времени игрок может попасть только в одну группу. Иначе сценарии будут отрабатывать некорректно.&lt;br /&gt;
[[Файл:SM Switch.png|400 px|right]]&lt;br /&gt;
Параметры группы:&lt;br /&gt;
*'''от последней сессии мин''' ''(t_last_ses_min)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней сессии макс''' ''(t_last_ses_max)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней покупки мин''' ''(t_last_buy_min)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''от последней покупки макc''' ''(t_last_buy_max)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''суток в игре мин''' ''(t_days_min)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
*'''суток в игре макс''' ''(t_days_max)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы мы можем добавлять произвольное количество сценариев. Сценарий может включать произвольное количество акций. Для добавления акций в сценарий нужно переключить вид окна групп (кнопка &amp;quot;Switch&amp;quot;) и выбрать нужные акции для сценария.&lt;br /&gt;
&lt;br /&gt;
Для активации сценария должны быть выполнены все его условия. Каждый сценарий имеет следующие параметры (описаны только актуальные параметры): &lt;br /&gt;
&lt;br /&gt;
*'''id сценария'''  - id сценария, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''события сценария'''  - список акций, которые входят в этот сценарий.&lt;br /&gt;
*'''поле в опциях'''  - Поле в опциях, откуда будет взят прогресс игрока.&lt;br /&gt;
*'''min уровень'''  - Минимальный уровень при котором срабатывает событие.&lt;br /&gt;
*'''уровни'''  - Через запятую значения для предыдущего поля, при которых сработает событие.&lt;br /&gt;
*'''события до'''  - События, которые должны были сработать до этого.&lt;br /&gt;
*'''время от инсталла min'''  - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки min'''  - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события min'''  - Время от последнего события в секундах.&lt;br /&gt;
*'''время от инсталла max'''  - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки max'''  - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события max'''  - Время от последнего события в секундах.&lt;br /&gt;
*'''использовать дату'''  - 0 - не использовать, 1 - проверять месяц и день, 2 - проверять и год тоже.&lt;br /&gt;
*'''год'''  - Год, когда сработает оповещение.&lt;br /&gt;
*'''месяц'''  - Месяц, когда сработает оповещение.&lt;br /&gt;
*'''день'''  - День, когда сработает оповещение.&lt;br /&gt;
*'''повторяемое'''  - Повторяемое ли событие нет=0, да=1.&lt;br /&gt;
Также для сценария можно добавить произвольное количество условий начала сценария.&lt;br /&gt;
&lt;br /&gt;
==Состояния==&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
При вызове объекту состояния &amp;quot;check_multiple&amp;quot; сначала определяется группа игрока, после чего проверяются все сценарии этой группы.&lt;br /&gt;
Если есть сценарий, для которого выполнились условия, то он активируется. При этом машина-обработчик первой акции в сценарии переходит в &amp;quot;show_first&amp;quot;. В этом состоянии обработчика настраиваем первый показ акции.&lt;br /&gt;
Если на момент вызова состояния &amp;quot;check_multiple&amp;quot; были активные акции, то информация о них будет обновлена а машина-обработчик акции перейдет в &amp;quot;show&amp;quot;. В этом состоянии настраиваем обновление акции (оставшееся время и т.д.).&lt;br /&gt;
Если акция закончилась (по времени или количеству показов), то при следующей проверке будет показана следующая акция из данного сценария.&lt;br /&gt;
Сценарий может закончиться 3 способами:&lt;br /&gt;
# Закончились все акции сценария&lt;br /&gt;
# Отменой акции &lt;br /&gt;
# Покупкой акции&lt;br /&gt;
При отмене/покупки акции Salesmanager'у нужно указать сценарий и вызвать состояние &amp;quot;cancel&amp;quot;/&amp;quot;ok&amp;quot;, при этом обработчик перейдет в состояние &amp;quot;delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Запись в опции==&lt;br /&gt;
объект пишет опции в текущего пользователя, в следующем виде:&lt;br /&gt;
  &amp;lt;salesmanager5 ev3=&amp;quot;1&amp;quot; act_group=&amp;quot;4&amp;quot; last_ev=&amp;quot;1459770112&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;ev3 tl=&amp;quot;915&amp;quot; skip=&amp;quot;0&amp;quot; aen=&amp;quot;-1&amp;quot; aes=&amp;quot;1459770112&amp;quot; ae=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/salesmanager5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Options|*]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Groups.png&amp;diff=8094</id>
		<title>Файл:SM Groups.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Groups.png&amp;diff=8094"/>
		<updated>2016-04-04T12:29:34Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: Vefimov загрузил новую версию Файл:SM Groups.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Switch.png&amp;diff=8093</id>
		<title>Файл:SM Switch.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Switch.png&amp;diff=8093"/>
		<updated>2016-04-04T12:29:23Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: Vefimov загрузил новую версию Файл:SM Switch.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Add_condition_action.png&amp;diff=8092</id>
		<title>Файл:SM Add condition action.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Add_condition_action.png&amp;diff=8092"/>
		<updated>2016-04-04T12:22:59Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Actions.png&amp;diff=8091</id>
		<title>Файл:SM Actions.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Actions.png&amp;diff=8091"/>
		<updated>2016-04-04T12:21:10Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: Vefimov загрузил новую версию Файл:SM Actions.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Salesmanager_(%D0%9F%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B0%D1%8F_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F)&amp;diff=8090</id>
		<title>Salesmanager (Предыдущая версия)</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Salesmanager_(%D0%9F%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B0%D1%8F_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F)&amp;diff=8090"/>
		<updated>2016-04-04T12:02:05Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: Новая страница: «{{TOC right}} ==Общие сведения== Данная статья описывает предыдущую версию объекта Salesmamnager. Дан…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
==Общие сведения==&lt;br /&gt;
Данная статья описывает предыдущую версию объекта Salesmamnager. Данный объект преимущественно использовался для организации специальных тасков (набрать некоторое количество звезд за день, день привязан к конкретной дате).&lt;br /&gt;
&lt;br /&gt;
[[Object|Объект]] '''Salesmaneger''' предназначается для управления всплывающими окошками с различными акциями: скидками, выгодными предложениями и т. д. Для того, чтобы наиболее выгодным образом показывать человеку акции, этот объект будет сам определяет категорию пользователя, и в зависимости от нее показывает игроку различные события. За основу взято окно настройки локации из объекта [[Economics|Economics]].&lt;br /&gt;
&lt;br /&gt;
==Окно настройки==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Salesmeneger.png|600 px|right|Окно настройки]]&lt;br /&gt;
&lt;br /&gt;
С помощью кнопок &amp;quot;Добавить локацию&amp;quot; и &amp;quot;Удалить локацию&amp;quot; можем менять количество групп пользователей в колонке1. &amp;quot;Добавить уровень мастерства&amp;quot; и &amp;quot;Удалить уровень мастерства&amp;quot; добавляют и удаляют акции в колонке 3.&lt;br /&gt;
&lt;br /&gt;
Для примера выделим 5 групп пользователей:&lt;br /&gt;
*1. Не 	платившие, продолжающие играть;&lt;br /&gt;
*2. Платившие, 	но переставшие платить, продолжающие 	играть;&lt;br /&gt;
*3. Платившие, 	покинувшие игру;&lt;br /&gt;
*4. Не 	платившие, покинувшие игру;&lt;br /&gt;
*5. Платящие, 	играющие.&lt;br /&gt;
&lt;br /&gt;
Все эти группы отличаются рядом параметров (колонка 2) по которым происходит определение игрока в одну из них. Эти параметры на протяжении игры меняются, поэтому одни и те же игроки со временем могут менять группу.&lt;br /&gt;
&lt;br /&gt;
*'''от последней сессии мин''' ''(t_last_ses_min)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней сессии макс''' ''(t_last_ses_max)'' - Время от последней сессии в полных сутках.&lt;br /&gt;
*'''от последней покупки мин''' ''(t_last_buy_min)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''от последней покупки макc''' ''(t_last_buy_max)'' - Время от последней покупки в полных сутках.&lt;br /&gt;
*'''суток в игре мин''' ''(t_days_min)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
*'''суток в игре макс''' ''(t_days_max)'' - Количество проведенных в игре полных суток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В зависимости от группы мы ожидаем различное поведение акций и предложений. Поэтому в 4 колонке определяется логика появления событий.&lt;br /&gt;
&lt;br /&gt;
*'''id события''' ''(ev_id)'' - id события, берется из текстовой базы ресурсов.&lt;br /&gt;
*'''поле в опциях''' ''(ev_opt)'' - Поле в опциях, откуда будет взят прогресс игрока.&lt;br /&gt;
*'''min уровень''' ''(ev_lev)'' - Минимальный уровень при котором срабатывает событие.&lt;br /&gt;
*'''уровни''' ''(ev_levs)'' - Через запятую значения для предыдущего поля, при которых сработает событие.&lt;br /&gt;
*'''события до''' ''(ev_before)'' - События, которые должны были сработать до этого.&lt;br /&gt;
*'''время от инсталла min''' ''(ev_inst_min)'' - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки min''' ''(ev_purch_min)'' - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события min''' ''(ev_ev_min)'' - Время от последнего события в секундах.&lt;br /&gt;
*'''время от инсталла max''' ''(ev_inst_max)'' - Время от инстала в секундах.&lt;br /&gt;
*'''время от покупки max''' ''(ev_purch_max)'' - Время от последней покупки в секундах.&lt;br /&gt;
*'''время от события max''' ''(ev_ev_max)'' - Время от последнего события в секундах.&lt;br /&gt;
*'''использовать дату''' ''(ev_date)'' - 0 - не использовать, 1 - проверять месяц и день, 2 - проверять и год тоже.&lt;br /&gt;
*'''год''' ''(ev_year)'' - Год, когда сработает оповещение.&lt;br /&gt;
*'''месяц''' ''(ev_month)'' - Месяц, когда сработает оповещение.&lt;br /&gt;
*'''день''' ''(ev_day)'' - День, когда сработает оповещение.&lt;br /&gt;
*'''объект''' ''(ev_obj)'' - При активации события перевести объект в состояние из следующего поля.&lt;br /&gt;
*'''состояние''' ''(ev_st)'' - Новое состояние для объекта из предыдущего поля.&lt;br /&gt;
*'''повторяемое''' ''(ev_repeat)'' - Повторяемое ли событие нет=0, да=1.&lt;br /&gt;
&lt;br /&gt;
==Особенности использования==&lt;br /&gt;
&lt;br /&gt;
Добавляемых параметров данный объект не имеет. Для запуска проверки условия появления акции объекту нужно передать состояние '''check'''.&lt;br /&gt;
Других состояний объект не имеет.&lt;br /&gt;
&lt;br /&gt;
[[Category:Options|*]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Switch.png&amp;diff=8089</id>
		<title>Файл:SM Switch.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Switch.png&amp;diff=8089"/>
		<updated>2016-04-04T11:47:05Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Groups.png&amp;diff=8088</id>
		<title>Файл:SM Groups.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Groups.png&amp;diff=8088"/>
		<updated>2016-04-04T11:46:46Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Actions.png&amp;diff=8087</id>
		<title>Файл:SM Actions.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:SM_Actions.png&amp;diff=8087"/>
		<updated>2016-04-04T11:46:30Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&amp;diff=7823</id>
		<title>Absolutist Framework</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&amp;diff=7823"/>
		<updated>2016-02-19T13:29:59Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Подготовка проекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
'''[[:category:main|Категории]]'''&lt;br /&gt;
== Новости ==&lt;br /&gt;
Вышла новая игра HOG созданная с помощью AppSalute Game Сreator. Созданы новые уникальные эффекты и механики для обеспечения незабываемых впечатлений.&lt;br /&gt;
Описание и видео:&lt;br /&gt;
http://time-gap.com/&lt;br /&gt;
&lt;br /&gt;
== AppSalute Game Сreator ==&lt;br /&gt;
* [[Примеры приложений]]&lt;br /&gt;
* [[Введение в AppSalute Game Сreator]]&lt;br /&gt;
* [[Установка и настройка]]&lt;br /&gt;
* [[Интерфейс ScenceEditor ]]&lt;br /&gt;
* [[Интерфейс ResourceEditor ]]&lt;br /&gt;
* [[Интерфейс TextEditor ]]&lt;br /&gt;
*[[Интерфейс Viewer ]]&lt;br /&gt;
* [[Книга жалоб и пожеланий]]&lt;br /&gt;
* [[Roadmap]]&lt;br /&gt;
&lt;br /&gt;
== Обучение ==&lt;br /&gt;
&lt;br /&gt;
* [[Learning|Уроки по освоению фреймворка]]&lt;br /&gt;
* [[Примеры реализации в играх]]&lt;br /&gt;
* [[Основные понятия объектов физического мира]]&lt;br /&gt;
* [[Использование AppSalute Debugger при отладке]]&lt;br /&gt;
* [[FAQ]]&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;
* [[Lua|Использование lua-скриптов]]&lt;br /&gt;
&lt;br /&gt;
== Встроенные объекты редактора==&lt;br /&gt;
&lt;br /&gt;
=== Common objects  ===&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Screen.png]] - [[Screen]]'' - экран&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Scene.png]] - [[Scene]]'' - сцена&lt;br /&gt;
&lt;br /&gt;
=== Main objects ===&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Objects.png]] - [[Object]]'' - общие параметры для всех игровых объектов&lt;br /&gt;
&lt;br /&gt;
* [[Файл:Kub.png]] - [[Azmanager]] - менеджер активных зон&lt;br /&gt;
* [[Файл:Kub.png]] - [[Active zone]] - активная зона&lt;br /&gt;
* [[Файл:Picture.png]] - [[Image]] - картинка&lt;br /&gt;
* [[Файл:Button.png]] - [[Button]] - кнопка&lt;br /&gt;
* [[Файл:Text.png]] - [[Text]] - текст&lt;br /&gt;
* [[Файл:Machine.png]] - [[Machine]] - машина состояний&lt;br /&gt;
* [[Файл:Tableicon.png]] - [[Table]] - таблица&lt;br /&gt;
* [[Файл:Checkbox.png]] - [[Checkbox]] - чекбокс (кнопка в 2-х состояниях)&lt;br /&gt;
* [[Файл:Checkgroup.png]] - [[Groupbox]] - группа, содержащая несколько чекбоксов&lt;br /&gt;
* [[Файл:Timer.png]] - [[Timer]] - цифровой таймер&lt;br /&gt;
** [[Файл:Kub.png]] - [[Globaltimer]] - таймер &amp;quot;реального времени&amp;quot;&lt;br /&gt;
* [[Файл:Counter2.png]] - [[Counter]] - счетчик сделанных кликов в игре и т.п.&lt;br /&gt;
* [[Файл:Progressbar.png]] - [[Progress]] - прогресс прохождения игры (эчивмент)&lt;br /&gt;
* [[Файл:Particle.png]] - [[Flyer]] - флаер (патиклы)&lt;br /&gt;
* [[Файл:Rectangle.png]] - [[Rectangle]] - прямоугольник&lt;br /&gt;
* [[Файл:Kub.png]] - [[Isomover]] - объект движения в изометрической карте&lt;br /&gt;
* [[Файл:Group.png]] - [[Group]] - группа&lt;br /&gt;
* [[Файл:Groupset.png‎]] - [[Groupset]] - группа&lt;br /&gt;
* [[Файл:Effect.jpg|20px]] - [[Effect]] - Создание различных эффектов&lt;br /&gt;
* [[Файл:Graphprogress.png]] - [[Graphprogress]] - создание мини-карты для отображения прогресса прохождения игры.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Statesmanager]] - очередь работы с объектами&lt;br /&gt;
* [[Файл:Slider icons.png]] - [[Slider]] - объект реализующий листание списка.&lt;br /&gt;
* [[Файл:Ribbon.png]] - [[Ribbon]] - объект отображения графики по сплайну&lt;br /&gt;
* [[Файл:Kub.png]] - [[Animation]] - объект различных анимаций&lt;br /&gt;
* [[Файл:Kub.png]] - [[Magicparticles]] - объект файлов Magic Particles&lt;br /&gt;
&lt;br /&gt;
=== Game mechanic ===&lt;br /&gt;
&lt;br /&gt;
* [[Файл:Puzzle.png]] - [[Puzzle]] - игра пазл&lt;br /&gt;
* [[Файл:Memory.png]] - [[Memory]] - класс игр с memory-механикой&lt;br /&gt;
* [[Файл:Patchwork.png]] - [[Patchwork]] - класс игр с Patchwork-механикой&lt;br /&gt;
* [[Файл:Match3.png]] - [[Match]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:Collaps.png]] - [[Collapse]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:Bejewelled.png]] - [[Bejewelled]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:BubbleShooter.png]] - [[Bubble Shooter]] - класс Bubble игр включая механику Снукер&lt;br /&gt;
* [[Файл:Tapthebubble.png]] - [[TapTheBubble]] - механика игры Tap The Bubble&lt;br /&gt;
* [[Файл:GemSlider.jpg]] - [[Gem Slider]] - механика игры Gem Slider&lt;br /&gt;
* [[Файл:W-57.png]] - [[Words]] - механика игры Words&lt;br /&gt;
* [[Файл:Kub.png]] - [[2048]] - механика игры 2048&lt;br /&gt;
* [[Файл:Kub.png]] - [[Unblock]] - механика игры unblock&lt;br /&gt;
* [[Файл:Matchbattle.png]] - [[Match Battle]] - настройка глобальных параметров для мини-игр&lt;br /&gt;
* [[Файл:Move box.png]] - [[DragBox]] - класс игр с dragbox-механикой&lt;br /&gt;
* [[Файл:Labyrinth.png]] - [[Labyrinth]] - класс игр лабиринт&lt;br /&gt;
* [[Файл:Pipes.png]] - [[Pipes]] - класс игр трубы&lt;br /&gt;
* [[Файл:Search object.png]] - [[HiddenObject]] - поисковый объект в хидден играх&lt;br /&gt;
* [[Файл:Object list.png]] - [[HiddenList]] - список поисковых объектов в хидден играх&lt;br /&gt;
* [[Файл:Hint.png]] - [[HiddenHint]] - подсказка (указатель на спрятанный объект)&lt;br /&gt;
* [[Файл:Kub.png]] - [[HiddenHighLighter]] - позволяет показать не найденные объекты в хиддене.&lt;br /&gt;
* [[Файл:Collection.png]] - [[Collection]] - &amp;quot;коллекция&amp;quot; поисковых объектов для хидден игр&lt;br /&gt;
* [[Файл:Inventory.png]] - [[Inventory]] - &amp;quot;инвентарь&amp;quot; список применяемых объектов для игр&lt;br /&gt;
* [[Файл:Tool.png]] - [[Tool]] - &amp;quot;применение&amp;quot; - объект, который можно применить для игр&lt;br /&gt;
* [[Файл:Kub.png]] - [[Isomap]] - изометрическая карта&lt;br /&gt;
* [[Файл:Slotmachine.png]] - [[Slotmachine]] - объект типа &amp;quot;slot&amp;quot;&lt;br /&gt;
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер&lt;br /&gt;
** [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря/магазина и экономики &lt;br /&gt;
** [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина &lt;br /&gt;
** [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря &lt;br /&gt;
** [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета.&lt;br /&gt;
** [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий &lt;br /&gt;
** [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания&lt;br /&gt;
** [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции&lt;br /&gt;
* [[Файл:Paint.png‎]] - [[Paint]] - объект для рисования &lt;br /&gt;
* [[Файл:Physicsworld.png]] - [[Physicsworld]] - физический мир Box2D&lt;br /&gt;
** [[Файл:Physicsobject.png]] - [[Physicsobject]] - физические объекты&lt;br /&gt;
** [[Файл:Physics links.png]] - [[Physicsjoint]] - физические соединения&lt;br /&gt;
*  [[Файл:Eraser.png]] - [[Eraser]] - стирачка&lt;br /&gt;
* [[Файл:Kub.png]] - [[trivia]] - игровая механика - миллионер (trivia)&lt;br /&gt;
* [[Файл:Kub.png]] - [[Dailybonus]] - объект для управления механизмом ежедневного бонуса за вход в игру.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Pet]] - объект питомца.&lt;br /&gt;
* [[Файл:Kub.png]] - [[PetCollectionTemplate]] - объект шаблона ячейки с коллекцией.&lt;br /&gt;
* [[Файл:Kub.png]] - [[PetTemplate]] - объект шаблона ячейки с животным.&lt;br /&gt;
&lt;br /&gt;
=== Global score ===&lt;br /&gt;
* [[Файл:Gamecenter.png]] - [[Gamecenter]] - объект для отправки данных на GameCenter iTunse&lt;br /&gt;
**[[Файл:Kub.png]] - [[Achievementitem]] -  шаблон локального достижения (оффлайн ачивка)&lt;br /&gt;
* [[Файл:Gamecircle.jpg]] - [[Amazon GameCircle]] - объект для отправки данных Amazon GameCircle&lt;br /&gt;
* [[Файл:Google-play-games-android.jpg‎]] - [[Google Play services]] - объект для отправки данных на Google Play services&lt;br /&gt;
* [[Файл:Localtoplist.png]] - [[Localtoplist]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
* [[Файл:Globaltoplist.png]] - [[Globaltoplist]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
* [[Файл:Globaltopsender.png]] - [[Globaltopsender]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
* [[Файл:Options.png]] - [[Options]] - общие настройки игры&lt;br /&gt;
* [[Файл:Gamedata.png]] - [[Gamedata]] -&lt;br /&gt;
* [[Файл:Controls.png]] - [[Controls]] - обьект для работы с клавишами клавиатуры или девайса &lt;br /&gt;
* [[Файл:Editicon.png]] - [[Edit]] - ввод текста&lt;br /&gt;
* [[Файл:Store.png]] - [[Store]] - настройки InApp покупок в игре&lt;br /&gt;
** [[Файл:Kub.png]] - [[Wallet]] - объект для начисления игровой валюты при InApp покупках через объект economics&lt;br /&gt;
* [[Файл:Notification.png]] - [[Notification]] - push-уведомления&lt;br /&gt;
* [[Файл:Imagepicker.png]] - [[Imagepiker]] - объект для загрузки фото из галереи&lt;br /&gt;
* [[Файл:Video.png]] - [[Video]] - объект для просмотра видео&lt;br /&gt;
* [[Файл:Webview.png]] - [[Webview]] - объект для просмотра интернет страниц в приложении&lt;br /&gt;
* [[Файл:Flurryobject.png]] - [[Flurry]] - настройки системы статистики для приложений https://dev.flurry.com&lt;br /&gt;
* [[Файл:Moregames.png]] - [[MoreGamesList]] - запрос банеров рекламируемых игр&lt;br /&gt;
* [[Файл:Advertisement.png]] - [[Advertisement]] - банерная система flurry, amazon&lt;br /&gt;
* [[Файл:Splitmanager.png]] - [[Splitmanager or A\B Testing]] - менеджер сплитов&lt;br /&gt;
* [[Файл:Tapjoy.png]] - [[Tapjoy]] - система рекламы игр&lt;br /&gt;
* [[Файл:Playhaven.png|24px]] - [[Playhaven]] - система рекламы игр с внутренними up-sale&lt;br /&gt;
* [[Файл:Mobileapptracker.png|24px]] - [[Mobileapptracking]] -&lt;br /&gt;
* [[Файл:Chartboost-logo-new.jpeg]] - [[Chartboost]] -  Chartboost-logo-new.jpeg&lt;br /&gt;
* [[Файл:Kub.png]] - [[SuperSonic]] -  провайдер рекламы SuperSonic&lt;br /&gt;
* [[Файл:Kub.png]] - [[System]] - объект для доступа к системным настройкам&lt;br /&gt;
* [[Файл:Kub.png]] - [[Salesmanager]] - менеджер акций&lt;br /&gt;
* [[Файл:Kub.png]] - [[Cloud]] - объект для синхронизации в облаке&lt;br /&gt;
* [[Файл:Kub.png]] - [[Game]] - объект для отправки событий&lt;br /&gt;
&lt;br /&gt;
=== Social ===&lt;br /&gt;
* [[Файл:Facebook.png]] - [[Facebook]] - настройки расшаривания Facebook&lt;br /&gt;
** [[Файл:Esocialfrienditem.png]] - [[Esocialitem]] - Шаблон для ячейки списка друзей&lt;br /&gt;
** [[Файл:Kub.png]] - [[Esocialgiftitem]] - Шаблон для ячейки с предметом, который можно подарить другу&lt;br /&gt;
** [[Файл:Esocial.png]] - [[Esocial]] - объект для взаимодействия с Facebook'ом&lt;br /&gt;
* [[Файл:Twitter.png]] - [[Twitter]] - настройки расшаривания Twitter&lt;br /&gt;
* [[Файл:Odnoklassniki.png]] - [[Odnoklassniki]] - настройки для социальной сети Одноклассники&lt;br /&gt;
* [[Файл:Googleplus.png]] - [[GooglePlus]] - настройки для социальной сети GooglePlus&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
* [[Файл:Forward.png]] - [[SendMail]] - отправка письма через почтовый клиент&lt;br /&gt;
* [[Файл:footer-icon-rate.png]] - [[Rate]] - вызов окна оценки приложения&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;50px&amp;quot; heights=&amp;quot;50px&amp;quot; &amp;gt;&lt;br /&gt;
Изображение:Who.png&lt;br /&gt;
Изображение:AnimalHideSeek.png&lt;br /&gt;
Изображение:travel.png&lt;br /&gt;
Изображение:Game_Adventure_Train.png&lt;br /&gt;
Изображение:Gmae_Match_MoveTheDolly.png&lt;br /&gt;
Изображение:Game_Patchwork_BigEyes.png&lt;br /&gt;
Изображение:Game_Patchwork_Chameleon.png&lt;br /&gt;
Изображение:Game_Patchwork_Logicly.png‎&lt;br /&gt;
Изображение:Game_Patchwork_Stickers.png‎&lt;br /&gt;
Изображение:Elephant.png&lt;br /&gt;
Изображение:Elephant2.png&lt;br /&gt;
Изображение:Cinderella.png&lt;br /&gt;
Изображение:Pigs.png&lt;br /&gt;
Изображение:Bremenskye.png&lt;br /&gt;
Изображение:Book_SnowWhite.png&lt;br /&gt;
Изображение:Book_PussInBoots.png&lt;br /&gt;
Изображение:Call.png&lt;br /&gt;
Изображение:GreatestArtists.png&lt;br /&gt;
Изображение:Game_Puzzle_Kids.png&lt;br /&gt;
Изображение:Game_Puzzle_Architect.png‎&lt;br /&gt;
Изображение:Game_Puzzle_Science.png&lt;br /&gt;
Изображение:Ico_1_114_Full.png&lt;br /&gt;
Изображение:Game_Adventure_Dreams.png&lt;br /&gt;
Изображение:Abc.png&lt;br /&gt;
Изображение:Ico_114_Full.png&lt;br /&gt;
Изображение:Ico_114_Paints.png&lt;br /&gt;
Изображение:Ico_114_Puzzle.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:main]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7607</id>
		<title>Unblock</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7607"/>
		<updated>2016-02-08T12:22:36Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
'''Unblock''' -  [[Object|объект]] редактора, который реализует игровую механику &amp;quot;unblock&amp;quot; - передвигая игровые блоки, нужно вывести главный блок к выходу.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Основные свойства'''==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb1.png|thumb|right]]&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;
[[Файл:Unb2.jpg|330px|left]]&lt;br /&gt;
* '''графика блока''' - ресурс, используемый для отрисовки игрового блока. Номер в списке соответствует номеру блока в файле уровней(в 1 свойстве указывается главный блок который нужно довести к выходу, 2 свойство - 2 блок и т.д.)&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;
* '''изменить состояние объекта - ход''' - обработчик нужен для активации кнопки &amp;quot;откатить&amp;quot;&lt;br /&gt;
** '''''объект''''' - объект, состояние которого меняем.&lt;br /&gt;
** '''''состояние''''' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
=='''Состояния'''==&lt;br /&gt;
* '''add_time''' - добавить время, перед передачей состояния, установить объекту в param значение, сколько времени добавляем; можно указывать отрицательное значение - уменьшим оставшееся время.&lt;br /&gt;
* '''add_turns''' - добавить ходов, перед передачей состояния, установить объекту в param значение, сколько ходов добавляем; можно указывать отрицательное значение - уменьшим оставшееся количество ходов.&lt;br /&gt;
* '''hint''' - показать следующий шаг из решения; в файле уровней должно быть указано решение.&lt;br /&gt;
* '''reset''' - сбросить уровень - начать игру заново.&lt;br /&gt;
* '''undo''' - отменить последний ход; возможность сделать откат должна появляться после сделанного хода (см. изменить состояние объекта - ход)&lt;br /&gt;
&lt;br /&gt;
=='''Файл уровней'''==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;levels&amp;gt;&lt;br /&gt;
  &amp;lt;level id=&amp;quot;0&amp;quot; w=&amp;quot;6&amp;quot; h=&amp;quot;6&amp;quot; exit_x=&amp;quot;5&amp;quot; exit_y=&amp;quot;2&amp;quot; turns=&amp;quot;20&amp;quot; time=&amp;quot;120&amp;quot; final_shift=&amp;quot;40&amp;quot; final_vx=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;field val=&amp;quot;0,0,3,0,0,-3,&lt;br /&gt;
  0,0,-2,0,0,0,&lt;br /&gt;
  1,0,0,-2,-2,0,&lt;br /&gt;
  2,0,0,0,0,0,&lt;br /&gt;
  -2,0,0,0,0,0,&lt;br /&gt;
  0,2,0,3,0,0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;answer val=&amp;quot;0,3,1,3,0,4,0,3,1,5,0,5,3,5,2,5,5,0,5,3,2,0,3,0,2,1,2,0,3,2,3,3,4,2,4,3,0,2,4,2&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/level&amp;gt;&lt;br /&gt;
  &amp;lt;/levels&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb3.png|thumb|400px|right]]&lt;br /&gt;
&lt;br /&gt;
* '''id''' - номер уровня.&lt;br /&gt;
* '''w''' - количество столбцов поля.&lt;br /&gt;
* '''h''' - количество строк поля.&lt;br /&gt;
* '''exit_x''' - координата x (отсчет от правого верхнего угла) ячейки-выхода.&lt;br /&gt;
* '''exit_y''' - координата y (отсчет от правого верхнего угла) ячейки-выхода.&lt;br /&gt;
* '''turns''' - количество ходов на прохождение уровня; если указано &amp;quot;0&amp;quot; - ходы не считаются.&lt;br /&gt;
* '''time''' - время на прохождение уровня; если указано &amp;quot;0&amp;quot; - игра  без учета времени.&lt;br /&gt;
* '''final_shift''' - расстояние, которое нужно проехать при анимировании победы.&lt;br /&gt;
* '''final_vx''' - скорость по x.&lt;br /&gt;
* '''final_vy''' - скорость по y.&lt;br /&gt;
* '''field val''' - описание начальной конфигурации поля.&lt;br /&gt;
* '''answer val''' - решение уровня.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;field&amp;gt; - описание начального состояния поля, где:&lt;br /&gt;
        0 - пустая ячейка&lt;br /&gt;
        1- главный блок, который нужно поместить на ячейку-выход&lt;br /&gt;
        2 - блок, занимающий 2 ячейки&lt;br /&gt;
        3 - блок, занимающий 3 ячейки.&lt;br /&gt;
  Номера блоков соответствуют порядку указания дополнительных свойств &amp;quot;графика блока&amp;quot;&lt;br /&gt;
  В точке, в которой указано число, находится крайняя левая/верхняя ячейка блока.&lt;br /&gt;
  Если число указано с знаком “-”, то блок на поле размещается вертикально. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;answer&amp;gt; - решение от первого до последнего хода в виде набора чисел через запятую. Числа сгруппированы по 4: x1, y1, x2, y2.&lt;br /&gt;
  Где x1,y1 - координаты левой/верхней клетки блока который нужно подвинуть на текущем ходу решения,&lt;br /&gt;
  x2, y2 - координаты где эта клетка должна оказаться после хода.&lt;br /&gt;
  Если указано непустое, но невалидное решение, вьювер при попытке сыграть уровень покажет сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
=='''Пример'''==&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample&lt;br /&gt;
&lt;br /&gt;
test_unblockme.zip&lt;br /&gt;
&lt;br /&gt;
[[Category:Game mechanic]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7606</id>
		<title>Unblock</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7606"/>
		<updated>2016-02-08T12:19:01Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
'''Unblock''' -  [[Object|объект]] редактора, который реализует игровую механику &amp;quot;unblock&amp;quot; - передвигая игровые блоки, нужно вывести главный блок к выходу.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Основные свойства'''==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb1.png|thumb|right]]&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;
[[Файл:Unb2.jpg|330px|left]]&lt;br /&gt;
* '''графика блока''' - ресурс, используемый для отрисовки игрового блока. Номер в списке соответствует номеру блока в файле уровней(в 1 свойстве указывается главный блок который нужно довести к выходу, 2 свойство - 2 блок и т.д.)&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;
* '''изменить состояние объекта - ход''' - обработчик нужен для активации кнопки &amp;quot;откатить&amp;quot;&lt;br /&gt;
** ''объект'' - объект, состояние которого меняем.&lt;br /&gt;
** ''состояние'' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
=='''Состояния'''==&lt;br /&gt;
* '''add_time''' - добавить время, перед передачей состояния, установить объекту в param значение, сколько времени добавляем; можно указывать отрицательное значение - уменьшим оставшееся время.&lt;br /&gt;
* '''add_turns''' - добавить ходов, перед передачей состояния, установить объекту в param значение, сколько ходов добавляем; можно указывать отрицательное значение - уменьшим оставшееся количество ходов.&lt;br /&gt;
* '''hint''' - показать следующий шаг из решения; в файле уровней должно быть указано решение.&lt;br /&gt;
* '''reset''' - сбросить уровень - начать игру заново.&lt;br /&gt;
* '''undo''' - отменить последний ход; возможность сделать откат должна появляться после сделанного хода (см. изменить состояние объекта - ход)&lt;br /&gt;
&lt;br /&gt;
=='''Файл уровней'''==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;levels&amp;gt;&lt;br /&gt;
  &amp;lt;level id=&amp;quot;0&amp;quot; w=&amp;quot;6&amp;quot; h=&amp;quot;6&amp;quot; exit_x=&amp;quot;5&amp;quot; exit_y=&amp;quot;2&amp;quot; turns=&amp;quot;20&amp;quot; time=&amp;quot;120&amp;quot; final_shift=&amp;quot;40&amp;quot; final_vx=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;field val=&amp;quot;0,0,3,0,0,-3,&lt;br /&gt;
  0,0,-2,0,0,0,&lt;br /&gt;
  1,0,0,-2,-2,0,&lt;br /&gt;
  2,0,0,0,0,0,&lt;br /&gt;
  -2,0,0,0,0,0,&lt;br /&gt;
  0,2,0,3,0,0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;answer val=&amp;quot;0,3,1,3,0,4,0,3,1,5,0,5,3,5,2,5,5,0,5,3,2,0,3,0,2,1,2,0,3,2,3,3,4,2,4,3,0,2,4,2&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/level&amp;gt;&lt;br /&gt;
  &amp;lt;/levels&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb3.png|thumb|400px|right]]&lt;br /&gt;
&lt;br /&gt;
* '''id''' - номер уровня.&lt;br /&gt;
* '''w''' - количество столбцов поля.&lt;br /&gt;
* '''h''' - количество строк поля.&lt;br /&gt;
* '''exit_x''' - координата x (отсчет от правого верхнего угла) ячейки-выхода.&lt;br /&gt;
* '''exit_y''' - координата y (отсчет от правого верхнего угла) ячейки-выхода.&lt;br /&gt;
* '''turns''' - количество ходов на прохождение уровня; если указано &amp;quot;0&amp;quot; - ходы не считаются.&lt;br /&gt;
* '''time''' - время на прохождение уровня; если указано &amp;quot;0&amp;quot; - игра  без учета времени.&lt;br /&gt;
* '''final_shift''' - расстояние, которое нужно проехать при анимировании победы.&lt;br /&gt;
* '''final_vx''' - скорость по x.&lt;br /&gt;
* '''final_vy''' - скорость по y.&lt;br /&gt;
* '''field val''' - описание начальной конфигурации поля.&lt;br /&gt;
* '''answer val''' - решение уровня.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;field&amp;gt; - описание начального состояния поля, где:&lt;br /&gt;
        0 - пустая ячейка&lt;br /&gt;
        1- главный блок, который нужно поместить на ячейку-выход&lt;br /&gt;
        2 - блок, занимающий 2 ячейки&lt;br /&gt;
        3 - блок, занимающий 3 ячейки.&lt;br /&gt;
  Номера блоков соответствуют порядку указания дополнительных свойств &amp;quot;графика блока&amp;quot;&lt;br /&gt;
  В точке, в которой указано число, находится крайняя левая/верхняя ячейка блока.&lt;br /&gt;
  Если число указано с знаком “-”, то блок поворачиваем на 90 градусов по часовой стрелке и получаем вертикальный блок. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;answer&amp;gt; - решение от первого до последнего хода в виде набора чисел через запятую. Числа сгруппированы по 4: x1, y1, x2, y2.&lt;br /&gt;
  Где x1,y1 - координаты левой/верхней клетки блока который нужно подвинуть на текущем ходу решения,&lt;br /&gt;
  x2, y2 - координаты где эта клетка должна оказаться после хода.&lt;br /&gt;
  Если указано непустое, но невалидное решение, вьювер при попытке сыграть уровень покажет сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
=='''Пример'''==&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample&lt;br /&gt;
&lt;br /&gt;
test_unblockme.zip&lt;br /&gt;
&lt;br /&gt;
[[Category:Game mechanic]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7605</id>
		<title>Unblock</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7605"/>
		<updated>2016-02-08T12:18:47Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
'''Unblock''' -  [[Object|объект]] редактора, который реализует игровую механику &amp;quot;unblock&amp;quot; - передвигая игровые блоки, нужно вывести главный блок к выходу.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Основные свойства'''==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb1.png|thumb|right]]&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;
[[Файл:Unb2.jpg|330px|left]]&lt;br /&gt;
* '''графика блока''' - ресурс, используемый для отрисовки игрового блока. Номер в списке соответствует номеру блока в файле уровней(в 1 свойстве указывается главный блок который нужно довести к выходу, 2 свойство - 2 блок и т.д.)&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;
* '''изменить состояние объекта - ход''' - обработчик нужен для активации кнопки &amp;quot;откатить&amp;quot;&lt;br /&gt;
** ''объект'' - объект, состояние которого меняем.&lt;br /&gt;
** ''состояние'' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
=='''Состояния'''==&lt;br /&gt;
* '''add_time''' - добавить время, перед передачей состояния, установить объекту в param значение, сколько времени добавляем; можно указывать отрицательное значение - уменьшим оставшееся время.&lt;br /&gt;
* '''add_turns''' - добавить ходов, перед передачей состояния, установить объекту в param значение, сколько ходов добавляем; можно указывать отрицательное значение - уменьшим оставшееся количество ходов.&lt;br /&gt;
* '''hint''' - показать следующий шаг из решения; в файле уровней должно быть указано решение.&lt;br /&gt;
* '''reset''' - сбросить уровень - начать игру заново.&lt;br /&gt;
* '''undo''' - отменить последний ход; возможность сделать откат должна появляться после сделанного хода (см. изменить состояние объекта - ход)&lt;br /&gt;
&lt;br /&gt;
=='''Файл уровней'''==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;levels&amp;gt;&lt;br /&gt;
  &amp;lt;level id=&amp;quot;0&amp;quot; w=&amp;quot;6&amp;quot; h=&amp;quot;6&amp;quot; exit_x=&amp;quot;5&amp;quot; exit_y=&amp;quot;2&amp;quot; turns=&amp;quot;20&amp;quot; time=&amp;quot;120&amp;quot; final_shift=&amp;quot;40&amp;quot; final_vx=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;field val=&amp;quot;0,0,3,0,0,-3,&lt;br /&gt;
  0,0,-2,0,0,0,&lt;br /&gt;
  1,0,0,-2,-2,0,&lt;br /&gt;
  2,0,0,0,0,0,&lt;br /&gt;
  -2,0,0,0,0,0,&lt;br /&gt;
  0,2,0,3,0,0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;answer val=&amp;quot;0,3,1,3,0,4,0,3,1,5,0,5,3,5,2,5,5,0,5,3,2,0,3,0,2,1,2,0,3,2,3,3,4,2,4,3,0,2,4,2&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/level&amp;gt;&lt;br /&gt;
  &amp;lt;/levels&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb3.png|thumb|400px|right]]&lt;br /&gt;
&lt;br /&gt;
* '''id''' - номер уровня.&lt;br /&gt;
* '''w''' - количество столбцов поля.&lt;br /&gt;
* '''h''' - количество строк поля.&lt;br /&gt;
* '''exit_x''' - координата x (отсчет от правого верхнего угла) ячейки-выхода.&lt;br /&gt;
* '''exit_y''' - координата y (отсчет от правого верхнего угла) ячейки-выхода.&lt;br /&gt;
* '''turns''' - количество ходов на прохождение уровня; если указано &amp;quot;0&amp;quot; - ходы не считаются.&lt;br /&gt;
* '''time''' - время на прохождение уровня; если указано &amp;quot;0&amp;quot; - игра  без учета времени.&lt;br /&gt;
* '''final_shift''' - расстояние, которое нужно проехать при анимировании победы.&lt;br /&gt;
* '''final_vx''' - скорость по x.&lt;br /&gt;
* '''final_vy''' - скорость по y.&lt;br /&gt;
* '''field val''' - описание начальной конфигурации поля.&lt;br /&gt;
* '''answer val''' - решение уровня.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;field&amp;gt; - описание начального состояния поля, где:&lt;br /&gt;
        0 - пустая ячейка&lt;br /&gt;
        1- главный блок, который нужно поместить на ячейку-выход&lt;br /&gt;
        2 - блок, занимающий 2 ячейки&lt;br /&gt;
        3 - блок, занимающий 3 ячейки.&lt;br /&gt;
  Номера блоков соответствуют порядку указания дополнительных свойств &amp;quot;графика блока&amp;quot;&lt;br /&gt;
  В точке, в которой указано число, находится крайняя левая/верхняя ячейка блока.&lt;br /&gt;
  Если число указано с знаком “-”, то блок поворачиваем на 90 градусов по часовой стрелке и получаем вертикальный блок. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;answer&amp;gt; - решение от первого до последнего хода в виде набора чисел через запятую. Числа сгруппированы по 4: x1, y1, x2, y2.&lt;br /&gt;
  Где x1,y1 - координаты левой/верхней клетки блока который нужно подвинуть на текущем ходу решения,&lt;br /&gt;
  x2, y2 - координаты где эта клетка должна оказаться после хода.&lt;br /&gt;
  Если указано непустое, но невалидное решение, вьювер при попытке сыграть уровень покажет сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
=='''Пример'''==&lt;br /&gt;
S:\!MOBILE\!!!EditorGames\Wiki_sample&lt;br /&gt;
test_unblockme.zip&lt;br /&gt;
&lt;br /&gt;
[[Category:Game mechanic]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7604</id>
		<title>Unblock</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7604"/>
		<updated>2016-02-08T12:16:34Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Файл уровней */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
'''Unblock''' -  [[Object|объект]] редактора, который реализует игровую механику &amp;quot;unblock&amp;quot; - передвигая игровые блоки, нужно вывести главный блок к выходу.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Основные свойства'''==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb1.png|thumb|right]]&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;
[[Файл:Unb2.jpg|330px|left]]&lt;br /&gt;
* '''графика блока''' - ресурс, используемый для отрисовки игрового блока. Номер в списке соответствует номеру блока в файле уровней(в 1 свойстве указывается главный блок который нужно довести к выходу, 2 свойство - 2 блок и т.д.)&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;
* '''изменить состояние объекта - ход''' - обработчик нужен для активации кнопки &amp;quot;откатить&amp;quot;&lt;br /&gt;
** ''объект'' - объект, состояние которого меняем.&lt;br /&gt;
** ''состояние'' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
=='''Состояния'''==&lt;br /&gt;
* '''add_time''' - добавить время, перед передачей состояния, установить объекту в param значение, сколько времени добавляем; можно указывать отрицательное значение - уменьшим оставшееся время.&lt;br /&gt;
* '''add_turns''' - добавить ходов, перед передачей состояния, установить объекту в param значение, сколько ходов добавляем; можно указывать отрицательное значение - уменьшим оставшееся количество ходов.&lt;br /&gt;
* '''hint''' - показать следующий шаг из решения; в файле уровней должно быть указано решение.&lt;br /&gt;
* '''reset''' - сбросить уровень - начать игру заново.&lt;br /&gt;
* '''undo''' - отменить последний ход; возможность сделать откат должна появляться после сделанного хода (см. изменить состояние объекта - ход)&lt;br /&gt;
&lt;br /&gt;
=='''Файл уровней'''==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;levels&amp;gt;&lt;br /&gt;
  &amp;lt;level id=&amp;quot;0&amp;quot; w=&amp;quot;6&amp;quot; h=&amp;quot;6&amp;quot; exit_x=&amp;quot;5&amp;quot; exit_y=&amp;quot;2&amp;quot; turns=&amp;quot;20&amp;quot; time=&amp;quot;120&amp;quot; final_shift=&amp;quot;40&amp;quot; final_vx=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;field val=&amp;quot;0,0,3,0,0,-3,&lt;br /&gt;
  0,0,-2,0,0,0,&lt;br /&gt;
  1,0,0,-2,-2,0,&lt;br /&gt;
  2,0,0,0,0,0,&lt;br /&gt;
  -2,0,0,0,0,0,&lt;br /&gt;
  0,2,0,3,0,0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;answer val=&amp;quot;0,3,1,3,0,4,0,3,1,5,0,5,3,5,2,5,5,0,5,3,2,0,3,0,2,1,2,0,3,2,3,3,4,2,4,3,0,2,4,2&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/level&amp;gt;&lt;br /&gt;
  &amp;lt;/levels&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb3.png|thumb|400px|right]]&lt;br /&gt;
&lt;br /&gt;
* '''id''' - номер уровня.&lt;br /&gt;
* '''w''' - количество столбцов поля.&lt;br /&gt;
* '''h''' - количество строк поля.&lt;br /&gt;
* '''exit_x''' - координата x (отсчет от правого верхнего угла) ячейки-выхода.&lt;br /&gt;
* '''exit_y''' - координата y (отсчет от правого верхнего угла) ячейки-выхода.&lt;br /&gt;
* '''turns''' - количество ходов на прохождение уровня; если указано &amp;quot;0&amp;quot; - ходы не считаются.&lt;br /&gt;
* '''time''' - время на прохождение уровня; если указано &amp;quot;0&amp;quot; - игра  без учета времени.&lt;br /&gt;
* '''final_shift''' - расстояние, которое нужно проехать при анимировании победы.&lt;br /&gt;
* '''final_vx''' - скорость по x.&lt;br /&gt;
* '''final_vy''' - скорость по y.&lt;br /&gt;
* '''field val''' - описание начальной конфигурации поля.&lt;br /&gt;
* '''answer val''' - решение уровня.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;field&amp;gt; - описание начального состояния поля, где:&lt;br /&gt;
        0 - пустая ячейка&lt;br /&gt;
        1- главный блок, который нужно поместить на ячейку-выход&lt;br /&gt;
        2 - блок, занимающий 2 ячейки&lt;br /&gt;
        3 - блок, занимающий 3 ячейки.&lt;br /&gt;
  Номера блоков соответствуют порядку указания дополнительных свойств &amp;quot;графика блока&amp;quot;&lt;br /&gt;
  В точке, в которой указано число, находится крайняя левая/верхняя ячейка блока.&lt;br /&gt;
  Если число указано с знаком “-”, то блок поворачиваем на 90 градусов по часовой стрелке и получаем вертикальный блок. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;answer&amp;gt; - решение от первого до последнего хода в виде набора чисел через запятую. Числа сгруппированы по 4: x1, y1, x2, y2.&lt;br /&gt;
  Где x1,y1 - координаты левой/верхней клетки блока который нужно подвинуть на текущем ходу решения,&lt;br /&gt;
  x2, y2 - координаты где эта клетка должна оказаться после хода.&lt;br /&gt;
  Если указано непустое, но невалидное решение, вьювер при попытке сыграть уровень покажет сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Game mechanic]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7603</id>
		<title>Unblock</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7603"/>
		<updated>2016-02-08T12:13:39Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
'''Unblock''' -  [[Object|объект]] редактора, который реализует игровую механику &amp;quot;unblock&amp;quot; - передвигая игровые блоки, нужно вывести главный блок к выходу.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Основные свойства'''==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb1.png|thumb|right]]&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;
[[Файл:Unb2.jpg|330px|left]]&lt;br /&gt;
* '''графика блока''' - ресурс, используемый для отрисовки игрового блока. Номер в списке соответствует номеру блока в файле уровней(в 1 свойстве указывается главный блок который нужно довести к выходу, 2 свойство - 2 блок и т.д.)&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;
* '''изменить состояние объекта - ход''' - обработчик нужен для активации кнопки &amp;quot;откатить&amp;quot;&lt;br /&gt;
** ''объект'' - объект, состояние которого меняем.&lt;br /&gt;
** ''состояние'' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
=='''Состояния'''==&lt;br /&gt;
* '''add_time''' - добавить время, перед передачей состояния, установить объекту в param значение, сколько времени добавляем; можно указывать отрицательное значение - уменьшим оставшееся время.&lt;br /&gt;
* '''add_turns''' - добавить ходов, перед передачей состояния, установить объекту в param значение, сколько ходов добавляем; можно указывать отрицательное значение - уменьшим оставшееся количество ходов.&lt;br /&gt;
* '''hint''' - показать следующий шаг из решения; в файле уровней должно быть указано решение.&lt;br /&gt;
* '''reset''' - сбросить уровень - начать игру заново.&lt;br /&gt;
* '''undo''' - отменить последний ход; возможность сделать откат должна появляться после сделанного хода (см. изменить состояние объекта - ход)&lt;br /&gt;
&lt;br /&gt;
=='''Файл уровней'''==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;levels&amp;gt;&lt;br /&gt;
  &amp;lt;level id=&amp;quot;0&amp;quot; w=&amp;quot;6&amp;quot; h=&amp;quot;6&amp;quot; exit_x=&amp;quot;5&amp;quot; exit_y=&amp;quot;2&amp;quot; turns=&amp;quot;20&amp;quot; time=&amp;quot;120&amp;quot; final_shift=&amp;quot;40&amp;quot; final_vx=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;field val=&amp;quot;0,0,3,0,0,-3,&lt;br /&gt;
  0,0,-2,0,0,0,&lt;br /&gt;
  1,0,0,-2,-2,0,&lt;br /&gt;
  2,0,0,0,0,0,&lt;br /&gt;
  -2,0,0,0,0,0,&lt;br /&gt;
  0,2,0,3,0,0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;answer val=&amp;quot;0,3,1,3,0,4,0,3,1,5,0,5,3,5,2,5,5,0,5,3,2,0,3,0,2,1,2,0,3,2,3,3,4,2,4,3,0,2,4,2&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/level&amp;gt;&lt;br /&gt;
  &amp;lt;/levels&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb3.png|thumb|400px|right]]&lt;br /&gt;
&lt;br /&gt;
* '''id''' - номер уровня.&lt;br /&gt;
* '''w''' - количество столбцов поля.&lt;br /&gt;
* '''h''' - количество строк поля.&lt;br /&gt;
* '''exit_x''' - координата x (отсчет от правого верхнего угла) ячейки-выхода.&lt;br /&gt;
* '''exit_y''' - координата y (отсчет от правого верхнего угла) ячейки-выхода.&lt;br /&gt;
* '''turns''' - количество ходов на прохождение уровня; если указано &amp;quot;0&amp;quot; - ходы не считаются.&lt;br /&gt;
* '''time''' - время на прохождение уровня; если указано &amp;quot;0&amp;quot; - игра  без учета времени.&lt;br /&gt;
* '''final_shift''' - расстояние, которое нужно проехать при анимировании победы.&lt;br /&gt;
* '''final_vx''' - скорость по x.&lt;br /&gt;
* '''final_vy''' - скорость по y.&lt;br /&gt;
* '''field val''' - описание начальной конфигурации поля.&lt;br /&gt;
* '''answer val''' - решение уровня.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;field&amp;gt; - описание начального состояния поля, где:&lt;br /&gt;
        0 - пустая ячейка&lt;br /&gt;
        1- главный блок, который нужно поместить на ячейку-выход&lt;br /&gt;
        2 - блок, занимающий 2 ячейки&lt;br /&gt;
        3 - блок, занимающий 3 ячейки.&lt;br /&gt;
  В точке, в которой указано число, находится крайняя левая ячейка блока.&lt;br /&gt;
  Если число указано с знаком “-”, то блок поворачиваем на 90 градусов по часовой стрелке и получаем вертикальный блок. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;answer&amp;gt; - решение от первого до последнего хода в виде набора чисел через запятую. Числа сгруппированы по 4: x1, y1, x2, y2.&lt;br /&gt;
  Где x1,y1 - координаты левой/верхней клетки блока который нужно подвинуть на текущем ходу решения,&lt;br /&gt;
  x2, y2 - координаты где эта клетка должна оказаться после хода.&lt;br /&gt;
  Если указано непустое, но невалидное решение, вьювер при попытке сыграть уровень покажет сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Game mechanic]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Unb3.png&amp;diff=7602</id>
		<title>Файл:Unb3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Unb3.png&amp;diff=7602"/>
		<updated>2016-02-08T11:52:12Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&amp;diff=7601</id>
		<title>Absolutist Framework</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&amp;diff=7601"/>
		<updated>2016-02-08T11:45:03Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Game mechanic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
'''[[:category:main|Категории]]'''&lt;br /&gt;
== Новости ==&lt;br /&gt;
Вышла новая игра HOG созданная с помощью AppSalute Game Сreator. Созданы новые уникальные эффекты и механики для обеспечения незабываемых впечатлений.&lt;br /&gt;
Описание и видео:&lt;br /&gt;
http://time-gap.com/&lt;br /&gt;
&lt;br /&gt;
== AppSalute Game Сreator ==&lt;br /&gt;
* [[Примеры приложений]]&lt;br /&gt;
* [[Введение в AppSalute Game Сreator]]&lt;br /&gt;
* [[Установка и настройка]]&lt;br /&gt;
* [[Интерфейс ScenceEditor ]]&lt;br /&gt;
* [[Интерфейс ResourceEditor ]]&lt;br /&gt;
* [[Интерфейс TextEditor ]]&lt;br /&gt;
*[[Интерфейс Viewer ]]&lt;br /&gt;
* [[Книга жалоб и пожеланий]]&lt;br /&gt;
* [[Roadmap]]&lt;br /&gt;
&lt;br /&gt;
== Обучение ==&lt;br /&gt;
&lt;br /&gt;
* [[Learning|Уроки по освоению фреймворка]]&lt;br /&gt;
* [[Примеры реализации в играх]]&lt;br /&gt;
* [[Основные понятия объектов физического мира]]&lt;br /&gt;
* [[Использование AppSalute Debugger при отладке]]&lt;br /&gt;
* [[FAQ]]&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;
=== Common objects  ===&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Screen.png]] - [[Screen]]'' - экран&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Scene.png]] - [[Scene]]'' - сцена&lt;br /&gt;
&lt;br /&gt;
=== Main objects ===&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Objects.png]] - [[Object]]'' - общие параметры для всех игровых объектов&lt;br /&gt;
&lt;br /&gt;
* [[Файл:Kub.png]] - [[Azmanager]] - менеджер активных зон&lt;br /&gt;
* [[Файл:Kub.png]] - [[Active zone]] - активная зона&lt;br /&gt;
* [[Файл:Picture.png]] - [[Image]] - картинка&lt;br /&gt;
* [[Файл:Button.png]] - [[Button]] - кнопка&lt;br /&gt;
* [[Файл:Text.png]] - [[Text]] - текст&lt;br /&gt;
* [[Файл:Machine.png]] - [[Machine]] - машина состояний&lt;br /&gt;
* [[Файл:Tableicon.png]] - [[Table]] - таблица&lt;br /&gt;
* [[Файл:Checkbox.png]] - [[Checkbox]] - чекбокс (кнопка в 2-х состояниях)&lt;br /&gt;
* [[Файл:Checkgroup.png]] - [[Groupbox]] - группа, содержащая несколько чекбоксов&lt;br /&gt;
* [[Файл:Timer.png]] - [[Timer]] - цифровой таймер&lt;br /&gt;
** [[Файл:Kub.png]] - [[Globaltimer]] - таймер &amp;quot;реального времени&amp;quot;&lt;br /&gt;
* [[Файл:Counter2.png]] - [[Counter]] - счетчик сделанных кликов в игре и т.п.&lt;br /&gt;
* [[Файл:Progressbar.png]] - [[Progress]] - прогресс прохождения игры (эчивмент)&lt;br /&gt;
* [[Файл:Particle.png]] - [[Flyer]] - флаер (патиклы)&lt;br /&gt;
* [[Файл:Rectangle.png]] - [[Rectangle]] - прямоугольник&lt;br /&gt;
* [[Файл:Kub.png]] - [[Isomover]] - объект движения в изометрической карте&lt;br /&gt;
* [[Файл:Group.png]] - [[Group]] - группа&lt;br /&gt;
* [[Файл:Groupset.png‎]] - [[Groupset]] - группа&lt;br /&gt;
* [[Файл:Effect.jpg|20px]] - [[Effect]] - Создание различных эффектов&lt;br /&gt;
* [[Файл:Graphprogress.png]] - [[Graphprogress]] - создание мини-карты для отображения прогресса прохождения игры.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Statesmanager]] - очередь работы с объектами&lt;br /&gt;
* [[Файл:Slider icons.png]] - [[Slider]] - объект реализующий листание списка.&lt;br /&gt;
* [[Файл:Ribbon.png]] - [[Ribbon]] - объект отображения графики по сплайну&lt;br /&gt;
* [[Файл:Kub.png]] - [[Animation]] - объект различных анимаций&lt;br /&gt;
* [[Файл:Kub.png]] - [[Magicparticles]] - объект файлов Magic Particles&lt;br /&gt;
&lt;br /&gt;
=== Game mechanic ===&lt;br /&gt;
&lt;br /&gt;
* [[Файл:Puzzle.png]] - [[Puzzle]] - игра пазл&lt;br /&gt;
* [[Файл:Memory.png]] - [[Memory]] - класс игр с memory-механикой&lt;br /&gt;
* [[Файл:Patchwork.png]] - [[Patchwork]] - класс игр с Patchwork-механикой&lt;br /&gt;
* [[Файл:Match3.png]] - [[Match]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:Collaps.png]] - [[Collapse]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:Bejewelled.png]] - [[Bejewelled]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:BubbleShooter.png]] - [[Bubble Shooter]] - класс Bubble игр включая механику Снукер&lt;br /&gt;
* [[Файл:Tapthebubble.png]] - [[TapTheBubble]] - механика игры Tap The Bubble&lt;br /&gt;
* [[Файл:GemSlider.jpg]] - [[Gem Slider]] - механика игры Gem Slider&lt;br /&gt;
* [[Файл:W-57.png]] - [[Words]] - механика игры Words&lt;br /&gt;
* [[Файл:Kub.png]] - [[2048]] - механика игры 2048&lt;br /&gt;
* [[Файл:Kub.png]] - [[Unblock]] - механика игры unblock&lt;br /&gt;
* [[Файл:Matchbattle.png]] - [[Match Battle]] - настройка глобальных параметров для мини-игр&lt;br /&gt;
* [[Файл:Move box.png]] - [[DragBox]] - класс игр с dragbox-механикой&lt;br /&gt;
* [[Файл:Labyrinth.png]] - [[Labyrinth]] - класс игр лабиринт&lt;br /&gt;
* [[Файл:Pipes.png]] - [[Pipes]] - класс игр трубы&lt;br /&gt;
* [[Файл:Search object.png]] - [[HiddenObject]] - поисковый объект в хидден играх&lt;br /&gt;
* [[Файл:Object list.png]] - [[HiddenList]] - список поисковых объектов в хидден играх&lt;br /&gt;
* [[Файл:Hint.png]] - [[HiddenHint]] - подсказка (указатель на спрятанный объект)&lt;br /&gt;
* [[Файл:Kub.png]] - [[HiddenHighLighter]] - позволяет показать не найденные объекты в хиддене.&lt;br /&gt;
* [[Файл:Collection.png]] - [[Collection]] - &amp;quot;коллекция&amp;quot; поисковых объектов для хидден игр&lt;br /&gt;
* [[Файл:Inventory.png]] - [[Inventory]] - &amp;quot;инвентарь&amp;quot; список применяемых объектов для игр&lt;br /&gt;
* [[Файл:Tool.png]] - [[Tool]] - &amp;quot;применение&amp;quot; - объект, который можно применить для игр&lt;br /&gt;
* [[Файл:Kub.png]] - [[Isomap]] - изометрическая карта&lt;br /&gt;
* [[Файл:Slotmachine.png]] - [[Slotmachine]] - объект типа &amp;quot;slot&amp;quot;&lt;br /&gt;
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер&lt;br /&gt;
** [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря/магазина и экономики &lt;br /&gt;
** [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина &lt;br /&gt;
** [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря &lt;br /&gt;
** [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета.&lt;br /&gt;
** [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий &lt;br /&gt;
** [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания&lt;br /&gt;
** [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции&lt;br /&gt;
* [[Файл:Paint.png‎]] - [[Paint]] - объект для рисования &lt;br /&gt;
* [[Файл:Physicsworld.png]] - [[Physicsworld]] - физический мир Box2D&lt;br /&gt;
** [[Файл:Physicsobject.png]] - [[Physicsobject]] - физические объекты&lt;br /&gt;
** [[Файл:Physics links.png]] - [[Physicsjoint]] - физические соединения&lt;br /&gt;
*  [[Файл:Eraser.png]] - [[Eraser]] - стирачка&lt;br /&gt;
* [[Файл:Kub.png]] - [[trivia]] - игровая механика - миллионер (trivia)&lt;br /&gt;
* [[Файл:Kub.png]] - [[Dailybonus]] - объект для управления механизмом ежедневного бонуса за вход в игру.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Pet]] - объект питомца.&lt;br /&gt;
&lt;br /&gt;
=== Global score ===&lt;br /&gt;
* [[Файл:Gamecenter.png]] - [[Gamecenter]] - объект для отправки данных на GameCenter iTunse&lt;br /&gt;
**[[Файл:Kub.png]] - [[Achievementitem]] -  шаблон локального достижения (оффлайн ачивка)&lt;br /&gt;
* [[Файл:Gamecircle.jpg]] - [[Amazon GameCircle]] - объект для отправки данных Amazon GameCircle&lt;br /&gt;
* [[Файл:Google-play-games-android.jpg‎]] - [[Google Play services]] - объект для отправки данных на Google Play services&lt;br /&gt;
* [[Файл:Localtoplist.png]] - [[Localtoplist]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
* [[Файл:Globaltoplist.png]] - [[Globaltoplist]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
* [[Файл:Globaltopsender.png]] - [[Globaltopsender]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
* [[Файл:Options.png]] - [[Options]] - общие настройки игры&lt;br /&gt;
* [[Файл:Gamedata.png]] - [[Gamedata]] -&lt;br /&gt;
* [[Файл:Controls.png]] - [[Controls]] - обьект для работы с клавишами клавиатуры или девайса &lt;br /&gt;
* [[Файл:Editicon.png]] - [[Edit]] - ввод текста&lt;br /&gt;
* [[Файл:Store.png]] - [[Store]] - настройки InApp покупок в игре&lt;br /&gt;
** [[Файл:Kub.png]] - [[Wallet]] - объект для начисления игровой валюты при InApp покупках через объект economics&lt;br /&gt;
* [[Файл:Notification.png]] - [[Notification]] - push-уведомления&lt;br /&gt;
* [[Файл:Imagepicker.png]] - [[Imagepiker]] - объект для загрузки фото из галереи&lt;br /&gt;
* [[Файл:Video.png]] - [[Video]] - объект для просмотра видео&lt;br /&gt;
* [[Файл:Webview.png]] - [[Webview]] - объект для просмотра интернет страниц в приложении&lt;br /&gt;
* [[Файл:Flurryobject.png]] - [[Flurry]] - настройки системы статистики для приложений https://dev.flurry.com&lt;br /&gt;
* [[Файл:Moregames.png]] - [[MoreGamesList]] - запрос банеров рекламируемых игр&lt;br /&gt;
* [[Файл:Advertisement.png]] - [[Advertisement]] - банерная система flurry, amazon&lt;br /&gt;
* [[Файл:Splitmanager.png]] - [[Splitmanager or A\B Testing]] - менеджер сплитов&lt;br /&gt;
* [[Файл:Tapjoy.png]] - [[Tapjoy]] - система рекламы игр&lt;br /&gt;
* [[Файл:Playhaven.png|24px]] - [[Playhaven]] - система рекламы игр с внутренними up-sale&lt;br /&gt;
* [[Файл:Mobileapptracker.png|24px]] - [[Mobileapptracking]] -&lt;br /&gt;
* [[Файл:Chartboost-logo-new.jpeg]] - [[Chartboost]] -  Chartboost-logo-new.jpeg&lt;br /&gt;
* [[Файл:Kub.png]] - [[SuperSonic]] -  провайдер рекламы SuperSonic&lt;br /&gt;
* [[Файл:Kub.png]] - [[System]] - объект для доступа к системным настройкам&lt;br /&gt;
* [[Файл:Kub.png]] - [[Salesmanager]] - менеджер акций&lt;br /&gt;
* [[Файл:Kub.png]] - [[Cloud]] - объект для синхронизации в облаке&lt;br /&gt;
* [[Файл:Kub.png]] - [[Game]] - объект для отправки событий&lt;br /&gt;
&lt;br /&gt;
=== Social ===&lt;br /&gt;
* [[Файл:Facebook.png]] - [[Facebook]] - настройки расшаривания Facebook&lt;br /&gt;
** [[Файл:Esocialfrienditem.png]] - [[Esocialitem]] - Шаблон для ячейки списка друзей&lt;br /&gt;
** [[Файл:Kub.png]] - [[Esocialgiftitem]] - Шаблон для ячейки с предметом, который можно подарить другу&lt;br /&gt;
** [[Файл:Esocial.png]] - [[Esocial]] - объект для взаимодействия с Facebook'ом&lt;br /&gt;
* [[Файл:Twitter.png]] - [[Twitter]] - настройки расшаривания Twitter&lt;br /&gt;
* [[Файл:Odnoklassniki.png]] - [[Odnoklassniki]] - настройки для социальной сети Одноклассники&lt;br /&gt;
* [[Файл:Googleplus.png]] - [[GooglePlus]] - настройки для социальной сети GooglePlus&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
* [[Файл:Forward.png]] - [[SendMail]] - отправка письма через почтовый клиент&lt;br /&gt;
* [[Файл:footer-icon-rate.png]] - [[Rate]] - вызов окна оценки приложения&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;50px&amp;quot; heights=&amp;quot;50px&amp;quot; &amp;gt;&lt;br /&gt;
Изображение:Who.png&lt;br /&gt;
Изображение:AnimalHideSeek.png&lt;br /&gt;
Изображение:travel.png&lt;br /&gt;
Изображение:Game_Adventure_Train.png&lt;br /&gt;
Изображение:Gmae_Match_MoveTheDolly.png&lt;br /&gt;
Изображение:Game_Patchwork_BigEyes.png&lt;br /&gt;
Изображение:Game_Patchwork_Chameleon.png&lt;br /&gt;
Изображение:Game_Patchwork_Logicly.png‎&lt;br /&gt;
Изображение:Game_Patchwork_Stickers.png‎&lt;br /&gt;
Изображение:Elephant.png&lt;br /&gt;
Изображение:Elephant2.png&lt;br /&gt;
Изображение:Cinderella.png&lt;br /&gt;
Изображение:Pigs.png&lt;br /&gt;
Изображение:Bremenskye.png&lt;br /&gt;
Изображение:Book_SnowWhite.png&lt;br /&gt;
Изображение:Book_PussInBoots.png&lt;br /&gt;
Изображение:Call.png&lt;br /&gt;
Изображение:GreatestArtists.png&lt;br /&gt;
Изображение:Game_Puzzle_Kids.png&lt;br /&gt;
Изображение:Game_Puzzle_Architect.png‎&lt;br /&gt;
Изображение:Game_Puzzle_Science.png&lt;br /&gt;
Изображение:Ico_1_114_Full.png&lt;br /&gt;
Изображение:Game_Adventure_Dreams.png&lt;br /&gt;
Изображение:Abc.png&lt;br /&gt;
Изображение:Ico_114_Full.png&lt;br /&gt;
Изображение:Ico_114_Paints.png&lt;br /&gt;
Изображение:Ico_114_Puzzle.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:main]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7600</id>
		<title>Unblock</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Unblock&amp;diff=7600"/>
		<updated>2016-02-08T11:41:25Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: Новая страница: «{{TOC right}} '''Unblock''' -  объект редактора, который реализует игровую механику &amp;quot;unblock&amp;quot; - пере…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
'''Unblock''' -  [[Object|объект]] редактора, который реализует игровую механику &amp;quot;unblock&amp;quot; - передвигая игровые блоки, нужно вывести главный блок к выходу.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Основные свойства'''==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Unb1.png|thumb|right]]&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;
[[Файл:Unb2.jpg|300px|left]]&lt;br /&gt;
* '''графика блока''' - ресурс, используемый для отрисовки игрового блока. Номер в списке соответствует номеру блока в файле уровней(в 1 свойстве указывается главный блок который нужно довести к выходу, 2 свойство - 2 блок и т.д.)&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;
* '''изменить состояние объекта - ход''' - обработчик нужен для активации кнопки &amp;quot;откатить&amp;quot;&lt;br /&gt;
** ''объект'' - объект, состояние которого меняем.&lt;br /&gt;
** ''состояние'' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
=='''Состояния'''==&lt;br /&gt;
* '''add_time''' - добавить время, перед передачей состояния, установить объекту в param значение, сколько времени добавляем; можно указывать отрицательное значение - уменьшим оставшееся время.&lt;br /&gt;
* '''add_turns''' - добавить ходов, перед передачей состояния, установить объекту в param значение, сколько ходов добавляем; можно указывать отрицательное значение - уменьшим оставшееся количество ходов.&lt;br /&gt;
* '''hint''' - показать следующий шаг из решения; в файле уровней должно быть указано решение.&lt;br /&gt;
* '''reset''' - сбросить уровень - начать игру заново.&lt;br /&gt;
* '''undo''' - отменить последний ход; возможность сделать откат должна появляться после сделанного хода (см. изменить состояние объекта - ход)&lt;br /&gt;
&lt;br /&gt;
=='''Файл уровней'''==&lt;br /&gt;
&lt;br /&gt;
[[Category:Game mechanic]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Unb2.jpg&amp;diff=7597</id>
		<title>Файл:Unb2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Unb2.jpg&amp;diff=7597"/>
		<updated>2016-02-08T10:38:46Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Unb1.png&amp;diff=7595</id>
		<title>Файл:Unb1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Unb1.png&amp;diff=7595"/>
		<updated>2016-02-08T10:31:36Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Machine&amp;diff=7524</id>
		<title>Machine</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Machine&amp;diff=7524"/>
		<updated>2015-12-02T08:25:44Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Запись в viewer.log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
[[Machine]] - [[Object|объект]] '''машина состояний''' (state machine) позволяет описывать сложное поведение игровых объектов. Для машин с типовым набором состояний и поведений вводятся отдельные типы объектов. Например, кнопка, по своей сути, является машиной состояний.&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
&lt;br /&gt;
Логика поведения машины разбивается на отдельные узлы (состояния). Машина всегда находится строго в одном состоянии. Переход из одного состояния в другое происходит либо в результате внешнего воздействия на машину, либо в результате окончания некоторых процессов протекающих внутри неё&lt;br /&gt;
&lt;br /&gt;
Любая машина состояний может быть изображена в виде графа с кружочками и стрелками. У машины всегда активно строго одно состояние (ниже это изображено на левом рисунке темным кружком):&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Файл:def_states.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Машина состояний не обладает памятью. Это означает, что для анализа того, что произойдет в данном состоянии, неважно как мы в него попали, и какова была предыстория переходов. Важно, только, что мы находимся в этом состоянии. Такое отсутствие памяти упрощает анализ логики машины, так как каждый раз мы концентрируемся на одном конкретном состоянии, а всю логику работы разбиваем на отдельные кирпичики-состояния.&lt;br /&gt;
&lt;br /&gt;
Выше на правом рисунке изображено некоторое состояние. При входе в него, происходит инициализация состояния. Если на объект оказываются внешние воздействия, то он может покинуть состояние. Наконец, внутри состояния могут работать различные процессы.&lt;br /&gt;
&lt;br /&gt;
Все команды состояния, разбиваются на три группы:&lt;br /&gt;
* '''[[#Инициализация|Инициализация]]''':&lt;br /&gt;
** '''[[#draw|draw]]''' - установка графического ресурса;&lt;br /&gt;
** '''[[#init|init]]''' - инициализация параметров машины (координаты и т.п.);&lt;br /&gt;
** '''[[#set|set]]''' - установка состояния другого объекта;&lt;br /&gt;
** '''[[#play|play]]''' - проиграть звук;&lt;br /&gt;
** '''[[#var|var]]''' - переменная, которой присваивается значение параметра объекта;&lt;br /&gt;
** '''[[#buy|buy]]''' - запуск процедуры in-app покупки;&lt;br /&gt;
** '''[[#download|download]]''' - запуск процедуры закачки контента.&lt;br /&gt;
* '''[[#Процессы|Процессы]]''':&lt;br /&gt;
** '''[[#wait|wait]]''' - задержка по времени;&lt;br /&gt;
** '''[[#move|move]]''' - равномерное движение;&lt;br /&gt;
** '''[[#rot|rot]]''' - вращение вокруг точки пивота;&lt;br /&gt;
** '''[[#alpha|alpha]]''' - изменение прозрачности;&lt;br /&gt;
** '''[[#scale|scale]]''' - изменение размера;&lt;br /&gt;
** '''[[#phys|phys]]''' - ускоренное движение;&lt;br /&gt;
** '''[[#rgb|rgb]]''' - изменить rgb-каналы;&lt;br /&gt;
** '''[[#spline|spline]]''' - движение по сплайну (по кривой).&lt;br /&gt;
* '''[[#Воздействия|Воздействия]]''':&lt;br /&gt;
** '''[[#click|click]]''' - что делать при клике на машине;&lt;br /&gt;
** '''[[#drop|drop]]''' - на машине отпущена клавиша мыши;&lt;br /&gt;
** '''[[#drag|drag]]''' - машину схватили и тащат;&lt;br /&gt;
** '''[[#throw|throw]]''' - машину схватили и кинули;&lt;br /&gt;
** '''[[#apply|apply]]''' - сработает при пересечении машины с линией или объектом;&lt;br /&gt;
** '''[[#touch_in|touch_in]]''' - наведение мыши/пальца на машину, если палец &amp;quot;тащат&amp;quot; по экрану;&lt;br /&gt;
** '''[[#touch_out|touch_out]]''' - выведение мыши из машины, если палец &amp;quot;тащат&amp;quot; по экрану;&lt;br /&gt;
** '''[[#touch_up|touch_up]]''' - отжатие мыши от машины;&lt;br /&gt;
** '''[[#tap|tap]]''' - умный тач;&lt;br /&gt;
** '''[[#mouse_in|mouse_in]]''' - наведение мыши на машину даже если не нажата кнопка мыши;&lt;br /&gt;
** '''[[#mouse_out|mouse_out]]''' - выведение мыши из машины даже если не нажата кнопка мыши.&lt;br /&gt;
&lt;br /&gt;
Кроме этого, есть команда '''[[#if|if]]''', вызываемая другими командами. В ней описываются некоторые логические условия, выполнение которых говорит команде (которая вызвала этот '''if'''), что можно завершать работу. Для разных команд использование этого параметра несколько '''отличается'''!&lt;br /&gt;
&lt;br /&gt;
Начальные понятия и методы работы с машинами состояний находятся в [[Learning|уроках]],&lt;br /&gt;
начиная с [[Checkbox как машина состояний|третьего]].&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
&lt;br /&gt;
Общие для всех объектов свойства описаны в документе [[Object|Object]].&lt;br /&gt;
Дополнительные свойства:&lt;br /&gt;
&lt;br /&gt;
* '''в опции''' - да - машина будет сохранять свое состояние в опции и при следующей инициализации инициал-ся не в первом состоянии, а в состоянии, записанном в опциях.&lt;br /&gt;
* '''Состояние''' - Состояние в котором будет находиться машина при инициализации. Если ничего не указано - первое состояние в списке состояний.&lt;br /&gt;
* '''Хранить нажатость''' - нужно ли сбрасывать нажатость при изменении состояния.&lt;br /&gt;
* '''res''' - графический ресурс машины. Может отсутствовать. Перетягивается из редактора ресурсов(поле должно быть в состоянии редактирования).&lt;br /&gt;
* '''states''' - По двойному клику, или по нажатию на кнопку с тремя точками открывается список состояний.&lt;br /&gt;
* '''отладка''' - Отображать в окне состояний текущий объект.&lt;br /&gt;
* '''курсор''' - Графический ресурс курсора текущего и всех дочерних объектов.&lt;br /&gt;
* '''прокликиваемая''' - 0 - машина не пропускает клик, 1 - машина пропускает клик, 2 - машина обрабатывает клик и пропускает его дальше.&lt;br /&gt;
&lt;br /&gt;
== Инициализация ==&lt;br /&gt;
&lt;br /&gt;
При попадании в состояние, сразу выполняются команды инициализации init, draw, set, buy, var. Если в этих командах нет параметра break, они все выполняются до запуска процессов. Параметр break (со значением 1) прерывает выполнение команд инициализации данного типа. Их можно перезапустить по окончанию команд процессов.&lt;br /&gt;
&lt;br /&gt;
'''''Замечание.''''' По возможности, нужно избегать передачи значений другим объектам, в начальном состоянии машины, так как такие команды будут выполнятся даже тогда, когда машина будет выключена на визуальной сцене.&lt;br /&gt;
&lt;br /&gt;
=== draw ===&lt;br /&gt;
&lt;br /&gt;
Команда определяет графический ресурс (картинку, которую надо рисовать в данном состоянии). Её параметры:&lt;br /&gt;
&lt;br /&gt;
* '''res''' - ресурс картинки (перетаскивается из редактора ресурсов);&lt;br /&gt;
* '''f''' - начальный кадр;&lt;br /&gt;
* '''ft''' - длительность кадра в миллисекундах;&lt;br /&gt;
* '''loop''' - число повторов (зацикливаний анимации); если -1, то бесконечно; отсутствует или 0 - будет проигран один раз;&lt;br /&gt;
* '''rev''' - играть анимацию в обратном порядке; 0 - прямой порядок проигрывания, 1 - обратный порядок проигрывания;&lt;br /&gt;
* '''go''' - перейти в состояние;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]] для условия перехода; можно использовать логические операторы (см. [[#if|if]]);&lt;br /&gt;
* '''break''' - прервать команды.&lt;br /&gt;
&lt;br /&gt;
Пустая команда draw (без параметров) &amp;quot;сбрасывает&amp;quot; текущую картинку и в этом состоянии ничего рисоваться не будет. Если в общих параметрах объекта (в базовой панеле свойств) задан ресурс рисования, и он во всех состояниях одинаков, то его можно в состоянии не задавать.&lt;br /&gt;
&lt;br /&gt;
Если параметра loop нет, кадры анимации проиграются один раз. Чтобы зациклить их, необходимо установить loop=-1 или нужное число раз. Аналогично параметру loop других команд, первый раз draw выполняется в любом случае. Дальнейшие её повторы определяются значением loop. Однако, в отличие от других команд, loop повторяет только '''данную''' команду draw (даже если она не первая).&lt;br /&gt;
Для работы loop '''необходимо''' чтобы в редакторе ресурсов в настройках анимации '''было отключено''' зацикливание(looped).&lt;br /&gt;
&amp;lt;br&amp;gt;Если есть анимация открывающейся и закрывающейся книги (коробки, двери и т.д.) не обязательно подгружать в проект две анимации, можно использовать одну, но запускать ее в обратном порядке, для этого есть параметр '''rev'''.&lt;br /&gt;
&lt;br /&gt;
=== init ===&lt;br /&gt;
&lt;br /&gt;
====Параметры объекта====&lt;br /&gt;
&lt;br /&gt;
* '''x''','''y''' - координата точки пивота относительно сцены или родительского объекта;&lt;br /&gt;
* '''ang''' - угол поворота в градусах; отчитывается вниз от оси x, или вверх, если отрицательный;&lt;br /&gt;
* '''al''' - Прозрачность: от 0 (прозрачен) до 1 (не прозрачен);&lt;br /&gt;
* '''sx''','''sy''' - масштаб машины по осям (если 1, то это исходный размер; 0.5 - в два раза меньше);&lt;br /&gt;
* '''vis''' - видимость - видимость машины (1 - видима, 0 - невидима), если vis = 0, это равноценно отключению объекта в редакторе;&lt;br /&gt;
* '''z координата''' - координата машины по z.&lt;br /&gt;
* '''z приращение''' - приращение координаты машины по z относительно текущего&lt;br /&gt;
* '''прокликиваемая''' - если 1, то картинка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то клик обрабатывается, но передается дальше;&lt;br /&gt;
&lt;br /&gt;
====Параметры движения====&lt;br /&gt;
&lt;br /&gt;
* '''v''' - скорость для команды move&lt;br /&gt;
* '''vr''' - угловая скорость для команды rot&lt;br /&gt;
* '''vx''','''vy''' - начальная скорость для команды phys&lt;br /&gt;
* '''ax''','''ay''' - ускорение для команды phys&lt;br /&gt;
&lt;br /&gt;
====Системные действия====&lt;br /&gt;
&lt;br /&gt;
* '''показать рейтинг''' - значение 1 означает, что при выполнении этого инита будет показано окно iOS рейтинга.&lt;br /&gt;
Если на девайсе была нажата кнопка &amp;quot;отрейтинговать&amp;quot;, то в опции запишется параметр rating значение 1, если нажата кнопка &amp;quot;позже&amp;quot; - rating 2, &amp;quot;никогда&amp;quot; - rating 3.&lt;br /&gt;
* '''закрыть приложение''' - значение 1 означает, что при выполнении этого инита приложение будет закрыто.&lt;br /&gt;
* '''перезагрузить лэйаут''' - значение 1 означает, что при выполнении этого инита будет перезагружен лэйаут.&lt;br /&gt;
* '''вернуться назад''' - начение 1 означает, что при выполнении этого инита произойдет возврат на предыдущий экран.&lt;br /&gt;
* '''реклама AdMob''' - 1 - показать, 0 - спрятать, -1 - не изменять состояние.&lt;br /&gt;
* '''курсор''' - меняет текущий курсор мыши на указанный графический ресурс. Перетягивается из редактора ресурсов, поле должно быть в состоянии редактирования.&lt;br /&gt;
* '''id внешней ссылки в текстовой базе''' - Ссыслка будет взята из текстовой базы в соответствии с текущим маркетом.&lt;br /&gt;
* '''[[#Clone|clone]]''' - Значение 1 означает, что в текущем местоположении машины будет создана ее копия&lt;br /&gt;
&lt;br /&gt;
====Переходы и параметры выполнения====&lt;br /&gt;
&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]] для условия выполнения; можно использовать логические операторы (см. [[#if|if]]);&lt;br /&gt;
* '''break''' - прервать команды.&lt;br /&gt;
&lt;br /&gt;
Так же, как и при инициализации картинки ('''draw'''), вызов команды ('''init''') переопределяет только те параметры, которые в ней указаны. Остальные параметры (заданные в других состояниях или в общих свойствах объекта) остаются без изменений&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
&lt;br /&gt;
Перевод другого объекта в некоторое состояние или изменение его параметров.&lt;br /&gt;
&lt;br /&gt;
* '''obj''' - изменяемый объект (выбирается из списка объектов). В значении объекта можно указать this, это значит что машина сама себе пропишет какой то параметр или состояние.&lt;br /&gt;
* '''scr_param''' - глобальный либо текущий экран, параметры которого меняем.&lt;br /&gt;
* '''scr_state''' - экран, состояние которого меняем.&lt;br /&gt;
* '''parent''' - Объект, который будет установлен в качестве родителя объекту из obj. Объект obj будет оторван от текущего своего родителя и добавлен в детей объекта parent.&amp;lt;br&amp;gt;&lt;br /&gt;
* '''st''' - состояние в которое переводится объект.&amp;lt;br&amp;gt;&lt;br /&gt;
* '''par''' - параметр объекта для установки, используется вместе с val, val_obj, val_txt, val_scr,val_vid,val_res,val_node.&lt;br /&gt;
* '''mSt''' - Состояние машины в котором будем изменять параметр команды.&lt;br /&gt;
* '''mCmd''' - Имя команды, параметр которой меняем.&lt;br /&gt;
* '''mCmdN''' - Порядковый номер в перечне одноименных команд состояния.&lt;br /&gt;
* '''mPar''' - Установить этот параметр команды в значение val.&lt;br /&gt;
* '''val_obj''' - id объекта, будет записано в в par&lt;br /&gt;
* '''val_txt''' - id текста, будет записано в в par(параметр для текстов &amp;quot;txtID&amp;quot;)&lt;br /&gt;
* '''val_vid''' - id video, будет записано в par(параметр для видео &amp;quot;video&amp;quot; - RGB, &amp;quot;videoA&amp;quot; - Alpha)&lt;br /&gt;
* '''val_scr''' - id экрана, будет записано в в par&lt;br /&gt;
* '''val_res''' - Новое значение графического ресурса (перетаскивается из редактора ресурсов). (пока не работает)&lt;br /&gt;
* '''val_node''' - Новое нода графа (выбирается из списка, при заданном объекте)&lt;br /&gt;
* '''val''' - значение параметра объекта для установки&lt;br /&gt;
* '''var''' - имя переменной данной машины, значение которой присваивается в параметр par  объекта obj&lt;br /&gt;
* '''round''' - округлить значение, записываемое в val&amp;lt;br&amp;gt;&lt;br /&gt;
* '''position''' - объект указанный в поле '''obj''' будет отпозиционирован относительно указанного объекта в этом поле ( можно одновременно и задавать состояние '''st''' в которое перевести объект ( поле obj ) );  &lt;br /&gt;
* '''pos_dx''' - смещение по оси X от точки пивоты объекта из поля выше ( если это поле не указывать, смещение будет = 0 );&lt;br /&gt;
* '''pos_dy''' - смещение по оси Y от точки пивоты объекта из поля выше ( если это поле не указывать, смещение будет = 0 )&lt;br /&gt;
* '''scr''' - экран на который мы хотим перейти&lt;br /&gt;
* '''user''' - 1 - сохранять значения для текущего пользователя. Для всех типов объектов кроме options этот флаг игнорируется&amp;lt;br&amp;gt;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]] при выполнении которого происходит отработка команды set. &lt;br /&gt;
* '''break''' - прервать выполнение команд set на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
&lt;br /&gt;
Так как все объекты (не только машины) имеют состояния, то при помощи команды set можно их менять. Стоит обратить внимание на то, что когда в параметрах (любых команд) встречается st, речь идет о состоянии другого объекта, а если go, то данной машины состояний.&lt;br /&gt;
&lt;br /&gt;
=== play ===&lt;br /&gt;
&lt;br /&gt;
Проиграть звук&lt;br /&gt;
&lt;br /&gt;
*'''snd''' - Короткий звук (перетаскивается из редактора ресурсов);&lt;br /&gt;
*'''voice''' - Голос (перетаскивается из редактора ресурсов);&lt;br /&gt;
*'''mus''' - Длинный звук (перетаскивается из редактора ресурсов);&lt;br /&gt;
*'''preload''' - Указанный звук будет загружен в память, но не будет проигрываться прямо сейчас. Для ускорения его старта потом;&lt;br /&gt;
*'''loop''' - Зациклить указанный звук. Использовать вместе с snd или voice;&lt;br /&gt;
*'''mus_loop''' - Зациклить указанную музыку. По умолчанию музыка всегда зацикленна. То есть, фактически этой флаг используется, когда нужно убрать зацикливание.&lt;br /&gt;
*'''repeat''' - Число повторов указанного звука при отключенном loop;&lt;br /&gt;
*'''mus_stop''' - Остановить музыку. Если используется вместе с mus, то остановится указанная. Если нет - то вся текущая.&lt;br /&gt;
*'''stop''' - Остановить указанный звук. Использовать вместе с snd или voice.&lt;br /&gt;
*'''mus_fading''' - Время появления/затухания указанной музыки в ms. Использовать вместе с mus.&lt;br /&gt;
*'''fading''' - Время появления/затухания указанного звука. Использовать вместе с snd или voice. &lt;br /&gt;
*'''volume''' - Установить громкость для всех звуков данной машины - тех что уже играют и тех, что будут запущены впоследствии;&lt;br /&gt;
*'''не выгружать''' - Позволяет продолжать проигрывание звука при смене экранов.&lt;br /&gt;
*'''go''' - Выбор состояния, в которое нужно перейти после проигрывания музыки/звука/голоса.&lt;br /&gt;
*'''if''' - Номер (начиная с нуля) условия перехода [[#if|if]].&lt;br /&gt;
&lt;br /&gt;
Особенности применения:&lt;br /&gt;
&lt;br /&gt;
1) Короткий звук (''snd'') нельзя запустить в первом (инитном) состоянии машины. Для того, чтобы запустить звук сразу при загрузке экрана, нужно в первом состоянии машины записать мгновенный переход во второе состояние мамашины (например, команда ''wait'', поле ''go'', в поле выбрать второе состояние), а во втором состоянии уже запустить звук.&lt;br /&gt;
&lt;br /&gt;
2) Если звук нужно зациклить и проигрывать какое-то количество раз (''loop=1,2,3,..,n'') или бесконечно (''loop=-1''), то нужно проследить чтобы состояние, в котором запускается звук, не вызывалось повторно во время проигрывания звука, иначе возникнет наложение звуков.&lt;br /&gt;
&lt;br /&gt;
3) Если во время проигрывания звука машина меняет свое состояние, звук продолжает играть.&lt;br /&gt;
&lt;br /&gt;
4) Если в одной машине почти одновременно воспроизводится несколько звуков, то они прерывают друг друга.&lt;br /&gt;
&lt;br /&gt;
5) Если каждый звук воспроизводится в отдельной машине, то они звучат параллельно.&lt;br /&gt;
&lt;br /&gt;
6) Если не указан звук и голос, то команда (''stop'') остановит все звуки, запущенные этой машиной.&lt;br /&gt;
&lt;br /&gt;
7) Музыка (''mus'') может быть формата .ogg или .mp3. На экране может воспроизводится только одна .mp3 музыка. Любой запуск .mp3 музыки независимо от того, в какой машине он осуществляется, будет прекращать проигрывание предыдущей .mp3 музыки. В тоже время может воспроизводиться несколько .ogg музыки.&lt;br /&gt;
&lt;br /&gt;
8) Музыка, которая проигрывается на глобальном экране, проигрывается на всех экранах проекта.&lt;br /&gt;
&lt;br /&gt;
=== var ===&lt;br /&gt;
&lt;br /&gt;
Переменная, которой присваивается значение параметра объекта&lt;br /&gt;
&lt;br /&gt;
*'''name''' - имя переменной;&lt;br /&gt;
*'''tp''' - тип переменной;&lt;br /&gt;
*'''obj''' - объект, используемый далее;&lt;br /&gt;
*'''par''' - имя параметра, значение которого присваивается переменной;&lt;br /&gt;
*'''val''' - значение переменной, если отсутствуют obj и par;&lt;br /&gt;
*'''user''' - если стоит &amp;quot;1&amp;quot;, то будет считываться с текущего профиля в опциях&lt;br /&gt;
*'''func''' - в выпадающем списке можно выбрать функцию:&lt;br /&gt;
**'''random''' - использует arg1 и arg2, возвращает случайное целое число в диапазоне arg1 .. arg2.&lt;br /&gt;
**'''conc''' - объединяет 4 строки arg1,arg2,arg3,arg4. Возвращает строку, в которой соединены все строки&lt;br /&gt;
**'''exp''' - экспонента от аргумента arg1.&lt;br /&gt;
**'''ln''' - натуральный логарифм аргумента arg1.&lt;br /&gt;
*'''arg1''' - аргумент функции&lt;br /&gt;
*'''arg2''' - аргумент функции&lt;br /&gt;
*'''arg3''' - аргумент функции&lt;br /&gt;
*'''arg4''' - аргумент функции&lt;br /&gt;
&lt;br /&gt;
Обозначенная переменная существует (может использоваться) только в текущем состоянии. Переменная может определятся в одном состоянии только один раз. Если созданной переменной нужно изменить значение в рамках состояния, это можно сделать через другую переменную или через параметр опций ([[Options]]). Если ее значение нужно использовать в другом состоянии, то оно присваивается параметру опций, а затем заново считывается в новом состоянии. Переменные можно указывать в поле ''val'' с другими математическими действиями и цифрами, при этом каждое действие заключать в скобки. Если в поле ''val'' указать имя переменной ''А'' без скобок - воспримется строка ''А'', если указать в скобках - воспримется значение переменной.&lt;br /&gt;
&lt;br /&gt;
=== buy === &lt;br /&gt;
&lt;br /&gt;
'''(in-app совершить in-app покупку)'''&lt;br /&gt;
&lt;br /&gt;
При переходе в состояние, данная команда открывает системное окно с предложением совершить in-app покупку. В зависимости от действий игрока, покупка может произойти (успех) или не произойти (провал).&lt;br /&gt;
&lt;br /&gt;
* '''id покупки''' - внутренний id покупки для приложения, указывается в объекте [[Store]];&lt;br /&gt;
* '''объект(успех)''' - объект, которому сообщается об удачной покупке;&lt;br /&gt;
* '''состояние(успех)''' - состояние в которое переводится выбранный объект в случае успешной покупки;&lt;br /&gt;
* '''объект(провал)''' - объект, которому сообщается о неудачной покупке;&lt;br /&gt;
* '''состояние(провал)''' - состояние в которое переводится объект в случае неудачной покупки.&lt;br /&gt;
&lt;br /&gt;
=== download ===&lt;br /&gt;
 &lt;br /&gt;
'''(скачать загружаемый контент)'''&lt;br /&gt;
&lt;br /&gt;
При переходе в состояние будет совершена попытку закачать контент.&lt;br /&gt;
* '''url''' - ссылка на zip архив с контентом в интернете.&lt;br /&gt;
* '''объект успех''' - объект, которому в случае успешной закачки будет задаваться указанное состояние.&lt;br /&gt;
* '''состояние (успех)''' - состояние, которое будет устанавливаться выше указанному объекту, в случае успешной закачки.&lt;br /&gt;
* '''объект (провал)''' -объект, которому, в случае неудачи закачки, будет устанавливаться указанное состояние.&lt;br /&gt;
* '''состояние (провал)''' - состояние, которое, в случае неудачи закачки,будет устанавливаться выше указанному объекту.&lt;br /&gt;
* '''счетчик прогресса''' - объект, типа счетчик, который отображает прогресс закачки контента. Крайне желательно, что бы он измерялся в диапазоне от 0 до 100.&lt;br /&gt;
 &lt;br /&gt;
Существует несколько причин при которых вызывается состояние &amp;quot;провал&amp;quot;. Для того что бы сообщить пользователю, по какой именно причине возник провал закачки, следует идентифицировать причины провала. Это возможно сделать с помощью параметра &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
downloadErrCode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ниже приведены значение параметра которые помогут вывести нужное текстовое сообщение :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    GCUSTOM_ERROR_CODE_ERROR_UNKNOWN   = 1,    //!&amp;lt; ошибка не классифицирована&lt;br /&gt;
    GCUSTOM_ERROR_CODE_WIFI_DISABLED   = 2,    //!&amp;lt; отключен WIFI&lt;br /&gt;
    GCUSTOM_ERROR_CODE_SDCARD_UNAVAILABLE = 3,    //!&amp;lt; SD-карта недоступна&lt;br /&gt;
    GCUSTOM_ERROR_CODE_SDCARD_FULL   = 4,    //!&amp;lt; SD-карта переполнена перед закачкой&lt;br /&gt;
    GCUSTOM_ERROR_CODE_UNZIP_FAIL   = 5     //!&amp;lt; ошибка при распаковки пака (скорее всего на SD-карте не&lt;br /&gt;
    хватает места для распаковки &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Процессы ==&lt;br /&gt;
&lt;br /&gt;
Все команды процессов, кроме параметров описанных ниже, могут содержать параметры, совпадающие с именами других команд. В этих параметрах указывается номер (начиная с нуля) команды, которую надо запустить на выполнение, после окончания действия данной команды процесса.&lt;br /&gt;
&lt;br /&gt;
Если в команде процесса есть условие '''[[#if|if]]''', то после окончания работы команды она ждет пока это условие не выполнится. Только после этого переходит к следующей команде этого же типа&lt;br /&gt;
или в другое состояние (если есть параметр go).&lt;br /&gt;
Исключением является команда wait, которая '''не''' ждёт срабатывания '''[[#if|if]]'''. Если он по окончанию wait сработал, то происходит переходит в другое состояние, если есть параметр go.&lt;br /&gt;
Если параметра go нет, то в любом случае запускается следующий wait (т.е. if относится только к переходу go).&lt;br /&gt;
&lt;br /&gt;
=== wait ===&lt;br /&gt;
 &lt;br /&gt;
Команда паузы (временной задержки). Если параметра '''t''' нет, то срабатывает сразу.&lt;br /&gt;
Может также использоваться для логических ветвлений, случайных переходов в другие состояния и т.д.&lt;br /&gt;
&lt;br /&gt;
* '''t''' - длительность выполнения команды в ms;&lt;br /&gt;
* '''dt''' - интервал от t-dt до t+dt, внутри которого команда может быть случайно прервана (при t&amp;gt;t+dt прерывается в любом случае);&lt;br /&gt;
* '''p''' - вероятность срабатывания перехода в состояние, указываемое параметром go;&lt;br /&gt;
* '''go''' - состояние, в которое нужно перейти поле окончания времени и срабатывания условия [[#if|if]], если оно указано;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;&lt;br /&gt;
* '''loop''' - зациклить команды;&lt;br /&gt;
* '''break''' - прервать выполнение команд wait на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
Простейший набор параметров команды wait выглядит следующим образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;wait t=&amp;quot;1000&amp;quot; go=&amp;quot;next&amp;quot;/&amp;gt;    // ждем 1000ms и покидаем состояние&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Для программирования объектов со случайным поведением можно использовать последовательность команд wait с параметром вероятности перехода p (от 0 до 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;wait t=&amp;quot;100&amp;quot; p=&amp;quot;0.5&amp;quot; go=&amp;quot;st1&amp;quot;/&amp;gt; // через t с вероятностью 1/2 перейдет в st1&lt;br /&gt;
&amp;lt;wait go=&amp;quot;st2&amp;quot;/&amp;gt; // иначе,  перейдем в st2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Этот же синтаксис позволяет делать состояния с различным временем жизни:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;wait t=&amp;quot;100&amp;quot; p=&amp;quot;0.5&amp;quot; go=&amp;quot;next&amp;quot;/&amp;gt; // с вероятностью 1/2 живем 100ms&lt;br /&gt;
&amp;lt;wait t=&amp;quot;100&amp;quot; go=&amp;quot;next&amp;quot;/&amp;gt;       // или 200ms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Впрочем, последнюю задачу можно решить при помощи указывания интервала dt, внутри которого произойдет окончание команды. Так, состояние, живущее от 800 до 1200ms, реализуется следующим образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;wait t=&amp;quot;1000&amp;quot; dt=&amp;quot;200&amp;quot; go=&amp;quot;next&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== move ===&lt;br /&gt;
&lt;br /&gt;
Перемещение по сцене:&lt;br /&gt;
* '''tx''', '''ty''' - целевые координаты в пикселях, к которым должен переместиться объект. Можно указывать переменные заданные с помощью [http://ge.absolutist.com/index.php/Machine#var_2 переменной var];&lt;br /&gt;
* '''dx''', '''dy''' - величина смещения от текущей (если есть - tx,ty игнорируются); можно задавать смесь tx, dy или dx,ty;&lt;br /&gt;
* '''v''' - скорость перемещения в пикселях в секунду; для фреймовой анимации, например, ходьбы скорость рассчитывается исходя из длительности одного кадра и числа кадров на фазу движения. Поэтому, в этом случае, удобнее задавать скорость;&lt;br /&gt;
* '''t''' - время перемещения (v игнорируется);&lt;br /&gt;
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду move, пока if не выполнится; &lt;br /&gt;
* '''loop'''  - зациклить команды - Начать выполнение команд движения с первой команды;&lt;br /&gt;
* '''break''' - прервать команды - Прервать выполнение команд move на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
В большинстве команд процессов, связанных с движением, величина изменения может быть задана в абсолютных или относительных величинах. Так, могут быть указаны целевые координаты tx, ty в которые надо переместиться, или смещение dx, dy относительно текущего положения объекта.&lt;br /&gt;
&lt;br /&gt;
Аналогично, скорость перемещения регулируется, либо явным заданием времени выполнения команды t, либо скоростью v. Исходя из требуемого расстояния, по этой скорости вычисляется необходимое время. Скорость задается в пикселях за секунду (а не миллисекунду!)&lt;br /&gt;
&lt;br /&gt;
=== rot ===&lt;br /&gt;
&lt;br /&gt;
Вращение объекта вокруг точки пивота с координатами px,py. Эти координаты задаются относительно верхнего левого угла объекта в общей секции описания параметров объекта или командой init в данном состоянии.&lt;br /&gt;
* '''ta''' - целевой угол поворота объекта;&lt;br /&gt;
* '''da''' - на сколько надо повернуться (ta игнорируется);&lt;br /&gt;
* '''v''' - угловая скорость поворота в градусах в секунду;&lt;br /&gt;
* '''t''' - время поворота (v игнорируется);&lt;br /&gt;
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;  команда ждет срабатывания условия, и не запускает следующую команду rot, пока if не выполнится; &lt;br /&gt;
* '''loop'''  - зациклить команды - Начать выполнение команд движения с первой команды;&lt;br /&gt;
* '''break''' - прервать команды - Прервать выполнение команд rot на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
Угол отсчитывается от оси x. Если он положителен, то поворот происходит по часовой стрелке. Если отрицательный - против часовой.&lt;br /&gt;
&lt;br /&gt;
=== alpha ===&lt;br /&gt;
&lt;br /&gt;
Изменение прозрачности объекта. Меняется от 0 (полностью прозрачен) до 1 (непрозрачен)&lt;br /&gt;
* '''ta''' - целевая прозрачность&lt;br /&gt;
* '''da''' - на сколько надо изменить прозрачность от текущей (ta игнорируется)&lt;br /&gt;
* '''v''' - скорость изменения прозрачности (в долях единицы в ms)&lt;br /&gt;
* '''t''' - время изменения (v игнорируется)&lt;br /&gt;
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;  команда ждет срабатывания условия, и не запускает следующую команду alpha, пока if не выполнится; &lt;br /&gt;
* '''loop'''  - зациклить команды - Начать выполнение команд alpha с первой команды.&lt;br /&gt;
* '''break''' - прервать команды - Прервать выполнение команд alpha на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
Если у объекта прозрачность ''al=0.00'', то он невидим для всякого взаимодействия. Если у объекта прозрачность ''al=0.01'', то он видим для клика, но невидим для дропа(команда drop на объект не видит объект с прозрачностью ''0.01''). Если у объекта ''al=0.02'', то он видим и для клика, и для дропа.&lt;br /&gt;
&lt;br /&gt;
=== scale ===&lt;br /&gt;
&lt;br /&gt;
Изменение размеров объекта&lt;br /&gt;
* '''tx''', '''ty''' - целевой масштаб по каждой оси&lt;br /&gt;
* '''dx''', '''dy''' - на сколько изменить масштаб по каждой оси&lt;br /&gt;
* '''v''' - скорость изменения масштаба (в долях единицы в сек.)&lt;br /&gt;
* '''t''' - длительность выполнения команды (v игнорируется)&lt;br /&gt;
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;  команда ждет срабатывания условия, и не запускает следующую команду scale, пока if не выполнится; &lt;br /&gt;
* '''loop'''  - зациклить команды - Начать выполнение команд scale с первой команды.&lt;br /&gt;
* '''break''' - прервать команды - Прервать выполнение команд scale на этой команде (запустить их сново можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
=== phys ===&lt;br /&gt;
&lt;br /&gt;
Команда phys позволяет имитировать простую физику. В ней задается начальная скорость и действующая на объект сила (ускорение).&lt;br /&gt;
&lt;br /&gt;
* '''vx''', '''vy''' - начальная скорость&lt;br /&gt;
* '''ax''', '''ay''' - величина ускорения по каждой оси&lt;br /&gt;
* '''a''' - полное ускорение&lt;br /&gt;
* '''tvx''', '''tvy''' - целевая скорость&lt;br /&gt;
* '''tx''', '''ty''' - целевая координата&lt;br /&gt;
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;  команда ждет срабатывания условия, и не запускает следующую команду phys, пока if не выполнится; &lt;br /&gt;
* '''loop''' - зациклить команды - Начать выполнение команд phys с первой команды.&lt;br /&gt;
* '''break''' - прервать команды - Прервать выполнение команд phys на этой команде (запустить их снова можно из команд процессов). &lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подпрыгивающий мячик, который при касании с землей деформируется (вертикально сплюскивается). Это можно сделать в 3 состояния (падаем, касаемся и взлетаем). Первоначально мячик находится в координате y=-100, и имеет высоту картинки w=60. Падает он до координаты ty=0. При касании с землёй, мяч сжимается на 20 процентов (sy=0.8). При этом его центр должен опуститься на dy=0.8*w/2 = 24.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;down&amp;quot;&amp;gt;                                    // падаем&lt;br /&gt;
    &amp;lt;phys vy=&amp;quot;0&amp;quot; ay=&amp;quot;20&amp;quot; ty=&amp;quot;0&amp;quot; go=&amp;quot;touch&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;touch&amp;quot;&amp;gt;                                   // касаемся земли&lt;br /&gt;
    &amp;lt;move dy=&amp;quot;24&amp;quot; t=&amp;quot;300&amp;quot;/&amp;gt;                       // опускаем центр при сжатии&lt;br /&gt;
    &amp;lt;scale ty=&amp;quot;0.8&amp;quot; t=&amp;quot;300&amp;quot;/&amp;gt;                     // сжимаемся&lt;br /&gt;
    &amp;lt;move dy=&amp;quot;-24&amp;quot; t=&amp;quot;300&amp;quot;/&amp;gt;                      // поднимаем центр при разжатии&lt;br /&gt;
    &amp;lt;scale ty=&amp;quot;1&amp;quot; t=&amp;quot;300&amp;quot; go=&amp;quot;up&amp;quot;/&amp;gt;               // разжимаемся&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;up&amp;quot;&amp;gt;                                      // взлетаем&lt;br /&gt;
    &amp;lt;phys vy=&amp;quot;0&amp;quot; ty=&amp;quot;-200&amp;quot; go=&amp;quot;down&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Напомним, что если объект имеет начальную скорость взлета, равную v=sqrt(2*ay*h), то он подпрыгнет на высоту h. Однако, в данном случае, вместо задания начальной скорости при взлете, мы задаем целевую координату (ty), до которой мяч должен подпрыгнуть.&lt;br /&gt;
&lt;br /&gt;
=== rgb ===&lt;br /&gt;
&lt;br /&gt;
* '''trgb''' - целевой эффект rgb; подразумевает под собой цвет в виде HEX-кода; по-умолчанию: FFFFFF;&lt;br /&gt;
* '''t''' - длительность выполнения команды в ms;&lt;br /&gt;
* '''go''' - состояние, в которое нужно перейти поле окончания времени и срабатывания условия [[#if|if]], если оно указано;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;&lt;br /&gt;
* '''loop''' - зациклить команды;&lt;br /&gt;
* '''break''' - прервать выполнение команд wait на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
=== spline ===&lt;br /&gt;
&lt;br /&gt;
Сплайн позволяет перемещать машину по заранее заданной траектории.&lt;br /&gt;
&lt;br /&gt;
====Параметры====&lt;br /&gt;
&lt;br /&gt;
*'''key''' - точки сплайна по которым движется &lt;br /&gt;
*'''t''' - время движения по траектории&lt;br /&gt;
*'''go''' - по окончанию переход в состояние&lt;br /&gt;
*'''if''' - условие перехода&lt;br /&gt;
*'''loop''' - количество повторений&lt;br /&gt;
*'''break''' - прервать команды на этой&lt;br /&gt;
*'''wait''' - номер запускаемого действия&lt;br /&gt;
*'''init''' - номер запускаемого действия&lt;br /&gt;
*'''alpha''' - номер запускаемого действия&lt;br /&gt;
*'''rot''' - номер запускаемого действия&lt;br /&gt;
*'''move''' - номер запускаемого действия&lt;br /&gt;
*'''set''' - номер запускаемого действия&lt;br /&gt;
*'''phys''' - номер запускаемого действия&lt;br /&gt;
*'''scale''' - номер запускаемого действия&lt;br /&gt;
*'''drow''' - номер запускаемого действия&lt;br /&gt;
&lt;br /&gt;
====Построение сплайна====&lt;br /&gt;
&lt;br /&gt;
# в состоянии машины добавляем правой кнопкой мыши действие &amp;quot;spline&amp;quot;&lt;br /&gt;
# добавляем минимально необходимые параметры: '''key''' и '''t''', указываем время движения в '''t'''&lt;br /&gt;
# выделяем для редактирования поле '''key'''&lt;br /&gt;
# записываем координаты точек через запятую, сначала x потом y, например: -211,-248,-151,-248,-91,-247,59,-246,60,101,60,159,1,190&lt;br /&gt;
Если записали все координаты вручную, то можно сохранить и проверять.&lt;br /&gt;
Или можно в окне списка состояний нажать на кнопку &amp;quot;build spline&amp;quot; (справа вверху).&lt;br /&gt;
[[Файл:Btn spline.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Окно с списком состояний закроется, появится дополнительная панель с настройками сплайна и появится возможность указывать мышкой по экрану точки для сплайна.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Spline panel.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Точки сплайна указываются кликом левой кнопки мыши по экрану.&lt;br /&gt;
&lt;br /&gt;
Возможности редактирования:&lt;br /&gt;
&lt;br /&gt;
'''режимы:'''&lt;br /&gt;
*'''add''' - по нажатию левой кнопкой мыши по экрану - будет добавлена новая точка, которая соединится с предыдущей&lt;br /&gt;
*'''select''' - по нажатию левой кнопкой мыши по точке сплайна появится возможность отредактировать её положение перетащив её или поменяв её координаты в полях x и у&lt;br /&gt;
*'''delete''' - по нажатию левой кнопкой мыши по точке сплайна точка удалится&lt;br /&gt;
&lt;br /&gt;
Чтобы удалить все точки сплайна необходимо нажать на кнопку &amp;quot;'''delete all knots'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Сохранить сплайн можно нажав на кнопку &amp;quot;'''Save spline'''&amp;quot;&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;
=== click ===&lt;br /&gt;
&lt;br /&gt;
Команда вызывается, если на объект кликнули мышкой. Срабатывает на её нажатие.&lt;br /&gt;
* '''go''' - состояние в которое при выполнении команды надо перейти (если if нет, то в любом случае);&lt;br /&gt;
* '''if''' - номер  (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход go.&lt;br /&gt;
&lt;br /&gt;
По клику машина записывает координаты клика в параметры: clickX, clickY.&lt;br /&gt;
&lt;br /&gt;
=== touch_in ===&lt;br /&gt;
&lt;br /&gt;
Наведение мыши/пальца на машину, если палец &amp;quot;тащат&amp;quot; по экрану.&lt;br /&gt;
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.&lt;br /&gt;
&lt;br /&gt;
=== touch_out ===&lt;br /&gt;
Выведение мыши/пальца из машины, если палец &amp;quot;тащат&amp;quot; по экрану.&lt;br /&gt;
* '''go''' - состояние в которое при клике нужно перейти;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при котором срабатывает переход ''go''.&lt;br /&gt;
&lt;br /&gt;
=== touch_up ===&lt;br /&gt;
&lt;br /&gt;
Отжатие мыши от машины&lt;br /&gt;
&lt;br /&gt;
* '''go''' - состояние в которое при отжатии мыши нужно перейти;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при котором срабатывает переход ''go''.&lt;br /&gt;
&lt;br /&gt;
=== mouse_in ===&lt;br /&gt;
&lt;br /&gt;
Срабатывает при наведение мыши/пальца на машину даже если не нажата кнопка мыши, работает на desktop-ных системах (OSX, Windows)&lt;br /&gt;
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.&lt;br /&gt;
&lt;br /&gt;
=== mouse_out ===&lt;br /&gt;
Срабатывает при выведение мыши/пальца из машины даже если не нажата кнопка мыши, работает на desktop-ных системах (OSX, Windows)&lt;br /&gt;
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.&lt;br /&gt;
&lt;br /&gt;
=== drag ===&lt;br /&gt;
&lt;br /&gt;
Данная команда позволяет &amp;quot;таскать&amp;quot; объект по сцене нажав и удерживая клавишу мишки или (палец в случае сенсорного устройства) на нем.Так же есть возможность ограничить разрешенную область таскания, за пределы которой  объект вытащить невозможно. [[Файл:drag.jpg|right]]&lt;br /&gt;
* '''x1''' - разрешено таскать, когда координата объекта правее;&lt;br /&gt;
* '''x2''' - разрешено таскать, когда координата объекта левее;&lt;br /&gt;
* '''y1''' - разрешено таскать, когда координата объекта ниже;&lt;br /&gt;
* '''y2''' - разрешено таскать, когда координата объекта выше;&lt;br /&gt;
* '''if''' - номер команды условия (начиная с нуля) разрешения таскания;&lt;br /&gt;
* '''obj''' - объект у которого надо изменить состояние;&lt;br /&gt;
* '''st'''  - новое состояние объекта obj;&lt;br /&gt;
* '''за пивот''' - &amp;quot;да&amp;quot; - таскать объект за пивот, &amp;quot;нет&amp;quot; - за ту точку, за которую схватили&lt;br /&gt;
* '''приклеивать''' - приклеивать при клике к мышке.&lt;br /&gt;
&lt;br /&gt;
=== dragRot ===&lt;br /&gt;
&lt;br /&gt;
Данная команда позволяет вращать объект вокруг точки пивота.  Нажав и удерживая клавишу мишки или палец (в случае сенсорного устройства) на нем, мы можем вращать его по часовой либо против часовой стрелки. При многократном вращении вокруг своей оси значение его угла не накапливается, а обнуляется выходя за границы [360 ; -360] градусов. [[Файл:dragRot.jpg|right]]&lt;br /&gt;
* '''if''' - номер команды условия (начиная с нуля) разрешения таскания;&lt;br /&gt;
* '''obj''' - объект у которого надо изменить состояние;&lt;br /&gt;
* '''st'''  - новое состояние объекта obj;&lt;br /&gt;
* '''maxVel'''  - Максимальная скорость вращения градус/сек;&lt;br /&gt;
* '''objStart''' - объект при начале вращения;&lt;br /&gt;
* '''stStart''' - его новое состояние;&lt;br /&gt;
* '''objEnd''' - объект при завершении вращения;&lt;br /&gt;
* '''stEnd''' - его новое состояние;&lt;br /&gt;
&lt;br /&gt;
=== drop ===&lt;br /&gt;
&lt;br /&gt;
Если нажатая кнопка мышки отпускается, вызывается эта команда. Обычно она используется в связке с командой drag&lt;br /&gt;
* '''obj''' - объект, на который надо уронить таскаемый объект;&lt;br /&gt;
* '''go''' - состояние в которое переходим при отпускании мышки;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) условия [[#if|if]] разрешения бросания.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим совместное применение команд drag и drop на следующей задаче. Пусть есть ключ и ящик. Ключ можно взять мышкой и перетащить, бросив на ящик. Ящик при этом должен постепенно стать прозрачным, а ключ уменьшиться до нуля. Машина состояний для ключа выглядит следующим образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;drag&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;drag x1=&amp;quot;-350&amp;quot; x2=&amp;quot;350&amp;quot; y1=&amp;quot;-250&amp;quot; y2=&amp;quot;250&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;drop obj=&amp;quot;box&amp;quot; go=&amp;quot;open&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;open&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;set obj=&amp;quot;box&amp;quot; st=&amp;quot;open&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;scale tx=&amp;quot;0.01&amp;quot; ty=&amp;quot;0.01&amp;quot; t=&amp;quot;500&amp;quot; go=&amp;quot;hide&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;init x=&amp;quot;268&amp;quot; y=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;scale tx=&amp;quot;1&amp;quot; ty=&amp;quot;1&amp;quot; t=&amp;quot;500&amp;quot; go=&amp;quot;drag&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ящик:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;close&amp;quot;&amp;gt;                        // начальное состояние ящика&lt;br /&gt;
    &amp;lt;init al=&amp;quot;1&amp;quot;/&amp;gt;                     // если его кто-то сюда переведет - он появится.&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;open&amp;quot;&amp;gt;              &lt;br /&gt;
    &amp;lt;alpha ta=&amp;quot;0&amp;quot; t=&amp;quot;500&amp;quot;/&amp;gt;            // исчезает по прозрачности за 500 ms&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Использование свойства &amp;quot;Условие перехода&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
Можно прописать условие, при котором выполняется переход при дропе.&lt;br /&gt;
[[Файл:Drop_if.png|300px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
С помощью этого условия мы можем научить наш объект выполнять разные задачи в зависимости от того, как именно его дропнули.&lt;br /&gt;
Пусть есть объект который можно таскать. Когда объект не таскается должен быть включен флаер, привязанный к этому объекту. При клике на объект, он должен поворачиваться на 90 градусов. При дропе на соответствующую маску объект стает на свое место(Если выполнены условия, к примеру: установлен предыдущий объект и наш объект имеет правильный угол). Если дроп в любое другое место, то должен включится флаер.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы научить машину различать клик по ней и ее таскание сделаем следующее. Пропишем ей 2 состояния: click и drag, а также выставим ей параметр &amp;quot;хранить нажатость&amp;quot; = 1. В click будем вычислять координаты объекта и записывать объекту параметр допустимого смещения при котором таскание будет восприниматься как клик. (В данном примере эти параметры: cx, cy, vx, vy. А допустимое смещение составляет 10 пикселей.)&lt;br /&gt;
&lt;br /&gt;
В состоянии drag будем проверять попадает ли координата объекта при дропе в границы допустимого смещения. Для того чтобы сравнить параметр объекта с переменной, вычтем из нашего объекта, то что мы записали в click. В зависимости от условий и места дропа переходим в соответствующее состояние.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Click.png|330px]] [[Файл:Drag st.png|630px]]&lt;br /&gt;
&lt;br /&gt;
=== throw ===&lt;br /&gt;
 &lt;br /&gt;
Если на объект наступили мышкой, не отпуская кнопки, мышку оттащили и затем отпустили, вызывается команда throw со следующими параметрами:&lt;br /&gt;
* '''go''' - состояние, в которое, при клике, надо перейти;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]] разрешения бросания;&lt;br /&gt;
* '''force''' - получаемая скорость равна разнице пикселей от начала бросания (мышь нажата) до его конца (мышь отжата), умноженная на этот параметр. По умолчанию он равен 1.&lt;br /&gt;
&lt;br /&gt;
Сработав, эта команда задает начальные значения скорости для команды phys, поэтому должна использоваться совместно с ней (см. ниже пример).&lt;br /&gt;
&lt;br /&gt;
=== tap ===&lt;br /&gt;
&lt;br /&gt;
* '''go''' - Состояние в которое нужно перейти после окончания времени.&lt;br /&gt;
* '''if''' - номер (начиная с нуля) условия [[#if|if]] разрешения бросания.&lt;br /&gt;
&lt;br /&gt;
=== apply ===&lt;br /&gt;
&lt;br /&gt;
Вызывается, если данная машина пересеклась с другой. Обычно используется в совокупности с throw, move, phys, drag.&lt;br /&gt;
* '''obj''' - сработает , если пересеклись с этим объектом;&lt;br /&gt;
* '''x1''' - сработает, если центр объекта левее этого x-са;&lt;br /&gt;
* '''x2''' - сработает, если центр объекта правее этого x-са;&lt;br /&gt;
* '''y1''' - сработает, если центр объекта выше этого y-ка;&lt;br /&gt;
* '''y2''' - сработает, если центр объекта ниже этого y-ка;&lt;br /&gt;
* '''rm''' - радиус этой машины (если rm=0, то она считается прямоугольной)&lt;br /&gt;
* '''ro''' - радиус объекта obj (если ro=0, то он считается прямоугольным)&lt;br /&gt;
* '''st''' - состояние, в которое надо перевести объект obj&lt;br /&gt;
* '''go''' - состояние, в которое надо перейти при срабатывании;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]] разрешения применения команды apply.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Апплай.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Блок схема работы '''apply'''&lt;br /&gt;
&lt;br /&gt;
[[Файл:Блок схема apply.png|500px]]&lt;br /&gt;
&lt;br /&gt;
* Сначала у нас проверяется  координаты '''x1''', '''x2''', '''y1''', '''y2'''.&lt;br /&gt;
* Далее проверяет если '''obj'''&lt;br /&gt;
* Если '''obj''' нет, то идёт проверку, и выдаёт результат&lt;br /&gt;
(если при этом если '''x1''', '''x2''', '''y1''', '''y2''' нет, то они считаются по ширине и высоте всего экрана.)&lt;br /&gt;
* Если есть '''obj''', то проверяет есть ли радиусы '''rm''', '''ro'''.&lt;br /&gt;
* Если он есть, то значит у нас '''apply''' по кругам&lt;br /&gt;
* Если нет, то проверяем наличие '''x1''', '''x2''', '''y1''', '''y2'''.&lt;br /&gt;
* Если они есть, то проверка и результат.&lt;br /&gt;
* Если их нет, то проверка идёт по шейпам объектов, и выдаётся результат/&lt;br /&gt;
Если не будет стоять ни каких галочек, то проверка будет идти по шейпам объектов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пусть, например, есть снаряд, который при помощи мышки надо кинуть в &amp;quot;тыкву&amp;quot;. Если мы промахнулись, снаряд должен вернуться обратно, а с тыквой ничего не произойти. Если мы в тыкву попадаем, снаряд также возвращается, а тыква &amp;quot;взрывается&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;trow&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;init x=&amp;quot;-350&amp;quot; y=&amp;quot;150&amp;quot;/&amp;gt;                      // начальное положение&lt;br /&gt;
    &amp;lt;throw go=&amp;quot;fly&amp;quot;/&amp;gt;                             // бросаем&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;fly&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;phys ay=&amp;quot;100&amp;quot;/&amp;gt;                              // летим&lt;br /&gt;
    &amp;lt;apply y2=&amp;quot;300&amp;quot; go=&amp;quot;throw&amp;quot;/&amp;gt;                  // с землей&lt;br /&gt;
    &amp;lt;apply obj=&amp;quot;тыква&amp;quot; rm=&amp;quot;8&amp;quot; ro=&amp;quot;10&amp;quot; st=&amp;quot;bang&amp;quot;/&amp;gt; // с тыквой&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условия ==&lt;br /&gt;
&lt;br /&gt;
=== if ===&lt;br /&gt;
&lt;br /&gt;
В состоянии может быть произвольное число команд if. Их номера (начиная с нуля) указываются&lt;br /&gt;
в параметре if других команд. Эти номера можно соединять при помощи логических связок:&lt;br /&gt;
* '''&amp;amp;''' - логическое '''и''' (вместо значка '''&amp;amp;''' можно использовать запятую ''',''');&lt;br /&gt;
* '''|''' - логическое '''или''';&lt;br /&gt;
* '''!''' - логическое '''не'''.&lt;br /&gt;
Пример записи логического выражения в поле if некоторой команды: '''(1&amp;amp;2)|(3&amp;amp;(!4))''',&lt;br /&gt;
что означает: выполняется if под номером 1 и под номером 2, или под номером 3 и не под номером 4.&lt;br /&gt;
&lt;br /&gt;
Логические связки используются также как математической логике или любом языке программирования. &lt;br /&gt;
Так:&lt;br /&gt;
* A '''&amp;amp;''' B - истинно, если истинны оба условия A и B;&lt;br /&gt;
* A '''|''' B - истинно, если истинно хотя бы одно условие (или оба);&lt;br /&gt;
* '''!''' А - истинно, если условие A ложно.&lt;br /&gt;
Скобки в логическом выражении определяют приоритет (порядок) выполнения логических операций.&lt;br /&gt;
Отметим несколько тождеств, справедливых при формировании логических высказываний:&lt;br /&gt;
* !(A &amp;amp; B) = (!A) | (!B)&lt;br /&gt;
* !(A | B) = (!A) &amp;amp; (!B)&lt;br /&gt;
* !(!A) = A&lt;br /&gt;
&lt;br /&gt;
Если при формировании условия (ниже) есть несколько проверок, то они соединены логическим '''и'''.&lt;br /&gt;
Т.е., если хотя бы одна из них не выполняется, то считается, что условие не выполнилось.&lt;br /&gt;
&lt;br /&gt;
Параметры команды:&lt;br /&gt;
* '''obj''' - находится ли объект obj в состоянии st или имеет ли его параметр par значение val. В этом поле можно указать this, это значит что if будет проводить проверку текущего объекта. Добавлено это вместе с параметром clone. Клоны рождаются и умирают в рамках одного экрана. Для различия клонов между собой машина имеет уникальный параметр &amp;quot;clone_num&amp;quot; у оригинала = -1, у клонов от 0 до N, собственно с помощью this машина может сама себя проверить клон ли она и если да то какой у нее номер;&lt;br /&gt;
* '''st''' - имя состояния в котором может находиться объект obj;&lt;br /&gt;
* '''par''' - имя параметра объекта obj, значение которого сравнивается с полем val;&lt;br /&gt;
* '''val''' - значение параметра par, которое проверяется у объекта obj;&lt;br /&gt;
* '''val_txt''' - Значение текстового параметра объекта для проверки условия;&lt;br /&gt;
* '''val_res''' - Значение ресурсного параметра объекта для проверки условия;&lt;br /&gt;
* '''op''' - операция сравнения par op val. Если операции нет, то предполагается проверка на равенство par=val. Иначе используются операторы:&lt;br /&gt;
** '''&amp;lt;''' - меньше (par &amp;lt; val);&lt;br /&gt;
** '''&amp;gt;''' - больше (par &amp;gt; val);&lt;br /&gt;
** '''!=''' - не равно (par != val);&lt;br /&gt;
** '''&amp;lt;&amp;gt;''' - не равно (par &amp;lt;&amp;gt; val);&lt;br /&gt;
** '''&amp;gt;=''' - больше или равно (par &amp;gt;= val);&lt;br /&gt;
** '''&amp;lt;=''' - меньше или равно (par &amp;lt;= val);&lt;br /&gt;
* '''curScr''' - если текущий экран совпадает с этим, то условие выполнилось;&lt;br /&gt;
* '''prScr''' - если предыдущий экран совпадает с этим, то условие выполнилось;&lt;br /&gt;
* '''wasScr''' - если был (когда либо) этот экран, то условие выполнилось.&lt;br /&gt;
* '''buy''' - был ли куплен данный inn-app (проверяется флаг поля в объекте [[Options]]);&lt;br /&gt;
* '''url''' - валиден (правилен и может быть запущен) ли данный интернет-адрес;&lt;br /&gt;
* '''is_mus''' - играет ли сейчас музыка (значение 1);&lt;br /&gt;
* '''guest''' - объект который установил состояние (используется вместо параметра obj). Если указанный объект не менял состояние этой машины, то условие не срабатывает.&lt;br /&gt;
&lt;br /&gt;
Если использовать obj, par, val, то будет происходить проверка на равенство значения параметра объекта и значения записанного в поле val.&lt;br /&gt;
Если же использовать obj, par, op, val, то будет происходить проверка в соответствии с операцией сравнения значения параметра объекта и значения записанного в поле val.&lt;br /&gt;
&lt;br /&gt;
Для проверки текущего значения прозрачности у объекта можно воспользоваться параметром ''cur_al''&lt;br /&gt;
&lt;br /&gt;
У машины (другой или самой себя) можно проверить текущее состояние '''st''' и предыдущее состояние '''prev_st''', эти параметры живут на время сессии.&lt;br /&gt;
&lt;br /&gt;
== Математика ==&lt;br /&gt;
&lt;br /&gt;
=== Основные математические операции ===&lt;br /&gt;
Математика в appsalute creator представлена 6-ю основными операциями: (плюс),  (минус),  (умножить),  (поделить), (целочисленное деление), (остаток от деления) &amp;lt;br&amp;gt;&lt;br /&gt;
Организована благодаря совместному использованию '''[[#var|var]]''' и '''[[#set|set]]'''. &lt;br /&gt;
[[Файл:Example_mod.png|300px|right|Пример использования операции остатка от деления]]&lt;br /&gt;
''(плюс)'' '''+'''&amp;lt;br&amp;gt;&lt;br /&gt;
''(минус)'' '''-'''&amp;lt;br&amp;gt;&lt;br /&gt;
''(умножить)'' '''*'''&amp;lt;br&amp;gt;&lt;br /&gt;
''(поделить)'' '''/'''&amp;lt;br&amp;gt;&lt;br /&gt;
''(целочисленное деление)'' '''\'''&amp;lt;br&amp;gt;&lt;br /&gt;
''(остаток от деления)'' '''%'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Примеры использования последних двух операций:&amp;lt;br&amp;gt;&lt;br /&gt;
5\2=2&amp;lt;br&amp;gt;&lt;br /&gt;
5%2=1&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== var ===&lt;br /&gt;
Благодаря использованию '''[[#var|var]]''' существует возможность cчитать любой числовой параметр любого объекта. Например: x - координату какой-то машины, текущее значение любого объекта counter или timer и конечно же считывание значения любого параметра из опций! Каким образом это устроено? Рассмотрим подробнее '''[[#var|var]]''': &amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:VAR.png|right]]&lt;br /&gt;
*'''name''' - здесь выбираем имя для нашей будущей переменной, которой будем оперировать далее&lt;br /&gt;
*'''obj''' - выбирается объект, параметры которого мы хотим считать&lt;br /&gt;
*'''par''' - параметр, который нужно вычитать из объекта, указанного выше&lt;br /&gt;
*'''val''' - указывается числовое значение, которое будет установлено по умолчанию в случае отсутствия obj и par&lt;br /&gt;
*'''user''' - если стоит &amp;quot;1&amp;quot;, то будет считываться с текущего профиля в опциях&lt;br /&gt;
На изображении справа можно наблюдать каким образом организован '''[[#var|var]]'''. В данном случае объявлена переменная x_cor, которая считывает x-координату объекта actor_1, при этом считывание переменной происходит из текущего профиля, так, как в поле user установлено значение равное &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
[[Файл:SET.png|right]]&lt;br /&gt;
Использование '''[[#var|var]]''' без '''[[#set|set]]''' не имеет смысла. Так, как переменная создается, но не используется дальше. Рассмотрим следующий пример, где вычитаем x - координату из одного объекта и сохраним ее в опции, предварительно увеличив ее на 50 единиц (в данном случае 50 пикселей).&lt;br /&gt;
На рисунке справа можно наблюдать, каким образом это сделано. В состоянии '''init''' объявляется переменная '''x_cor''', которая считывает координату '''x''' из объекта '''actor_1''', таким образом в переменную '''x_cor''' запишется положение по '''x''' объекта '''actor_1'''. Поле '''user''' в данном случае в '''1''' не обязательно устанавливать, так как работа ведется с машинами, а не с опциями. Если бы на месте '''actor_1''' оказался объект '''options''', то это было бы просто необходимо, иначе программа считает значение не из профиля. Далее в '''[[#set|set]]''' выбран объект '''options''',  в параметр '''x_position''' которого будет сохранятся значение переменной '''x_cor''' увеличенной на 50. В поле '''round''' идет округление вычисляемого значения, если оно установлено в 1. Поле '''user ''' установлено в 1, это значит, что параметр '''x_position''' будет сохранен в профиль. После это выполняется сохранение опций путем задания объекту '''options''' состояния '''save'''.&amp;lt;br&amp;gt;&lt;br /&gt;
! ! !ВАЖНО: чтобы выполнить какие-то действия с '''[[#var|var]]''' его обязательно нужно указывать в поле '''val''' в '''set''', при этом, если он используется, то все выражение должно стоять в скобках. Если в поле '''val''' не используется переменная, то скобки необязательны.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Существует также возможность использовать '''[[#var|var]]''' совместно с '''[[#if|if]]''', а также '''[[#var|var]]''' с '''[[#move|move]]'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 Так же добавилась возможность записывать значение переменной в состояние &amp;quot;st&amp;quot;, что значительно уменьшает&lt;br /&gt;
 необходимость в записи 1000 if-ов. При этом, тип переменной в '''[[#var|var]]''' должен быть &amp;quot;строка&amp;quot;.&lt;br /&gt;
 И добавилась возможность записи переменной boolean: ((a)==(b)). true = 1, false = 0. Довольно полезная вещь,&lt;br /&gt;
 если не хотите забивать &amp;quot;память&amp;quot; ненужной математикой.&lt;br /&gt;
&lt;br /&gt;
=== var и if ===&lt;br /&gt;
[[Файл:IF.png|right]]&lt;br /&gt;
При подробном рассмотрении '''[[#if|if]]''' можно заметить, что в нем есть поле '''val''', соответственно в этом поле можно указать переменную. Таким образом в поле '''val''' необязательно указывать константу, а можно указать какую-то переменную, которая может постоянно изменяться. Например, существует два объекта, один находится состоянии покоя, а другой находится в движении. При этом первый объект (тот, который в состоянии покоя) постоянно опрашивает положение второго объекта, и в случае, если у объекта, который движется, '''х''' координата  равна '''х''' координате первого объекта, то первый объект входит в состояние, где он начинает свое движение. На рисунке показан объект, который находится в состоянии покоя, рассмотрим его состояния:&amp;lt;br&amp;gt;&lt;br /&gt;
В данном объекте существует два состояния: '''init''' и '''move'''. В '''init''' объект опрашивает другой объект и в случае, когда условие срабатывает, то переходит в состояние '''move''', где начинает свое движение.&lt;br /&gt;
В '''init''' создаем переменную, в которую записываем положение по '''x''' объекта '''actor_2''', в '''if''' проверяется условие на соответствие координат объектов '''actor_1''' и '''actor_2''', в данном случае координата объекта '''actor_2''' представлена в виде переменной '''x_cor'''. Если условие выполняется, то происходит переход в состояние '''move''', если нет, то заново проходим состояние '''init''' и повторяем вышеописанную последовательность действий.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== var и move ===&lt;br /&gt;
Также с помощью '''[[#var|var]]''' есть возможность указать целевые координаты в '''[[#move|move]]'''. То есть, не обязательно указывать целевые координаты в виде констант, их можно указать теперь с помощью переменных. При использовании '''[[#var|var]]''' и '''[[#move|move]]''' можно организовать обмен двух объектов местами с анимацией движения. Для этого необходимо определять какой объект нажат первым, а какой вторым, сохранять их координаты через объект '''options''' и только потом менять их местами. На рисунке можно увидеть, как это организовано.&lt;br /&gt;
[[Файл:var_move.png|1000px|thumb|center|]]&lt;br /&gt;
Рассмотрим подробнее состояние данной машины:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* '''init'''&amp;lt;br&amp;gt;&lt;br /&gt;
В этом состоянии ожидаем клик на объект и обнуляем параметр, который отвечает за то, какой по счету объект сейчас нажат. Так, как при обмене объектов, если мы делаем это по клику, важно знать, по какому кликнули  первым, а по какому вторым.&lt;br /&gt;
* '''check'''&amp;lt;br&amp;gt;&lt;br /&gt;
Проверяется параметр '''number''', если он равен '''0''', то это значит, что еще ничего не кликали и мы переходим в состояние, где в опции записываются координаты этого объекта, который считается нажатым первым. Если не равен '''0''', то считается, что этот объект нажат вторым и переходит в состояние, где в опции записываются координаты этого объекта, который считается нажатым вторым по счету.&lt;br /&gt;
* '''first_object'''&amp;lt;br&amp;gt;&lt;br /&gt;
В этом состоянии записываются координаты объекта в опции. Чтобы записать координаты в опции используются '''[[#var|var]]''' и '''[[#set|set]]''' упоминаемые выше. В опции координаты первого нажатого объекта сохраняются под параметрами '''x_first''' и '''y_first'''. В конце параметру '''number''' присваиваем значение '''1''', чтобы указать, что следующий нажатый объект будет вторым по счету. &lt;br /&gt;
* '''second_object'''&amp;lt;br&amp;gt;&lt;br /&gt;
В этом состоянии объект будет в том случае, если он будет нажатым вторым по счету, то есть после состояния '''check''' объект попадет в это состояние, где он запишет свои текущие координаты под параметрами '''x_second''' и '''y_second'''. Запись координат происходит таким же самым образом, что и в состоянии '''first_object'''. После этого он автоматически переходит в следующее состояние.&lt;br /&gt;
* '''move_first'''&amp;lt;br&amp;gt;&lt;br /&gt;
В этом состоянии объект будет в том случае, если он был нажат первым, поэтому он будет двигаться на место второго нажатого объекта, который сохранил свои координаты в параметры'''x_second''' и '''y_second'''. Движение происходит следующим образом: сперва в переменную вычитываем координаты второго объекта, а потом в '''move''' вместо целевых координат записываем переменные, которые обязательно должны быть взяты в скобки.&lt;br /&gt;
* '''move_second'''&amp;lt;br&amp;gt;&lt;br /&gt;
В этом состоянии объект будет в том случае, если он был нажат вторым, поэтому он будет двигаться на место первого нажатого объекта, который сохранил свои координаты в параметры '''x_first''' и '''y_first'''. Движение происходит следующим образом: сперва в переменную вычитываем координаты первого объекта, а потом в '''move''' вместо целевых координат записываем переменные, которые обязательно должны быть взяты в скобки.&lt;br /&gt;
&lt;br /&gt;
В результате проделанных манипуляций с машинами по кликам на две машины, они обменяются местами с анимацией движения. Это может быть очень полезным во многих мини играх!!!&lt;br /&gt;
&lt;br /&gt;
=== Важно знать ===&lt;br /&gt;
* Переменная действует в рамках одного состояния, если нужно, чтобы она была глобальной, нужно сохранить ее в опции и потом в нужный момент считывать ее из опций.&lt;br /&gt;
* Если складываем два числа, то в поле '''val''' они должны быть записаны в скобках: (5+3).&lt;br /&gt;
* Если возникает необходимость написать какое-то более сложное арифметическое вычисление, то следует помнить, что на одно действие приходятся одни скобки. Например: (((5+3)\2)*2).&lt;br /&gt;
* Количество открывающих и закрывающих скобок должно быть одинаковым.&lt;br /&gt;
* В скобках можно писать переменную, если она была объявлена выше: (5+a).&lt;br /&gt;
* Переменная может состоять из цифр и букв и знака нижнего подчеркивания.&lt;br /&gt;
* Иногда бывает необходимым использование '''round''' в '''set''', так например, если какой-то параметр получен с помощью арифметических вычислений и потом используется его в каком-то условии, и условие проверяет параметр, как целочисленное значение, то могут возникнуть ошибки. Так, как число будет записано в следующем виде 123.0000 и программа будет считать, что оно не целочисленное, а дробное. И чтобы избавится от лишних нулей  в дробной части следует округлять число.&lt;br /&gt;
* Действия, которые требуют времени, такие как move, rot, wait и другие перестают работать для уменьшения вычислительной нагрузки на устройство.&lt;br /&gt;
* Действия, которые не требуют времени, такие как set, init и другие продолжают функционировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Если с помощью переменной менять объекту любой параметр, например, координату X, то она&lt;br /&gt;
запомнится (запишется как значение по умолчанию).&lt;br /&gt;
Тогда при повторном попадании на экран считается не тот X, который указан в свойствах,&lt;br /&gt;
а тот, который установлен через переменную.&lt;br /&gt;
Если нужно при ините экрана возвращать начальные значения параметров,&lt;br /&gt;
то можно сделать это двумя способами:&lt;br /&gt;
- не использовать переменную;&lt;br /&gt;
- создать отдельное состояние, которое будет &amp;quot;вручную&amp;quot; устанавливать начальные значения&lt;br /&gt;
параметрам при ините экрана.&lt;br /&gt;
Если координата (или другой параметр) меняется другим способом, то будут автоматически&lt;br /&gt;
при ините экрана подтягиваться значения из свойств объекта.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Примеры применений ===&lt;br /&gt;
С помощью математики можно организовать следующее:&lt;br /&gt;
* динамические опции (изменение звука и музыки с помощью ползунка);&lt;br /&gt;
* анимацию каунтера в играх (по окончанию уровня можно наблюдать, как изменяются очки);&lt;br /&gt;
* подсчет очков (гибкая система подсчета очков);&lt;br /&gt;
* обмен объектов местами (использование var и move)&lt;br /&gt;
* увеличение z-координаты любого объекта (когда необходимо, чтобы нажатый или таскаемый объект был выше других по z);&lt;br /&gt;
* простейший калькулятор;&lt;br /&gt;
* и много других.&lt;br /&gt;
&lt;br /&gt;
== Копирование машины состояния с сохранением ссылки на себя ==&lt;br /&gt;
Довольно часто бывает, что машина состояний ссылается только на глобальные объекты и на саму себя. При этом, если мы просто скопируем объект, он будет ссылаться на свою предыдущую копию. Этого можно избежать, сделав 3 шага:&lt;br /&gt;
1. Переместить объект в отдельную сцену&lt;br /&gt;
2. Скопировать данную сцену(имеется в виду обычное копирование, без ссылки)&lt;br /&gt;
3. Перенести объект и его копию обратно, в нужную сцену&lt;br /&gt;
4. Созданные сцены можно удалить :)&lt;br /&gt;
&lt;br /&gt;
== Guest ==&lt;br /&gt;
&lt;br /&gt;
'''Guest (гость)''' - объект, который перевел машину в текущее состояние. Пример: кнопка ''btn1'' по клику переводит машину ''mch1'' в состояние ''st1'', в этом состоянии у машины ''mch1'' гостем является кнопка ''btn1''. Гостем может быть объект любого типа, если он может менять состояние другому объекту (например: хидден-объект по нахождению может менять состояние объекту, кнопка, машина, пэчворк и т.д.)&lt;br /&gt;
&lt;br /&gt;
В машине состояний можно считывать (проверять) и передавать параметры и состояния гостя. Любое поле ''obj'' в выпадающем списке содержит строку ''guest'', что позволяет работать с гостем, как с любым другим объектом.&lt;br /&gt;
&lt;br /&gt;
=== Пример использования ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Guest1.jpg|left]]&lt;br /&gt;
Пускай экран содержит 3 кнопки (''btn1'', ''btn2'' и ''btn3'') и одну машину ''mch1''. Нужно сделать так, чтобы по клику на любую из кнопок машина перемещалась в ее координаты и переводила кнопку в состояние ''disable''. Так же по клику на кнопку ''btn2'', машина должна перейти в состояние ''bonus''.&amp;lt;br&amp;gt;&lt;br /&gt;
Всем трем кнопкам по клику пропишем передавать объекту ''mch1'' состояние ''check''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Создадим в машине три состояния: ''init'' - состояние в котором машина будет находиться по умолчанию, ''check'' - состояние, которое будет вызываться тремя кнопками, в этом состоянии у машины ''mch1'' одна из трех кнопок будет гостем, ''bonus'' - последнее состояние.&amp;lt;br&amp;gt;&lt;br /&gt;
Две команды ''var'' считывают у гостя координаты, т.к. мы не знаем, какая именно кнопка перевела машину ''mch1'' в состояние ''check'', то обращаемся к гостю, а не к кнопкам. За ними следует две команды ''set'', которые передают координаты гостя машине. Еще один ''set'' переводит гостя в состояние ''disable''. И через ''wait'' осуществляется переход в состояние ''bonus'', если гость ''btn2''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
При смене состояния гость сохраняется, т.е. в состоянии bonus гостем останется btn2.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Если машина изначально сама себе меняет состояния, то у нее нет гостя.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:Guest2.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Массив (Array) ==&lt;br /&gt;
&lt;br /&gt;
В данном объекте реализован массив, имеющий максимальную длину в 20 элементов.&lt;br /&gt;
&lt;br /&gt;
=== Свойства объекта массив: ===&lt;br /&gt;
&lt;br /&gt;
len - длинна массива. Длинна массива может как считываться, так и записываться. Влияет на количество сохраняемых объектов в Options.&lt;br /&gt;
&lt;br /&gt;
index1 - индекс элемента. (данный массив можно расширить до многомерного и использовать несколько индексов)&lt;br /&gt;
&lt;br /&gt;
val - значение элемента массива, с индексом index1&lt;br /&gt;
&lt;br /&gt;
a1..a20 - внутренние элементы массива(обращаться можно через свойство par объекта). Предполагается, что пользователь редактора к ним обращаться напрямую не будет, однако иногда для удобства полезны.&lt;br /&gt;
&lt;br /&gt;
=== Состояния объекта массив: ===&lt;br /&gt;
&lt;br /&gt;
get - при вызове этого состояния во внутреннюю переменную val записывается значение элемента с индексом index1&lt;br /&gt;
&lt;br /&gt;
set - при вызове этого состояния во внутреннюю переменную a1..a20, соответствующую индексу index1 записывается значение val&lt;br /&gt;
&lt;br /&gt;
load - загрузить значения массива из xml.&lt;br /&gt;
&lt;br /&gt;
save - сохранить элементы массива от 1 до len&lt;br /&gt;
&lt;br /&gt;
=== Как использовать? ===&lt;br /&gt;
&lt;br /&gt;
1. Загружаем массив, переводя объект array в состояние load&lt;br /&gt;
&lt;br /&gt;
2. Записываем значения массива&lt;br /&gt;
&lt;br /&gt;
 а). Задаём значение свойству index1 объекта array (устанавливаем индекс ячейки, в которую будет заноситься число)&lt;br /&gt;
 б). Задаём значение свойству val объекта array (устанавливаем значение, которое будет заноситься в ячейку&lt;br /&gt;
     с индексом index1)&lt;br /&gt;
 в). Переводим объект array в состояние set&lt;br /&gt;
&lt;br /&gt;
3. Считываем значения массива&lt;br /&gt;
 а). Задаём значение свойству index1 объекта array (устанавливаем индекс ячейки, из которой будет считываться число)&lt;br /&gt;
 б). Переводим объект array в состояние get&lt;br /&gt;
 в). Считываем значение из свойства val объекта array&lt;br /&gt;
&lt;br /&gt;
4. Сохраняем массив, переводя объект array в состояние save. Если хотите изменить количество сохраняемых элементов - предварительно измените параметр len.&lt;br /&gt;
&lt;br /&gt;
=== Копирование объекта ===&lt;br /&gt;
&lt;br /&gt;
При копировании, необходимо заменить в состояниях load и save array.имя_параметра на другое имя. Например, array2.имя_параметра. Копировать следует через использование доп. сцены (см. выше)&lt;br /&gt;
&lt;br /&gt;
=== Достоинства ===&lt;br /&gt;
&lt;br /&gt;
Позволяет избежать необходимости каждый раз создавать большое количество if-ов и set-ов, если необходимо работать с нумерованным списком. Можно один раз создать структуру и копировать её неограниченное количество раз&lt;br /&gt;
&lt;br /&gt;
=== Недостатки ===&lt;br /&gt;
&lt;br /&gt;
Данный объект содержит довольно большое количество кода, поэтому при большом их обилии/длине может занизить скорость работы сцены и скорость загрузки сцены.&lt;br /&gt;
&lt;br /&gt;
=== Исходный XML код===&lt;br /&gt;
Прим. id=&amp;quot;369&amp;quot; - идентификатор объекта Options, сохраняющего все переменные приложения. id=&amp;quot;7845&amp;quot; - идентификатор объекта&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;obj id=&amp;quot;7845&amp;quot; type=&amp;quot;machine&amp;quot; nm=&amp;quot;array&amp;quot; sync=&amp;quot;1&amp;quot; w=&amp;quot;1&amp;quot; h=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;st id=&amp;quot;init&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;st id=&amp;quot;get&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a1&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a2&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a3&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a4&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a5&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a6&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a7&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a8&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a9&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a10&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a11&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a12&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a13&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a14&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a15&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a16&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a17&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a18&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a19&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a20&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a20&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a1)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a2)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a3)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a4)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a5)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a6)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a7)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a8)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a9)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a10)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a11)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a12)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a13)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a14)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a15)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a16)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a17)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a18)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a19)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a20)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/st&amp;gt;&lt;br /&gt;
                &amp;lt;st id=&amp;quot;set&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;val&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a1&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a2&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a3&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a4&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a5&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a6&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a7&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a8&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a9&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a10&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a11&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a12&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a13&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a14&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a15&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a16&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a17&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a18&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a19&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a20&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/st&amp;gt;&lt;br /&gt;
                &amp;lt;st id=&amp;quot;load&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a1&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a1&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a2&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a2&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a3&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a3&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a4&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a4&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a5&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a5&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a6&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a6&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a7&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a7&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a8&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a8&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a9&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a9&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a10&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a10&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a11&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a11&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a12&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a12&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a13&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a13&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a14&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a14&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a15&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a15&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a16&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a16&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a17&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a17&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a18&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a18&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a19&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a19&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a20&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a20&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a1&amp;quot; val=&amp;quot;(a1)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a2&amp;quot; val=&amp;quot;(a2)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a3&amp;quot; val=&amp;quot;(a3)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a4&amp;quot; val=&amp;quot;(a4)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a5&amp;quot; val=&amp;quot;(a5)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a6&amp;quot; val=&amp;quot;(a6)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a7&amp;quot; val=&amp;quot;(a7)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a8&amp;quot; val=&amp;quot;(a8)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a9&amp;quot; val=&amp;quot;(a9)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a10&amp;quot; val=&amp;quot;(a10)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a11&amp;quot; val=&amp;quot;(a11)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a12&amp;quot; val=&amp;quot;(a12)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a13&amp;quot; val=&amp;quot;(a13)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a14&amp;quot; val=&amp;quot;(a14)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a15&amp;quot; val=&amp;quot;(a15)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a16&amp;quot; val=&amp;quot;(a16)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a17&amp;quot; val=&amp;quot;(a17)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a18&amp;quot; val=&amp;quot;(a18)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a19&amp;quot; val=&amp;quot;(a19)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a20&amp;quot; val=&amp;quot;(a20)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/st&amp;gt;&lt;br /&gt;
                &amp;lt;st id=&amp;quot;save&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;len&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a1&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a2&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a3&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a4&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a5&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a6&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a7&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a8&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a9&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a10&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a11&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a12&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a13&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a14&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a15&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a16&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a17&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a18&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a19&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a20&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a20&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a1&amp;quot; val=&amp;quot;(a1)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a2&amp;quot; val=&amp;quot;(a2)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a3&amp;quot; val=&amp;quot;(a3)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a4&amp;quot; val=&amp;quot;(a4)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a5&amp;quot; val=&amp;quot;(a5)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a6&amp;quot; val=&amp;quot;(a6)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a7&amp;quot; val=&amp;quot;(a7)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a8&amp;quot; val=&amp;quot;(a8)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a9&amp;quot; val=&amp;quot;(a9)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a10&amp;quot; val=&amp;quot;(a10)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a11&amp;quot; val=&amp;quot;(a11)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a12&amp;quot; val=&amp;quot;(a12)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a13&amp;quot; val=&amp;quot;(a13)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a14&amp;quot; val=&amp;quot;(a14)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a15&amp;quot; val=&amp;quot;(a15)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a16&amp;quot; val=&amp;quot;(a16)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a17&amp;quot; val=&amp;quot;(a17)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a18&amp;quot; val=&amp;quot;(a18)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a19&amp;quot; val=&amp;quot;(a19)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a20&amp;quot; val=&amp;quot;(a20)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.len&amp;quot; val=&amp;quot;(len)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/st&amp;gt;&lt;br /&gt;
            &amp;lt;/obj&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Машина состояний объекта ===&lt;br /&gt;
[[Файл:array.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример использования ==&lt;br /&gt;
&lt;br /&gt;
[http://fs5.absolutist.com/files/wikisample/machine.rar Download]&lt;br /&gt;
&lt;br /&gt;
== Clone ==&lt;br /&gt;
Clone - параметр команды init в разделе &amp;quot;системные действия&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Clone1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение 1 означает, что в текущем местоположении машины будет создана ее копия.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Clone2.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
&lt;br /&gt;
1) Клонированная машина состояний имеет все свойства, состояния и параметры исходного объекта клонирования.&lt;br /&gt;
&lt;br /&gt;
2) Клоны рождаются и умирают в рамках одного экрана.&lt;br /&gt;
&lt;br /&gt;
3) Клоны отличаются друг от друга лишь параметром '''clone_num''', который у оригинала равен &amp;quot;-1&amp;quot;, а у клонов от 0 до N.&lt;br /&gt;
&lt;br /&gt;
4) Нежелательно применять клонирование к клону во избежание путаницы значений параметра '''clone_num'''.&lt;br /&gt;
&lt;br /&gt;
5) Если при проверке условия [[#if|if]] в поле '''obj''' указать this, это значит что if будет проводить проверку текущего объекта.  Таким образом машина может сама себя проверить по параметру '''clone_num''' клон ли она и если да то какой у нее номер;&lt;br /&gt;
&lt;br /&gt;
=== Пример использования ===&lt;br /&gt;
&lt;br /&gt;
По ссылке пример использования с подробным описанием машин.&lt;br /&gt;
&lt;br /&gt;
[http://fs5.absolutist.com/files/wikisample/Clone.zip Download]&lt;br /&gt;
&lt;br /&gt;
== Параметр команды машины состояний ==&lt;br /&gt;
&lt;br /&gt;
В случае, когда необходимо изменить значение какого-либо параметра в командах машины состояний (например v в команде move) в процессе работы приложения, можно использовать блок &amp;quot;Параметр команды машины состояний&amp;quot; в команде ''set'' машины состояний. Приведу пример использования этого блока.&lt;br /&gt;
&lt;br /&gt;
Пусть есть 2 машины: управляющая и управляемая.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stm1.jpg|300px]][[Файл:Stm2.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Управляемая машина практически пустая и не содержит каких либо данных о движении, но тем не менее при запуске она будет двигаться, меняя направление. Это движение - заслуга управляющей машины, которая на ходу изменяет параметры движения управляемой. Рассмотрим более детально ее состояния.&lt;br /&gt;
&lt;br /&gt;
В первом состоянии &amp;quot;wait&amp;quot; мы пытаемся изменить скорость движения управляемой машины. Для этого указали объект (sun), состояние в котором хотим поменять параметр (у машины sun это состояние move), имя команды в которой меняем параметр (в данном случае это move), номер команды (если таких команд несколько, то нужно указать порядковый номер начиная с 0; в нашем случае команда одна), имя параметра (мы хотим изменить скорость, поэтому имя параметра v) и значение (указали значение 200). После этого переходим в следующее состояние.&lt;br /&gt;
&lt;br /&gt;
В состоянии &amp;quot;1&amp;quot; управляющей машины сначала мы вывели объект sun из состояния move, изменили параметр целевой координаты x на 512 и затем вернули в состояние move, чтобы применить изменения параметров. Таким образом управляемая машина начала движение в x=512 со скоростью 200. Через 2 секунды мы переводим управляющую машину в состояние &amp;quot;2&amp;quot;, где аналогичным образом изменяется целевая координата на -512.&lt;br /&gt;
&lt;br /&gt;
Такой способ задания параметров может найти применение в случае, когда параметры нужно задавать переменными.&lt;br /&gt;
&lt;br /&gt;
==Запись в viewer.log ==&lt;br /&gt;
&lt;br /&gt;
Во время работы приложения, машина состояний может писать информацию о своей работе в viewer.log. Для этого параметр '''Level''', в разделе '''[GameTrace]''' файла '''app.icf''' должен быть выставлен в значение '''Verbose'''.&lt;br /&gt;
&lt;br /&gt;
При этом нужно иметь ввиду, что приложение работает более медленно, чем при обычном использовании. При настройке процессов, привязанных к времени (анимация и т.д.) логирование нужно отключать, путем установки флага '''Level''' в значение '''Info'''.&lt;br /&gt;
&lt;br /&gt;
Ниже приведен пример записи из viewer.log. Жирным шрифтом выделено полезную информацию. &lt;br /&gt;
&lt;br /&gt;
*Machine::state() state machine '''stat_google_gold (id:30818)''' from '''enough_coins''' to '''enough_coins''' through object '''c_current_gold (id:8807)''' from state '''inc''' - машина с именем и id: '''stat_google_gold (id:30818)''' перешла из состояния: '''enough_coins''' в: '''enough_coins'''; ее состояние изменил объект с именем и id: '''c_current_gold (id:8807)''' из состояния: '''inc'''.&lt;br /&gt;
*GMachine::Set::init() GMachine'''(id:28076)'''::Set::init '''set id:17''' - машина с id '''(id:28076)''' начала выполнять команду '''set id:17'''; сначала проверяется истинно ли условие выполнения команды (if).&lt;br /&gt;
*GMachine::Command::calcExpr() GMachine::Command::calcExpr ((0|(!1))|(!2)) '''checkIf(0)=no''' - имеем некоторое сложное условие, проверяем его составляющие; if(0) не выполняется (имеет значение false).&lt;br /&gt;
*GMachine::Command::calcExpr() GMachine::Command::calcExpr ((0|(!1))|(!2)) '''checkIf(1)=yes''' - условие if(1) выполняется (имеет значение true).&lt;br /&gt;
*GMachine::Command::calcExpr() GMachine::Command::calcExpr ((0|(!1))|(!2)) '''checkIf(2)=yes''' - условие if(2) выполняется (имеет значение true).&lt;br /&gt;
*GMachine::Command::checkIf() GMachine'''(id:28076)'''::Command::'''checkIf id:17 expr:((0|(!1))|(!2)) res:false''' - проверяется все выражение; общий результат false, set(17) не выполняется.&lt;br /&gt;
*GMachine::Set::init() GMachine'''(id:28076)'''::Set::init '''set id:18''' - машина с id '''(id:28076)''' начала выполнять команду '''set id:18''', в данном set условие if отсутствует.&lt;br /&gt;
*GMachine::Command::checkIf() GMachine'''(id:28076)'''::Command::'''checkIf id:18 expr: res:true''' - в команде set(18) условие '''checkIf id:18 expr: res:true''' есть истинно (точнее - не есть ложным, так как оно отсутствует); set(18) будет выполнен.&lt;br /&gt;
*GMachine::Set::init() GMachine'''(id:28076)'''::Set::init '''set id:18 checkIf success''' - проверка условия прошла успешно, выполняем set(18).&lt;br /&gt;
*GMachine::Set::init() GMachine'''(id:28076)'''::Set::init '''set id:18 obj:16039 -&amp;gt; par:param_name val:bundle_coins us:0''' - результат выполнения set(18) - объекту '''obj:16039''' устанавливаем параметр '''par:param_name val:bundle_coins''' равным '''us:0'''.&lt;br /&gt;
*GMachine::Command::getVarValue() Command::'''getVarValue(bundle_item): float result = 0.00''' - вычитываем переменную с помощью команды var; вычитываем параметр '''bundle_item''', результат операции '''float result = 0.00'''.&lt;br /&gt;
*GMachine::Set::init() Set::init: Expression: '''(bundle_coins)=0.000000(float)''' - используем значение переменной в команде set; переменная вчитывается в момент обращения к ней из другой команды (set, move и др.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Main objects]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Machine&amp;diff=7522</id>
		<title>Machine</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Machine&amp;diff=7522"/>
		<updated>2015-12-02T07:51:26Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
[[Machine]] - [[Object|объект]] '''машина состояний''' (state machine) позволяет описывать сложное поведение игровых объектов. Для машин с типовым набором состояний и поведений вводятся отдельные типы объектов. Например, кнопка, по своей сути, является машиной состояний.&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
&lt;br /&gt;
Логика поведения машины разбивается на отдельные узлы (состояния). Машина всегда находится строго в одном состоянии. Переход из одного состояния в другое происходит либо в результате внешнего воздействия на машину, либо в результате окончания некоторых процессов протекающих внутри неё&lt;br /&gt;
&lt;br /&gt;
Любая машина состояний может быть изображена в виде графа с кружочками и стрелками. У машины всегда активно строго одно состояние (ниже это изображено на левом рисунке темным кружком):&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Файл:def_states.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Машина состояний не обладает памятью. Это означает, что для анализа того, что произойдет в данном состоянии, неважно как мы в него попали, и какова была предыстория переходов. Важно, только, что мы находимся в этом состоянии. Такое отсутствие памяти упрощает анализ логики машины, так как каждый раз мы концентрируемся на одном конкретном состоянии, а всю логику работы разбиваем на отдельные кирпичики-состояния.&lt;br /&gt;
&lt;br /&gt;
Выше на правом рисунке изображено некоторое состояние. При входе в него, происходит инициализация состояния. Если на объект оказываются внешние воздействия, то он может покинуть состояние. Наконец, внутри состояния могут работать различные процессы.&lt;br /&gt;
&lt;br /&gt;
Все команды состояния, разбиваются на три группы:&lt;br /&gt;
* '''[[#Инициализация|Инициализация]]''':&lt;br /&gt;
** '''[[#draw|draw]]''' - установка графического ресурса;&lt;br /&gt;
** '''[[#init|init]]''' - инициализация параметров машины (координаты и т.п.);&lt;br /&gt;
** '''[[#set|set]]''' - установка состояния другого объекта;&lt;br /&gt;
** '''[[#play|play]]''' - проиграть звук;&lt;br /&gt;
** '''[[#var|var]]''' - переменная, которой присваивается значение параметра объекта;&lt;br /&gt;
** '''[[#buy|buy]]''' - запуск процедуры in-app покупки;&lt;br /&gt;
** '''[[#download|download]]''' - запуск процедуры закачки контента.&lt;br /&gt;
* '''[[#Процессы|Процессы]]''':&lt;br /&gt;
** '''[[#wait|wait]]''' - задержка по времени;&lt;br /&gt;
** '''[[#move|move]]''' - равномерное движение;&lt;br /&gt;
** '''[[#rot|rot]]''' - вращение вокруг точки пивота;&lt;br /&gt;
** '''[[#alpha|alpha]]''' - изменение прозрачности;&lt;br /&gt;
** '''[[#scale|scale]]''' - изменение размера;&lt;br /&gt;
** '''[[#phys|phys]]''' - ускоренное движение;&lt;br /&gt;
** '''[[#rgb|rgb]]''' - изменить rgb-каналы;&lt;br /&gt;
** '''[[#spline|spline]]''' - движение по сплайну (по кривой).&lt;br /&gt;
* '''[[#Воздействия|Воздействия]]''':&lt;br /&gt;
** '''[[#click|click]]''' - что делать при клике на машине;&lt;br /&gt;
** '''[[#drop|drop]]''' - на машине отпущена клавиша мыши;&lt;br /&gt;
** '''[[#drag|drag]]''' - машину схватили и тащат;&lt;br /&gt;
** '''[[#throw|throw]]''' - машину схватили и кинули;&lt;br /&gt;
** '''[[#apply|apply]]''' - сработает при пересечении машины с линией или объектом;&lt;br /&gt;
** '''[[#touch_in|touch_in]]''' - наведение мыши/пальца на машину, если палец &amp;quot;тащат&amp;quot; по экрану;&lt;br /&gt;
** '''[[#touch_out|touch_out]]''' - выведение мыши из машины, если палец &amp;quot;тащат&amp;quot; по экрану;&lt;br /&gt;
** '''[[#touch_up|touch_up]]''' - отжатие мыши от машины;&lt;br /&gt;
** '''[[#tap|tap]]''' - умный тач;&lt;br /&gt;
** '''[[#mouse_in|mouse_in]]''' - наведение мыши на машину даже если не нажата кнопка мыши;&lt;br /&gt;
** '''[[#mouse_out|mouse_out]]''' - выведение мыши из машины даже если не нажата кнопка мыши.&lt;br /&gt;
&lt;br /&gt;
Кроме этого, есть команда '''[[#if|if]]''', вызываемая другими командами. В ней описываются некоторые логические условия, выполнение которых говорит команде (которая вызвала этот '''if'''), что можно завершать работу. Для разных команд использование этого параметра несколько '''отличается'''!&lt;br /&gt;
&lt;br /&gt;
Начальные понятия и методы работы с машинами состояний находятся в [[Learning|уроках]],&lt;br /&gt;
начиная с [[Checkbox как машина состояний|третьего]].&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
&lt;br /&gt;
Общие для всех объектов свойства описаны в документе [[Object|Object]].&lt;br /&gt;
Дополнительные свойства:&lt;br /&gt;
&lt;br /&gt;
* '''в опции''' - да - машина будет сохранять свое состояние в опции и при следующей инициализации инициал-ся не в первом состоянии, а в состоянии, записанном в опциях.&lt;br /&gt;
* '''Состояние''' - Состояние в котором будет находиться машина при инициализации. Если ничего не указано - первое состояние в списке состояний.&lt;br /&gt;
* '''Хранить нажатость''' - нужно ли сбрасывать нажатость при изменении состояния.&lt;br /&gt;
* '''res''' - графический ресурс машины. Может отсутствовать. Перетягивается из редактора ресурсов(поле должно быть в состоянии редактирования).&lt;br /&gt;
* '''states''' - По двойному клику, или по нажатию на кнопку с тремя точками открывается список состояний.&lt;br /&gt;
* '''отладка''' - Отображать в окне состояний текущий объект.&lt;br /&gt;
* '''курсор''' - Графический ресурс курсора текущего и всех дочерних объектов.&lt;br /&gt;
* '''прокликиваемая''' - 0 - машина не пропускает клик, 1 - машина пропускает клик, 2 - машина обрабатывает клик и пропускает его дальше.&lt;br /&gt;
&lt;br /&gt;
== Инициализация ==&lt;br /&gt;
&lt;br /&gt;
При попадании в состояние, сразу выполняются команды инициализации init, draw, set, buy, var. Если в этих командах нет параметра break, они все выполняются до запуска процессов. Параметр break (со значением 1) прерывает выполнение команд инициализации данного типа. Их можно перезапустить по окончанию команд процессов.&lt;br /&gt;
&lt;br /&gt;
'''''Замечание.''''' По возможности, нужно избегать передачи значений другим объектам, в начальном состоянии машины, так как такие команды будут выполнятся даже тогда, когда машина будет выключена на визуальной сцене.&lt;br /&gt;
&lt;br /&gt;
=== draw ===&lt;br /&gt;
&lt;br /&gt;
Команда определяет графический ресурс (картинку, которую надо рисовать в данном состоянии). Её параметры:&lt;br /&gt;
&lt;br /&gt;
* '''res''' - ресурс картинки (перетаскивается из редактора ресурсов);&lt;br /&gt;
* '''f''' - начальный кадр;&lt;br /&gt;
* '''ft''' - длительность кадра в миллисекундах;&lt;br /&gt;
* '''loop''' - число повторов (зацикливаний анимации); если -1, то бесконечно; отсутствует или 0 - будет проигран один раз;&lt;br /&gt;
* '''rev''' - играть анимацию в обратном порядке; 0 - прямой порядок проигрывания, 1 - обратный порядок проигрывания;&lt;br /&gt;
* '''go''' - перейти в состояние;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]] для условия перехода; можно использовать логические операторы (см. [[#if|if]]);&lt;br /&gt;
* '''break''' - прервать команды.&lt;br /&gt;
&lt;br /&gt;
Пустая команда draw (без параметров) &amp;quot;сбрасывает&amp;quot; текущую картинку и в этом состоянии ничего рисоваться не будет. Если в общих параметрах объекта (в базовой панеле свойств) задан ресурс рисования, и он во всех состояниях одинаков, то его можно в состоянии не задавать.&lt;br /&gt;
&lt;br /&gt;
Если параметра loop нет, кадры анимации проиграются один раз. Чтобы зациклить их, необходимо установить loop=-1 или нужное число раз. Аналогично параметру loop других команд, первый раз draw выполняется в любом случае. Дальнейшие её повторы определяются значением loop. Однако, в отличие от других команд, loop повторяет только '''данную''' команду draw (даже если она не первая).&lt;br /&gt;
Для работы loop '''необходимо''' чтобы в редакторе ресурсов в настройках анимации '''было отключено''' зацикливание(looped).&lt;br /&gt;
&amp;lt;br&amp;gt;Если есть анимация открывающейся и закрывающейся книги (коробки, двери и т.д.) не обязательно подгружать в проект две анимации, можно использовать одну, но запускать ее в обратном порядке, для этого есть параметр '''rev'''.&lt;br /&gt;
&lt;br /&gt;
=== init ===&lt;br /&gt;
&lt;br /&gt;
====Параметры объекта====&lt;br /&gt;
&lt;br /&gt;
* '''x''','''y''' - координата точки пивота относительно сцены или родительского объекта;&lt;br /&gt;
* '''ang''' - угол поворота в градусах; отчитывается вниз от оси x, или вверх, если отрицательный;&lt;br /&gt;
* '''al''' - Прозрачность: от 0 (прозрачен) до 1 (не прозрачен);&lt;br /&gt;
* '''sx''','''sy''' - масштаб машины по осям (если 1, то это исходный размер; 0.5 - в два раза меньше);&lt;br /&gt;
* '''vis''' - видимость - видимость машины (1 - видима, 0 - невидима), если vis = 0, это равноценно отключению объекта в редакторе;&lt;br /&gt;
* '''z координата''' - координата машины по z.&lt;br /&gt;
* '''z приращение''' - приращение координаты машины по z относительно текущего&lt;br /&gt;
* '''прокликиваемая''' - если 1, то картинка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то клик обрабатывается, но передается дальше;&lt;br /&gt;
&lt;br /&gt;
====Параметры движения====&lt;br /&gt;
&lt;br /&gt;
* '''v''' - скорость для команды move&lt;br /&gt;
* '''vr''' - угловая скорость для команды rot&lt;br /&gt;
* '''vx''','''vy''' - начальная скорость для команды phys&lt;br /&gt;
* '''ax''','''ay''' - ускорение для команды phys&lt;br /&gt;
&lt;br /&gt;
====Системные действия====&lt;br /&gt;
&lt;br /&gt;
* '''показать рейтинг''' - значение 1 означает, что при выполнении этого инита будет показано окно iOS рейтинга.&lt;br /&gt;
Если на девайсе была нажата кнопка &amp;quot;отрейтинговать&amp;quot;, то в опции запишется параметр rating значение 1, если нажата кнопка &amp;quot;позже&amp;quot; - rating 2, &amp;quot;никогда&amp;quot; - rating 3.&lt;br /&gt;
* '''закрыть приложение''' - значение 1 означает, что при выполнении этого инита приложение будет закрыто.&lt;br /&gt;
* '''перезагрузить лэйаут''' - значение 1 означает, что при выполнении этого инита будет перезагружен лэйаут.&lt;br /&gt;
* '''вернуться назад''' - начение 1 означает, что при выполнении этого инита произойдет возврат на предыдущий экран.&lt;br /&gt;
* '''реклама AdMob''' - 1 - показать, 0 - спрятать, -1 - не изменять состояние.&lt;br /&gt;
* '''курсор''' - меняет текущий курсор мыши на указанный графический ресурс. Перетягивается из редактора ресурсов, поле должно быть в состоянии редактирования.&lt;br /&gt;
* '''id внешней ссылки в текстовой базе''' - Ссыслка будет взята из текстовой базы в соответствии с текущим маркетом.&lt;br /&gt;
* '''[[#Clone|clone]]''' - Значение 1 означает, что в текущем местоположении машины будет создана ее копия&lt;br /&gt;
&lt;br /&gt;
====Переходы и параметры выполнения====&lt;br /&gt;
&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]] для условия выполнения; можно использовать логические операторы (см. [[#if|if]]);&lt;br /&gt;
* '''break''' - прервать команды.&lt;br /&gt;
&lt;br /&gt;
Так же, как и при инициализации картинки ('''draw'''), вызов команды ('''init''') переопределяет только те параметры, которые в ней указаны. Остальные параметры (заданные в других состояниях или в общих свойствах объекта) остаются без изменений&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
&lt;br /&gt;
Перевод другого объекта в некоторое состояние или изменение его параметров.&lt;br /&gt;
&lt;br /&gt;
* '''obj''' - изменяемый объект (выбирается из списка объектов). В значении объекта можно указать this, это значит что машина сама себе пропишет какой то параметр или состояние.&lt;br /&gt;
* '''scr_param''' - глобальный либо текущий экран, параметры которого меняем.&lt;br /&gt;
* '''scr_state''' - экран, состояние которого меняем.&lt;br /&gt;
* '''parent''' - Объект, который будет установлен в качестве родителя объекту из obj. Объект obj будет оторван от текущего своего родителя и добавлен в детей объекта parent.&amp;lt;br&amp;gt;&lt;br /&gt;
* '''st''' - состояние в которое переводится объект.&amp;lt;br&amp;gt;&lt;br /&gt;
* '''par''' - параметр объекта для установки, используется вместе с val, val_obj, val_txt, val_scr,val_vid,val_res,val_node.&lt;br /&gt;
* '''mSt''' - Состояние машины в котором будем изменять параметр команды.&lt;br /&gt;
* '''mCmd''' - Имя команды, параметр которой меняем.&lt;br /&gt;
* '''mCmdN''' - Порядковый номер в перечне одноименных команд состояния.&lt;br /&gt;
* '''mPar''' - Установить этот параметр команды в значение val.&lt;br /&gt;
* '''val_obj''' - id объекта, будет записано в в par&lt;br /&gt;
* '''val_txt''' - id текста, будет записано в в par(параметр для текстов &amp;quot;txtID&amp;quot;)&lt;br /&gt;
* '''val_vid''' - id video, будет записано в par(параметр для видео &amp;quot;video&amp;quot; - RGB, &amp;quot;videoA&amp;quot; - Alpha)&lt;br /&gt;
* '''val_scr''' - id экрана, будет записано в в par&lt;br /&gt;
* '''val_res''' - Новое значение графического ресурса (перетаскивается из редактора ресурсов). (пока не работает)&lt;br /&gt;
* '''val_node''' - Новое нода графа (выбирается из списка, при заданном объекте)&lt;br /&gt;
* '''val''' - значение параметра объекта для установки&lt;br /&gt;
* '''var''' - имя переменной данной машины, значение которой присваивается в параметр par  объекта obj&lt;br /&gt;
* '''round''' - округлить значение, записываемое в val&amp;lt;br&amp;gt;&lt;br /&gt;
* '''position''' - объект указанный в поле '''obj''' будет отпозиционирован относительно указанного объекта в этом поле ( можно одновременно и задавать состояние '''st''' в которое перевести объект ( поле obj ) );  &lt;br /&gt;
* '''pos_dx''' - смещение по оси X от точки пивоты объекта из поля выше ( если это поле не указывать, смещение будет = 0 );&lt;br /&gt;
* '''pos_dy''' - смещение по оси Y от точки пивоты объекта из поля выше ( если это поле не указывать, смещение будет = 0 )&lt;br /&gt;
* '''scr''' - экран на который мы хотим перейти&lt;br /&gt;
* '''user''' - 1 - сохранять значения для текущего пользователя. Для всех типов объектов кроме options этот флаг игнорируется&amp;lt;br&amp;gt;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]] при выполнении которого происходит отработка команды set. &lt;br /&gt;
* '''break''' - прервать выполнение команд set на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
&lt;br /&gt;
Так как все объекты (не только машины) имеют состояния, то при помощи команды set можно их менять. Стоит обратить внимание на то, что когда в параметрах (любых команд) встречается st, речь идет о состоянии другого объекта, а если go, то данной машины состояний.&lt;br /&gt;
&lt;br /&gt;
=== play ===&lt;br /&gt;
&lt;br /&gt;
Проиграть звук&lt;br /&gt;
&lt;br /&gt;
*'''snd''' - Короткий звук (перетаскивается из редактора ресурсов);&lt;br /&gt;
*'''voice''' - Голос (перетаскивается из редактора ресурсов);&lt;br /&gt;
*'''mus''' - Длинный звук (перетаскивается из редактора ресурсов);&lt;br /&gt;
*'''preload''' - Указанный звук будет загружен в память, но не будет проигрываться прямо сейчас. Для ускорения его старта потом;&lt;br /&gt;
*'''loop''' - Зациклить указанный звук. Использовать вместе с snd или voice;&lt;br /&gt;
*'''mus_loop''' - Зациклить указанную музыку. По умолчанию музыка всегда зацикленна. То есть, фактически этой флаг используется, когда нужно убрать зацикливание.&lt;br /&gt;
*'''repeat''' - Число повторов указанного звука при отключенном loop;&lt;br /&gt;
*'''mus_stop''' - Остановить музыку. Если используется вместе с mus, то остановится указанная. Если нет - то вся текущая.&lt;br /&gt;
*'''stop''' - Остановить указанный звук. Использовать вместе с snd или voice.&lt;br /&gt;
*'''mus_fading''' - Время появления/затухания указанной музыки в ms. Использовать вместе с mus.&lt;br /&gt;
*'''fading''' - Время появления/затухания указанного звука. Использовать вместе с snd или voice. &lt;br /&gt;
*'''volume''' - Установить громкость для всех звуков данной машины - тех что уже играют и тех, что будут запущены впоследствии;&lt;br /&gt;
*'''не выгружать''' - Позволяет продолжать проигрывание звука при смене экранов.&lt;br /&gt;
*'''go''' - Выбор состояния, в которое нужно перейти после проигрывания музыки/звука/голоса.&lt;br /&gt;
*'''if''' - Номер (начиная с нуля) условия перехода [[#if|if]].&lt;br /&gt;
&lt;br /&gt;
Особенности применения:&lt;br /&gt;
&lt;br /&gt;
1) Короткий звук (''snd'') нельзя запустить в первом (инитном) состоянии машины. Для того, чтобы запустить звук сразу при загрузке экрана, нужно в первом состоянии машины записать мгновенный переход во второе состояние мамашины (например, команда ''wait'', поле ''go'', в поле выбрать второе состояние), а во втором состоянии уже запустить звук.&lt;br /&gt;
&lt;br /&gt;
2) Если звук нужно зациклить и проигрывать какое-то количество раз (''loop=1,2,3,..,n'') или бесконечно (''loop=-1''), то нужно проследить чтобы состояние, в котором запускается звук, не вызывалось повторно во время проигрывания звука, иначе возникнет наложение звуков.&lt;br /&gt;
&lt;br /&gt;
3) Если во время проигрывания звука машина меняет свое состояние, звук продолжает играть.&lt;br /&gt;
&lt;br /&gt;
4) Если в одной машине почти одновременно воспроизводится несколько звуков, то они прерывают друг друга.&lt;br /&gt;
&lt;br /&gt;
5) Если каждый звук воспроизводится в отдельной машине, то они звучат параллельно.&lt;br /&gt;
&lt;br /&gt;
6) Если не указан звук и голос, то команда (''stop'') остановит все звуки, запущенные этой машиной.&lt;br /&gt;
&lt;br /&gt;
7) Музыка (''mus'') может быть формата .ogg или .mp3. На экране может воспроизводится только одна .mp3 музыка. Любой запуск .mp3 музыки независимо от того, в какой машине он осуществляется, будет прекращать проигрывание предыдущей .mp3 музыки. В тоже время может воспроизводиться несколько .ogg музыки.&lt;br /&gt;
&lt;br /&gt;
8) Музыка, которая проигрывается на глобальном экране, проигрывается на всех экранах проекта.&lt;br /&gt;
&lt;br /&gt;
=== var ===&lt;br /&gt;
&lt;br /&gt;
Переменная, которой присваивается значение параметра объекта&lt;br /&gt;
&lt;br /&gt;
*'''name''' - имя переменной;&lt;br /&gt;
*'''tp''' - тип переменной;&lt;br /&gt;
*'''obj''' - объект, используемый далее;&lt;br /&gt;
*'''par''' - имя параметра, значение которого присваивается переменной;&lt;br /&gt;
*'''val''' - значение переменной, если отсутствуют obj и par;&lt;br /&gt;
*'''user''' - если стоит &amp;quot;1&amp;quot;, то будет считываться с текущего профиля в опциях&lt;br /&gt;
*'''func''' - в выпадающем списке можно выбрать функцию:&lt;br /&gt;
**'''random''' - использует arg1 и arg2, возвращает случайное целое число в диапазоне arg1 .. arg2.&lt;br /&gt;
**'''conc''' - объединяет 4 строки arg1,arg2,arg3,arg4. Возвращает строку, в которой соединены все строки&lt;br /&gt;
**'''exp''' - экспонента от аргумента arg1.&lt;br /&gt;
**'''ln''' - натуральный логарифм аргумента arg1.&lt;br /&gt;
*'''arg1''' - аргумент функции&lt;br /&gt;
*'''arg2''' - аргумент функции&lt;br /&gt;
*'''arg3''' - аргумент функции&lt;br /&gt;
*'''arg4''' - аргумент функции&lt;br /&gt;
&lt;br /&gt;
Обозначенная переменная существует (может использоваться) только в текущем состоянии. Переменная может определятся в одном состоянии только один раз. Если созданной переменной нужно изменить значение в рамках состояния, это можно сделать через другую переменную или через параметр опций ([[Options]]). Если ее значение нужно использовать в другом состоянии, то оно присваивается параметру опций, а затем заново считывается в новом состоянии. Переменные можно указывать в поле ''val'' с другими математическими действиями и цифрами, при этом каждое действие заключать в скобки. Если в поле ''val'' указать имя переменной ''А'' без скобок - воспримется строка ''А'', если указать в скобках - воспримется значение переменной.&lt;br /&gt;
&lt;br /&gt;
=== buy === &lt;br /&gt;
&lt;br /&gt;
'''(in-app совершить in-app покупку)'''&lt;br /&gt;
&lt;br /&gt;
При переходе в состояние, данная команда открывает системное окно с предложением совершить in-app покупку. В зависимости от действий игрока, покупка может произойти (успех) или не произойти (провал).&lt;br /&gt;
&lt;br /&gt;
* '''id покупки''' - внутренний id покупки для приложения, указывается в объекте [[Store]];&lt;br /&gt;
* '''объект(успех)''' - объект, которому сообщается об удачной покупке;&lt;br /&gt;
* '''состояние(успех)''' - состояние в которое переводится выбранный объект в случае успешной покупки;&lt;br /&gt;
* '''объект(провал)''' - объект, которому сообщается о неудачной покупке;&lt;br /&gt;
* '''состояние(провал)''' - состояние в которое переводится объект в случае неудачной покупки.&lt;br /&gt;
&lt;br /&gt;
=== download ===&lt;br /&gt;
 &lt;br /&gt;
'''(скачать загружаемый контент)'''&lt;br /&gt;
&lt;br /&gt;
При переходе в состояние будет совершена попытку закачать контент.&lt;br /&gt;
* '''url''' - ссылка на zip архив с контентом в интернете.&lt;br /&gt;
* '''объект успех''' - объект, которому в случае успешной закачки будет задаваться указанное состояние.&lt;br /&gt;
* '''состояние (успех)''' - состояние, которое будет устанавливаться выше указанному объекту, в случае успешной закачки.&lt;br /&gt;
* '''объект (провал)''' -объект, которому, в случае неудачи закачки, будет устанавливаться указанное состояние.&lt;br /&gt;
* '''состояние (провал)''' - состояние, которое, в случае неудачи закачки,будет устанавливаться выше указанному объекту.&lt;br /&gt;
* '''счетчик прогресса''' - объект, типа счетчик, который отображает прогресс закачки контента. Крайне желательно, что бы он измерялся в диапазоне от 0 до 100.&lt;br /&gt;
 &lt;br /&gt;
Существует несколько причин при которых вызывается состояние &amp;quot;провал&amp;quot;. Для того что бы сообщить пользователю, по какой именно причине возник провал закачки, следует идентифицировать причины провала. Это возможно сделать с помощью параметра &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
downloadErrCode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ниже приведены значение параметра которые помогут вывести нужное текстовое сообщение :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    GCUSTOM_ERROR_CODE_ERROR_UNKNOWN   = 1,    //!&amp;lt; ошибка не классифицирована&lt;br /&gt;
    GCUSTOM_ERROR_CODE_WIFI_DISABLED   = 2,    //!&amp;lt; отключен WIFI&lt;br /&gt;
    GCUSTOM_ERROR_CODE_SDCARD_UNAVAILABLE = 3,    //!&amp;lt; SD-карта недоступна&lt;br /&gt;
    GCUSTOM_ERROR_CODE_SDCARD_FULL   = 4,    //!&amp;lt; SD-карта переполнена перед закачкой&lt;br /&gt;
    GCUSTOM_ERROR_CODE_UNZIP_FAIL   = 5     //!&amp;lt; ошибка при распаковки пака (скорее всего на SD-карте не&lt;br /&gt;
    хватает места для распаковки &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Процессы ==&lt;br /&gt;
&lt;br /&gt;
Все команды процессов, кроме параметров описанных ниже, могут содержать параметры, совпадающие с именами других команд. В этих параметрах указывается номер (начиная с нуля) команды, которую надо запустить на выполнение, после окончания действия данной команды процесса.&lt;br /&gt;
&lt;br /&gt;
Если в команде процесса есть условие '''[[#if|if]]''', то после окончания работы команды она ждет пока это условие не выполнится. Только после этого переходит к следующей команде этого же типа&lt;br /&gt;
или в другое состояние (если есть параметр go).&lt;br /&gt;
Исключением является команда wait, которая '''не''' ждёт срабатывания '''[[#if|if]]'''. Если он по окончанию wait сработал, то происходит переходит в другое состояние, если есть параметр go.&lt;br /&gt;
Если параметра go нет, то в любом случае запускается следующий wait (т.е. if относится только к переходу go).&lt;br /&gt;
&lt;br /&gt;
=== wait ===&lt;br /&gt;
 &lt;br /&gt;
Команда паузы (временной задержки). Если параметра '''t''' нет, то срабатывает сразу.&lt;br /&gt;
Может также использоваться для логических ветвлений, случайных переходов в другие состояния и т.д.&lt;br /&gt;
&lt;br /&gt;
* '''t''' - длительность выполнения команды в ms;&lt;br /&gt;
* '''dt''' - интервал от t-dt до t+dt, внутри которого команда может быть случайно прервана (при t&amp;gt;t+dt прерывается в любом случае);&lt;br /&gt;
* '''p''' - вероятность срабатывания перехода в состояние, указываемое параметром go;&lt;br /&gt;
* '''go''' - состояние, в которое нужно перейти поле окончания времени и срабатывания условия [[#if|if]], если оно указано;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;&lt;br /&gt;
* '''loop''' - зациклить команды;&lt;br /&gt;
* '''break''' - прервать выполнение команд wait на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
Простейший набор параметров команды wait выглядит следующим образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;wait t=&amp;quot;1000&amp;quot; go=&amp;quot;next&amp;quot;/&amp;gt;    // ждем 1000ms и покидаем состояние&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Для программирования объектов со случайным поведением можно использовать последовательность команд wait с параметром вероятности перехода p (от 0 до 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;wait t=&amp;quot;100&amp;quot; p=&amp;quot;0.5&amp;quot; go=&amp;quot;st1&amp;quot;/&amp;gt; // через t с вероятностью 1/2 перейдет в st1&lt;br /&gt;
&amp;lt;wait go=&amp;quot;st2&amp;quot;/&amp;gt; // иначе,  перейдем в st2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Этот же синтаксис позволяет делать состояния с различным временем жизни:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;wait t=&amp;quot;100&amp;quot; p=&amp;quot;0.5&amp;quot; go=&amp;quot;next&amp;quot;/&amp;gt; // с вероятностью 1/2 живем 100ms&lt;br /&gt;
&amp;lt;wait t=&amp;quot;100&amp;quot; go=&amp;quot;next&amp;quot;/&amp;gt;       // или 200ms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Впрочем, последнюю задачу можно решить при помощи указывания интервала dt, внутри которого произойдет окончание команды. Так, состояние, живущее от 800 до 1200ms, реализуется следующим образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;wait t=&amp;quot;1000&amp;quot; dt=&amp;quot;200&amp;quot; go=&amp;quot;next&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== move ===&lt;br /&gt;
&lt;br /&gt;
Перемещение по сцене:&lt;br /&gt;
* '''tx''', '''ty''' - целевые координаты в пикселях, к которым должен переместиться объект. Можно указывать переменные заданные с помощью [http://ge.absolutist.com/index.php/Machine#var_2 переменной var];&lt;br /&gt;
* '''dx''', '''dy''' - величина смещения от текущей (если есть - tx,ty игнорируются); можно задавать смесь tx, dy или dx,ty;&lt;br /&gt;
* '''v''' - скорость перемещения в пикселях в секунду; для фреймовой анимации, например, ходьбы скорость рассчитывается исходя из длительности одного кадра и числа кадров на фазу движения. Поэтому, в этом случае, удобнее задавать скорость;&lt;br /&gt;
* '''t''' - время перемещения (v игнорируется);&lt;br /&gt;
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду move, пока if не выполнится; &lt;br /&gt;
* '''loop'''  - зациклить команды - Начать выполнение команд движения с первой команды;&lt;br /&gt;
* '''break''' - прервать команды - Прервать выполнение команд move на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
В большинстве команд процессов, связанных с движением, величина изменения может быть задана в абсолютных или относительных величинах. Так, могут быть указаны целевые координаты tx, ty в которые надо переместиться, или смещение dx, dy относительно текущего положения объекта.&lt;br /&gt;
&lt;br /&gt;
Аналогично, скорость перемещения регулируется, либо явным заданием времени выполнения команды t, либо скоростью v. Исходя из требуемого расстояния, по этой скорости вычисляется необходимое время. Скорость задается в пикселях за секунду (а не миллисекунду!)&lt;br /&gt;
&lt;br /&gt;
=== rot ===&lt;br /&gt;
&lt;br /&gt;
Вращение объекта вокруг точки пивота с координатами px,py. Эти координаты задаются относительно верхнего левого угла объекта в общей секции описания параметров объекта или командой init в данном состоянии.&lt;br /&gt;
* '''ta''' - целевой угол поворота объекта;&lt;br /&gt;
* '''da''' - на сколько надо повернуться (ta игнорируется);&lt;br /&gt;
* '''v''' - угловая скорость поворота в градусах в секунду;&lt;br /&gt;
* '''t''' - время поворота (v игнорируется);&lt;br /&gt;
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;  команда ждет срабатывания условия, и не запускает следующую команду rot, пока if не выполнится; &lt;br /&gt;
* '''loop'''  - зациклить команды - Начать выполнение команд движения с первой команды;&lt;br /&gt;
* '''break''' - прервать команды - Прервать выполнение команд rot на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
Угол отсчитывается от оси x. Если он положителен, то поворот происходит по часовой стрелке. Если отрицательный - против часовой.&lt;br /&gt;
&lt;br /&gt;
=== alpha ===&lt;br /&gt;
&lt;br /&gt;
Изменение прозрачности объекта. Меняется от 0 (полностью прозрачен) до 1 (непрозрачен)&lt;br /&gt;
* '''ta''' - целевая прозрачность&lt;br /&gt;
* '''da''' - на сколько надо изменить прозрачность от текущей (ta игнорируется)&lt;br /&gt;
* '''v''' - скорость изменения прозрачности (в долях единицы в ms)&lt;br /&gt;
* '''t''' - время изменения (v игнорируется)&lt;br /&gt;
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;  команда ждет срабатывания условия, и не запускает следующую команду alpha, пока if не выполнится; &lt;br /&gt;
* '''loop'''  - зациклить команды - Начать выполнение команд alpha с первой команды.&lt;br /&gt;
* '''break''' - прервать команды - Прервать выполнение команд alpha на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
Если у объекта прозрачность ''al=0.00'', то он невидим для всякого взаимодействия. Если у объекта прозрачность ''al=0.01'', то он видим для клика, но невидим для дропа(команда drop на объект не видит объект с прозрачностью ''0.01''). Если у объекта ''al=0.02'', то он видим и для клика, и для дропа.&lt;br /&gt;
&lt;br /&gt;
=== scale ===&lt;br /&gt;
&lt;br /&gt;
Изменение размеров объекта&lt;br /&gt;
* '''tx''', '''ty''' - целевой масштаб по каждой оси&lt;br /&gt;
* '''dx''', '''dy''' - на сколько изменить масштаб по каждой оси&lt;br /&gt;
* '''v''' - скорость изменения масштаба (в долях единицы в сек.)&lt;br /&gt;
* '''t''' - длительность выполнения команды (v игнорируется)&lt;br /&gt;
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;  команда ждет срабатывания условия, и не запускает следующую команду scale, пока if не выполнится; &lt;br /&gt;
* '''loop'''  - зациклить команды - Начать выполнение команд scale с первой команды.&lt;br /&gt;
* '''break''' - прервать команды - Прервать выполнение команд scale на этой команде (запустить их сново можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
=== phys ===&lt;br /&gt;
&lt;br /&gt;
Команда phys позволяет имитировать простую физику. В ней задается начальная скорость и действующая на объект сила (ускорение).&lt;br /&gt;
&lt;br /&gt;
* '''vx''', '''vy''' - начальная скорость&lt;br /&gt;
* '''ax''', '''ay''' - величина ускорения по каждой оси&lt;br /&gt;
* '''a''' - полное ускорение&lt;br /&gt;
* '''tvx''', '''tvy''' - целевая скорость&lt;br /&gt;
* '''tx''', '''ty''' - целевая координата&lt;br /&gt;
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;  команда ждет срабатывания условия, и не запускает следующую команду phys, пока if не выполнится; &lt;br /&gt;
* '''loop''' - зациклить команды - Начать выполнение команд phys с первой команды.&lt;br /&gt;
* '''break''' - прервать команды - Прервать выполнение команд phys на этой команде (запустить их снова можно из команд процессов). &lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подпрыгивающий мячик, который при касании с землей деформируется (вертикально сплюскивается). Это можно сделать в 3 состояния (падаем, касаемся и взлетаем). Первоначально мячик находится в координате y=-100, и имеет высоту картинки w=60. Падает он до координаты ty=0. При касании с землёй, мяч сжимается на 20 процентов (sy=0.8). При этом его центр должен опуститься на dy=0.8*w/2 = 24.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;down&amp;quot;&amp;gt;                                    // падаем&lt;br /&gt;
    &amp;lt;phys vy=&amp;quot;0&amp;quot; ay=&amp;quot;20&amp;quot; ty=&amp;quot;0&amp;quot; go=&amp;quot;touch&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;touch&amp;quot;&amp;gt;                                   // касаемся земли&lt;br /&gt;
    &amp;lt;move dy=&amp;quot;24&amp;quot; t=&amp;quot;300&amp;quot;/&amp;gt;                       // опускаем центр при сжатии&lt;br /&gt;
    &amp;lt;scale ty=&amp;quot;0.8&amp;quot; t=&amp;quot;300&amp;quot;/&amp;gt;                     // сжимаемся&lt;br /&gt;
    &amp;lt;move dy=&amp;quot;-24&amp;quot; t=&amp;quot;300&amp;quot;/&amp;gt;                      // поднимаем центр при разжатии&lt;br /&gt;
    &amp;lt;scale ty=&amp;quot;1&amp;quot; t=&amp;quot;300&amp;quot; go=&amp;quot;up&amp;quot;/&amp;gt;               // разжимаемся&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;up&amp;quot;&amp;gt;                                      // взлетаем&lt;br /&gt;
    &amp;lt;phys vy=&amp;quot;0&amp;quot; ty=&amp;quot;-200&amp;quot; go=&amp;quot;down&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Напомним, что если объект имеет начальную скорость взлета, равную v=sqrt(2*ay*h), то он подпрыгнет на высоту h. Однако, в данном случае, вместо задания начальной скорости при взлете, мы задаем целевую координату (ty), до которой мяч должен подпрыгнуть.&lt;br /&gt;
&lt;br /&gt;
=== rgb ===&lt;br /&gt;
&lt;br /&gt;
* '''trgb''' - целевой эффект rgb; подразумевает под собой цвет в виде HEX-кода; по-умолчанию: FFFFFF;&lt;br /&gt;
* '''t''' - длительность выполнения команды в ms;&lt;br /&gt;
* '''go''' - состояние, в которое нужно перейти поле окончания времени и срабатывания условия [[#if|if]], если оно указано;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;&lt;br /&gt;
* '''loop''' - зациклить команды;&lt;br /&gt;
* '''break''' - прервать выполнение команд wait на этой команде (запустить их снова можно из команд процессов).&lt;br /&gt;
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.&lt;br /&gt;
&lt;br /&gt;
=== spline ===&lt;br /&gt;
&lt;br /&gt;
Сплайн позволяет перемещать машину по заранее заданной траектории.&lt;br /&gt;
&lt;br /&gt;
====Параметры====&lt;br /&gt;
&lt;br /&gt;
*'''key''' - точки сплайна по которым движется &lt;br /&gt;
*'''t''' - время движения по траектории&lt;br /&gt;
*'''go''' - по окончанию переход в состояние&lt;br /&gt;
*'''if''' - условие перехода&lt;br /&gt;
*'''loop''' - количество повторений&lt;br /&gt;
*'''break''' - прервать команды на этой&lt;br /&gt;
*'''wait''' - номер запускаемого действия&lt;br /&gt;
*'''init''' - номер запускаемого действия&lt;br /&gt;
*'''alpha''' - номер запускаемого действия&lt;br /&gt;
*'''rot''' - номер запускаемого действия&lt;br /&gt;
*'''move''' - номер запускаемого действия&lt;br /&gt;
*'''set''' - номер запускаемого действия&lt;br /&gt;
*'''phys''' - номер запускаемого действия&lt;br /&gt;
*'''scale''' - номер запускаемого действия&lt;br /&gt;
*'''drow''' - номер запускаемого действия&lt;br /&gt;
&lt;br /&gt;
====Построение сплайна====&lt;br /&gt;
&lt;br /&gt;
# в состоянии машины добавляем правой кнопкой мыши действие &amp;quot;spline&amp;quot;&lt;br /&gt;
# добавляем минимально необходимые параметры: '''key''' и '''t''', указываем время движения в '''t'''&lt;br /&gt;
# выделяем для редактирования поле '''key'''&lt;br /&gt;
# записываем координаты точек через запятую, сначала x потом y, например: -211,-248,-151,-248,-91,-247,59,-246,60,101,60,159,1,190&lt;br /&gt;
Если записали все координаты вручную, то можно сохранить и проверять.&lt;br /&gt;
Или можно в окне списка состояний нажать на кнопку &amp;quot;build spline&amp;quot; (справа вверху).&lt;br /&gt;
[[Файл:Btn spline.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Окно с списком состояний закроется, появится дополнительная панель с настройками сплайна и появится возможность указывать мышкой по экрану точки для сплайна.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Spline panel.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Точки сплайна указываются кликом левой кнопки мыши по экрану.&lt;br /&gt;
&lt;br /&gt;
Возможности редактирования:&lt;br /&gt;
&lt;br /&gt;
'''режимы:'''&lt;br /&gt;
*'''add''' - по нажатию левой кнопкой мыши по экрану - будет добавлена новая точка, которая соединится с предыдущей&lt;br /&gt;
*'''select''' - по нажатию левой кнопкой мыши по точке сплайна появится возможность отредактировать её положение перетащив её или поменяв её координаты в полях x и у&lt;br /&gt;
*'''delete''' - по нажатию левой кнопкой мыши по точке сплайна точка удалится&lt;br /&gt;
&lt;br /&gt;
Чтобы удалить все точки сплайна необходимо нажать на кнопку &amp;quot;'''delete all knots'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Сохранить сплайн можно нажав на кнопку &amp;quot;'''Save spline'''&amp;quot;&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;
=== click ===&lt;br /&gt;
&lt;br /&gt;
Команда вызывается, если на объект кликнули мышкой. Срабатывает на её нажатие.&lt;br /&gt;
* '''go''' - состояние в которое при выполнении команды надо перейти (если if нет, то в любом случае);&lt;br /&gt;
* '''if''' - номер  (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход go.&lt;br /&gt;
&lt;br /&gt;
По клику машина записывает координаты клика в параметры: clickX, clickY.&lt;br /&gt;
&lt;br /&gt;
=== touch_in ===&lt;br /&gt;
&lt;br /&gt;
Наведение мыши/пальца на машину, если палец &amp;quot;тащат&amp;quot; по экрану.&lt;br /&gt;
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.&lt;br /&gt;
&lt;br /&gt;
=== touch_out ===&lt;br /&gt;
Выведение мыши/пальца из машины, если палец &amp;quot;тащат&amp;quot; по экрану.&lt;br /&gt;
* '''go''' - состояние в которое при клике нужно перейти;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при котором срабатывает переход ''go''.&lt;br /&gt;
&lt;br /&gt;
=== touch_up ===&lt;br /&gt;
&lt;br /&gt;
Отжатие мыши от машины&lt;br /&gt;
&lt;br /&gt;
* '''go''' - состояние в которое при отжатии мыши нужно перейти;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при котором срабатывает переход ''go''.&lt;br /&gt;
&lt;br /&gt;
=== mouse_in ===&lt;br /&gt;
&lt;br /&gt;
Срабатывает при наведение мыши/пальца на машину даже если не нажата кнопка мыши, работает на desktop-ных системах (OSX, Windows)&lt;br /&gt;
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.&lt;br /&gt;
&lt;br /&gt;
=== mouse_out ===&lt;br /&gt;
Срабатывает при выведение мыши/пальца из машины даже если не нажата кнопка мыши, работает на desktop-ных системах (OSX, Windows)&lt;br /&gt;
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.&lt;br /&gt;
&lt;br /&gt;
=== drag ===&lt;br /&gt;
&lt;br /&gt;
Данная команда позволяет &amp;quot;таскать&amp;quot; объект по сцене нажав и удерживая клавишу мишки или (палец в случае сенсорного устройства) на нем.Так же есть возможность ограничить разрешенную область таскания, за пределы которой  объект вытащить невозможно. [[Файл:drag.jpg|right]]&lt;br /&gt;
* '''x1''' - разрешено таскать, когда координата объекта правее;&lt;br /&gt;
* '''x2''' - разрешено таскать, когда координата объекта левее;&lt;br /&gt;
* '''y1''' - разрешено таскать, когда координата объекта ниже;&lt;br /&gt;
* '''y2''' - разрешено таскать, когда координата объекта выше;&lt;br /&gt;
* '''if''' - номер команды условия (начиная с нуля) разрешения таскания;&lt;br /&gt;
* '''obj''' - объект у которого надо изменить состояние;&lt;br /&gt;
* '''st'''  - новое состояние объекта obj;&lt;br /&gt;
* '''за пивот''' - &amp;quot;да&amp;quot; - таскать объект за пивот, &amp;quot;нет&amp;quot; - за ту точку, за которую схватили&lt;br /&gt;
* '''приклеивать''' - приклеивать при клике к мышке.&lt;br /&gt;
&lt;br /&gt;
=== dragRot ===&lt;br /&gt;
&lt;br /&gt;
Данная команда позволяет вращать объект вокруг точки пивота.  Нажав и удерживая клавишу мишки или палец (в случае сенсорного устройства) на нем, мы можем вращать его по часовой либо против часовой стрелки. При многократном вращении вокруг своей оси значение его угла не накапливается, а обнуляется выходя за границы [360 ; -360] градусов. [[Файл:dragRot.jpg|right]]&lt;br /&gt;
* '''if''' - номер команды условия (начиная с нуля) разрешения таскания;&lt;br /&gt;
* '''obj''' - объект у которого надо изменить состояние;&lt;br /&gt;
* '''st'''  - новое состояние объекта obj;&lt;br /&gt;
* '''maxVel'''  - Максимальная скорость вращения градус/сек;&lt;br /&gt;
* '''objStart''' - объект при начале вращения;&lt;br /&gt;
* '''stStart''' - его новое состояние;&lt;br /&gt;
* '''objEnd''' - объект при завершении вращения;&lt;br /&gt;
* '''stEnd''' - его новое состояние;&lt;br /&gt;
&lt;br /&gt;
=== drop ===&lt;br /&gt;
&lt;br /&gt;
Если нажатая кнопка мышки отпускается, вызывается эта команда. Обычно она используется в связке с командой drag&lt;br /&gt;
* '''obj''' - объект, на который надо уронить таскаемый объект;&lt;br /&gt;
* '''go''' - состояние в которое переходим при отпускании мышки;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) условия [[#if|if]] разрешения бросания.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим совместное применение команд drag и drop на следующей задаче. Пусть есть ключ и ящик. Ключ можно взять мышкой и перетащить, бросив на ящик. Ящик при этом должен постепенно стать прозрачным, а ключ уменьшиться до нуля. Машина состояний для ключа выглядит следующим образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;drag&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;drag x1=&amp;quot;-350&amp;quot; x2=&amp;quot;350&amp;quot; y1=&amp;quot;-250&amp;quot; y2=&amp;quot;250&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;drop obj=&amp;quot;box&amp;quot; go=&amp;quot;open&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;open&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;set obj=&amp;quot;box&amp;quot; st=&amp;quot;open&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;scale tx=&amp;quot;0.01&amp;quot; ty=&amp;quot;0.01&amp;quot; t=&amp;quot;500&amp;quot; go=&amp;quot;hide&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;init x=&amp;quot;268&amp;quot; y=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;scale tx=&amp;quot;1&amp;quot; ty=&amp;quot;1&amp;quot; t=&amp;quot;500&amp;quot; go=&amp;quot;drag&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ящик:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;close&amp;quot;&amp;gt;                        // начальное состояние ящика&lt;br /&gt;
    &amp;lt;init al=&amp;quot;1&amp;quot;/&amp;gt;                     // если его кто-то сюда переведет - он появится.&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;open&amp;quot;&amp;gt;              &lt;br /&gt;
    &amp;lt;alpha ta=&amp;quot;0&amp;quot; t=&amp;quot;500&amp;quot;/&amp;gt;            // исчезает по прозрачности за 500 ms&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Использование свойства &amp;quot;Условие перехода&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
Можно прописать условие, при котором выполняется переход при дропе.&lt;br /&gt;
[[Файл:Drop_if.png|300px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
С помощью этого условия мы можем научить наш объект выполнять разные задачи в зависимости от того, как именно его дропнули.&lt;br /&gt;
Пусть есть объект который можно таскать. Когда объект не таскается должен быть включен флаер, привязанный к этому объекту. При клике на объект, он должен поворачиваться на 90 градусов. При дропе на соответствующую маску объект стает на свое место(Если выполнены условия, к примеру: установлен предыдущий объект и наш объект имеет правильный угол). Если дроп в любое другое место, то должен включится флаер.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы научить машину различать клик по ней и ее таскание сделаем следующее. Пропишем ей 2 состояния: click и drag, а также выставим ей параметр &amp;quot;хранить нажатость&amp;quot; = 1. В click будем вычислять координаты объекта и записывать объекту параметр допустимого смещения при котором таскание будет восприниматься как клик. (В данном примере эти параметры: cx, cy, vx, vy. А допустимое смещение составляет 10 пикселей.)&lt;br /&gt;
&lt;br /&gt;
В состоянии drag будем проверять попадает ли координата объекта при дропе в границы допустимого смещения. Для того чтобы сравнить параметр объекта с переменной, вычтем из нашего объекта, то что мы записали в click. В зависимости от условий и места дропа переходим в соответствующее состояние.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Click.png|330px]] [[Файл:Drag st.png|630px]]&lt;br /&gt;
&lt;br /&gt;
=== throw ===&lt;br /&gt;
 &lt;br /&gt;
Если на объект наступили мышкой, не отпуская кнопки, мышку оттащили и затем отпустили, вызывается команда throw со следующими параметрами:&lt;br /&gt;
* '''go''' - состояние, в которое, при клике, надо перейти;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды [[#if|if]] разрешения бросания;&lt;br /&gt;
* '''force''' - получаемая скорость равна разнице пикселей от начала бросания (мышь нажата) до его конца (мышь отжата), умноженная на этот параметр. По умолчанию он равен 1.&lt;br /&gt;
&lt;br /&gt;
Сработав, эта команда задает начальные значения скорости для команды phys, поэтому должна использоваться совместно с ней (см. ниже пример).&lt;br /&gt;
&lt;br /&gt;
=== tap ===&lt;br /&gt;
&lt;br /&gt;
* '''go''' - Состояние в которое нужно перейти после окончания времени.&lt;br /&gt;
* '''if''' - номер (начиная с нуля) условия [[#if|if]] разрешения бросания.&lt;br /&gt;
&lt;br /&gt;
=== apply ===&lt;br /&gt;
&lt;br /&gt;
Вызывается, если данная машина пересеклась с другой. Обычно используется в совокупности с throw, move, phys, drag.&lt;br /&gt;
* '''obj''' - сработает , если пересеклись с этим объектом;&lt;br /&gt;
* '''x1''' - сработает, если центр объекта левее этого x-са;&lt;br /&gt;
* '''x2''' - сработает, если центр объекта правее этого x-са;&lt;br /&gt;
* '''y1''' - сработает, если центр объекта выше этого y-ка;&lt;br /&gt;
* '''y2''' - сработает, если центр объекта ниже этого y-ка;&lt;br /&gt;
* '''rm''' - радиус этой машины (если rm=0, то она считается прямоугольной)&lt;br /&gt;
* '''ro''' - радиус объекта obj (если ro=0, то он считается прямоугольным)&lt;br /&gt;
* '''st''' - состояние, в которое надо перевести объект obj&lt;br /&gt;
* '''go''' - состояние, в которое надо перейти при срабатывании;&lt;br /&gt;
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]] разрешения применения команды apply.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Апплай.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Блок схема работы '''apply'''&lt;br /&gt;
&lt;br /&gt;
[[Файл:Блок схема apply.png|500px]]&lt;br /&gt;
&lt;br /&gt;
* Сначала у нас проверяется  координаты '''x1''', '''x2''', '''y1''', '''y2'''.&lt;br /&gt;
* Далее проверяет если '''obj'''&lt;br /&gt;
* Если '''obj''' нет, то идёт проверку, и выдаёт результат&lt;br /&gt;
(если при этом если '''x1''', '''x2''', '''y1''', '''y2''' нет, то они считаются по ширине и высоте всего экрана.)&lt;br /&gt;
* Если есть '''obj''', то проверяет есть ли радиусы '''rm''', '''ro'''.&lt;br /&gt;
* Если он есть, то значит у нас '''apply''' по кругам&lt;br /&gt;
* Если нет, то проверяем наличие '''x1''', '''x2''', '''y1''', '''y2'''.&lt;br /&gt;
* Если они есть, то проверка и результат.&lt;br /&gt;
* Если их нет, то проверка идёт по шейпам объектов, и выдаётся результат/&lt;br /&gt;
Если не будет стоять ни каких галочек, то проверка будет идти по шейпам объектов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пусть, например, есть снаряд, который при помощи мышки надо кинуть в &amp;quot;тыкву&amp;quot;. Если мы промахнулись, снаряд должен вернуться обратно, а с тыквой ничего не произойти. Если мы в тыкву попадаем, снаряд также возвращается, а тыква &amp;quot;взрывается&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;trow&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;init x=&amp;quot;-350&amp;quot; y=&amp;quot;150&amp;quot;/&amp;gt;                      // начальное положение&lt;br /&gt;
    &amp;lt;throw go=&amp;quot;fly&amp;quot;/&amp;gt;                             // бросаем&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;st id=&amp;quot;fly&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;phys ay=&amp;quot;100&amp;quot;/&amp;gt;                              // летим&lt;br /&gt;
    &amp;lt;apply y2=&amp;quot;300&amp;quot; go=&amp;quot;throw&amp;quot;/&amp;gt;                  // с землей&lt;br /&gt;
    &amp;lt;apply obj=&amp;quot;тыква&amp;quot; rm=&amp;quot;8&amp;quot; ro=&amp;quot;10&amp;quot; st=&amp;quot;bang&amp;quot;/&amp;gt; // с тыквой&lt;br /&gt;
&amp;lt;/st&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условия ==&lt;br /&gt;
&lt;br /&gt;
=== if ===&lt;br /&gt;
&lt;br /&gt;
В состоянии может быть произвольное число команд if. Их номера (начиная с нуля) указываются&lt;br /&gt;
в параметре if других команд. Эти номера можно соединять при помощи логических связок:&lt;br /&gt;
* '''&amp;amp;''' - логическое '''и''' (вместо значка '''&amp;amp;''' можно использовать запятую ''',''');&lt;br /&gt;
* '''|''' - логическое '''или''';&lt;br /&gt;
* '''!''' - логическое '''не'''.&lt;br /&gt;
Пример записи логического выражения в поле if некоторой команды: '''(1&amp;amp;2)|(3&amp;amp;(!4))''',&lt;br /&gt;
что означает: выполняется if под номером 1 и под номером 2, или под номером 3 и не под номером 4.&lt;br /&gt;
&lt;br /&gt;
Логические связки используются также как математической логике или любом языке программирования. &lt;br /&gt;
Так:&lt;br /&gt;
* A '''&amp;amp;''' B - истинно, если истинны оба условия A и B;&lt;br /&gt;
* A '''|''' B - истинно, если истинно хотя бы одно условие (или оба);&lt;br /&gt;
* '''!''' А - истинно, если условие A ложно.&lt;br /&gt;
Скобки в логическом выражении определяют приоритет (порядок) выполнения логических операций.&lt;br /&gt;
Отметим несколько тождеств, справедливых при формировании логических высказываний:&lt;br /&gt;
* !(A &amp;amp; B) = (!A) | (!B)&lt;br /&gt;
* !(A | B) = (!A) &amp;amp; (!B)&lt;br /&gt;
* !(!A) = A&lt;br /&gt;
&lt;br /&gt;
Если при формировании условия (ниже) есть несколько проверок, то они соединены логическим '''и'''.&lt;br /&gt;
Т.е., если хотя бы одна из них не выполняется, то считается, что условие не выполнилось.&lt;br /&gt;
&lt;br /&gt;
Параметры команды:&lt;br /&gt;
* '''obj''' - находится ли объект obj в состоянии st или имеет ли его параметр par значение val. В этом поле можно указать this, это значит что if будет проводить проверку текущего объекта. Добавлено это вместе с параметром clone. Клоны рождаются и умирают в рамках одного экрана. Для различия клонов между собой машина имеет уникальный параметр &amp;quot;clone_num&amp;quot; у оригинала = -1, у клонов от 0 до N, собственно с помощью this машина может сама себя проверить клон ли она и если да то какой у нее номер;&lt;br /&gt;
* '''st''' - имя состояния в котором может находиться объект obj;&lt;br /&gt;
* '''par''' - имя параметра объекта obj, значение которого сравнивается с полем val;&lt;br /&gt;
* '''val''' - значение параметра par, которое проверяется у объекта obj;&lt;br /&gt;
* '''val_txt''' - Значение текстового параметра объекта для проверки условия;&lt;br /&gt;
* '''val_res''' - Значение ресурсного параметра объекта для проверки условия;&lt;br /&gt;
* '''op''' - операция сравнения par op val. Если операции нет, то предполагается проверка на равенство par=val. Иначе используются операторы:&lt;br /&gt;
** '''&amp;lt;''' - меньше (par &amp;lt; val);&lt;br /&gt;
** '''&amp;gt;''' - больше (par &amp;gt; val);&lt;br /&gt;
** '''!=''' - не равно (par != val);&lt;br /&gt;
** '''&amp;lt;&amp;gt;''' - не равно (par &amp;lt;&amp;gt; val);&lt;br /&gt;
** '''&amp;gt;=''' - больше или равно (par &amp;gt;= val);&lt;br /&gt;
** '''&amp;lt;=''' - меньше или равно (par &amp;lt;= val);&lt;br /&gt;
* '''curScr''' - если текущий экран совпадает с этим, то условие выполнилось;&lt;br /&gt;
* '''prScr''' - если предыдущий экран совпадает с этим, то условие выполнилось;&lt;br /&gt;
* '''wasScr''' - если был (когда либо) этот экран, то условие выполнилось.&lt;br /&gt;
* '''buy''' - был ли куплен данный inn-app (проверяется флаг поля в объекте [[Options]]);&lt;br /&gt;
* '''url''' - валиден (правилен и может быть запущен) ли данный интернет-адрес;&lt;br /&gt;
* '''is_mus''' - играет ли сейчас музыка (значение 1);&lt;br /&gt;
* '''guest''' - объект который установил состояние (используется вместо параметра obj). Если указанный объект не менял состояние этой машины, то условие не срабатывает.&lt;br /&gt;
&lt;br /&gt;
Если использовать obj, par, val, то будет происходить проверка на равенство значения параметра объекта и значения записанного в поле val.&lt;br /&gt;
Если же использовать obj, par, op, val, то будет происходить проверка в соответствии с операцией сравнения значения параметра объекта и значения записанного в поле val.&lt;br /&gt;
&lt;br /&gt;
Для проверки текущего значения прозрачности у объекта можно воспользоваться параметром ''cur_al''&lt;br /&gt;
&lt;br /&gt;
У машины (другой или самой себя) можно проверить текущее состояние '''st''' и предыдущее состояние '''prev_st''', эти параметры живут на время сессии.&lt;br /&gt;
&lt;br /&gt;
== Математика ==&lt;br /&gt;
&lt;br /&gt;
=== Основные математические операции ===&lt;br /&gt;
Математика в appsalute creator представлена 6-ю основными операциями: (плюс),  (минус),  (умножить),  (поделить), (целочисленное деление), (остаток от деления) &amp;lt;br&amp;gt;&lt;br /&gt;
Организована благодаря совместному использованию '''[[#var|var]]''' и '''[[#set|set]]'''. &lt;br /&gt;
[[Файл:Example_mod.png|300px|right|Пример использования операции остатка от деления]]&lt;br /&gt;
''(плюс)'' '''+'''&amp;lt;br&amp;gt;&lt;br /&gt;
''(минус)'' '''-'''&amp;lt;br&amp;gt;&lt;br /&gt;
''(умножить)'' '''*'''&amp;lt;br&amp;gt;&lt;br /&gt;
''(поделить)'' '''/'''&amp;lt;br&amp;gt;&lt;br /&gt;
''(целочисленное деление)'' '''\'''&amp;lt;br&amp;gt;&lt;br /&gt;
''(остаток от деления)'' '''%'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Примеры использования последних двух операций:&amp;lt;br&amp;gt;&lt;br /&gt;
5\2=2&amp;lt;br&amp;gt;&lt;br /&gt;
5%2=1&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== var ===&lt;br /&gt;
Благодаря использованию '''[[#var|var]]''' существует возможность cчитать любой числовой параметр любого объекта. Например: x - координату какой-то машины, текущее значение любого объекта counter или timer и конечно же считывание значения любого параметра из опций! Каким образом это устроено? Рассмотрим подробнее '''[[#var|var]]''': &amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:VAR.png|right]]&lt;br /&gt;
*'''name''' - здесь выбираем имя для нашей будущей переменной, которой будем оперировать далее&lt;br /&gt;
*'''obj''' - выбирается объект, параметры которого мы хотим считать&lt;br /&gt;
*'''par''' - параметр, который нужно вычитать из объекта, указанного выше&lt;br /&gt;
*'''val''' - указывается числовое значение, которое будет установлено по умолчанию в случае отсутствия obj и par&lt;br /&gt;
*'''user''' - если стоит &amp;quot;1&amp;quot;, то будет считываться с текущего профиля в опциях&lt;br /&gt;
На изображении справа можно наблюдать каким образом организован '''[[#var|var]]'''. В данном случае объявлена переменная x_cor, которая считывает x-координату объекта actor_1, при этом считывание переменной происходит из текущего профиля, так, как в поле user установлено значение равное &amp;quot;1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
[[Файл:SET.png|right]]&lt;br /&gt;
Использование '''[[#var|var]]''' без '''[[#set|set]]''' не имеет смысла. Так, как переменная создается, но не используется дальше. Рассмотрим следующий пример, где вычитаем x - координату из одного объекта и сохраним ее в опции, предварительно увеличив ее на 50 единиц (в данном случае 50 пикселей).&lt;br /&gt;
На рисунке справа можно наблюдать, каким образом это сделано. В состоянии '''init''' объявляется переменная '''x_cor''', которая считывает координату '''x''' из объекта '''actor_1''', таким образом в переменную '''x_cor''' запишется положение по '''x''' объекта '''actor_1'''. Поле '''user''' в данном случае в '''1''' не обязательно устанавливать, так как работа ведется с машинами, а не с опциями. Если бы на месте '''actor_1''' оказался объект '''options''', то это было бы просто необходимо, иначе программа считает значение не из профиля. Далее в '''[[#set|set]]''' выбран объект '''options''',  в параметр '''x_position''' которого будет сохранятся значение переменной '''x_cor''' увеличенной на 50. В поле '''round''' идет округление вычисляемого значения, если оно установлено в 1. Поле '''user ''' установлено в 1, это значит, что параметр '''x_position''' будет сохранен в профиль. После это выполняется сохранение опций путем задания объекту '''options''' состояния '''save'''.&amp;lt;br&amp;gt;&lt;br /&gt;
! ! !ВАЖНО: чтобы выполнить какие-то действия с '''[[#var|var]]''' его обязательно нужно указывать в поле '''val''' в '''set''', при этом, если он используется, то все выражение должно стоять в скобках. Если в поле '''val''' не используется переменная, то скобки необязательны.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Существует также возможность использовать '''[[#var|var]]''' совместно с '''[[#if|if]]''', а также '''[[#var|var]]''' с '''[[#move|move]]'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 Так же добавилась возможность записывать значение переменной в состояние &amp;quot;st&amp;quot;, что значительно уменьшает&lt;br /&gt;
 необходимость в записи 1000 if-ов. При этом, тип переменной в '''[[#var|var]]''' должен быть &amp;quot;строка&amp;quot;.&lt;br /&gt;
 И добавилась возможность записи переменной boolean: ((a)==(b)). true = 1, false = 0. Довольно полезная вещь,&lt;br /&gt;
 если не хотите забивать &amp;quot;память&amp;quot; ненужной математикой.&lt;br /&gt;
&lt;br /&gt;
=== var и if ===&lt;br /&gt;
[[Файл:IF.png|right]]&lt;br /&gt;
При подробном рассмотрении '''[[#if|if]]''' можно заметить, что в нем есть поле '''val''', соответственно в этом поле можно указать переменную. Таким образом в поле '''val''' необязательно указывать константу, а можно указать какую-то переменную, которая может постоянно изменяться. Например, существует два объекта, один находится состоянии покоя, а другой находится в движении. При этом первый объект (тот, который в состоянии покоя) постоянно опрашивает положение второго объекта, и в случае, если у объекта, который движется, '''х''' координата  равна '''х''' координате первого объекта, то первый объект входит в состояние, где он начинает свое движение. На рисунке показан объект, который находится в состоянии покоя, рассмотрим его состояния:&amp;lt;br&amp;gt;&lt;br /&gt;
В данном объекте существует два состояния: '''init''' и '''move'''. В '''init''' объект опрашивает другой объект и в случае, когда условие срабатывает, то переходит в состояние '''move''', где начинает свое движение.&lt;br /&gt;
В '''init''' создаем переменную, в которую записываем положение по '''x''' объекта '''actor_2''', в '''if''' проверяется условие на соответствие координат объектов '''actor_1''' и '''actor_2''', в данном случае координата объекта '''actor_2''' представлена в виде переменной '''x_cor'''. Если условие выполняется, то происходит переход в состояние '''move''', если нет, то заново проходим состояние '''init''' и повторяем вышеописанную последовательность действий.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== var и move ===&lt;br /&gt;
Также с помощью '''[[#var|var]]''' есть возможность указать целевые координаты в '''[[#move|move]]'''. То есть, не обязательно указывать целевые координаты в виде констант, их можно указать теперь с помощью переменных. При использовании '''[[#var|var]]''' и '''[[#move|move]]''' можно организовать обмен двух объектов местами с анимацией движения. Для этого необходимо определять какой объект нажат первым, а какой вторым, сохранять их координаты через объект '''options''' и только потом менять их местами. На рисунке можно увидеть, как это организовано.&lt;br /&gt;
[[Файл:var_move.png|1000px|thumb|center|]]&lt;br /&gt;
Рассмотрим подробнее состояние данной машины:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* '''init'''&amp;lt;br&amp;gt;&lt;br /&gt;
В этом состоянии ожидаем клик на объект и обнуляем параметр, который отвечает за то, какой по счету объект сейчас нажат. Так, как при обмене объектов, если мы делаем это по клику, важно знать, по какому кликнули  первым, а по какому вторым.&lt;br /&gt;
* '''check'''&amp;lt;br&amp;gt;&lt;br /&gt;
Проверяется параметр '''number''', если он равен '''0''', то это значит, что еще ничего не кликали и мы переходим в состояние, где в опции записываются координаты этого объекта, который считается нажатым первым. Если не равен '''0''', то считается, что этот объект нажат вторым и переходит в состояние, где в опции записываются координаты этого объекта, который считается нажатым вторым по счету.&lt;br /&gt;
* '''first_object'''&amp;lt;br&amp;gt;&lt;br /&gt;
В этом состоянии записываются координаты объекта в опции. Чтобы записать координаты в опции используются '''[[#var|var]]''' и '''[[#set|set]]''' упоминаемые выше. В опции координаты первого нажатого объекта сохраняются под параметрами '''x_first''' и '''y_first'''. В конце параметру '''number''' присваиваем значение '''1''', чтобы указать, что следующий нажатый объект будет вторым по счету. &lt;br /&gt;
* '''second_object'''&amp;lt;br&amp;gt;&lt;br /&gt;
В этом состоянии объект будет в том случае, если он будет нажатым вторым по счету, то есть после состояния '''check''' объект попадет в это состояние, где он запишет свои текущие координаты под параметрами '''x_second''' и '''y_second'''. Запись координат происходит таким же самым образом, что и в состоянии '''first_object'''. После этого он автоматически переходит в следующее состояние.&lt;br /&gt;
* '''move_first'''&amp;lt;br&amp;gt;&lt;br /&gt;
В этом состоянии объект будет в том случае, если он был нажат первым, поэтому он будет двигаться на место второго нажатого объекта, который сохранил свои координаты в параметры'''x_second''' и '''y_second'''. Движение происходит следующим образом: сперва в переменную вычитываем координаты второго объекта, а потом в '''move''' вместо целевых координат записываем переменные, которые обязательно должны быть взяты в скобки.&lt;br /&gt;
* '''move_second'''&amp;lt;br&amp;gt;&lt;br /&gt;
В этом состоянии объект будет в том случае, если он был нажат вторым, поэтому он будет двигаться на место первого нажатого объекта, который сохранил свои координаты в параметры '''x_first''' и '''y_first'''. Движение происходит следующим образом: сперва в переменную вычитываем координаты первого объекта, а потом в '''move''' вместо целевых координат записываем переменные, которые обязательно должны быть взяты в скобки.&lt;br /&gt;
&lt;br /&gt;
В результате проделанных манипуляций с машинами по кликам на две машины, они обменяются местами с анимацией движения. Это может быть очень полезным во многих мини играх!!!&lt;br /&gt;
&lt;br /&gt;
=== Важно знать ===&lt;br /&gt;
* Переменная действует в рамках одного состояния, если нужно, чтобы она была глобальной, нужно сохранить ее в опции и потом в нужный момент считывать ее из опций.&lt;br /&gt;
* Если складываем два числа, то в поле '''val''' они должны быть записаны в скобках: (5+3).&lt;br /&gt;
* Если возникает необходимость написать какое-то более сложное арифметическое вычисление, то следует помнить, что на одно действие приходятся одни скобки. Например: (((5+3)\2)*2).&lt;br /&gt;
* Количество открывающих и закрывающих скобок должно быть одинаковым.&lt;br /&gt;
* В скобках можно писать переменную, если она была объявлена выше: (5+a).&lt;br /&gt;
* Переменная может состоять из цифр и букв и знака нижнего подчеркивания.&lt;br /&gt;
* Иногда бывает необходимым использование '''round''' в '''set''', так например, если какой-то параметр получен с помощью арифметических вычислений и потом используется его в каком-то условии, и условие проверяет параметр, как целочисленное значение, то могут возникнуть ошибки. Так, как число будет записано в следующем виде 123.0000 и программа будет считать, что оно не целочисленное, а дробное. И чтобы избавится от лишних нулей  в дробной части следует округлять число.&lt;br /&gt;
* Действия, которые требуют времени, такие как move, rot, wait и другие перестают работать для уменьшения вычислительной нагрузки на устройство.&lt;br /&gt;
* Действия, которые не требуют времени, такие как set, init и другие продолжают функционировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Если с помощью переменной менять объекту любой параметр, например, координату X, то она&lt;br /&gt;
запомнится (запишется как значение по умолчанию).&lt;br /&gt;
Тогда при повторном попадании на экран считается не тот X, который указан в свойствах,&lt;br /&gt;
а тот, который установлен через переменную.&lt;br /&gt;
Если нужно при ините экрана возвращать начальные значения параметров,&lt;br /&gt;
то можно сделать это двумя способами:&lt;br /&gt;
- не использовать переменную;&lt;br /&gt;
- создать отдельное состояние, которое будет &amp;quot;вручную&amp;quot; устанавливать начальные значения&lt;br /&gt;
параметрам при ините экрана.&lt;br /&gt;
Если координата (или другой параметр) меняется другим способом, то будут автоматически&lt;br /&gt;
при ините экрана подтягиваться значения из свойств объекта.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Примеры применений ===&lt;br /&gt;
С помощью математики можно организовать следующее:&lt;br /&gt;
* динамические опции (изменение звука и музыки с помощью ползунка);&lt;br /&gt;
* анимацию каунтера в играх (по окончанию уровня можно наблюдать, как изменяются очки);&lt;br /&gt;
* подсчет очков (гибкая система подсчета очков);&lt;br /&gt;
* обмен объектов местами (использование var и move)&lt;br /&gt;
* увеличение z-координаты любого объекта (когда необходимо, чтобы нажатый или таскаемый объект был выше других по z);&lt;br /&gt;
* простейший калькулятор;&lt;br /&gt;
* и много других.&lt;br /&gt;
&lt;br /&gt;
== Копирование машины состояния с сохранением ссылки на себя ==&lt;br /&gt;
Довольно часто бывает, что машина состояний ссылается только на глобальные объекты и на саму себя. При этом, если мы просто скопируем объект, он будет ссылаться на свою предыдущую копию. Этого можно избежать, сделав 3 шага:&lt;br /&gt;
1. Переместить объект в отдельную сцену&lt;br /&gt;
2. Скопировать данную сцену(имеется в виду обычное копирование, без ссылки)&lt;br /&gt;
3. Перенести объект и его копию обратно, в нужную сцену&lt;br /&gt;
4. Созданные сцены можно удалить :)&lt;br /&gt;
&lt;br /&gt;
== Guest ==&lt;br /&gt;
&lt;br /&gt;
'''Guest (гость)''' - объект, который перевел машину в текущее состояние. Пример: кнопка ''btn1'' по клику переводит машину ''mch1'' в состояние ''st1'', в этом состоянии у машины ''mch1'' гостем является кнопка ''btn1''. Гостем может быть объект любого типа, если он может менять состояние другому объекту (например: хидден-объект по нахождению может менять состояние объекту, кнопка, машина, пэчворк и т.д.)&lt;br /&gt;
&lt;br /&gt;
В машине состояний можно считывать (проверять) и передавать параметры и состояния гостя. Любое поле ''obj'' в выпадающем списке содержит строку ''guest'', что позволяет работать с гостем, как с любым другим объектом.&lt;br /&gt;
&lt;br /&gt;
=== Пример использования ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Guest1.jpg|left]]&lt;br /&gt;
Пускай экран содержит 3 кнопки (''btn1'', ''btn2'' и ''btn3'') и одну машину ''mch1''. Нужно сделать так, чтобы по клику на любую из кнопок машина перемещалась в ее координаты и переводила кнопку в состояние ''disable''. Так же по клику на кнопку ''btn2'', машина должна перейти в состояние ''bonus''.&amp;lt;br&amp;gt;&lt;br /&gt;
Всем трем кнопкам по клику пропишем передавать объекту ''mch1'' состояние ''check''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Создадим в машине три состояния: ''init'' - состояние в котором машина будет находиться по умолчанию, ''check'' - состояние, которое будет вызываться тремя кнопками, в этом состоянии у машины ''mch1'' одна из трех кнопок будет гостем, ''bonus'' - последнее состояние.&amp;lt;br&amp;gt;&lt;br /&gt;
Две команды ''var'' считывают у гостя координаты, т.к. мы не знаем, какая именно кнопка перевела машину ''mch1'' в состояние ''check'', то обращаемся к гостю, а не к кнопкам. За ними следует две команды ''set'', которые передают координаты гостя машине. Еще один ''set'' переводит гостя в состояние ''disable''. И через ''wait'' осуществляется переход в состояние ''bonus'', если гость ''btn2''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
При смене состояния гость сохраняется, т.е. в состоянии bonus гостем останется btn2.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Если машина изначально сама себе меняет состояния, то у нее нет гостя.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:Guest2.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Массив (Array) ==&lt;br /&gt;
&lt;br /&gt;
В данном объекте реализован массив, имеющий максимальную длину в 20 элементов.&lt;br /&gt;
&lt;br /&gt;
=== Свойства объекта массив: ===&lt;br /&gt;
&lt;br /&gt;
len - длинна массива. Длинна массива может как считываться, так и записываться. Влияет на количество сохраняемых объектов в Options.&lt;br /&gt;
&lt;br /&gt;
index1 - индекс элемента. (данный массив можно расширить до многомерного и использовать несколько индексов)&lt;br /&gt;
&lt;br /&gt;
val - значение элемента массива, с индексом index1&lt;br /&gt;
&lt;br /&gt;
a1..a20 - внутренние элементы массива(обращаться можно через свойство par объекта). Предполагается, что пользователь редактора к ним обращаться напрямую не будет, однако иногда для удобства полезны.&lt;br /&gt;
&lt;br /&gt;
=== Состояния объекта массив: ===&lt;br /&gt;
&lt;br /&gt;
get - при вызове этого состояния во внутреннюю переменную val записывается значение элемента с индексом index1&lt;br /&gt;
&lt;br /&gt;
set - при вызове этого состояния во внутреннюю переменную a1..a20, соответствующую индексу index1 записывается значение val&lt;br /&gt;
&lt;br /&gt;
load - загрузить значения массива из xml.&lt;br /&gt;
&lt;br /&gt;
save - сохранить элементы массива от 1 до len&lt;br /&gt;
&lt;br /&gt;
=== Как использовать? ===&lt;br /&gt;
&lt;br /&gt;
1. Загружаем массив, переводя объект array в состояние load&lt;br /&gt;
&lt;br /&gt;
2. Записываем значения массива&lt;br /&gt;
&lt;br /&gt;
 а). Задаём значение свойству index1 объекта array (устанавливаем индекс ячейки, в которую будет заноситься число)&lt;br /&gt;
 б). Задаём значение свойству val объекта array (устанавливаем значение, которое будет заноситься в ячейку&lt;br /&gt;
     с индексом index1)&lt;br /&gt;
 в). Переводим объект array в состояние set&lt;br /&gt;
&lt;br /&gt;
3. Считываем значения массива&lt;br /&gt;
 а). Задаём значение свойству index1 объекта array (устанавливаем индекс ячейки, из которой будет считываться число)&lt;br /&gt;
 б). Переводим объект array в состояние get&lt;br /&gt;
 в). Считываем значение из свойства val объекта array&lt;br /&gt;
&lt;br /&gt;
4. Сохраняем массив, переводя объект array в состояние save. Если хотите изменить количество сохраняемых элементов - предварительно измените параметр len.&lt;br /&gt;
&lt;br /&gt;
=== Копирование объекта ===&lt;br /&gt;
&lt;br /&gt;
При копировании, необходимо заменить в состояниях load и save array.имя_параметра на другое имя. Например, array2.имя_параметра. Копировать следует через использование доп. сцены (см. выше)&lt;br /&gt;
&lt;br /&gt;
=== Достоинства ===&lt;br /&gt;
&lt;br /&gt;
Позволяет избежать необходимости каждый раз создавать большое количество if-ов и set-ов, если необходимо работать с нумерованным списком. Можно один раз создать структуру и копировать её неограниченное количество раз&lt;br /&gt;
&lt;br /&gt;
=== Недостатки ===&lt;br /&gt;
&lt;br /&gt;
Данный объект содержит довольно большое количество кода, поэтому при большом их обилии/длине может занизить скорость работы сцены и скорость загрузки сцены.&lt;br /&gt;
&lt;br /&gt;
=== Исходный XML код===&lt;br /&gt;
Прим. id=&amp;quot;369&amp;quot; - идентификатор объекта Options, сохраняющего все переменные приложения. id=&amp;quot;7845&amp;quot; - идентификатор объекта&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;obj id=&amp;quot;7845&amp;quot; type=&amp;quot;machine&amp;quot; nm=&amp;quot;array&amp;quot; sync=&amp;quot;1&amp;quot; w=&amp;quot;1&amp;quot; h=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;st id=&amp;quot;init&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;st id=&amp;quot;get&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a1&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a2&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a3&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a4&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a5&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a6&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a7&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a8&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a9&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a10&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a11&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a12&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a13&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a14&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a15&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a16&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a17&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a18&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a19&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a20&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a20&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a1)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a2)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a3)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a4)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a5)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a6)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a7)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a8)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a9)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a10)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a11)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a12)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a13)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a14)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a15)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a16)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a17)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a18)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a19)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot; val=&amp;quot;(a20)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/st&amp;gt;&lt;br /&gt;
                &amp;lt;st id=&amp;quot;set&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;val&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;val&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a1&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a2&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a3&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a4&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a5&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a6&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a7&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a8&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a9&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a10&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a11&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a12&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a13&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a14&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a15&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a16&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a17&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a18&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a19&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a20&amp;quot; val=&amp;quot;(val)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;index1&amp;quot; val=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/st&amp;gt;&lt;br /&gt;
                &amp;lt;st id=&amp;quot;load&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a1&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a1&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a2&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a2&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a3&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a3&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a4&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a4&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a5&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a5&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a6&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a6&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a7&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a7&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a8&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a8&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a9&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a9&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a10&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a10&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a11&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a11&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a12&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a12&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a13&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a13&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a14&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a14&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a15&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a15&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a16&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a16&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a17&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a17&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a18&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a18&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a19&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a19&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a20&amp;quot; obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a20&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a1&amp;quot; val=&amp;quot;(a1)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a2&amp;quot; val=&amp;quot;(a2)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a3&amp;quot; val=&amp;quot;(a3)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a4&amp;quot; val=&amp;quot;(a4)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a5&amp;quot; val=&amp;quot;(a5)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a6&amp;quot; val=&amp;quot;(a6)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a7&amp;quot; val=&amp;quot;(a7)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a8&amp;quot; val=&amp;quot;(a8)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a9&amp;quot; val=&amp;quot;(a9)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a10&amp;quot; val=&amp;quot;(a10)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a11&amp;quot; val=&amp;quot;(a11)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a12&amp;quot; val=&amp;quot;(a12)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a13&amp;quot; val=&amp;quot;(a13)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a14&amp;quot; val=&amp;quot;(a14)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a15&amp;quot; val=&amp;quot;(a15)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a16&amp;quot; val=&amp;quot;(a16)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a17&amp;quot; val=&amp;quot;(a17)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a18&amp;quot; val=&amp;quot;(a18)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a19&amp;quot; val=&amp;quot;(a19)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;7845&amp;quot; par=&amp;quot;a20&amp;quot; val=&amp;quot;(a20)&amp;quot; round=&amp;quot;1&amp;quot; if=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/st&amp;gt;&lt;br /&gt;
                &amp;lt;st id=&amp;quot;save&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;len&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a1&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a2&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a3&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a4&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a5&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a6&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a7&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a8&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a9&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a10&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a11&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a12&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a13&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a14&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a15&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a16&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a17&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a18&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a19&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;var nm=&amp;quot;a20&amp;quot; obj=&amp;quot;7845&amp;quot; par=&amp;quot;a20&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a1&amp;quot; val=&amp;quot;(a1)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a2&amp;quot; val=&amp;quot;(a2)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a3&amp;quot; val=&amp;quot;(a3)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a4&amp;quot; val=&amp;quot;(a4)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a5&amp;quot; val=&amp;quot;(a5)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a6&amp;quot; val=&amp;quot;(a6)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a7&amp;quot; val=&amp;quot;(a7)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a8&amp;quot; val=&amp;quot;(a8)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a9&amp;quot; val=&amp;quot;(a9)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a10&amp;quot; val=&amp;quot;(a10)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a11&amp;quot; val=&amp;quot;(a11)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a12&amp;quot; val=&amp;quot;(a12)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a13&amp;quot; val=&amp;quot;(a13)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a14&amp;quot; val=&amp;quot;(a14)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a15&amp;quot; val=&amp;quot;(a15)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a16&amp;quot; val=&amp;quot;(a16)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a17&amp;quot; val=&amp;quot;(a17)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a18&amp;quot; val=&amp;quot;(a18)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a19&amp;quot; val=&amp;quot;(a19)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.a20&amp;quot; val=&amp;quot;(a20)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot; if=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;set obj=&amp;quot;369&amp;quot; par=&amp;quot;array.len&amp;quot; val=&amp;quot;(len)&amp;quot; round=&amp;quot;1&amp;quot; user=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;7&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;11&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;14&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;17&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;18&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;if obj=&amp;quot;7845&amp;quot; par=&amp;quot;len&amp;quot; op=&amp;quot;&amp;amp;gt;&amp;quot; val=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/st&amp;gt;&lt;br /&gt;
            &amp;lt;/obj&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Машина состояний объекта ===&lt;br /&gt;
[[Файл:array.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример использования ==&lt;br /&gt;
&lt;br /&gt;
[http://fs5.absolutist.com/files/wikisample/machine.rar Download]&lt;br /&gt;
&lt;br /&gt;
== Clone ==&lt;br /&gt;
Clone - параметр команды init в разделе &amp;quot;системные действия&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Clone1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение 1 означает, что в текущем местоположении машины будет создана ее копия.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Clone2.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
&lt;br /&gt;
1) Клонированная машина состояний имеет все свойства, состояния и параметры исходного объекта клонирования.&lt;br /&gt;
&lt;br /&gt;
2) Клоны рождаются и умирают в рамках одного экрана.&lt;br /&gt;
&lt;br /&gt;
3) Клоны отличаются друг от друга лишь параметром '''clone_num''', который у оригинала равен &amp;quot;-1&amp;quot;, а у клонов от 0 до N.&lt;br /&gt;
&lt;br /&gt;
4) Нежелательно применять клонирование к клону во избежание путаницы значений параметра '''clone_num'''.&lt;br /&gt;
&lt;br /&gt;
5) Если при проверке условия [[#if|if]] в поле '''obj''' указать this, это значит что if будет проводить проверку текущего объекта.  Таким образом машина может сама себя проверить по параметру '''clone_num''' клон ли она и если да то какой у нее номер;&lt;br /&gt;
&lt;br /&gt;
=== Пример использования ===&lt;br /&gt;
&lt;br /&gt;
По ссылке пример использования с подробным описанием машин.&lt;br /&gt;
&lt;br /&gt;
[http://fs5.absolutist.com/files/wikisample/Clone.zip Download]&lt;br /&gt;
&lt;br /&gt;
== Параметр команды машины состояний ==&lt;br /&gt;
&lt;br /&gt;
В случае, когда необходимо изменить значение какого-либо параметра в командах машины состояний (например v в команде move) в процессе работы приложения, можно использовать блок &amp;quot;Параметр команды машины состояний&amp;quot; в команде ''set'' машины состояний. Приведу пример использования этого блока.&lt;br /&gt;
&lt;br /&gt;
Пусть есть 2 машины: управляющая и управляемая.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stm1.jpg|300px]][[Файл:Stm2.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Управляемая машина практически пустая и не содержит каких либо данных о движении, но тем не менее при запуске она будет двигаться, меняя направление. Это движение - заслуга управляющей машины, которая на ходу изменяет параметры движения управляемой. Рассмотрим более детально ее состояния.&lt;br /&gt;
&lt;br /&gt;
В первом состоянии &amp;quot;wait&amp;quot; мы пытаемся изменить скорость движения управляемой машины. Для этого указали объект (sun), состояние в котором хотим поменять параметр (у машины sun это состояние move), имя команды в которой меняем параметр (в данном случае это move), номер команды (если таких команд несколько, то нужно указать порядковый номер начиная с 0; в нашем случае команда одна), имя параметра (мы хотим изменить скорость, поэтому имя параметра v) и значение (указали значение 200). После этого переходим в следующее состояние.&lt;br /&gt;
&lt;br /&gt;
В состоянии &amp;quot;1&amp;quot; управляющей машины сначала мы вывели объект sun из состояния move, изменили параметр целевой координаты x на 512 и затем вернули в состояние move, чтобы применить изменения параметров. Таким образом управляемая машина начала движение в x=512 со скоростью 200. Через 2 секунды мы переводим управляющую машину в состояние &amp;quot;2&amp;quot;, где аналогичным образом изменяется целевая координата на -512.&lt;br /&gt;
&lt;br /&gt;
Такой способ задания параметров может найти применение в случае, когда параметры нужно задавать переменными.&lt;br /&gt;
&lt;br /&gt;
==Запись в viewer.log ==&lt;br /&gt;
&lt;br /&gt;
В процессе работы машина состояний пишет информацию о своей работе. Она имеет следующий вид. Жирным шрифтом выделено полезную информацию. &lt;br /&gt;
&lt;br /&gt;
*Machine::state() state machine '''stat_google_gold (id:30818)''' from '''enough_coins''' to '''enough_coins''' through object '''c_current_gold (id:8807)''' from state '''inc''' - машина с именем и id '''stat_google_gold (id:30818)''' перешла из состояния '''enough_coins''' в '''enough_coins'''; ее состояние изменил объект с именем и id '''c_current_gold (id:8807)''' из состояния '''inc'''.&lt;br /&gt;
*GMachine::Set::init() GMachine(id:28076)::Set::init set id:17&lt;br /&gt;
*GMachine::Command::calcExpr() GMachine::Command::calcExpr ((0|(!1))|(!2)) checkIf(0)=no&lt;br /&gt;
*GMachine::Command::calcExpr() GMachine::Command::calcExpr ((0|(!1))|(!2)) checkIf(1)=yes&lt;br /&gt;
*GMachine::Command::calcExpr() GMachine::Command::calcExpr ((0|(!1))|(!2)) checkIf(2)=yes&lt;br /&gt;
*GMachine::Command::checkIf() GMachine(id:28076)::Command::checkIf id:17 expr:((0|(!1))|(!2)) res:false&lt;br /&gt;
*GMachine::Set::init() GMachine(id:28076)::Set::init set id:18&lt;br /&gt;
*GMachine::Command::checkIf() GMachine(id:28076)::Command::checkIf id:18 expr: res:true&lt;br /&gt;
*GMachine::Set::init() GMachine(id:28076)::Set::init set id:18 checkIf success&lt;br /&gt;
*GMachine::Set::init() GMachine(id:28076)::Set::init set id:18 obj:16039 -&amp;gt; par:param_name val:bundle_coins us:0&lt;br /&gt;
*GMachine::Command::getVarValue() Command::getVarValue(bundle_item): float result = 0.00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Main objects]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Cloud&amp;diff=7352</id>
		<title>Cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Cloud&amp;diff=7352"/>
		<updated>2015-11-26T15:05:08Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Параметры объекта Cloud */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Объект необходим для синхронизации приложения с облаком.&lt;br /&gt;
&lt;br /&gt;
=Параметры объекта Cloud=&lt;br /&gt;
&lt;br /&gt;
==parse general==&lt;br /&gt;
&lt;br /&gt;
*'''app''' - Код приложения из parse&lt;br /&gt;
*'''key''' - Ключ приложения из parse&lt;br /&gt;
*'''имя игры''' - Наше внутреннее имя игры в parse&lt;br /&gt;
*'''имя игрока''' - Имя игрока. Заполнить до любых вызовов состояний&lt;br /&gt;
*'''cloud major field''' - Главное поле в опциях, по которому будет выбираться версия опций в cloud при кофликте (наибольшее из значений будет приоритетнее)&lt;br /&gt;
*'''автоприменение''' - Применять лучшие опции автоматически. Если &amp;quot;нет&amp;quot; то нужно подтверждение пользователя.&lt;br /&gt;
&lt;br /&gt;
==parse leaderboards==&lt;br /&gt;
&lt;br /&gt;
*'''лидерборд''' - id таблицы на сервере, в которую будет засылать очки. Начинается с латинской буквы! Не содержит левых символов!&lt;br /&gt;
*'''очки''' - Очки для отправки. Валидное целое число!&lt;br /&gt;
*'''таблица''' - объект-таблица, в который сложим очки. Должна иметь три колонки (место-имя-очки), заполнение по строкам - в случае если не указан &amp;quot;шаблон&amp;quot;.&lt;br /&gt;
*'''шаблон''' - объект типа leaderboardsitem для помещения в таблицу&lt;br /&gt;
*'''свое место''' - каунтер в котором будет место игрока&lt;br /&gt;
*'''свои очки''' - каунтер в котором будут очки игрока&lt;br /&gt;
*'''запрашивать записей''' - сколько записей запросить из таблицы&lt;br /&gt;
&lt;br /&gt;
== Добавляемые параметры ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:+.png]] '''ошибка загрузки данных из cloud: изменить состояние объекта''' - сейчас не применяется, т.к. используем ErrorManager.&lt;br /&gt;
*'''объект''' - объект у которого мы меняем состояние.&lt;br /&gt;
*'''состояние''' - Значение нового состояния.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:+.png]] '''нечего загружать из cloud: изменить состояние объекта''' - обработчик неуспеха ''parse_load'' в случае отсутствия данных на сервере.&lt;br /&gt;
*'''объект''' - объект у которого мы меняем состояние.&lt;br /&gt;
*'''состояние''' - Значение нового состояния.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:+.png]] '''подтверждение применения данных из cloud: изменить состояние объекта'''  - обработчик успеха ''parse_load'' в случае наличия данных на сервере с таким же ''device_id''&lt;br /&gt;
*'''объект''' - объект у которого мы меняем состояние.&lt;br /&gt;
*'''состояние''' - Значение нового состояния.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:+.png]] '''применены данные из cloud: изменить состояние объекта''' - обработчик успеха ''parse_apply'', желательно перегрузить лайаут.&lt;br /&gt;
*'''объект''' - объект у которого мы меняем состояние.&lt;br /&gt;
*'''состояние''' - Значение нового состояния.&lt;br /&gt;
&lt;br /&gt;
[[Файл:+.png]] '''подтверждение применения данных из cloud при наличии двух комплектов данных в сети: изменить состояние объекта''' - обработчик успеха ''parse_load'' в случае наличия двух комплектов данных на сервере (например, по facebook_id)&lt;br /&gt;
*'''объект''' - объект, состояние которого меняем.&lt;br /&gt;
*'''состояние''' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
[[Файл:+.png]] '''в cloud опции хуже, не применям их: изменить состояние объекта''' - обработчик неуспеха ''parse_load'' в случае, когда данные на сервере хуже, чем на текущем устройстве.&lt;br /&gt;
*'''объект''' - объект, состояние которого меняем.&lt;br /&gt;
*'''состояние''' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
	&lt;br /&gt;
			&lt;br /&gt;
[[Файл:+.png]] '''голосование загружено: изменить состояние объекта'''&lt;br /&gt;
*'''объект''' - объект, состояние которого меняем.&lt;br /&gt;
*'''состояние''' - новое состояние для объекта из предыдущего поля.			&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
[[Файл:+.png]] '''успешно проголосовали: изменить состояние объекта'''&lt;br /&gt;
*'''объект''' - объект, состояние которого меняем.&lt;br /&gt;
*'''состояние''' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
[[Файл:+.png]] '''запрос в парсе успешно выполнен (любой)''' - обработчик успеха любого запроса.&lt;br /&gt;
*'''объект''' - объект, состояние которого меняем.&lt;br /&gt;
*'''состояние''' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
[[Файл:+.png]] '''ошибка, нужно обновить приложение''' - обработчик неуспеха ''parse_load'', когда версия текущего приложения ниже, чем версия опциях на сервере.&lt;br /&gt;
*'''объект''' - объект, состояние которого меняем.&lt;br /&gt;
*'''состояние''' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
[[Файл:+.png]] '''успешно проведен серверный resolve''' - обработчик успеха ''parse_apply_server'', желательно перезагрузить лэйаут.&lt;br /&gt;
*'''объект''' - объект, состояние которого меняем.&lt;br /&gt;
*'''состояние''' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:+.png]] '''успешно проведена изоляция''' - обработчик успеха ''parse_isolate''.&lt;br /&gt;
*'''объект''' - объект, состояние которого меняем.&lt;br /&gt;
*'''состояние'''- новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:+.png]] '''успешно проведена разизоляция''' - обработчик успеха ''parse_un_isolate''.&lt;br /&gt;
*'''объект''' - объект, состояние которого меняем.&lt;br /&gt;
*'''состояние''' - новое состояние для объекта из предыдущего поля.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:+.png]] '''синхронизируемый параметр между приложениями устройства''' - позволяет синхронизировать конкретный параметр между разными приложениями через parse.&lt;br /&gt;
*'''группа''' - имя группы, общее для различных приложений, которые синхронизируют данный параметр&lt;br /&gt;
*'''параметр''' - имя параметра в группе, общее для различных приложений&lt;br /&gt;
*'''объект''' - объект у которого синхронизируем параметр.&lt;br /&gt;
*'''параметр объекта''' - параметр который синхронизируем.&lt;br /&gt;
&lt;br /&gt;
==Особенности использования==&lt;br /&gt;
&lt;br /&gt;
Есть несколько платформ, которые не поддерживают работу с фейсбуком. Это blackberry, win 8.1, windows phone 8.&lt;br /&gt;
При этом эти устройства могут взаимодействовать с клаудом. При этом есть ряд проблем с этими платформами: каждый пользователь будет отправлять свои результаты в лидерборды под ником new_user (или другим дефолтным); не до конца прозрачна ситуация с включением/отключением изоляции игроков.&lt;br /&gt;
Для того, что бы отключить сохранение в клауд для этих платформ нужно установить в опциях флаг disable_cloud_save = 1.&lt;br /&gt;
Опросник при этом работает нормально.&lt;br /&gt;
&lt;br /&gt;
=Состояния=&lt;br /&gt;
&lt;br /&gt;
*'''parse_load''' - загружает из облака опции&lt;br /&gt;
*'''parse_save''' - сохраняет опции в клауд. Автоматически сохраняется при переходе с экрана на экран и при выходе из приложения.&lt;br /&gt;
*'''parse_apply''' - применяет загруженные опции при условии совпадения по device_id.&lt;br /&gt;
*'''parse_apply_server''' - выбирает лучшие и применяет опции при условии наличии на сервере двух наборов.&lt;br /&gt;
*'''parse_isolate''' - проводит изоляцию опций (сохраняет 2 набора).&lt;br /&gt;
*'''parse_un_isolate''' - проводит объединение опций.&lt;br /&gt;
*'''parse_leaderboards''' - заполняет таблицу глобальных лидербордов.&lt;br /&gt;
*'''parse_leaderboards_friends''' - заполняет таблицу лидербордов-друзей.&lt;br /&gt;
*'''parse_friends''' - заполняет таблицу парсовых друзей для отправки подарков.&lt;br /&gt;
*'''parse_submit''' - отправляет очки в клауд. Предварительно нужно записать кол-во очков в параметр score.&lt;br /&gt;
*'''parse_get_public_lb''' - показывает информацию о друге из таблицы лидербордов.&lt;br /&gt;
*'''parse_poll''' - загружает опросник.&lt;br /&gt;
*'''parse_vote''' - отправляет голос в опроснике.&lt;br /&gt;
*'''parse_poll_prev''' - загружает результаты предыдущего опросника.&lt;br /&gt;
&lt;br /&gt;
=Сообщения в лог=&lt;br /&gt;
&lt;br /&gt;
Объект пишет в опции строки:&lt;br /&gt;
I/GCloud GCloud::state() state val = 2 state = 3 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Где val = 2 - это состояние в которое хотим перейти в дальнейшем ( в зависимости от текущего состояния, или сстанет в очередь или выполниться следующим тиком).&lt;br /&gt;
:state = 3 - это состояние в котором сейчас находиться объект;&lt;br /&gt;
&lt;br /&gt;
Номера состояний:&lt;br /&gt;
&lt;br /&gt;
*'''0  -  ST_LOCAL_DEVICE_SYNCHRONIZATION'''     //!&amp;lt; синхронизация параметров между приложениями одного устройства;&lt;br /&gt;
&lt;br /&gt;
*'''1  -  ST_PARSE_RESOLVE'''                    //!&amp;lt; ресолвим конфликт и ждем подтверждения;&lt;br /&gt;
&lt;br /&gt;
*'''2  -  ST_PARSE_IDLE'''                       //!&amp;lt; состояние простоя, означает, что мы не ждем ответа ни на один запрос;&lt;br /&gt;
&lt;br /&gt;
*'''3  -  ST_PARSE_LOAD'''                       //!&amp;lt; загрузить опции из парса (вызываться должно снаружи, после ввода имени) ;&lt;br /&gt;
&lt;br /&gt;
*'''4  -  ST_PARSE_SAVE'''                       //!&amp;lt; сохранить опции в парс c учетом предохранительной задержки SAVE_DELAY_SEC (на 2014-09-17 вызывается из единственного места - GOptions::save);&lt;br /&gt;
        &lt;br /&gt;
*'''5  -  ST_PARSE_LEADERBOARDS'''               //!&amp;lt; загрузить лидерборды из парса и сложить в соответствующую таблицу;&lt;br /&gt;
&lt;br /&gt;
*'''6  -  ST_PARSE_LEADERBOARDS_FRIENDS'''       //!&amp;lt; загрузить лидерборды из парса и сложить в соответствующую таблицу;&lt;br /&gt;
&lt;br /&gt;
*'''7  -  ST_PARSE_SUBMIT'''                     //!&amp;lt; заслать очки в парс взяв очки из поля score и уровень из поля level;&lt;br /&gt;
&lt;br /&gt;
*'''8  -  ST_PARSE_APPLY'''                      //!&amp;lt; применить скачанные опции;&lt;br /&gt;
&lt;br /&gt;
*'''9  -  ST_GET_PUBLIC_LB'''                    //!&amp;lt; скопировать паблик данные кликнутого юзера из лидербордов в доступную область;&lt;br /&gt;
&lt;br /&gt;
*'''10 -  ST_PARSE_POLL'''                       //!&amp;lt; получить данные о текущем опроснике от клауда. Заполнить таблицу ответов;&lt;br /&gt;
&lt;br /&gt;
*'''11 -  ST_PARSE_POLL_PREV'''                  //!&amp;lt; получить данные о предыдущем опроснике от клауда. Заполнить таблицу ответов №2;&lt;br /&gt;
&lt;br /&gt;
*'''12 -  ST_PARSE_VOTE'''                       //!&amp;lt; проголосовать в текущем опроснике (номер ответа возьмем из таблицы) TODO - не нужно ли состояний против и за?;&lt;br /&gt;
&lt;br /&gt;
*'''13 -  ST_PARSE_SHARE_POLL'''                 //!&amp;lt; зашарить результаты текущего опроса;&lt;br /&gt;
&lt;br /&gt;
*'''14 -  ST_PARSE_FORCED_SAVE'''                //!&amp;lt; сохранить опции в парс незамедлительно (на 2014-09-17 вызывается из единственного места - GOptions::save);&lt;br /&gt;
&lt;br /&gt;
*'''15 -  ST_PARSE_APPLY_SERVER'''               //!&amp;lt; применить опции и отправить ресолв;&lt;br /&gt;
&lt;br /&gt;
*'''16 -  ST_PARSE_CLEAR_NOTIFICATIONS'''        //!&amp;lt; отписаться от уведомлений;&lt;br /&gt;
&lt;br /&gt;
*'''17 -  ST_PARSE_ADD_NOTIFICATION'''           //!&amp;lt; добавить уведомление (не требует действий с сетью, реальная отправка - по потере фокуса);&lt;br /&gt;
&lt;br /&gt;
*'''18 -  ST_PARSE_TIME'''                       //!&amp;lt; запросить время;&lt;br /&gt;
&lt;br /&gt;
*'''19 -  ST_PARSE_FRIENDS'''                    //!&amp;lt; заполнить таблицу всех друзей (новые подарки);&lt;br /&gt;
   &lt;br /&gt;
*'''20 -  ST_PARSE_ISOLATE'''                    //!&amp;lt; отказаться от слияния аккаунтов;&lt;br /&gt;
&lt;br /&gt;
*'''21 -  ST_PARSE_UN_ISOLATE'''                 //!&amp;lt; отменить изоляцию&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Options|*]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%9E%D1%82%D0%BB%D0%B8%D1%87%D0%B8%D1%8F_%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B8_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D1%85_%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC&amp;diff=7237</id>
		<title>Отличия подготовки проекта для разных платформ</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%9E%D1%82%D0%BB%D0%B8%D1%87%D0%B8%D1%8F_%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B8_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D1%85_%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC&amp;diff=7237"/>
		<updated>2015-11-11T15:07:26Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
[[Файл:Simple.png|thumb|right]]&lt;br /&gt;
AppSalute Game Сreator позволяет использовать один проект (один лейаут), чтобы собирать приложение для разных платформ (маркетов). &lt;br /&gt;
Значительная часть проекта одинакова для всех платформ, но существуют некоторые различия. Для того чтобы иметь один лейаут для всех платформ используется внутренняя переменная &amp;quot;market&amp;quot;, которая задается в конфигурационном файле platform.icf. И которая переносится в приложении непосредственно при сборке.&lt;br /&gt;
&lt;br /&gt;
В самом же проекте, проверяя значение этой переменной реализуем нужную логику. На данный момент такую проверку можно делать в [[Machine|машине состояний]], а также в [[Taskorganizer|таскорганайзере]].&lt;br /&gt;
&lt;br /&gt;
На  данный момент существует 2 основных вида сборок - для мобильных платформ (google, ios) и для веб-платформ (facebook).&lt;br /&gt;
Как подготовить версию для веб-платформ из версии для мобильных платформ описано в этой статье: https://docs.google.com/document/d/1seTO3nphCsqqYHjumkl6b4r9RWLNGdokHjpDyDDP1T4/edit#&lt;br /&gt;
&lt;br /&gt;
Кроме отличий в самом проекте, также есть отличия при сборке проекта. Эти особенности также будут описаны ниже, но на данный момент эти отличия применяются автоматически при сборке через артефактори.&lt;br /&gt;
&lt;br /&gt;
=Google Play=&lt;br /&gt;
*Значение переменной market = &amp;quot;android&amp;quot;.&lt;br /&gt;
*Если в проекте есть курсоры (для веб-версий), то при запуске (на глобальном экране) приложения [[Options|опциям]] нужно вызывать состояние disableCursor.&lt;br /&gt;
*Для приложений GP есть возможность использовать социальную сеть G+. Для этого при запуске приложения (на глобальном экране) нужно установить объекту [[Esocial]] параметр socialnet = 2.&lt;br /&gt;
*На GP есть система внутриигровых достижений (ачивок). Для их корректной работы должен быть настроен объект [[Gamecenter]]. В частности в нем должны быть указаны ключи ачивок. Ачивки заводят маркетологи, они же дают ключи.&lt;br /&gt;
*Для доступа к сервису GP в проекте должно быть 2 кнопки: одна для доступа к ачивкам, вторая для доступа к лидерам. Также, если в проект поддерживаются локальные достижения, то в [[Gamecenter]] нужно указать текст для этого достижения.&lt;br /&gt;
*По системной кнопке &amp;quot;back&amp;quot; должно закрываться открытое окно. Если открытых окон нет, показывается окно выхода из приложения / хиддена / миниигы и тд.&lt;br /&gt;
*Если в приложении есть реклама, то в файле конфигурации (platform.icf) должны быть указаны параметры для провайдера рекламы.&lt;br /&gt;
*Если используется [[Flurry|флурри]] в файле viewer_google.xml должен быть указан game_id.&lt;br /&gt;
*Так как упаковка экранов оптимизирована для веб-платформ, то на данный момент после экспорта в файле *.sirx нужно найти ноду в которой указан адрес для закачки 1-го пака(имеет вид &amp;lt;pack fsize=&amp;quot;406951055&amp;quot; url=&amp;quot;imgs1/res.dat&amp;quot; md5=&amp;quot;7a...d&amp;quot; p=&amp;quot;1&amp;quot;/&amp;gt;) и изменить в ней url на следующий: &amp;quot;http://imgs1/res.dat&amp;quot;.&lt;br /&gt;
*Размер apk файла для приложения на GP ограничено 100 мб. Если приложение больше этого размера, то его нужно разделить на 2 пака. Содержимое второго пака нужно поместить в zip архив и переименовать его в соответствии с шаблоном main.v1.v2.v3.****.obb (v1, v2, v3 - составные версии приложения, ***** -  некое имя приложения на GP). Потом этот файл нужно будет поместить в соответствующий каталог для сборки.&lt;br /&gt;
*'''Перед тестированием версию всегда нужно заливать в альфу GP. Что бы версию можно было залить в альфу, нужно чтобы текущая версия была выше предыдущей.'''&lt;br /&gt;
&lt;br /&gt;
=iTunes=&lt;br /&gt;
*Значение переменной market = &amp;quot;ios&amp;quot;.&lt;br /&gt;
*Если в проекте есть курсоры (для веб-версий), то при запуске (на глобальном экране) приложения [[Options|опциям]] нужно вызывать состояние disableCursor.&lt;br /&gt;
*На iTunse есть система внутриигровых достижений (ачивок). Для их корректной работы должен быть настроен объект [[Gamecenter]]. В частности в нем должны быть указаны ключи ачивок. Ачивки заводят маркетологи, они же дают ключи.&lt;br /&gt;
*Для доступа к геймцентру в проекте должно быть кнопка, которая вызывает состояние achievements_show. Также, если в проект поддерживаются локальные достижения, то в [[Gamecenter]] нужно указать текст для этого достижения.&lt;br /&gt;
*Если в приложении есть реклама, то в файле конфигурации (platform.icf) должны быть указаны параметры для провайдера рекламы.&lt;br /&gt;
*Если используется [[Flurry|флурри]] в файле viewer_iphone.xml должен быть указан game_id.&lt;br /&gt;
*Приложение пакуем в 2 пака(настройки как для GP), 2 пак архивом не жмем.&lt;br /&gt;
&lt;br /&gt;
=Amazon Appstore=&lt;br /&gt;
*Значение переменной market = &amp;quot;amazon&amp;quot;.&lt;br /&gt;
*Если в проекте есть курсоры (для веб-версий), то при запуске (на глобальном экране) приложения [[Options|опциям]] нужно вызывать состояние disableCursor.&lt;br /&gt;
*На Amazon Appstore есть система внутриигровых достижений (ачивок). Для их корректной работы должен быть настроен объект [[Gamecenter]]. В частности в нем должны быть указаны ключи ачивок. Ачивки заводят маркетологи, они же дают ключи.&lt;br /&gt;
*Для доступа к геймцентру в проекте должно быть кнопка, которая вызывает состояние achievements_show. Также, если в проект поддерживаются локальные достижения, то в [[Gamecenter]] нужно указать текст для этого достижения.&lt;br /&gt;
*По системной кнопке &amp;quot;back&amp;quot; должно закрываться открытое окно. Если открытых окон нет, показывается окно выхода из приложения / хиддена / миниигы и тд.&lt;br /&gt;
*Если в приложении есть реклама, то в файле конфигурации (platform.icf) должны быть указаны параметры для провайдера рекламы.&lt;br /&gt;
*Если используется [[Flurry|флурри]] в файле viewer_amazon.xml должен быть указан game_id.&lt;br /&gt;
*Так как упаковка экранов оптимизирована для веб-платформ, то на данный момент после экспорта в файле *.sirx нужно найти ноду в которой указан адрес для закачки 1-го пака(имеет вид &amp;lt;pack fsize=&amp;quot;406951055&amp;quot; url=&amp;quot;imgs1/res.dat&amp;quot; md5=&amp;quot;7a...d&amp;quot; p=&amp;quot;1&amp;quot;/&amp;gt;) и изменить в ней url на следующий: &amp;quot;http://imgs1/res.dat&amp;quot;.&lt;br /&gt;
*Приложение разбивается на 2 пака. Содержимое второго пака нужно поместить в zip архив и переименовать его в pack.zip. Потом этот файл нужно будет поместить в соответствующий каталог для сборки.&lt;br /&gt;
&lt;br /&gt;
=Samsung Galaxy Apps=&lt;br /&gt;
*Значение переменной market = &amp;quot;samsung&amp;quot;.&lt;br /&gt;
*Если в проекте есть курсоры (для веб-версий), то при запуске (на глобальном экране) приложения [[Options|опциям]] нужно вызывать состояние disableCursor.&lt;br /&gt;
*Данный маркет не имеет собственного геймцентра, но на нем можно использовать локальные достижения. Для этого в [[Gamecenter]] нужно указать текст для этого достижения.&lt;br /&gt;
*По системной кнопке &amp;quot;back&amp;quot; должно закрываться открытое окно. Если открытых окон нет, показывается окно выхода из приложения / хиддена / миниигы и тд.&lt;br /&gt;
*Если используется [[Flurry|флурри]] в файле viewer_samsung.xml должен быть указан game_id.&lt;br /&gt;
*Так как упаковка экранов оптимизирована для веб-платформ, то на данный момент после экспорта в файле *.sirx нужно найти ноду в которой указан адрес для закачки 1-го пака(имеет вид &amp;lt;pack fsize=&amp;quot;406951055&amp;quot; url=&amp;quot;imgs1/res.dat&amp;quot; md5=&amp;quot;7a...d&amp;quot; p=&amp;quot;1&amp;quot;/&amp;gt;) и изменить в ней url на следующий: &amp;quot;http://imgs1/res.dat&amp;quot;.&lt;br /&gt;
*Приложение разбивается на 2 пака. Содержимое второго пака нужно поместить в zip архив и переименовать его в pack.zip. Потом этот файл нужно будет поместить в соответствующий каталог для сборки.&lt;br /&gt;
*Samsung Galaxy Apps просит, чтобы их приложение чем то отличалось, от версии на GP. На начальном этапе игры можно сделать подарок, где указать, что это уникальная особенность для пользователей данного маркета.&lt;br /&gt;
&lt;br /&gt;
=BlackBerry World=&lt;br /&gt;
*Значение переменной market = &amp;quot;blackberry&amp;quot;.&lt;br /&gt;
*Если в проекте есть курсоры (для веб-версий), то при запуске (на глобальном экране) приложения [[Options|опциям]] нужно вызывать состояние disableCursor.&lt;br /&gt;
*Данный маркет не имеет собственного геймцентра, но на нем можно использовать локальные достижения. Для этого в [[Gamecenter]] нужно указать текст для этого достижения.&lt;br /&gt;
*[[Flurry|Флурри]] не используется, но для работы других сервисов статистики в файле viewer_blackberry.xml должна быть указана заглушка в параметре game_id.&lt;br /&gt;
*Так как упаковка экранов оптимизирована для веб-платформ, то на данный момент после экспорта в файле *.sirx нужно найти ноду в которой указан адрес для закачки 1-го пака(имеет вид &amp;lt;pack fsize=&amp;quot;406951055&amp;quot; url=&amp;quot;imgs1/res.dat&amp;quot; md5=&amp;quot;7a...d&amp;quot; p=&amp;quot;1&amp;quot;/&amp;gt;) и изменить в ней url на следующий: &amp;quot;http://imgs1/res.dat&amp;quot;.&lt;br /&gt;
*Приложение разбивается на 2 пака. Содержимое второго пака нужно поместить в zip архив и переименовать его в pack.zip. Потом этот файл нужно будет поместить в соответствующий каталог для сборки.&lt;br /&gt;
*'''Данная платформа не поддерживает социальные сети.''' Поэтому после сборки, нужно в layout.xml найти объект &amp;quot;facebook&amp;quot; и изменить его тип на &amp;quot;image&amp;quot;. В самом проекте, в тех местах где идет обращение к социальным сервисам нужно подключить сообщение заглушку. В основном такую проверку нужно делать для кнопок, открывающих окна с социалкой и попап-окна логина.&lt;br /&gt;
&lt;br /&gt;
=Windows Store 8.1=&lt;br /&gt;
*Значение переменной market = &amp;quot;ws81&amp;quot;.&lt;br /&gt;
*Если в проекте есть курсоры (для веб-версий), то при запуске (на глобальном экране) приложения [[Options|опциям]] нужно вызывать состояние disableCursor.&lt;br /&gt;
*Данный маркет не имеет собственного геймцентра, но на нем можно использовать локальные достижения. Для этого в [[Gamecenter]] нужно указать текст для этого достижения.&lt;br /&gt;
*[[Flurry|Флурри]] не используется, но для работы других сервисов статистики в файле viewer_blackberry.xml должна быть указана заглушка в параметре game_id.&lt;br /&gt;
*Приложение пакуем в 2 пака(настройки как для GP), 2 пак архивом не жмем.&lt;br /&gt;
*'''Данная платформа не поддерживает социальные сети.''' Поэтому после сборки, нужно в layout.xml найти объект &amp;quot;facebook&amp;quot; и изменить его тип на &amp;quot;image&amp;quot;. В самом проекте, в тех местах где идет обращение к социальным сервисам нужно подключить сообщение заглушку. В основном такую проверку нужно делать для кнопок, открывающих окна с социалкой и попап-окна логина.&lt;br /&gt;
&lt;br /&gt;
=Facebook=&lt;br /&gt;
*Значение переменной market = &amp;quot;webfb&amp;quot;.&lt;br /&gt;
*Для корректной работы курсора нужно указать его для каждого экрана в проекте, а также поместить на расшаренной сцене с альфой = 0. (Чтобы подтягивался ресурс при экспорте и но не было переключений между текстурами). При загрузке приложения [[Options|опциям]] нужно вызывать состояние readCursor. Также в файле app.icf в параметрах нужно указать id ресурса для курсора (используя param_name и param_value).&lt;br /&gt;
*Геймцентра нет, но есть механизм постов на стену при получении очередного достижения. В [[Gamecenter]] указываем ключи этих достижений. Ключи представляют собой адрес к файлу ачивки на сервере. Для показа ачивок используются локальные достижения. Для этого в [[Gamecenter]] нужно указать текст для этих достижений.&lt;br /&gt;
*В веб-версиях человек может играть в фулскрине, для этого нужно сделать кнопки смены режима (обычный/фулскрин). Также нужно предусмотреть выход из фулскрина, при совершении покупки (Устанавливать опциям fullScreen = 0, при нажатии на кнопку совершения покупки).&lt;br /&gt;
*Для веб-версий нужно отключить иконку социальной сети, выключив vis картинке, указанной в поле snIco, в темплейте иконки друга.&lt;br /&gt;
*Для каждой покупки нужен специальный файл, который должен быть загружен на сервер. Так же обстоит дело с постами на стену (при сдаче коллекций, получении нового уровня, ачивки и тд). При получении очередного достижения (сдача коллекции, новый уровень и тд), человек может отправить себе на стену пост об этом достижении. При этом на соответствующей кнопке вместо &amp;quot;Принять&amp;quot; нужно писать &amp;quot;Поделиться&amp;quot;.&lt;br /&gt;
*Каждый экран должен быть упакован в отдельный пак. После экспорта, видео в формате absmp4 нужно изменить формат на mp4. Также нужно изменить расширение для видео в файле *.sirx.&lt;br /&gt;
&lt;br /&gt;
=Yahoo=&lt;br /&gt;
*Значение переменной market = &amp;quot;webya&amp;quot;.&lt;br /&gt;
*Для корректной работы курсора нужно указать его для каждого экрана в проекте, а также поместить на расшаренной сцене с альфой = 0. (Чтобы подтягивался ресурс при экспорте и но не было переключений между текстурами). При загрузке приложения [[Options|опциям]] нужно вызывать состояние readCursor. Также в файле app.icf в параметрах нужно указать id ресурса для курсора (используя param_name и param_value).&lt;br /&gt;
*Таким же образом (используя param_name и param_value) указываем параметр lang = en.&lt;br /&gt;
*Геймцентра нет, но есть локальные достижения. Для их показа в [[Gamecenter]] нужно указать текст для этих достижений.&lt;br /&gt;
*В веб-версиях человек может играть в фулскрине, для этого нужно сделать кнопки смены режима (обычный/фулскрин). Также нужно предусмотреть выход из фулскрина, при совершении покупки (Устанавливать опциям fullScreen = 0, при нажатии на кнопку совершения покупки).&lt;br /&gt;
*Для веб-версий нужно отключить иконку социальной сети, выключив vis картинке, указанной в поле snIco, в темплейте иконки друга.&lt;br /&gt;
*Механизма постов на стену нет, надписи &amp;quot;Поделиться&amp;quot; быть не должно. Кнопку &amp;quot;Поделиться&amp;quot; из окна коллекций делаем недоступной.&lt;br /&gt;
*Также прячем в настройках чекбокс &amp;quot;Уведомления&amp;quot;. На Yahoo их нет.&lt;br /&gt;
*Каждый экран должен быть упакован в отдельный пак. После экспорта, видео в формате absmp4 нужно изменить формат на mp4. Также нужно изменить расширение для видео в файле *.sirx.&lt;br /&gt;
&lt;br /&gt;
[[Category:Projects]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&amp;diff=7236</id>
		<title>Absolutist Framework</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&amp;diff=7236"/>
		<updated>2015-11-11T14:00:22Z</updated>

		<summary type="html">&lt;p&gt;Vefimov: /* Подготовка проекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
'''[[:category:main|Категории]]'''&lt;br /&gt;
== Новости ==&lt;br /&gt;
Вышла новая игра HOG созданная с помощью AppSalute Game Сreator. Созданы новые уникальные эффекты и механики для обеспечения незабываемых впечатлений.&lt;br /&gt;
Описание и видео:&lt;br /&gt;
http://time-gap.com/&lt;br /&gt;
&lt;br /&gt;
== AppSalute Game Сreator ==&lt;br /&gt;
* [[Примеры приложений]]&lt;br /&gt;
* [[Введение в AppSalute Game Сreator]]&lt;br /&gt;
* [[Установка и настройка]]&lt;br /&gt;
* [[Интерфейс ScenceEditor ]]&lt;br /&gt;
* [[Интерфейс ResourceEditor ]]&lt;br /&gt;
* [[Интерфейс TextEditor ]]&lt;br /&gt;
*[[Интерфейс Viewer ]]&lt;br /&gt;
* [[Книга жалоб и пожеланий]]&lt;br /&gt;
* [[Roadmap]]&lt;br /&gt;
&lt;br /&gt;
== Обучение ==&lt;br /&gt;
&lt;br /&gt;
* [[Learning|Уроки по освоению фреймворка]]&lt;br /&gt;
* [[Примеры реализации в играх]]&lt;br /&gt;
* [[Основные понятия объектов физического мира]]&lt;br /&gt;
* [[FAQ]]&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;
=== Common objects  ===&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Screen.png]] - [[Screen]]'' - экран&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Scene.png]] - [[Scene]]'' - сцена&lt;br /&gt;
&lt;br /&gt;
=== Main objects ===&lt;br /&gt;
&lt;br /&gt;
''[[Файл:Objects.png]] - [[Object]]'' - общие параметры для всех игровых объектов&lt;br /&gt;
&lt;br /&gt;
* [[Файл:Kub.png]] - [[Azmanager]] - менеджер активных зон&lt;br /&gt;
* [[Файл:Kub.png]] - [[Active zone]] - активная зона&lt;br /&gt;
* [[Файл:Picture.png]] - [[Image]] - картинка&lt;br /&gt;
* [[Файл:Button.png]] - [[Button]] - кнопка&lt;br /&gt;
* [[Файл:Text.png]] - [[Text]] - текст&lt;br /&gt;
* [[Файл:Machine.png]] - [[Machine]] - машина состояний&lt;br /&gt;
* [[Файл:Tableicon.png]] - [[Table]] - таблица&lt;br /&gt;
* [[Файл:Checkbox.png]] - [[Checkbox]] - чекбокс (кнопка в 2-х состояниях)&lt;br /&gt;
* [[Файл:Checkgroup.png]] - [[Groupbox]] - группа, содержащая несколько чекбоксов&lt;br /&gt;
* [[Файл:Timer.png]] - [[Timer]] - цифровой таймер&lt;br /&gt;
** [[Файл:Kub.png]] - [[Globaltimer]] - таймер &amp;quot;реального времени&amp;quot;&lt;br /&gt;
* [[Файл:Counter2.png]] - [[Counter]] - счетчик сделанных кликов в игре и т.п.&lt;br /&gt;
* [[Файл:Progressbar.png]] - [[Progress]] - прогресс прохождения игры (эчивмент)&lt;br /&gt;
* [[Файл:Particle.png]] - [[Flyer]] - флаер (патиклы)&lt;br /&gt;
* [[Файл:Rectangle.png]] - [[Rectangle]] - прямоугольник&lt;br /&gt;
* [[Файл:Kub.png]] - [[Isomover]] - объект движения в изометрической карте&lt;br /&gt;
* [[Файл:Group.png]] - [[Group]] - группа&lt;br /&gt;
* [[Файл:Groupset.png‎]] - [[Groupset]] - группа&lt;br /&gt;
* [[Файл:Effect.jpg|20px]] - [[Effect]] - Создание различных эффектов&lt;br /&gt;
* [[Файл:Graphprogress.png]] - [[Graphprogress]] - создание мини-карты для отображения прогресса прохождения игры.&lt;br /&gt;
* [[Файл:Kub.png]] - [[Statesmanager]] - очередь работы с объектами&lt;br /&gt;
* [[Файл:Slider icons.png]] - [[Slider]] - объект реализующий листание списка.&lt;br /&gt;
* [[Файл:Ribbon.png]] - [[Ribbon]] - объект отображения графики по сплайну&lt;br /&gt;
* [[Файл:Kub.png]] - [[Animation]] - объект различных анимаций&lt;br /&gt;
* [[Файл:Kub.png]] - [[Magicparticles]] - объект файлов Magic Particles&lt;br /&gt;
&lt;br /&gt;
=== Game mechanic ===&lt;br /&gt;
&lt;br /&gt;
* [[Файл:Puzzle.png]] - [[Puzzle]] - игра пазл&lt;br /&gt;
* [[Файл:Memory.png]] - [[Memory]] - класс игр с memory-механикой&lt;br /&gt;
* [[Файл:Patchwork.png]] - [[Patchwork]] - класс игр с Patchwork-механикой&lt;br /&gt;
* [[Файл:Match3.png]] - [[Match]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:Collaps.png]] - [[Collapse]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:Bejewelled.png]] - [[Bejewelled]] - класс match-подобных игр&lt;br /&gt;
* [[Файл:BubbleShooter.png]] - [[Bubble Shooter]] - класс Bubble игр включая механику Снукер&lt;br /&gt;
* [[Файл:Tapthebubble.png]] - [[TapTheBubble]] - механика игры Tap The Bubble&lt;br /&gt;
* [[Файл:GemSlider.jpg]] - [[Gem Slider]] - механика игры Gem Slider&lt;br /&gt;
* [[Файл:W-57.png]] - [[Words]] - механика игры Words&lt;br /&gt;
* [[Файл:Kub.png]] - [[2048]] - механика игры 2048&lt;br /&gt;
* [[Файл:Matchbattle.png]] - [[Match Battle]] - настройка глобальных параметров для мини-игр&lt;br /&gt;
* [[Файл:Move box.png]] - [[DragBox]] - класс игр с dragbox-механикой&lt;br /&gt;
* [[Файл:Labyrinth.png]] - [[Labyrinth]] - класс игр лабиринт&lt;br /&gt;
* [[Файл:Pipes.png]] - [[Pipes]] - класс игр трубы&lt;br /&gt;
* [[Файл:Search object.png]] - [[HiddenObject]] - поисковый объект в хидден играх&lt;br /&gt;
* [[Файл:Object list.png]] - [[HiddenList]] - список поисковых объектов в хидден играх&lt;br /&gt;
* [[Файл:Hint.png]] - [[HiddenHint]] - подсказка (указатель на спрятанный объект)&lt;br /&gt;
* [[Файл:Kub.png]] - [[HiddenHighLighter]] - позволяет показать не найденные объекты в хиддене.&lt;br /&gt;
* [[Файл:Collection.png]] - [[Collection]] - &amp;quot;коллекция&amp;quot; поисковых объектов для хидден игр&lt;br /&gt;
* [[Файл:Inventory.png]] - [[Inventory]] - &amp;quot;инвентарь&amp;quot; список применяемых объектов для игр&lt;br /&gt;
* [[Файл:Tool.png]] - [[Tool]] - &amp;quot;применение&amp;quot; - объект, который можно применить для игр&lt;br /&gt;
* [[Файл:Kub.png]] - [[Isomap]] - изометрическая карта&lt;br /&gt;
* [[Файл:Slotmachine.png]] - [[Slotmachine]] - объект типа &amp;quot;slot&amp;quot;&lt;br /&gt;
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер&lt;br /&gt;
** [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря/магазина и экономики &lt;br /&gt;
** [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина &lt;br /&gt;
** [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря &lt;br /&gt;
** [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета.&lt;br /&gt;
** [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий &lt;br /&gt;
** [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания&lt;br /&gt;
** [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции&lt;br /&gt;
* [[Файл:Paint.png‎]] - [[Paint]] - объект для рисования &lt;br /&gt;
* [[Файл:Physicsworld.png]] - [[Physicsworld]] - физический мир Box2D&lt;br /&gt;
** [[Файл:Physicsobject.png]] - [[Physicsobject]] - физические объекты&lt;br /&gt;
** [[Файл:Physics links.png]] - [[Physicsjoint]] - физические соединения&lt;br /&gt;
*  [[Файл:Eraser.png]] - [[Eraser]] - стирачка&lt;br /&gt;
* [[Файл:Kub.png]] - [[trivia]] - игровая механика - миллионер (trivia)&lt;br /&gt;
* [[Файл:Kub.png]] - [[Dailybonus]] - объект для управления механизмом ежедневного бонуса за вход в игру.&lt;br /&gt;
&lt;br /&gt;
=== Global score ===&lt;br /&gt;
* [[Файл:Gamecenter.png]] - [[Gamecenter]] - объект для отправки данных на GameCenter iTunse&lt;br /&gt;
**[[Файл:Kub.png]] - [[Achievementitem]] -  шаблон локального достижения (оффлайн ачивка)&lt;br /&gt;
* [[Файл:Gamecircle.jpg]] - [[Amazon GameCircle]] - объект для отправки данных Amazon GameCircle&lt;br /&gt;
* [[Файл:Google-play-games-android.jpg‎]] - [[Google Play services]] - объект для отправки данных на Google Play services&lt;br /&gt;
* [[Файл:Localtoplist.png]] - [[Localtoplist]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
* [[Файл:Globaltoplist.png]] - [[Globaltoplist]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
* [[Файл:Globaltopsender.png]] - [[Globaltopsender]] - настройки для отображения результатов прохождения игры&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
* [[Файл:Options.png]] - [[Options]] - общие настройки игры&lt;br /&gt;
* [[Файл:Gamedata.png]] - [[Gamedata]] -&lt;br /&gt;
* [[Файл:Controls.png]] - [[Controls]] - обьект для работы с клавишами клавиатуры или девайса &lt;br /&gt;
* [[Файл:Editicon.png]] - [[Edit]] - ввод текста&lt;br /&gt;
* [[Файл:Store.png]] - [[Store]] - настройки InApp покупок в игре&lt;br /&gt;
** [[Файл:Kub.png]] - [[Wallet]] - объект для начисления игровой валюты при InApp покупках через объект economics&lt;br /&gt;
* [[Файл:Notification.png]] - [[Notification]] - push-уведомления&lt;br /&gt;
* [[Файл:Imagepicker.png]] - [[Imagepiker]] - объект для загрузки фото из галереи&lt;br /&gt;
* [[Файл:Video.png]] - [[Video]] - объект для просмотра видео&lt;br /&gt;
* [[Файл:Webview.png]] - [[Webview]] - объект для просмотра интернет страниц в приложении&lt;br /&gt;
* [[Файл:Flurryobject.png]] - [[Flurry]] - настройки системы статистики для приложений https://dev.flurry.com&lt;br /&gt;
* [[Файл:Moregames.png]] - [[MoreGamesList]] - запрос банеров рекламируемых игр&lt;br /&gt;
* [[Файл:Advertisement.png]] - [[Advertisement]] - банерная система flurry, amazon&lt;br /&gt;
* [[Файл:Splitmanager.png]] - [[Splitmanager or A\B Testing]] - менеджер сплитов&lt;br /&gt;
* [[Файл:Tapjoy.png]] - [[Tapjoy]] - система рекламы игр&lt;br /&gt;
* [[Файл:Playhaven.png|24px]] - [[Playhaven]] - система рекламы игр с внутренними up-sale&lt;br /&gt;
* [[Файл:Mobileapptracker.png|24px]] - [[Mobileapptracking]] -&lt;br /&gt;
* [[Файл:Chartboost-logo-new.jpeg]] - [[Chartboost]] -  Chartboost-logo-new.jpeg&lt;br /&gt;
* [[Файл:Kub.png]] - [[System]] - объект для доступа к системным настройкам&lt;br /&gt;
* [[Файл:Kub.png]] - [[Salesmanager]] - менеджер акций&lt;br /&gt;
* [[Файл:Kub.png]] - [[Cloud]] - объект для синхронизации в облаке&lt;br /&gt;
* [[Файл:Kub.png]] - [[Game]] - объект для отправки событий&lt;br /&gt;
&lt;br /&gt;
=== Social ===&lt;br /&gt;
* [[Файл:Facebook.png]] - [[Facebook]] - настройки расшаривания Facebook&lt;br /&gt;
** [[Файл:Esocialfrienditem.png]] - [[Esocialitem]] - Шаблон для ячейки списка друзей&lt;br /&gt;
** [[Файл:Kub.png]] - [[Esocialgiftitem]] - Шаблон для ячейки с предметом, который можно подарить другу&lt;br /&gt;
** [[Файл:Esocial.png]] - [[Esocial]] - объект для взаимодействия с Facebook'ом&lt;br /&gt;
* [[Файл:Twitter.png]] - [[Twitter]] - настройки расшаривания Twitter&lt;br /&gt;
* [[Файл:Odnoklassniki.png]] - [[Odnoklassniki]] - настройки для социальной сети Одноклассники&lt;br /&gt;
* [[Файл:Googleplus.png]] - [[GooglePlus]] - настройки для социальной сети GooglePlus&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
* [[Файл:Forward.png]] - [[SendMail]] - отправка письма через почтовый клиент&lt;br /&gt;
* [[Файл:footer-icon-rate.png]] - [[Rate]] - вызов окна оценки приложения&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;50px&amp;quot; heights=&amp;quot;50px&amp;quot; &amp;gt;&lt;br /&gt;
Изображение:Who.png&lt;br /&gt;
Изображение:AnimalHideSeek.png&lt;br /&gt;
Изображение:travel.png&lt;br /&gt;
Изображение:Game_Adventure_Train.png&lt;br /&gt;
Изображение:Gmae_Match_MoveTheDolly.png&lt;br /&gt;
Изображение:Game_Patchwork_BigEyes.png&lt;br /&gt;
Изображение:Game_Patchwork_Chameleon.png&lt;br /&gt;
Изображение:Game_Patchwork_Logicly.png‎&lt;br /&gt;
Изображение:Game_Patchwork_Stickers.png‎&lt;br /&gt;
Изображение:Elephant.png&lt;br /&gt;
Изображение:Elephant2.png&lt;br /&gt;
Изображение:Cinderella.png&lt;br /&gt;
Изображение:Pigs.png&lt;br /&gt;
Изображение:Bremenskye.png&lt;br /&gt;
Изображение:Book_SnowWhite.png&lt;br /&gt;
Изображение:Book_PussInBoots.png&lt;br /&gt;
Изображение:Call.png&lt;br /&gt;
Изображение:GreatestArtists.png&lt;br /&gt;
Изображение:Game_Puzzle_Kids.png&lt;br /&gt;
Изображение:Game_Puzzle_Architect.png‎&lt;br /&gt;
Изображение:Game_Puzzle_Science.png&lt;br /&gt;
Изображение:Ico_1_114_Full.png&lt;br /&gt;
Изображение:Game_Adventure_Dreams.png&lt;br /&gt;
Изображение:Abc.png&lt;br /&gt;
Изображение:Ico_114_Full.png&lt;br /&gt;
Изображение:Ico_114_Paints.png&lt;br /&gt;
Изображение:Ico_114_Puzzle.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:main]]&lt;/div&gt;</summary>
		<author><name>Vefimov</name></author>
		
	</entry>
</feed>