-- было -1 и устанавливалось в нужное значение в GameTutorial::init()
-- но при заходе в редактор новое значение не устанавливалось
BaseBuildingType = 2
FieldType = 1
ForestArea = 85

function SetBaseBuildingType(type)
	BaseBuildingType = type
end


-- Функции доступа к переменным туториала на основе вызвавшей их функции
function tutHasName(name)
	return tutorial:variables():findName(name);
end

function tutSetInt(name, value)
	tutorial:variables():setInt(name, value)
end

function tutGetInt(name)
	if (tutorial:variables():findName(name)) then
		return tutorial:variables():getInt(name);
	else
		return nil;
	end
end

function tutSetString(name, value)
	tutorial:variables():setString(name, value)
end

function tutGetString(name)
	if (tutorial:variables():findName(name)) then
		return tutorial:variables():getString(name);
	else
		return nil;
	end
end

function tutSetFloat(name, value)
	tutorial:variables():setFloat(name, value)
end

function tutGetFloat(name)
	if (tutorial:variables():findName(name)) then
		return tutorial:variables():getFloat(name);
	else
		return nil;
	end
end

function tutSetBool(name, value)
	tutorial:variables():setBool(name, value)
end

function tutGetBool(name)
	if (tutorial:variables():findName(name)) then
		return tutorial:variables():getBool(name);
	else
		return nil;
	end
end

-- Параметры пропуска действий объектов
allowPass = 0
allowList = 1

-- Прототип простого туториала уровня
function REA_DEFAULT_TUTORIAL(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("L_1_1_3")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	-- State машина туториала
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

-- Прототип умной подсказки (по сути - триггер на события)
function REA_SMART_TUTORIAL(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_SMART_TUTORIAL_Active", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_SMART_TUTORIAL_Active")) then
	end
	-- Логика подсказки при активном состоянии
	if (not tutGetBool("REA_SMART_TUTORIAL_Active")) then
	end
end



-- Функции туториала для аддона
function REA_01_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_RentHint")
		tutorial:queueAddMessage("REA_TasksHint")
		tutorial:queueAddMessage("REA_FirstHouseHint")
		tutorial:queueAddMessage("REA_HouseBuildHint")
		tutorial:queueAddMessage("REA_FieldsHint")
		tutorial:queueAddMessage("REA_HousesButtonHint")
		tutorial:queueAddMessage("REA_House1ButtonHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
		
		tutorial:show(0.25)
		tutorial:setCharacter("Dundee")
		tutorial:setText("REA_01_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_01_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Dundee")
			tutorial:switchText("REA_01_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_01_01_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_01_02(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_RentArrowHint")
		tutorial:queueAddMessage("REA_MaterialsHint")
		tutorial:queueAddMessage("REA_SawmillHint")
		tutorial:queueAddMessage("REA_FirstSawmillHint")
		tutorial:queueAddMessage("REA_SawmillSelectHint")
		tutorial:queueAddMessage("REA_SawmillOfferButtonHint")
		tutorial:queueAddMessage("REA_SawmillTasksHint")
		tutorial:queueAddMessage("REA_MoneyHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
		
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_01_03(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_RentArrowHint")
		tutorial:queueAddMessage("REA_MaterialsAllHint")
		tutorial:queueAddMessage("REA_MoneyAllHint")
		tutorial:queueAddMessage("REA_HouseUpgradeHint")
		tutorial:queueAddMessage("REA_HouseUpgradeButtonHint")
		tutSetInt("REA_MoneyLostHint_Count", 1)
		tutorial:queueAddMessage("REA_MoneyLostHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
		
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_01_03_b_2(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
		
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("REA_01_03_b_2_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end

	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_01_03_b_2_02", 0.5)

			arrowId = tutorial:addArrow()
			tutorial:getArrow(arrowId):setPosition(195, 485)
			tutorial:getArrow(arrowId):setAngle(270)
			tutorial:getArrow(arrowId):setIgnoreContext(true)
			tutorial:getArrow(arrowId):setShowTimer(1.5)
			tutorial:getArrow(arrowId):setScale(0.7)
			tutorial:getArrow(arrowId):show(0.5)

			tutorial:setObjectsAllowType(allowPass)
			tutSetBool("TutorialToSelect", true)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
		end
	end
end

function REA_02_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_MaterialsAllHint")
		tutorial:queueAddMessage("REA_MoneyAllHint")
		tutorial:queueAddMessage("REA_ForestAreaHint")
		tutorial:queueAddMessage("REA_BuyWorkerHint")
		tutSetInt("REA_MoneyLostHint_Count", 3)
		tutorial:queueAddMessage("REA_MoneyLostHint")
		tutorial:queueAddMessage("REA_JunkBridgeHint")
		tutorial:queueAddMessage("REA_ForestAreaWorkersHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
		
		tutorial:show(0.25)
		tutorial:setCharacter("Snowman")
		tutorial:setText("REA_02_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_02_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Snowman")
			tutorial:switchText("REA_02_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_02_02(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_DestroyHint")
		tutorial:queueAddMessage("REA_House1DestroyHint")
		tutorial:queueAddMessage("REA_HouseDestroyButtonHint")
		tutSetInt("REA_MoneyLostHint_Count", 3)
		tutorial:queueAddMessage("REA_MoneyLostHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
				
		tutorial:show(0.25)
		tutorial:setCharacter("Snowman")
		tutorial:setText("REA_02_02_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		arrowId = tutorial:addArrow()
		tutorial:getArrow(arrowId):setPosition(125, 575)
		tutorial:getArrow(arrowId):setAngle(90)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):setShowTimer(3.0)
		tutorial:getArrow(arrowId):show(0.5)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_02_02_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_02_03(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_MarketsHint")
		tutorial:queueAddMessage("REA_UnfocusMarketHint")
		tutorial:queueAddMessage("REA_FocusMarketHint")
		tutSetInt("REA_MoneyLostHint_Count", 3)
		tutorial:queueAddMessage("REA_MoneyLostHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
		
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_02_04(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutSetInt("REA_MoneyLostHint_Count", 3)
		tutorial:queueAddMessage("REA_MoneyLostHint")
		tutorial:queueAddMessage("REA_SnowHint")
		tutorial:queueAddMessage("REA_SnowWorkersHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Snowman")
		tutorial:setText("REA_02_04_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_02_04_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchText("REA_02_04_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_03_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_FonarHint")
		tutorial:queueAddMessage("REA_FonarBuildingHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
				
		tutorial:show(0.25)
		tutorial:setCharacter("Dartanian")
		tutorial:setText("REA_03_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_03_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Dartanian")
			tutorial:switchText("REA_03_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchText("REA_03_01_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_03_01_05", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 5) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 6)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_03_02(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_MoreGoldHint")
		tutorial:queueAddMessage("REA_BridgeHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
				
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_03_03(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutorial:show(0.25)
		tutorial:setCharacter("Dartanian")
		tutorial:setText("REA_03_03_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_03_03_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 6)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_03_04(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_BankOverflowHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_03_05(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_03_06(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_ShipWorkersHint")
		tutorial:queueAddMessage("REA_ShipMaterialsHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_04_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("REA_04_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_04_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 6)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_04_02(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("REA_04_02_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_04_02_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 6)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_04_03(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_TreasureHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_04_04(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_PiratHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_04_05(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_04_06(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_RomFactoryTaxersHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("REA_04_06_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		arrowId = tutorial:addArrow()
		tutorial:getArrow(arrowId):setPosition(860, 490)
		tutorial:getArrow(arrowId):setAngle(90)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):setShowTimer(3.0)
		tutorial:getArrow(arrowId):show(0.5)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_04_06_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_04_06_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_05_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_MiniHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("REA_05_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_05_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchText("REA_05_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("REA_05_01_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_05_02(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_05_03(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_05_04(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("REA_05_04_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		arrowId = tutorial:addArrow()
		tutorial:getArrow(arrowId):setPosition(580, 570)
		tutorial:getArrow(arrowId):setAngle(90)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):setShowTimer(3.0)
		tutorial:getArrow(arrowId):show(0.5)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_05_04_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("REA_05_04_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_05_05(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_05_06(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_05_07(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_RailsWorkersHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("REA_05_07_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_05_07_02", 0.5)
			arrowId = tutorial:addArrow()
			tutorial:getArrow(arrowId):setPosition(160, 530)
			tutorial:getArrow(arrowId):setAngle(90)
			tutorial:getArrow(arrowId):setIgnoreContext(true)
			tutorial:getArrow(arrowId):setShowTimer(1.5)
			tutorial:getArrow(arrowId):show(0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("REA_05_07_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_06_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("REA_06_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Bubba")
			tutorial:switchText("REA_06_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_06_02(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_BeehiveHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutorial:show(0.25)
		tutorial:setCharacter("Bubba")
		tutorial:setText("REA_06_02_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_06_02_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_06_02_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Bubba")
			tutorial:switchText("REA_06_02_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_06_03(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_06_04(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_PalmsWorkersHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Bubba")
		tutorial:setText("REA_06_04_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		arrowId = tutorial:addArrow()
		tutorial:getArrow(arrowId):setPosition(680, 510)
		tutorial:getArrow(arrowId):setAngle(90)
		tutorial:getArrow(arrowId):setShowTimer(3.0)
		tutorial:getArrow(arrowId):show(0.5)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("REA_06_04_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_06_05(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_06_06(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_07_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("REA_07_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Fakir")
			tutorial:switchText("REA_07_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchText("REA_07_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_07_02(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Fakir")
		tutorial:setText("REA_07_02_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_07_02_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_07_03(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_07_04(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_07_05(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_07_06(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_07_07(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_07_08(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_TankWorkersHint")
		tutorial:queueAddMessage("REA_TankWellsHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Fakir")
		tutorial:setText("REA_07_08_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_07_08_02", 0.5)
			
			arrowId = tutorial:addArrow()
			tutorial:getArrow(arrowId):setPosition(840, 450)
			tutorial:getArrow(arrowId):setAngle(90)
			tutorial:getArrow(arrowId):setShowTimer(1.5)
			tutorial:getArrow(arrowId):show(0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_08_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Saruman")
		tutorial:setText("REA_08_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("REA_08_01_02", 0.5)
			arrowId = tutorial:addArrow()
			tutorial:getArrow(arrowId):setPosition(135, 570)
			tutorial:getArrow(arrowId):setAngle(90)
			tutorial:getArrow(arrowId):setShowTimer(1.5)
			tutorial:getArrow(arrowId):show(0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Saruman")
			tutorial:switchText("REA_08_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_08_01_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_08_02(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_08_03(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_08_04(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_08_05(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_08_06(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_08_07(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_TempleWorkersHint")
		tutorial:queueAddMessage("REA_TempleMaterialsHint")
		tutorial:queueAddMessage("REA_TempleGoldHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
									
		tutorial:show(0.25)
		tutorial:setCharacter("Saruman")
		tutorial:setText("REA_08_07_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_08_07_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_09_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_09_02(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_09_03(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		--tutorial:show(0.25)
		--tutorial:setCharacter("Santa")
		--tutorial:setText("REA_09_03_01")
		--tutSetFloat("TutorialShowDelayTime", 1.5)
		--tutSetInt("TutorialState", 1)
		--tutorial:setWidgetVisible("TutorialOk", true)
		--tutSetBool("TutorialLock", true)
		tutSetBool("TutorialToSelect", true)

	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_09_03_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_09_03_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("REA_09_03_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_09_04(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_SnowWinHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Santa")
		tutorial:setText("REA_09_04_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_09_04_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchText("REA_09_04_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_09_05(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_09_06(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_09_07(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_FishingWorkersHint")
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Santa")
		tutorial:setText("REA_09_07_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_09_07_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_09_07_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_10_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Sheldon")
		tutorial:setText("REA_10_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("REA_10_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_10_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_10_02(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_10_03(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Sheldon")
		tutorial:setText("REA_10_03_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_10_03_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sheldon")
			tutorial:switchText("REA_10_03_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_10_04(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_10_05(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("REA_10_05_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sheldon")
			tutorial:switchText("REA_10_05_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("REA_10_05_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function REA_10_06(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_10_07(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
						
		tutSetBool("TutorialToSelect", true)
	end
end

function REA_10_08(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("REA_GoldTimeHint")
		tutorial:queueAddMessage("REA_SilverTimeHint")
		tutorial:queueAddMessage("REA_NormalTimeHint")
							
		tutorial:show(0.25)
		tutorial:setCharacter("Sheldon")
		tutorial:setText("REA_10_08_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

----------------------------------------------------------------------------------------------------------------------------------------------------
-- Умные подсказки для аддона
----------------------------------------------------------------------------------------------------------------------------------------------------

-- Подсказка про сбор ренты с домов
function REA_RentHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_RentHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_RentHint_ArrowsAppearTime", 10.0)	-- время появления стрелок
		tutSetFloat("REA_RentHint_Time", 0.0)				-- общее время подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_RentHint_Active")) then
		-- Небольшое исключение из правил, вдруг кто-то собирает ренту во время другой подсказки, нам надо обнулить время
		if (message:is("RentOrdered")) then
			tutSetFloat("REA_RentHint_Time", 0.0)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_RentHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutorial:game():getUnorderedMoneyCount() > 0) then
			tutSetFloat("REA_RentHint_Time", tutGetFloat("REA_RentHint_Time") + message:getVariables():getFloat("TimeDelta"))
			--PrintDebug("RentHint: ")
			--PrintDebug(tostring(tutGetFloat("REA_RentHint_Time")))
			--PrintDebug("\n")
			if (tutGetFloat("REA_RentHint_Time") > tutGetFloat("REA_RentHint_ArrowsAppearTime")) then
				-- Надо показать стрелки и перейти в активный режим подсказки
				tutSetBool("REA_RentHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_RentHint_State", 0)
				tutorial:targetAllMoney("REA_RentHint_Arrow", 0.5, IPoint(0, 75), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", 5.0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_RentHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
			end
		-- Если пользователь собирает ренту, то просто сбрасываем время
		elseif (message:is("RentOrdered")) then
			tutSetFloat("REA_RentHint_Time", 0.0)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_RentHint_State") == 0) then
			if (message:is("Update")) then
				-- Если количество мешочков стало равным 0, то снимаем блок
				if (tutorial:game():getUnorderedMoneyCount() == 0) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetInt("REA_RentHint_State", 1)
				end
			-- Прячем туториал когда игрок нажимает на продолжить
			elseif (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_RentHint_State", 1)
			elseif (message:is("RentGenerated")) then
				arrow = tutorial:addArrow()
				money = tutorial:game():getObject(message:getIntegerParam())
				moneyPos = money:getScreenPosition()
				tutorial:getArrow(arrow):setPosition(moneyPos.x, moneyPos.y + 75)
				tutorial:getArrow(arrow):setAngle(270)
				tutorial:getArrow(arrow):show(0.5)
				tutorial:getArrow(arrow):copyTime(tutorial:getArrow(arrow-1))
				tutorial:getArrow(arrow):setIgnoreContext(true)
				tutorial:bindArrowToMoney("REA_RentHint_Arrow", arrow, money)
			elseif (message:is("RentOrdered")) then
				tutorial:hideBindedArrow("REA_RentHint_Arrow", message:getIntegerParam(), 0.25)
			end
		elseif (tutGetInt("REA_RentHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_RentHint_Active", false)
				tutSetFloat("REA_RentHint_Time", 0.0)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка про сбор ренты с домов только со стрелками
function REA_RentArrowHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_RentArrowHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_RentArrowHint_ArrowsAppearTime", 15.0)	-- время появления стрелок
		tutSetFloat("REA_RentArrowHint_Time", 0.0)				-- общее время подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_RentArrowHint_Active")) then
		-- Небольшое исключение из правил, вдруг кто-то собирает ренту во время другой подсказки, нам надо обнулить время
		if (message:is("RentOrdered")) then
			tutSetFloat("REA_RentArrowHint_Time", 0.0)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_RentArrowHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutorial:game():getUnorderedMoneyCount() > 0) then
			tutSetFloat("REA_RentArrowHint_Time", tutGetFloat("REA_RentArrowHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_RentArrowHint_Time") > tutGetFloat("REA_RentArrowHint_ArrowsAppearTime")) then
				-- Надо показать стрелки и перейти в активный режим подсказки
				tutSetBool("REA_RentArrowHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_RentArrowHint_State", 0)
				tutorial:targetAllMoney("REA_RentArrowHint_Arrow", 0.5, IPoint(0, 75), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_RentArrowHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
			end
		-- Если пользователь собирает ренту, то просто сбрасываем время
		elseif (message:is("RentOrdered")) then
			tutSetFloat("REA_RentArrowHint_Time", 0.0)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_RentArrowHint_State") == 0) then
			if (message:is("Update")) then
				-- Если количество мешочков стало равным 0, то снимаем блок
				if (tutorial:game():getUnorderedMoneyCount() == 0) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetInt("REA_RentArrowHint_State", 1)
				end
			-- Прячем туториал когда игрок нажимает на продолжить
			elseif (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_RentArrowHint_State", 1)
			elseif (message:is("RentGenerated")) then
				arrow = tutorial:addArrow()
				money = tutorial:game():getObject(message:getIntegerParam())
				moneyPos = money:getScreenPosition()
				tutorial:getArrow(arrow):setPosition(moneyPos.x, moneyPos.y + 75)
				tutorial:getArrow(arrow):setAngle(270)
				tutorial:getArrow(arrow):show(0.5)
				tutorial:getArrow(arrow):copyTime(tutorial:getArrow(arrow-1))
				tutorial:getArrow(arrow):setIgnoreContext(true)
				tutorial:bindArrowToMoney("REA_RentArrowHint_Arrow", arrow, money)
			elseif (message:is("RentOrdered")) then
				tutorial:hideBindedArrow("REA_RentArrowHint_Arrow", message:getIntegerParam(), 0.25)
			end
		elseif (tutGetInt("REA_RentArrowHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_RentArrowHint_Active", false)
				tutSetFloat("REA_RentArrowHint_Time", 0.0)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на таски
function REA_TasksHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_TasksHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_TasksHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("REA_TasksHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_TasksHint_FirstHouse", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_TasksHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("House1", "press")) then
			tutSetBool("REA_TasksHint_FirstHouse", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_TasksHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_TasksHint_FirstHouse")) then
			tutSetFloat("REA_TasksHint_Time", tutGetFloat("REA_TasksHint_Time") + message:getVariables():getFloat("TimeDelta"))
			--PrintDebug("TasksHint: ")
			--PrintDebug(tostring(tutGetFloat("REA_TasksHint_Time")))
			--PrintDebug("\n")
			if (tutGetFloat("REA_TasksHint_Time") > tutGetFloat("REA_TasksHint_HintAppearTime")) then
				-- Надо показать стрелку на таски и перейти в активный режим подсказки
				tutSetBool("REA_TasksHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_TasksHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_TasksHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrow = tutorial:addArrow()
				tutorial:getArrow(arrow):setPosition(713, 713)
				tutorial:getArrow(arrow):setAngle(45)
				tutorial:getArrow(arrow):setShowTimer(1.0)
				tutorial:getArrow(arrow):show(0.5)
				tutorial:show(0.25)
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("House1", "press")) then
			tutSetBool("REA_TasksHint_FirstHouse", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_TasksHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("House1", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetBool("REA_TasksHint_FirstHouse", true)
				tutSetInt("REA_TasksHint_State", 2)
			end
		elseif (tutGetInt("REA_TasksHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_TasksHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка про строительство первого дома
function REA_FirstHouseHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_FirstHouseHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_FirstHouseHint_HintAppearTime", 35.0)	-- время появления подсказки
		tutSetFloat("REA_FirstHouseHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_FirstHouseHint_FirstHouse", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_FirstHouseHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("House1", "press")) then
			tutSetBool("REA_FirstHouseHint_FirstHouse", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_FirstHouseHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_FirstHouseHint_FirstHouse")) then
			tutSetFloat("REA_FirstHouseHint_Time", tutGetFloat("REA_FirstHouseHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_FirstHouseHint_Time") > tutGetFloat("REA_FirstHouseHint_HintAppearTime")) then
				-- Перейти в активный режим подсказки
				tutSetBool("REA_FirstHouseHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutorial:setObjectsAllowType(allowList)
				tutorial:setCharacter("Sedrik")
				tutorial:setWidgetVisible("TutorialOk", false)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				-- Если выбрана площадка
				if (tutorial:isFreeLargeFieldSelected()) then
					arrowId = tutorial:addArrow()
					tutSetInt("REA_FirstHouseHint_ActiveArrow", arrowId)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					-- Если находимся на выборе Дома/Здания
					if (tutorial:isLargeFieldInterface()) then
						tutSetInt("REA_FirstHouseHint_State", 1)
						tutorial:setText("REA_FirstHouseHint_02_alt")
						tutorial:addInterfaceButton("Houses")
						tutorial:variables():setBool("TutorialKeepSelection", true)
						tutorial:setSelected()
						tutorial:removeObjects()
						tutorial:getArrow(arrowId):setPosition(617, 100)
						tutorial:getArrow(arrowId):setAngle(270)
						tutorial:getArrow(arrowId):setShowTimer(1.0)
						tutorial:getArrow(arrowId):show(0.5)
					else
					-- Ушли в выбор дома
						tutSetInt("REA_FirstHouseHint_State", 2)
						tutorial:setText("REA_FirstHouseHint_03_alt")
						tutorial:addInterfaceButton("House1")
						tutorial:getArrow(arrowId):setPosition(445, 100)
						tutorial:getArrow(arrowId):setAngle(270)
						tutorial:getArrow(arrowId):setShowTimer(1.0)
						tutorial:getArrow(arrowId):show(0.5)
					end
				else
					tutSetInt("REA_FirstHouseHint_State", 0)
					tutorial:setText("REA_FirstHouseHint_01")
					tutorial:clearSelection()
					tutorial:targetAllFreeLargeFields("REA_FirstHouseHint_Arrow", 0.5, IPoint(0, 40), 1.5)
				end
				tutorial:show(0.25)
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("House1", "press")) then
			tutSetBool("REA_FirstHouseHint_FirstHouse", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Когда не выбрана площадка
		if (tutGetInt("REA_FirstHouseHint_State") == 0) then
			if (message:is("Update") and tutorial:game():getSelected()) then
				id = tutorial:game():getSelected():id()
				arrowId = tutGetInt("REA_FirstHouseHint_Arrow"..tostring(id))
				tutSetInt("REA_FirstHouseHint_ActiveArrow", arrowId)
				tutorial:hideArrows(0.5)
				tutorial:getArrow(arrowId):moveTo(617, 100, 270, 1.0, 1.0)
				tutorial:getArrow(arrowId):setShown()
				tutorial:getArrow(arrowId):setIgnoreContext(true)
				tutorial:variables():setBool("TutorialKeepSelection", true)
				tutorial:setSelected()
				tutorial:removeObjects()
				tutorial:addInterfaceButton("Houses")
				tutorial:switchText("REA_FirstHouseHint_02", 0.5)
				tutSetInt("REA_FirstHouseHint_State", 1)
			end
		elseif (tutGetInt("REA_FirstHouseHint_State") == 1) then
			if (message:is("Houses", "press")) then
				tutorial:switchText("REA_FirstHouseHint_03", 0.5)
				tutorial:variables():setInt("REA_FirstHouseHint_State", 2)
				arrowId = tutGetInt("REA_FirstHouseHint_ActiveArrow")
				tutorial:getArrow(arrowId):stop()
				tutorial:getArrow(arrowId):moveTo(445, 100, 270, 1.0, 0.5)
				tutorial:removeInterfaceButton("Houses")
				tutorial:addInterfaceButton("House1")
			end
		elseif (tutGetInt("REA_FirstHouseHint_State") == 2) then
			if (message:is("House1", "press")) then
				tutorial:unsetSelected()
				tutorial:variables():setBool("TutorialKeepSelection", false)
				tutorial:switchText("REA_FirstHouseHint_04", 0.5)
				tutorial:variables():setInt("REA_FirstHouseHint_State", 3)
				arrowId = tutGetInt("REA_FirstHouseHint_ActiveArrow")
				tutorial:getArrow(arrowId):hide(0.25)
				tutorial:removeInterfaceButton("House1")
				tutorial:setWidgetVisible("TutorialOk", true)
			end
		elseif (tutGetInt("REA_FirstHouseHint_State") == 3) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hide(0.25)
				tutSetInt("REA_FirstHouseHint_State", 4)
			end
		elseif (tutGetInt("REA_FirstHouseHint_State") == 4) then
			if (message:is("TutorialPop")) then
				tutSetBool("REA_FirstHouseHint_FirstHouse", true)
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_FirstHouseHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на постройку дома
function REA_HouseBuildHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_HouseBuildHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_HouseBuildHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("REA_HouseBuildHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_HouseBuildHint_FirstHouse", false)
		tutSetBool("REA_HouseBuildHint_Shown", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_HouseBuildHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("House1", "press")) then
			tutSetBool("REA_HouseBuildHint_FirstHouse", true)
		end
		if (message:is("House1", "press") or message:is("BuildingBuilt")) then
			tutSetFloat("REA_HouseBuildHint_Time", 0.0)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_HouseBuildHint_Active")) then
		if (message:is("House1", "press")) then
			tutSetBool("REA_HouseBuildHint_FirstHouse", true)
		end
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_HouseBuildHint_FirstHouse") and tutorial:hasFreeLargeFields() and not tutGetBool("REA_HouseBuildHint_Shown")) then
			tutSetFloat("REA_HouseBuildHint_Time", tutGetFloat("REA_HouseBuildHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_HouseBuildHint_Time") > tutGetFloat("REA_HouseBuildHint_HintAppearTime")) then
				tutSetBool("REA_HouseBuildHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_HouseBuildHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_HouseBuildHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrow = tutorial:addArrow()
				tutorial:getArrow(arrow):setPosition(713, 713)
				tutorial:getArrow(arrow):setAngle(45)
				tutorial:getArrow(arrow):setShowTimer(1.0)
				tutorial:getArrow(arrow):show(0.5)
				tutorial:show(0.25)
			end
		elseif ((message:is("House1", "press") or (message:is("BuildingBuilt"))) and tutGetBool("REA_HouseBuildHint_FirstHouse")) then
			tutSetFloat("REA_HouseBuildHint_Time", 0.0)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_HouseBuildHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetBool("REA_HouseBuildHint_Shown", true)
				tutSetFloat("REA_HouseBuildHint_Time", 0.0)
				tutSetInt("REA_HouseBuildHint_State", 1)
			end
		elseif (tutGetInt("REA_HouseBuildHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_HouseBuildHint_Active", false)
			end
		end
	end
end

-- Подсказка на пустые площадки
function REA_FieldsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_FieldsHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_FieldsHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_FieldsHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_FieldsHint_FirstHouse", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_FieldsHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("House1", "press")) then
			tutSetBool("REA_FieldsHint_FirstHouse", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_FieldsHint_Active")) then
		if (message:is("House1", "press")) then
			tutSetBool("REA_FieldsHint_FirstHouse", true)
		end
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_FieldsHint_FirstHouse") and tutorial:hasFreeLargeFields() and not tutorial:isFreeLargeFieldSelected()) then
			tutSetFloat("REA_FieldsHint_Time", tutGetFloat("REA_FieldsHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_FieldsHint_Time") > tutGetFloat("REA_FieldsHint_HintAppearTime")) then
				tutSetBool("REA_FieldsHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_FieldsHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_FieldsHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetAllFreeLargeFields("REA_FieldsHint_Arrow", 0.5, IPoint(0, 40), 5.0)
				tutorial:show(0.25)
			end
		elseif ((message:is("House1", "press") or (message:is("BuildingBuilt"))) and tutGetBool("REA_FieldsHint_FirstHouse")) then
			tutSetFloat("REA_FieldsHint_Time", 0.0)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_FieldsHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_FieldsHint_Time", 0.0)
				tutSetInt("REA_FieldsHint_State", 1)
			end
		elseif (tutGetInt("REA_FieldsHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_FieldsHint_Active", false)
			end
		end
	end
end

-- Подсказка на кнопку Дома
function REA_HousesButtonHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_HousesButtonHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_HousesButtonHint_HintAppearTime", 5.0)	-- время появления подсказки
		tutSetFloat("REA_HousesButtonHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_HousesButtonHint_FirstHouse", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_HousesButtonHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("House1", "press")) then
			tutSetBool("REA_HousesButtonHint_FirstHouse", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_HousesButtonHint_Active")) then
		if (message:is("House1", "press")) then
			tutSetBool("REA_HousesButtonHint_FirstHouse", true)
		end
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_HousesButtonHint_FirstHouse")) then
			if (tutorial:isLargeFieldInterface() and tutGetInt("REA_HousesButtonHint_FieldId") == tutorial:game():getSelected():id()) then
				tutSetFloat("REA_HousesButtonHint_Time", tutGetFloat("REA_HousesButtonHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("REA_HousesButtonHint_Time") > tutGetFloat("REA_HousesButtonHint_HintAppearTime")) then
					tutSetBool("REA_HousesButtonHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("REA_HousesButtonHint_State", 0)
					tutorial:setCharacter("Sedrik")
					tutorial:setText("REA_HousesButtonHint_01")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					arrowId = tutorial:addArrow()
					tutorial:getArrow(arrowId):setPosition(617, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutorial:variables():setFloat("TutorialShowDelayTime", 5.0)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:show(0.25)
				end
			else
				tutSetFloat("REA_HousesButtonHint_Time", 0.0)
				if (tutorial:isLargeFieldInterface()) then
					tutSetInt("REA_HousesButtonHint_FieldId", tutorial:game():getSelected():id())
				end
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_HousesButtonHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("Update") and not tutorial:isLargeFieldInterface())) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_HousesButtonHint_Time", 0.0)
				tutSetInt("REA_HousesButtonHint_State", 1)
			end
		elseif (tutGetInt("REA_HousesButtonHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_HousesButtonHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)
			end
		end
	end
end

-- Подсказка на кнопку Хижина
function REA_House1ButtonHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_House1ButtonHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_House1ButtonHint_HintAppearTime", 5.0)	-- время появления подсказки
		tutSetFloat("REA_House1ButtonHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_House1ButtonHint_FirstHouse", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_House1ButtonHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("House1", "press")) then
			tutSetBool("REA_House1ButtonHint_FirstHouse", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_House1ButtonHint_Active")) then
		if (message:is("House1", "press")) then
			tutSetBool("REA_House1ButtonHint_FirstHouse", true)
		end
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_House1ButtonHint_FirstHouse")) then
			if (tutorial:isLargeFieldInterfaceHouses() and tutGetInt("REA_House1ButtonHint_FieldId") == tutorial:game():getSelected():id()) then
				tutSetFloat("REA_House1ButtonHint_Time", tutGetFloat("REA_House1ButtonHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("REA_House1ButtonHint_Time") > tutGetFloat("REA_House1ButtonHint_HintAppearTime")) then
					tutSetBool("REA_House1ButtonHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("REA_House1ButtonHint_State", 0)
					tutorial:setCharacter("Sedrik")
					tutorial:setText("REA_House1ButtonHint_01")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					arrowId = tutorial:addArrow()
					tutorial:getArrow(arrowId):setPosition(445, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutorial:variables():setFloat("TutorialShowDelayTime", 5.0)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:show(0.25)
				end
			else
				tutSetFloat("REA_House1ButtonHint_Time", 0.0)
				if (tutorial:isLargeFieldInterfaceHouses()) then
					tutSetInt("REA_House1ButtonHint_FieldId", tutorial:game():getSelected():id())
				end
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_House1ButtonHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("Update") and not tutorial:isLargeFieldInterfaceHouses())) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_House1ButtonHint_Time", 0.0)
				tutSetInt("REA_House1ButtonHint_State", 1)
			end
		elseif (tutGetInt("REA_House1ButtonHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_House1ButtonHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)
			end
		end
	end
end

-- Подсказка на недостаток материалов
function REA_MaterialsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_MaterialsHint_Active", false)			-- активность подсказки
		tutSetInt("REA_MaterialsHint_Count", 1)					-- начальное количество кликов для появления подсказки
		tutSetInt("REA_MaterialsHint_Counter", tutGetInt("REA_MaterialsHint_Count")) -- текущее количество кликов, оставшееся до появления подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_MaterialsHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_MaterialsHint_Active")) then
		-- Обновляем количество кликов
		if (message:is("MaterialsBlock")) then
			tutSetInt("REA_MaterialsHint_Counter", tutGetInt("REA_MaterialsHint_Counter") - 1)
			if (tutGetInt("REA_MaterialsHint_Counter") <= 0) then
				-- Обновляем счётчики кликов
				if (tutGetInt("REA_MaterialsHint_Count") == 1) then
					tutSetInt("REA_MaterialsHint_Count", 3)
				elseif (tutGetInt("REA_MaterialsHint_Count") == 3) then
					tutSetInt("REA_MaterialsHint_Count", 5)
				end
				tutSetInt("REA_MaterialsHint_Counter", tutGetInt("REA_MaterialsHint_Count"))
				-- Надо перейти в активный режим подсказки
				tutSetBool("REA_MaterialsHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_MaterialsHint_State", 0)
				tutorial:setCharacter("Sedrik")
				if (tutorial:getSawmillsCount() == 0) then
					tutorial:setText("REA_MaterialsHint_01")
				else
					tutorial:targetAllSawmills(0.5, IPoint(0, 40), 1.5)
					tutorial:setText("REA_MaterialsHint_02")
				end
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_MaterialsHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_MaterialsHint_State", 2)
			end
		elseif (tutGetInt("REA_MaterialsHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_MaterialsHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на недостаток золота
function REA_MoneyHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_MoneyHint_Active", false)			-- активность подсказки
		tutSetInt("REA_MoneyHint_Count", 1)					-- начальное количество кликов для появления подсказки
		tutSetInt("REA_MoneyHint_Counter", tutGetInt("REA_MoneyHint_Count")) -- текущее количество кликов, оставшееся до появления подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_MoneyHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_MoneyHint_Active")) then
		-- Обновляем количество кликов
		if (message:is("MoneyBlock")) then
			tutSetInt("REA_MoneyHint_Counter", tutGetInt("REA_MoneyHint_Counter") - 1)
			if (tutGetInt("REA_MoneyHint_Counter") <= 0) then
				-- Обновляем счётчики кликов
				if (tutGetInt("REA_MoneyHint_Count") == 1) then
					tutSetInt("REA_MoneyHint_Count", 3)
				elseif (tutGetInt("REA_MoneyHint_Count") == 3) then
					tutSetInt("REA_MoneyHint_Count", 5)
				end
				tutSetInt("REA_MoneyHint_Counter", tutGetInt("REA_MoneyHint_Count"))
				-- Надо перейти в активный режим подсказки
				tutSetBool("REA_MoneyHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_MoneyHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_MoneyHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_MoneyHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hide(0.25)
				tutSetInt("REA_MoneyHint_State", 2)
			end
		elseif (tutGetInt("REA_MoneyHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_MoneyHint_Active", false)
			end
		end
	end
end

-- Подсказка на постройку лесопилки
function REA_SawmillHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_SawmillHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_SawmillHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("REA_SawmillHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_SawmillHint_FirstSawmill", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_SawmillHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построена лесопилка, то эта подсказка уже будет не нужна
		if (message:is("Sawmill", "press")) then
			tutSetBool("REA_SawmillHint_FirstSawmill", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_SawmillHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_SawmillHint_FirstSawmill")) then
			tutSetFloat("REA_SawmillHint_Time", tutGetFloat("REA_SawmillHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_SawmillHint_Time") > tutGetFloat("REA_SawmillHint_HintAppearTime")) then
				-- Надо показать стрелку на таски и перейти в активный режим подсказки
				tutSetBool("REA_SawmillHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_SawmillHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_SawmillHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrow = tutorial:addArrow()
				tutorial:getArrow(arrow):setPosition(264, 725)
				tutorial:getArrow(arrow):setAngle(90)
				tutorial:getArrow(arrow):setShowTimer(1.0)
				tutorial:getArrow(arrow):show(0.5)
				tutorial:show(0.25)
			end
		-- Если пользователь строит лесопилку, то подсказку больше показывать не надо
		elseif (message:is("Sawmill", "press")) then
			tutSetBool("REA_SawmillHint_FirstSawmill", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_SawmillHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("Sawmill", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetBool("REA_SawmillHint_FirstSawmill", true)
				tutSetInt("REA_SawmillHint_State", 2)
			end
		elseif (tutGetInt("REA_SawmillHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_SawmillHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка про строительство первой лесопилки
function REA_FirstSawmillHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_FirstSawmillHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_FirstSawmillHint_HintAppearTime", 40.0)	-- время появления подсказки
		tutSetFloat("REA_FirstSawmillHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_FirstSawmillHint_FirstSawmill", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_FirstSawmillHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построена лесопилка, то эта подсказка уже будет не нужна
		if (message:is("Sawmill", "press")) then
			tutSetBool("REA_FirstSawmillHint_FirstSawmill", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_FirstSawmillHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_FirstSawmillHint_FirstSawmill")) then
			tutSetFloat("REA_FirstSawmillHint_Time", tutGetFloat("REA_FirstSawmillHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_FirstSawmillHint_Time") > tutGetFloat("REA_FirstSawmillHint_HintAppearTime")) then
				-- Перейти в активный режим подсказки
				tutSetBool("REA_FirstSawmillHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutorial:setObjectsAllowType(allowList)
				tutorial:setCharacter("Sedrik")
				tutorial:setWidgetVisible("TutorialOk", false)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				-- Если выбрана площадка
				if (tutorial:isFreeLargeFieldSelected()) then
					arrowId = tutorial:addArrow()
					tutSetInt("REA_FirstSawmillHint_ActiveArrow", arrowId)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					-- Если находимся на выборе Дома/Здания
					if (tutorial:isLargeFieldInterface()) then
						tutSetInt("REA_FirstSawmillHint_State", 1)
						tutorial:setText("REA_FirstSawmillHint_02_alt")
						tutorial:addInterfaceButton("Buildings")
						tutorial:variables():setBool("TutorialKeepSelection", true)
						tutorial:setSelected()
						tutorial:removeObjects()
						tutorial:getArrow(arrowId):setPosition(765, 100)
						tutorial:getArrow(arrowId):setAngle(270)
						tutorial:getArrow(arrowId):setShowTimer(1.0)
						tutorial:getArrow(arrowId):show(0.5)
					else
					-- Ушли в выбор дома
						tutSetInt("REA_FirstSawmillHint_State", 2)
						tutorial:setText("REA_FirstSawmillHint_03_alt")
						tutorial:addInterfaceButton("Sawmill")
						tutorial:getArrow(arrowId):setPosition(455, 100)
						tutorial:getArrow(arrowId):setAngle(270)
						tutorial:getArrow(arrowId):setShowTimer(1.0)
						tutorial:getArrow(arrowId):show(0.5)
					end
				else
					tutSetInt("REA_FirstSawmillHint_State", 0)
					tutorial:setText("REA_FirstSawmillHint_01")
					tutorial:clearSelection()
					tutorial:targetAllFreeLargeFields("REA_FirstSawmillHint_Arrow", 0.5, IPoint(0, 40), 1.5)
				end
				tutorial:show(0.25)
			end
		-- Если пользователь строит лесопилку, то подсказку больше показывать не надо
		elseif (message:is("Sawmill", "press")) then
			tutSetBool("REA_FirstSawmillHint_FirstSawmill", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Когда не выбрана площадка
		if (tutGetInt("REA_FirstSawmillHint_State") == 0) then
			if (message:is("Update") and tutorial:game():getSelected()) then
				id = tutorial:game():getSelected():id()
				arrowId = tutGetInt("REA_FirstSawmillHint_Arrow"..tostring(id))
				tutSetInt("REA_FirstSawmillHint_ActiveArrow", arrowId)
				tutorial:hideArrows(0.5)
				tutorial:getArrow(arrowId):moveTo(765, 100, 270, 1.0, 1.0)
				tutorial:getArrow(arrowId):setShown()
				tutorial:getArrow(arrowId):setIgnoreContext(true)
				tutorial:variables():setBool("TutorialKeepSelection", true)
				tutorial:setSelected()
				tutorial:removeObjects()
				tutorial:addInterfaceButton("Buildings")
				tutorial:switchText("REA_FirstSawmillHint_02", 0.5)
				tutSetInt("REA_FirstSawmillHint_State", 1)
			end
		elseif (tutGetInt("REA_FirstSawmillHint_State") == 1) then
			if (message:is("Buildings", "press")) then
				tutorial:switchText("REA_FirstSawmillHint_03", 0.5)
				tutorial:variables():setInt("REA_FirstSawmillHint_State", 2)
				arrowId = tutGetInt("REA_FirstSawmillHint_ActiveArrow")
				tutorial:getArrow(arrowId):stop()
				tutorial:getArrow(arrowId):moveTo(455, 100, 270, 1.0, 0.5)
				tutorial:removeInterfaceButton("Buildings")
				tutorial:addInterfaceButton("Sawmill")
			end
		elseif (tutGetInt("REA_FirstSawmillHint_State") == 2) then
			if (message:is("Sawmill", "press")) then
				tutorial:unsetSelected()
				tutorial:variables():setBool("TutorialKeepSelection", false)
				tutorial:switchText("REA_FirstSawmillHint_04", 0.5)
				tutorial:variables():setInt("REA_FirstSawmillHint_State", 3)
				arrowId = tutGetInt("REA_FirstSawmillHint_ActiveArrow")
				tutorial:getArrow(arrowId):hide(0.25)
				tutorial:removeInterfaceButton("Sawmill")
				tutorial:setWidgetVisible("TutorialOk", true)
			end
		elseif (tutGetInt("REA_FirstSawmillHint_State") == 3) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hide(0.25)
				tutSetInt("REA_FirstSawmillHint_State", 4)
			end
		elseif (tutGetInt("REA_FirstSawmillHint_State") == 4) then
			if (message:is("TutorialPop")) then
				tutSetBool("REA_FirstSawmillHint_FirstSawmill", true)
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_FirstSawmillHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на таски после постройки лесопилки
function REA_SawmillTasksHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_SawmillTasksHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_SawmillTasksHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("REA_SawmillTasksHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_SawmillTasksHint_Shown", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_SawmillTasksHint_Active")) then
		if (message:is("House1", "press")) then
			tutSetFloat("REA_SawmillTasksHint_Time", 0.0)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_SawmillTasksHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_SawmillTasksHint_Shown")) then
			-- Если материалов не достаточно для строительства дома, то обнуляем время
			if (tutorial:game():getVariables().materials < 75) then
				tutSetFloat("REA_SawmillTasksHint_Time", 0.0)
			else
				tutSetFloat("REA_SawmillTasksHint_Time", tutGetFloat("REA_SawmillTasksHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("REA_SawmillTasksHint_Time") > tutGetFloat("REA_SawmillTasksHint_HintAppearTime")) then
					-- Надо показать стрелку на таски и перейти в активный режим подсказки
					tutSetBool("REA_SawmillTasksHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("REA_SawmillTasksHint_State", 0)
					tutorial:setCharacter("Sedrik")
					tutorial:setText("REA_SawmillTasksHint_01")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutSetFloat("TutorialShowDelayTime", 0.0)
					tutorial:setObjectsAllowType(allowPass)
					arrow = tutorial:addArrow()
					tutorial:getArrow(arrow):setPosition(713, 713)
					tutorial:getArrow(arrow):setAngle(45)
					tutorial:getArrow(arrow):setShowTimer(1.0)
					tutorial:getArrow(arrow):show(0.5)
					tutorial:show(0.25)
				end
			end
		-- Если пользователь заказывает материалы
		elseif (message:is("House1", "press")) then
			tutSetFloat("REA_SawmillTasksHint_Time", 0.0)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_SawmillTasksHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("House1", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetBool("REA_SawmillTasksHint_Shown", true)
				tutSetFloat("REA_SawmillTasksHint_Time", 0.0)
				tutSetInt("REA_SawmillTasksHint_State", 2)
			end
		elseif (tutGetInt("REA_SawmillTasksHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_SawmillTasksHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на выбор лесопилки после постройки лесопилки
function REA_SawmillSelectHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_SawmillSelectHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_SawmillSelectHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("REA_SawmillSelectHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_SawmillSelectHint_Ready", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_SawmillSelectHint_Active")) then
		if (message:is("SawmillOffer1", "press") or message:is("SawmillOffer2", "press") or message:is("SawmillOffer3", "press")) then
			tutSetBool("REA_SawmillSelectHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_SawmillSelectHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutorial:getSawmillsCount() > 0 and not tutorial:isSawmillInterface() and not tutGetBool("REA_SawmillSelectHint_Ready")) then
			tutSetFloat("REA_SawmillSelectHint_Time", tutGetFloat("REA_SawmillSelectHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_SawmillSelectHint_Time") > tutGetFloat("REA_SawmillSelectHint_HintAppearTime")) then
				tutSetBool("REA_SawmillSelectHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_SawmillSelectHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_SawmillSelectHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetAllSawmills(0.5, IPoint(0, 40), 1.5)
				tutorial:show(0.25)
			end
		-- Если пользователь заказывает материалы
		elseif (message:is("SawmillOffer1", "press") or message:is("SawmillOffer2", "press") or message:is("SawmillOffer3", "press")) then
			tutSetBool("REA_SawmillSelectHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_SawmillSelectHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_SawmillSelectHint_Time", 0.0)
				tutSetInt("REA_SawmillSelectHint_State", 2)
			elseif (message:is("SawmillOffer1", "press") or message:is("SawmillOffer2", "press") or message:is("SawmillOffer3", "press")) then
				tutSetBool("REA_SawmillSelectHint_Ready", true)
			end
		elseif (tutGetInt("REA_SawmillSelectHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_SawmillSelectHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			elseif (message:is("SawmillOffer1", "press") or message:is("SawmillOffer2", "press") or message:is("SawmillOffer3", "press")) then
				tutSetBool("REA_SawmillSelectHint_Ready", true)
			end
		end
	end
end

-- Подсказка на кнопку заказа материалов в лесопилке
function REA_SawmillOfferButtonHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_SawmillOfferButtonHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_SawmillOfferButtonHint_HintAppearTime", 5.0)	-- время появления подсказки
		tutSetFloat("REA_SawmillOfferButtonHint_Time", 0.0)				-- общее время подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_SawmillOfferButtonHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_SawmillOfferButtonHint_Active")) then
		-- Обновляем время
		if (message:is("Update")) then
			if (tutorial:isSawmillInterface() and tutGetInt("REA_SawmillOfferButtonHint_FieldId") == tutorial:game():getSelected():id()) then
				tutSetFloat("REA_SawmillOfferButtonHint_Time", tutGetFloat("REA_SawmillOfferButtonHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("REA_SawmillOfferButtonHint_Time") > tutGetFloat("REA_SawmillOfferButtonHint_HintAppearTime")) then
					tutSetBool("REA_SawmillOfferButtonHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("REA_SawmillOfferButtonHint_State", 0)
					tutorial:setCharacter("Sedrik")
					tutorial:setText("REA_SawmillOfferButtonHint_01")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					tutorial:targetSawmillOffer(0.5, IPoint(0, 50), 0.0)
					tutorial:variables():setFloat("TutorialShowDelayTime", 5.0)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:show(0.25)
				end
			else
				tutSetFloat("REA_SawmillOfferButtonHint_Time", 0.0)
				if (tutorial:isSawmillInterface()) then
					tutSetInt("REA_SawmillOfferButtonHint_FieldId", tutorial:game():getSelected():id())
				end
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_SawmillOfferButtonHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("Destroy", "press") or message:is("SawmillOffer1", "press") or	message:is("SawmillOffer2", "press") or	message:is("SawmillOffer3", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_SawmillOfferButtonHint_Time", 0.0)
				tutSetInt("REA_SawmillOfferButtonHint_State", 1)
			end
		elseif (tutGetInt("REA_SawmillOfferButtonHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_SawmillOfferButtonHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)
			end
		end
	end
end

-- Подсказка на недостаток материалов на начальных уровнях
function REA_MaterialsAllHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_MaterialsAllHint_Active", false)			-- активность подсказки
		tutSetInt("REA_MaterialsAllHint_Count", 3)					-- начальное количество кликов для появления подсказки
		tutSetInt("REA_MaterialsAllHint_Counter", tutGetInt("REA_MaterialsAllHint_Count")) -- текущее количество кликов, оставшееся до появления подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_MaterialsAllHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_MaterialsAllHint_Active")) then
		-- Обновляем количество кликов
		if (message:is("MaterialsBlock")) then
			tutSetInt("REA_MaterialsAllHint_Counter", tutGetInt("REA_MaterialsAllHint_Counter") - 1)
			if (tutGetInt("REA_MaterialsAllHint_Counter") <= 0) then
				-- Обновляем счётчики кликов
				if (tutGetInt("REA_MaterialsAllHint_Count") == 3) then
					tutSetInt("REA_MaterialsAllHint_Count", 5)
				end
				tutSetInt("REA_MaterialsAllHint_Counter", tutGetInt("REA_MaterialsAllHint_Count"))
				-- Надо перейти в активный режим подсказки
				tutSetBool("REA_MaterialsAllHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_MaterialsAllHint_State", 0)
				tutorial:setCharacter("Sedrik")
				if (tutorial:getSawmillsCount() == 0) then
					tutorial:setText("REA_MaterialsHint_01")
				else
					tutorial:targetAllSawmills(0.5, IPoint(0, 40), 1.5)
					tutorial:setText("REA_MaterialsHint_02")
				end
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_MaterialsAllHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_MaterialsAllHint_State", 2)
			end
		elseif (tutGetInt("REA_MaterialsAllHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_MaterialsAllHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на недостаток золота на начальных уровнях
function REA_MoneyAllHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_MoneyAllHint_Active", false)			-- активность подсказки
		tutSetInt("REA_MoneyAllHint_Count", 3)					-- начальное количество кликов для появления подсказки
		tutSetInt("REA_MoneyAllHint_Counter", tutGetInt("REA_MoneyAllHint_Count")) -- текущее количество кликов, оставшееся до появления подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_MoneyAllHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_MoneyAllHint_Active")) then
		-- Обновляем количество кликов
		if (message:is("MoneyBlock")) then
			tutSetInt("REA_MoneyAllHint_Counter", tutGetInt("REA_MoneyAllHint_Counter") - 1)
			if (tutGetInt("REA_MoneyAllHint_Counter") <= 0) then
				-- Обновляем счётчики кликов
				if (tutGetInt("REA_MoneyAllHint_Count") == 3) then
					tutSetInt("REA_MoneyAllHint_Count", 5)
				end
				tutSetInt("REA_MoneyAllHint_Counter", tutGetInt("REA_MoneyAllHint_Count"))
				-- Надо перейти в активный режим подсказки
				tutSetBool("REA_MoneyAllHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_MoneyAllHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_MoneyHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_MoneyAllHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hide(0.25)
				tutSetInt("REA_MoneyAllHint_State", 2)
			end
		elseif (tutGetInt("REA_MoneyAllHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_MoneyAllHint_Active", false)
			end
		end
	end
end

-- Подсказка на выбор лесопилки после постройки лесопилки
function REA_HouseUpgradeHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_HouseUpgradeHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_HouseUpgradeHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("REA_HouseUpgradeHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_HouseUpgradeHint_Ready", false)
		tutSetBool("REA_HouseUpgradeHint_Shown", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_HouseUpgradeHint_Active")) then
		if (message:is("Upgrade", "press")) then
			tutSetBool("REA_HouseUpgradeHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_HouseUpgradeHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_HouseUpgradeHint_Ready")) then
			tutSetFloat("REA_HouseUpgradeHint_Time", tutGetFloat("REA_HouseUpgradeHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_HouseUpgradeHint_Time") > tutGetFloat("REA_HouseUpgradeHint_HintAppearTime")) then
				tutSetBool("REA_HouseUpgradeHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_HouseUpgradeHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_HouseUpgradeHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetAllHouses("REA_HouseUpgradeHint_Arrow", 0, 0.5, IPoint(0, 40), 1.5)
				tutorial:show(0.25)
				tutSetBool("REA_HouseUpgradeHint_Shown", true)
			end
		-- Если пользователь заказывает материалы
		elseif (message:is("Upgrade", "press")) then
			tutSetBool("REA_HouseUpgradeHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_HouseUpgradeHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_HouseUpgradeHint_Time", 0.0)
				tutSetInt("REA_HouseUpgradeHint_State", 2)
			elseif (message:is("Upgrade", "press")) then
				tutSetBool("REA_HouseUpgradeHint_Ready", true)
			end
		elseif (tutGetInt("REA_HouseUpgradeHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_HouseUpgradeHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			elseif (message:is("Upgrade", "press")) then
				tutSetBool("REA_HouseUpgradeHint_Ready", true)
			end
		end
	end
end

-- Подсказка на кнопку апгрейда домика
function REA_HouseUpgradeButtonHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_HouseUpgradeButtonHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_HouseUpgradeButtonHint_HintAppearTime", 5.0)	-- время появления подсказки
		tutSetFloat("REA_HouseUpgradeButtonHint_Time", 0.0)				-- общее время подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_HouseUpgradeButtonHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_HouseUpgradeButtonHint_Active")) then
		-- Обновляем время
		if (message:is("Update")) then
			if (tutorial:isHouseInterface() and tutGetBool("REA_HouseUpgradeHint_Shown") and 
					not tutGetBool("REA_HouseUpgradeHint_Ready") and tutGetInt("REA_HouseUpgradeButtonHint_FieldId") == tutorial:game():getSelected():id()) then
				tutSetFloat("REA_HouseUpgradeButtonHint_Time", tutGetFloat("REA_HouseUpgradeButtonHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("REA_HouseUpgradeButtonHint_Time") > tutGetFloat("REA_HouseUpgradeButtonHint_HintAppearTime")) then
					tutSetBool("REA_HouseUpgradeButtonHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("REA_HouseUpgradeButtonHint_State", 0)
					tutorial:setCharacter("Sedrik")
					tutorial:setText("REA_HouseUpgradeButtonHint_01")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					arrowId = tutorial:addArrow()
					tutorial:getArrow(arrowId):setPosition(642, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutorial:variables():setFloat("TutorialShowDelayTime", 5.0)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:show(0.25)
				end
			else
				tutSetFloat("REA_HouseUpgradeButtonHint_Time", 0.0)
				if (tutorial:isHouseInterface()) then
					tutSetInt("REA_HouseUpgradeButtonHint_FieldId", tutorial:game():getSelected():id())
				end
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_HouseUpgradeButtonHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("Destroy", "press") or message:is("Upgrade", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_HouseUpgradeButtonHint_Time", 0.0)
				tutSetInt("REA_HouseUpgradeButtonHint_State", 1)
			end
		elseif (tutGetInt("REA_HouseUpgradeButtonHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_HouseUpgradeButtonHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)
			end
		end
	end
end

-- Подсказка на лесничество
function REA_ForestAreaHint(message)
	local ForestAreaType = 82
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_ForestAreaHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_ForestAreaHint_HintAppearTime", 40.0)	-- время появления подсказки
		tutSetFloat("REA_ForestAreaHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_ForestAreaHint_Ready", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_ForestAreaHint_Active")) then
		if (message:is("Update") and tutorial:getSelectedBuildingType() == ForestAreaType) then
			tutSetBool("REA_ForestAreaHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_ForestAreaHint_Active")) then
		if (message:is("Update") and tutorial:getSelectedBuildingType() == ForestAreaType) then
			tutSetBool("REA_ForestAreaHint_Ready", true)
		end
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_ForestAreaHint_Ready")) then
			tutSetFloat("REA_ForestAreaHint_Time", tutGetFloat("REA_ForestAreaHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_ForestAreaHint_Time") > tutGetFloat("REA_ForestAreaHint_HintAppearTime")) then
				tutSetBool("REA_ForestAreaHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_ForestAreaHint_State", 0)
				tutorial:setCharacter("Snowman")
				tutorial:setText("REA_ForestAreaHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(780, 580)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setIgnoreContext(true)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:variables():setFloat("TutorialShowDelayTime", 10.0)
				tutorial:variables():setBool("TutorialArrowsNoBind", true)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_ForestAreaHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_ForestAreaHint_Time", 0.0)
				tutSetInt("REA_ForestAreaHint_State", 2)
			elseif (message:is("Update") and tutorial:getSelectedBuildingType() == ForestAreaType) then
				tutSetBool("REA_ForestAreaHint_Ready", true)
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_ForestAreaHint_Time", 0.0)
				tutSetInt("REA_ForestAreaHint_State", 2)
			end
		elseif (tutGetInt("REA_ForestAreaHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_ForestAreaHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			elseif (message:is("Update") and tutorial:getSelectedBuildingType() == ForestAreaType) then
				tutSetBool("REA_ForestAreaHint_Ready", true)
			end
		end
	end
end

-- Подсказка на покупку рабочего
function REA_BuyWorkerHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_BuyWorkerHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_BuyWorkerHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_BuyWorkerHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_BuyWorkerHint_Ready", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_BuyWorkerHint_Active")) then
		if (message:is("Worker", "press")) then
			tutSetBool("REA_BuyWorkerHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_BuyWorkerHint_Active")) then
		if (message:is("Worker", "press")) then
			tutSetBool("REA_BuyWorkerHint_Ready", true)
		end
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_BuyWorkerHint_Ready") and tutorial:game():getVariables().money >= 1000) then
			tutSetFloat("REA_BuyWorkerHint_Time", tutGetFloat("REA_BuyWorkerHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_BuyWorkerHint_Time") > tutGetFloat("REA_BuyWorkerHint_HintAppearTime")) then
				tutSetBool("REA_BuyWorkerHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_BuyWorkerHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_BuyWorkerHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				if (tutorial:isBaseInterface()) then
					tutorial:getArrow(arrowId):setPosition(617, 100)
				else
					tutorial:getArrow(arrowId):setPosition(500, 500)
				end
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setIgnoreContext(true)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:variables():setFloat("TutorialShowDelayTime", 0.0)
				tutorial:variables():setBool("TutorialArrowsNoBind", true)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_BuyWorkerHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_BuyWorkerHint_Time", 0.0)
				tutSetInt("REA_BuyWorkerHint_State", 2)
			elseif (message:is("Worker", "press")) then
				tutSetBool("REA_BuyWorkerHint_Ready", true)
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_BuyWorkerHint_Time", 0.0)
				tutSetInt("REA_BuyWorkerHint_State", 2)
			end
		elseif (tutGetInt("REA_BuyWorkerHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_BuyWorkerHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			elseif (message:is("Worker", "press")) then
				tutSetBool("REA_BuyWorkerHint_Ready", true)
			end
		end
	end
end

-- Подсказка на снос хижины, если не осталось свободных площадок
function REA_DestroyHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_DestroyHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_DestroyHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_DestroyHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_DestroyHint_Ready", false)
		tutSetBool("REA_DestroyHint_Shown", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_DestroyHint_Active")) then
		if (message:is("Destroy", "press")) then
			tutSetBool("REA_DestroyHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_DestroyHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_DestroyHint_Ready") and not tutGetBool("REA_DestroyHint_Shown")) then
			tutSetFloat("REA_DestroyHint_Time", tutGetFloat("REA_DestroyHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutorial:hasFreeLargeFields()) then
				tutSetFloat("REA_DestroyHint_Time", 0.0)
			end
			if (tutGetFloat("REA_DestroyHint_Time") > tutGetFloat("REA_DestroyHint_HintAppearTime")) then
				tutSetBool("REA_DestroyHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_DestroyHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_DestroyHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				--tutorial:targetAllHouses("REA_DestroyHint_Arrow", 0, 0.5, IPoint(0, 40), 1.5)
				tutorial:show(0.25)
				tutSetBool("REA_DestroyHint_Shown", true)
			end
		elseif (message:is("Destroy", "press")) then
			tutSetBool("REA_DestroyHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_DestroyHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_DestroyHint_Time", 0.0)
				tutSetInt("REA_DestroyHint_State", 2)
			elseif (message:is("Destroy", "press")) then
				tutSetBool("REA_DestroyHint_Ready", true)
			end
		elseif (tutGetInt("REA_DestroyHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_DestroyHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			elseif (message:is("Destroy", "press")) then
				tutSetBool("REA_DestroyHint_Ready", true)
			end
		end
	end
end

-- Снос хижины
function REA_House1DestroyHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_House1DestroyHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_House1DestroyHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("REA_House1DestroyHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_House1DestroyHint_ButtonHint", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_House1DestroyHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_House1DestroyHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_DestroyHint_Ready") and tutGetBool("REA_DestroyHint_Shown")) then
			tutSetFloat("REA_House1DestroyHint_Time", tutGetFloat("REA_House1DestroyHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutorial:hasFreeLargeFields()) then
				tutSetFloat("REA_House1DestroyHint_Time", 0.0)
			end
			if (tutGetFloat("REA_House1DestroyHint_Time") > tutGetFloat("REA_House1DestroyHint_HintAppearTime")) then
				tutSetBool("REA_House1DestroyHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_House1DestroyHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_House1DestroyHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetAllHouses("REA_House1DestroyHint_Arrow", 0, 0.5, IPoint(0, 40), 1.5)
				tutorial:show(0.25)
				tutorial:clearSelection()
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_House1DestroyHint_State") == 0) then
			if (message:is("Update") and tutorial:game():getSelected()) then
				id = tutorial:game():getSelected():id()
				arrowId = tutGetInt("REA_House1DestroyHint_Arrow"..tostring(id))
				if (arrowId ~= nil and not tutorial:getHouseByField(id):isUpgrading()) then
					tutorial:hideArrows(0.5)
					tutorial:getArrow(arrowId):moveTo(950, 100, 270, 1.0, 1.0)
					tutorial:getArrow(arrowId):setShown()
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutSetInt("REA_House1DestroyHint_State", 1)
					tutorial:switchText("REA_House1DestroyHint_02", 0.5)
				else
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetFloat("REA_House1DestroyHint_Time", 0.0)
					tutSetInt("REA_House1DestroyHint_State", 2)
				end
				tutSetBool("REA_House1DestroyHint_ButtonHint", true)
			end
		elseif (tutGetInt("REA_House1DestroyHint_State") == 1) then
			if (message:is("TutorialOk", "press") or message:is("Destroy", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_House1DestroyHint_Time", 0.0)
				tutSetInt("REA_House1DestroyHint_State", 2)
			end
		elseif (tutGetInt("REA_House1DestroyHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_House1DestroyHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на кнопку сноса домика
function REA_HouseDestroyButtonHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_HouseDestroyButtonHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_HouseDestroyButtonHint_HintAppearTime", 5.0)	-- время появления подсказки
		tutSetFloat("REA_HouseDestroyButtonHint_Time", 0.0)				-- общее время подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_HouseDestroyButtonHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_HouseDestroyButtonHint_Active")) then
		-- Обновляем время
		if (message:is("Update")) then
			if (tutorial:isHouseInterface() and tutGetBool("REA_House1DestroyHint_ButtonHint") and 
					not tutGetBool("REA_DestroyHint_Ready") and tutGetInt("REA_HouseDestroyButtonHint_FieldId") == tutorial:game():getSelected():id()) then
				tutSetFloat("REA_HouseDestroyButtonHint_Time", tutGetFloat("REA_HouseDestroyButtonHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("REA_HouseDestroyButtonHint_Time") > tutGetFloat("REA_HouseDestroyButtonHint_HintAppearTime")) then
					tutSetBool("REA_HouseDestroyButtonHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("REA_HouseDestroyButtonHint_State", 0)
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					arrowId = tutorial:addArrow()
					tutorial:getArrow(arrowId):setPosition(950, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
					tutorial:variables():setFloat("TutorialTextDelayTime", -1.0)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:show(0.25)
				end
			else
				tutSetFloat("REA_HouseDestroyButtonHint_Time", 0.0)
				if (tutorial:isHouseInterface()) then
					tutSetInt("REA_HouseDestroyButtonHint_FieldId", tutorial:game():getSelected():id())
				end
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_HouseDestroyButtonHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("Destroy", "press") or message:is("Upgrade", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_HouseDestroyButtonHint_Time", 0.0)
				tutSetInt("REA_HouseDestroyButtonHint_State", 1)
			end
		elseif (tutGetInt("REA_HouseDestroyButtonHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_HouseDestroyButtonHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)
			end
		end
	end
end

-- Подсказка на строительство рынка
function REA_MarketsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_MarketsHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_MarketsHint_HintAppearTime", 40.0)	-- время появления подсказки
		tutSetFloat("REA_MarketsHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_MarketsHint_FirstMarket", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_MarketsHint_Active")) then
		if (message:is("Market", "press")) then
			tutSetBool("REA_MarketsHint_FirstMarket", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_MarketsHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_MarketsHint_FirstMarket")) then
			tutSetFloat("REA_MarketsHint_Time", tutGetFloat("REA_MarketsHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_MarketsHint_Time") > tutGetFloat("REA_MarketsHint_HintAppearTime")) then
				-- Надо показать стрелку на таски и перейти в активный режим подсказки
				tutSetBool("REA_MarketsHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_MarketsHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_MarketsHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("Market", "press")) then
			tutSetBool("REA_MarketsHint_FirstMarket", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_MarketsHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("Market", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetBool("REA_MarketsHint_FirstMarket", true)
				tutSetInt("REA_MarketsHint_State", 2)
			end
		elseif (tutGetInt("REA_MarketsHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_MarketsHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на рынок при остуствии сделок и невыделенном рынке
function REA_UnfocusMarketHint(message)
	local MarketType = 7
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_UnfocusMarketHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_UnfocusMarketHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("REA_UnfocusMarketHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_UnfocusMarketHint_Offer", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_UnfocusMarketHint_Active")) then
		if (message:is("MarketOffer1", "press") or message:is("MarketOffer2", "press") or message:is("MarketOffer3", "press")) then
			tutSetBool("REA_UnfocusMarketHint_Offer", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_UnfocusMarketHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_UnfocusMarketHint_Offer") and tutorial:getMarketsCount() > 0) then
			tutSetFloat("REA_UnfocusMarketHint_Time", tutGetFloat("REA_UnfocusMarketHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_UnfocusMarketHint_Time") > tutGetFloat("REA_UnfocusMarketHint_HintAppearTime") and
				tutorial:getSelectedBuildingType() ~= MarketType) then
				-- Надо показать стрелку на таски и перейти в активный режим подсказки
				tutSetBool("REA_UnfocusMarketHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_UnfocusMarketHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_UnfocusMarketHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetAllMarkets(0.5, IPoint(0, 40), 1.5)
				tutorial:show(0.25)
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("MarketOffer1", "press") or message:is("MarketOffer2", "press") or message:is("MarketOffer3", "press")) then
			tutSetBool("REA_UnfocusMarketHint_Offer", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_UnfocusMarketHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_UnfocusMarketHint_Time", 0.0)
				tutSetInt("REA_UnfocusMarketHint_State", 2)
			elseif (message:is("MarketOffer1", "press") or message:is("MarketOffer2", "press") or message:is("MarketOffer3", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_UnfocusMarketHint_State", 2)
				tutSetBool("REA_UnfocusMarketHint_Offer", true)
			end
		elseif (tutGetInt("REA_UnfocusMarketHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_UnfocusMarketHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			elseif (message:is("MarketOffer1", "press") or message:is("MarketOffer2", "press") or message:is("MarketOffer3", "press")) then
				tutSetBool("REA_UnfocusMarketHint_Offer", true)
			end
		end
	end
end

-- Подсказка на сделку в рынке
function REA_FocusMarketHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_FocusMarketHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_FocusMarketHint_HintAppearTime", 7.0)	-- время появления подсказки
		tutSetFloat("REA_FocusMarketHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_FocusMarketHint_Offer", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_FocusMarketHint_Active")) then
		if (message:is("MarketOffer1", "press") or message:is("MarketOffer2", "press") or message:is("MarketOffer3", "press")) then
			tutSetBool("REA_FocusMarketHint_Offer", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_FocusMarketHint_Active")) then
		if (message:is("MarketOffer1", "press") or message:is("MarketOffer2", "press") or message:is("MarketOffer3", "press")) then
			tutSetBool("REA_FocusMarketHint_Offer", true)
		end
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_FocusMarketHint_Offer")) then
			if (tutorial:isMarketOfferInterface() and tutGetInt("REA_FocusMarketHint_FieldId") == tutorial:game():getSelected():id()) then
				tutSetFloat("REA_FocusMarketHint_Time", tutGetFloat("REA_FocusMarketHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("REA_FocusMarketHint_Time") > tutGetFloat("REA_FocusMarketHint_HintAppearTime")) then
					if (tutorial:targetMarketOffer(0.5, IPoint(0, 50), 1.5)) then
						tutSetBool("REA_FocusMarketHint_Active", true)
						tutorial:variables():setBool("TutorialLock", true)
						tutSetInt("REA_FocusMarketHint_State", 0)
						tutorial:setCharacter("Sedrik")
						tutorial:setText("REA_FocusMarketHint_01")
						tutorial:setWidgetVisible("TutorialOk", true)
						tutorial:setObjectsAllowType(allowPass)
						tutorial:variables():setFloat("TutorialShowDelayTime", 0.0)
						tutorial:variables():setBool("TutorialArrowsNoBind", true)
						tutorial:show(0.25)
					else
						tutSetFloat("REA_FocusMarketHint_Time", 0.0)
					end
				end
			else
				tutSetFloat("REA_FocusMarketHint_Time", 0.0)
				if (tutorial:isMarketOfferInterface()) then
					tutSetInt("REA_FocusMarketHint_FieldId", tutorial:game():getSelected():id())
				end
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("REA_FocusMarketHint_State") == 0) then
			if (message:is("MarketOffer1", "press") or message:is("MarketOffer2", "press") or message:is("MarketOffer3", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_FocusMarketHint_Time", 0.0)
				tutSetInt("REA_FocusMarketHint_State", 1)
				tutSetBool("REA_FocusMarketHint_Offer", true)
			elseif (message:is("TutorialOk", "press") or (message:is("Update") and not tutorial:isMarketOfferInterface())) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_FocusMarketHint_Time", 0.0)
				tutSetInt("REA_FocusMarketHint_State", 1)
			end
		elseif (tutGetInt("REA_FocusMarketHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_FocusMarketHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)
			elseif (message:is("MarketOffer1", "press") or message:is("MarketOffer2", "press") or message:is("MarketOffer3", "press")) then
				tutSetBool("REA_FocusMarketHint_Offer", true)
			end
		end
	end
end

-- Подсказка на фонари
function REA_FonarHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_FonarHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_FonarHint_HintAppearTime", 10.0)	-- время появления подсказки
		tutSetFloat("REA_FonarHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_FonarHint_Ready", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_FonarHint_Active")) then
		if (message:is("Torch", "press")) then
			tutSetBool("REA_FonarHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_FonarHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_FonarHint_Ready")) then
			tutSetFloat("REA_FonarHint_Time", tutGetFloat("REA_FonarHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_FonarHint_Time") > tutGetFloat("REA_FonarHint_HintAppearTime")) then
				tutSetBool("REA_FonarHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_FonarHint_State", 0)
				tutorial:setCharacter("Dartanian")
				tutorial:setText("REA_FonarHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 10.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetAllFonars(0.5, IPoint(0, 20), 0.0)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:show(0.25)
			end
		elseif (message:is("Torch", "press")) then
			tutSetBool("REA_FonarHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_FonarHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_FonarHint_Time", 0.0)
				tutSetInt("REA_FonarHint_State", 2)
			elseif (message:is("Torch", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_FonarHint_State", 2)
				tutSetBool("REA_FonarHint_Ready", true)
			end
		elseif (tutGetInt("REA_FonarHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_FonarHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			elseif (message:is("Torch", "press")) then
				tutSetBool("REA_FonarHint_Ready", true)
			end
		end
	end
end

-- Подсказка на фонари после строительства парочки
function REA_FonarBuildingHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_FonarBuildingHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_FonarBuildingHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_FonarBuildingHint_Time", 0.0)				-- общее время подсказки
		tutSetInt("REA_FonarBuildingHint_Ready", 0)
	end
	if (message:is("Torch", "press")) then
		tutSetInt("REA_FonarBuildingHint_Ready", tutGetInt("REA_FonarBuildingHint_Ready") + 1)
		tutSetFloat("REA_FonarBuildingHint_Time", 0.0)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_FonarBuildingHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_FonarBuildingHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetInt("REA_FonarBuildingHint_Ready") < 3 and tutGetInt("REA_FonarBuildingHint_Ready") > 0) then
			tutSetFloat("REA_FonarBuildingHint_Time", tutGetFloat("REA_FonarBuildingHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_FonarBuildingHint_Time") > tutGetFloat("REA_FonarBuildingHint_HintAppearTime")) then
				tutSetBool("REA_FonarBuildingHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_FonarBuildingHint_State", 0)
				tutorial:setCharacter("Dartanian")
				tutorial:setText("REA_FonarBuildingHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetAllFonars(0.5, IPoint(0, 20), 1.5)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_FonarBuildingHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_FonarBuildingHint_Time", 0.0)
				tutSetInt("REA_FonarBuildingHint_State", 2)
			end
		elseif (tutGetInt("REA_FonarBuildingHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_FonarBuildingHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на добычу материалов с лесничеств и апгрейд домиков
function REA_MoreGoldHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_MoreGoldHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_MoreGoldHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("REA_MoreGoldHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_MoreGoldHint_Ready", false)
	end
	if (message:is("Upgrade", "press")) then
		tutSetBool("REA_MoreGoldHint_Ready", true)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_MoreGoldHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_MoreGoldHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_MoreGoldHint_Ready") and (tutorial:game():getHouses1Count() > 0 or tutorial:game():getHouses2Count() > 0)) then
			tutSetFloat("REA_MoreGoldHint_Time", tutGetFloat("REA_MoreGoldHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_MoreGoldHint_Time") > tutGetFloat("REA_MoreGoldHint_HintAppearTime")) then
				tutSetBool("REA_MoreGoldHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_MoreGoldHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_MoreGoldHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_MoreGoldHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutSetBool("REA_MoreGoldHint_Ready", true)
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_MoreGoldHint_Time", 0.0)
				tutSetInt("REA_MoreGoldHint_State", 2)
			end
		elseif (tutGetInt("REA_MoreGoldHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_MoreGoldHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на мостик
function REA_BridgeHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_BridgeHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_BridgeHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_BridgeHint_Time", 0.0)				-- общее время подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_BridgeHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_BridgeHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutorial:getBreakBridgesCount() > 0) then
			tutSetFloat("REA_BridgeHint_Time", tutGetFloat("REA_BridgeHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_BridgeHint_Time") > tutGetFloat("REA_BridgeHint_HintAppearTime")) then
				tutSetBool("REA_BridgeHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_BridgeHint_State", 0)
				tutorial:setCharacter("Dartanian")
				tutorial:setText("REA_BridgeHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(420, 540)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setShowTimer(1.0)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_BridgeHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:switchText("REA_BridgeHint_02", 0.5)
				tutorial:switchCharacter("Sedrik")
				tutSetFloat("REA_BridgeHint_Time", 0.0)
				tutSetInt("REA_BridgeHint_State", 1)
			end
		elseif (tutGetInt("REA_BridgeHint_State") == 1) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_BridgeHint_Time", 0.0)
				tutSetInt("REA_BridgeHint_State", 2)
			end
		elseif (tutGetInt("REA_BridgeHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_BridgeHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на переполнение банков
function REA_BankOverflowHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_BankOverflowHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_BankOverflowHint_Time", 0.0)				-- общее время подсказки
		tutSetInt("REA_BankOverflowHint_Ready", 5)
	end
	if (message:is("BankGetMoney", "press") and tutorial:getBanksCount() >= 2) then
		tutSetInt("REA_BankOverflowHint_Ready", tutGetInt("REA_BankOverflowHint_Ready") - 1)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_BankOverflowHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_BankOverflowHint_Active")) then
		if (message:is("BankGetMoney", "press") and tutGetInt("REA_BankOverflowHint_Ready") <= 0) then
			tutSetBool("REA_BankOverflowHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("REA_BankOverflowHint_State", 0)
			tutorial:setCharacter("Sedrik")
			tutorial:setText("REA_BankOverflowHint_01")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutSetFloat("TutorialShowDelayTime", 0.0)
			tutorial:setObjectsAllowType(allowPass)
			tutorial:show(0.25)
			tutSetInt("REA_BankOverflowHint_Ready", 5)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_BankOverflowHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_BankOverflowHint_State", 2)
			end
		elseif (tutGetInt("REA_BankOverflowHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_BankOverflowHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку рабочих на строительстве корабля
function REA_ShipWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_ShipWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_ShipWorkersHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_ShipWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_ShipWorkersHint_LowWorkers", false)
	end
	if (message:is("ShipWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("REA_ShipWorkersHint_LowWorkers", false)
			tutSetFloat("REA_ShipWorkersHint_Time", 0.0)
		else
			tutSetBool("REA_ShipWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_ShipWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_ShipWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_ShipWorkersHint_LowWorkers")) then
			tutSetFloat("REA_ShipWorkersHint_Time", tutGetFloat("REA_ShipWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_ShipWorkersHint_Time") > tutGetFloat("REA_ShipWorkersHint_HintAppearTime")) then
				tutSetBool("REA_ShipWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_ShipWorkersHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_ShipWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(880, 480)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_ShipWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("ShipWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_ShipWorkersHint_Time", 0.0)
				tutSetInt("REA_ShipWorkersHint_State", 1)
			end
		elseif (tutGetInt("REA_ShipWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_ShipWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку материалов на строительстве корабля
function REA_ShipMaterialsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_ShipMaterialsHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_ShipMaterialsHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("REA_ShipMaterialsHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_ShipMaterialsHint_LowMaterials", false)
	end
	if (message:is("ShipWorking")) then
		if (message:getIntegerParam() > 0) then
			tutSetBool("REA_ShipMaterialsHint_LowMaterials", false)
			--tutSetFloat("REA_ShipMaterialsHint_Time", 0.0)
		else
			tutSetBool("REA_ShipMaterialsHint_LowMaterials", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_ShipMaterialsHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_ShipMaterialsHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_ShipMaterialsHint_LowMaterials")) then
			tutSetFloat("REA_ShipMaterialsHint_Time", tutGetFloat("REA_ShipMaterialsHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_ShipMaterialsHint_Time") > tutGetFloat("REA_ShipMaterialsHint_HintAppearTime")) then
				tutSetBool("REA_ShipMaterialsHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_ShipMaterialsHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_ShipMaterialsHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(880, 480)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_ShipMaterialsHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("Update") and not tutGetBool("REA_ShipMaterialsHint_LowMaterials"))) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_ShipMaterialsHint_Time", 0.0)
				tutSetInt("REA_ShipMaterialsHint_State", 1)
			end
		elseif (tutGetInt("REA_ShipMaterialsHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_ShipMaterialsHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на выкапывание клада
function REA_TreasureHint(message)
	local treasureId = 59623
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_TreasureHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_TreasureHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_TreasureHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_TreasureHint_Ready", false)
	end
	if (message:is("Treasure", "press")) then
		if (tutorial:getSelectedBuildingId() == treasureId) then
			tutSetBool("REA_TreasureHint_Ready", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_TreasureHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_TreasureHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_TreasureHint_Ready")) then
			tutSetFloat("REA_TreasureHint_Time", tutGetFloat("REA_TreasureHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_TreasureHint_Time") > tutGetFloat("REA_TreasureHint_HintAppearTime")) then
				tutSetBool("REA_TreasureHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_TreasureHint_State", 0)
				tutorial:setCharacter("Tippy")
				tutorial:setText("REA_TreasureHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(100, 460)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_TreasureHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("Treasure", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_TreasureHint_Time", 0.0)
				tutSetInt("REA_TreasureHint_State", 1)
			end
		elseif (tutGetInt("REA_TreasureHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_TreasureHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на выкуп пирату
function REA_PiratHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_PiratHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_PiratHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("REA_PiratHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_PiratHint_Ready", false)
	end
	if (message:is("Smoke", "press")) then
		tutSetBool("REA_PiratHint_Ready", true)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_PiratHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_PiratHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_PiratHint_Ready") and tutorial:game():getVariables().money >= 5000) then
			tutSetFloat("REA_PiratHint_Time", tutGetFloat("REA_PiratHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_PiratHint_Time") > tutGetFloat("REA_PiratHint_HintAppearTime")) then
				tutSetBool("REA_PiratHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_PiratHint_State", 0)
				tutorial:setCharacter("Tippy")
				tutorial:setText("REA_PiratHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(880, 400)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setIgnoreContext(true)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:variables():setFloat("TutorialShowDelayTime", 0.0)
				tutorial:variables():setBool("TutorialArrowsNoBind", true)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_PiratHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:switchText("REA_PiratHint_02", 0.5)
				tutorial:switchCharacter("Sedrik")
				tutSetInt("REA_PiratHint_State", 1)
			elseif (message:is("Smoke", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_PiratHint_State", 2)
			end
		elseif (tutGetInt("REA_PiratHint_State") == 1) then
			if (message:is("TutorialOk", "press") or message:is("Smoke", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_PiratHint_Time", 0.0)
				tutSetInt("REA_PiratHint_State", 2)
			end
		elseif (tutGetInt("REA_PiratHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_PiratHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку таксеров на производстве рома
function REA_RomFactoryTaxersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_RomFactoryTaxersHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_RomFactoryTaxersHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_RomFactoryTaxersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_RomFactoryTaxersHint_LowTaxers", false)
	end
	if (message:is("RomFactoryTaxers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("REA_RomFactoryTaxersHint_LowTaxers", false)
			tutSetFloat("REA_RomFactoryTaxersHint_Time", 0.0)
		else
			tutSetBool("REA_RomFactoryTaxersHint_LowTaxers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_RomFactoryTaxersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_RomFactoryTaxersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_RomFactoryTaxersHint_LowTaxers")) then
			tutSetFloat("REA_RomFactoryTaxersHint_Time", tutGetFloat("REA_RomFactoryTaxersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_RomFactoryTaxersHint_Time") > tutGetFloat("REA_RomFactoryTaxersHint_HintAppearTime")) then
				tutSetBool("REA_RomFactoryTaxersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_RomFactoryTaxersHint_State", 0)
				tutorial:setCharacter("Tippy")
				tutorial:setText("REA_RomFactoryTaxersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(860, 490)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_RomFactoryTaxersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("RomFactoryTaxers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_RomFactoryTaxersHint_Time", 0.0)
				tutSetInt("REA_RomFactoryTaxersHint_State", 1)
			end
		elseif (tutGetInt("REA_RomFactoryTaxersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_RomFactoryTaxersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку рабочих на строительстве корабля
function REA_RailsWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_RailsWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_RailsWorkersHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_RailsWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_RailsWorkersHint_LowWorkers", false)
	end
	if (message:is("WagonWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("REA_RailsWorkersHint_LowWorkers", false)
			tutSetFloat("REA_RailsWorkersHint_Time", 0.0)
		else
			tutSetBool("REA_RailsWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_RailsWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_RailsWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_RailsWorkersHint_LowWorkers")) then
			tutSetFloat("REA_RailsWorkersHint_Time", tutGetFloat("REA_RailsWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_RailsWorkersHint_Time") > tutGetFloat("REA_RailsWorkersHint_HintAppearTime")) then
				tutSetBool("REA_RailsWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_RailsWorkersHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_RailsWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(160, 510)
			tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_RailsWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("WagonWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_RailsWorkersHint_Time", 0.0)
				tutSetInt("REA_RailsWorkersHint_State", 1)
			end
		elseif (tutGetInt("REA_RailsWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_RailsWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка про миниплощадки и здания
function REA_MiniHint(message)
	local MiniType = 10
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_MiniHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_MiniHint_HintAppearTime", 10.0)	-- время появления подсказки
		tutSetFloat("REA_MiniHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_MiniHint_Ready", false)
		tutSetBool("REA_MiniHint_Selection", false)
	end
	if (message:is("Small1", "press") or message:is("Small2", "press") or message:is("Small3", "press") or message:is("Small4", "press") or message:is("Small5", "press")) then
		tutSetBool("REA_MiniHint_Ready", true)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_MiniHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_MiniHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutorial:isTaskReady(0) and tutorial:isTaskReady(1) and not tutGetBool("REA_MiniHint_Ready")) then
			tutSetFloat("REA_MiniHint_Time", tutGetFloat("REA_MiniHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_MiniHint_Time") > tutGetFloat("REA_MiniHint_HintAppearTime")) then
				if (not tutGetBool("REA_MiniHint_Selection")) then
					tutSetBool("REA_MiniHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("REA_MiniHint_State", 0)
					tutSetBool("REA_MiniHint_Selection", true)
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					tutorial:setCharacter("Sedrik")
					tutorial:setText("REA_MiniHint_01")
					tutorial:variables():setFloat("TutorialShowDelayTime", 15.0)
					tutSetFloat("REA_MiniHint_HintAppearTime", 15.0)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:targetAllFreeMiniFields("REA_MiniHint_Arrow", 0.5, IPoint(0, 20), 0.0)
					tutorial:show(0.25)
				else
					tutSetBool("REA_MiniHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("REA_MiniHint_State", 2)
					tutorial:setCharacter("Sedrik")
					tutorial:setText("REA_MiniHint_01")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					tutorial:variables():setFloat("TutorialShowDelayTime", 0.0)
					tutorial:targetAllFreeMiniFields("REA_MiniHint_Arrow", 0.5, IPoint(0, 20), 1.5)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:show(0.25)
				end
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_MiniHint_State") == 0) then
			if ((message:is("Update") and tutorial:isSmallFieldSelected()) or message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_MiniHint_Time", 0.0)
				tutSetInt("REA_MiniHint_State", 1)
			end
		elseif (tutGetInt("REA_MiniHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_MiniHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
				tutSetInt("REA_MiniHint_State", 2)
			end
		elseif (tutGetInt("REA_MiniHint_State") == 2) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_MiniHint_Time", 0.0)
				tutSetInt("REA_MiniHint_State", 3)
			end
		elseif (tutGetInt("REA_MiniHint_State") == 3) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_MiniHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
				tutSetInt("REA_MiniHint_State", 4)
			end
		
		end
	end
end

-- Подсказка на постройку улья
function REA_BeehiveHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_BeehiveHint_Active", false)			-- активность подсказки
		tutSetBool("REA_BeehiveHint_Ready", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_BeehiveHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_BeehiveHint_Active")) then
		-- Обновляем время
		if (message:is("BeehiveBuilt") and not tutGetBool("REA_BeehiveHint_Ready")) then
			tutSetBool("REA_BeehiveHint_Ready", true)
			tutSetBool("REA_BeehiveHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("REA_BeehiveHint_State", 0)
			tutorial:setCharacter("Bubba")
			tutorial:setText("REA_BeehiveHint_01")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutSetFloat("TutorialShowDelayTime", 0.0)
			tutorial:setObjectsAllowType(allowPass)
			
			beehive = tutorial:game():getObject(message:getIntegerParam())
			beehivePos = beehive:getScreenPosition()
			arrow = tutorial:addArrow()
			tutorial:getArrow(arrow):setPosition(beehivePos.x - 10, beehivePos.y + 30)
			tutorial:getArrow(arrow):setAngle(270)
			tutorial:getArrow(arrow):show(0.5)
			tutorial:getArrow(arrow):setShowTimer(1.5)
			tutorial:getArrow(arrow):setIgnoreContext(true)
				
			tutorial:show(0.25)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_BeehiveHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_BeehiveHint_Time", 0.0)
				tutSetInt("REA_BeehiveHint_State", 1)
			end
		elseif (tutGetInt("REA_BeehiveHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_BeehiveHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку рабочих на пальмовом рассаднике
function REA_PalmsWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_PalmsWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_PalmsWorkersHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_PalmsWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_PalmsWorkersHint_LowWorkers", false)
	end
	if (message:is("PalmsWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("REA_PalmsWorkersHint_LowWorkers", false)
			tutSetFloat("REA_PalmsWorkersHint_Time", 0.0)
		else
			tutSetBool("REA_PalmsWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_PalmsWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_PalmsWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_PalmsWorkersHint_LowWorkers")) then
			tutSetFloat("REA_PalmsWorkersHint_Time", tutGetFloat("REA_PalmsWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_PalmsWorkersHint_Time") > tutGetFloat("REA_PalmsWorkersHint_HintAppearTime")) then
				tutSetBool("REA_PalmsWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_PalmsWorkersHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_PalmsHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(680, 510)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_PalmsWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("PalmsWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_PalmsWorkersHint_Time", 0.0)
				tutSetInt("REA_PalmsWorkersHint_State", 1)
			end
		elseif (tutGetInt("REA_PalmsWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_PalmsWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку рабочих на наполнении водохранилища
function REA_TankWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_TankWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_TankWorkersHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("REA_TankWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_TankWorkersHint_LowWorkers", false)
	end
	if (message:is("TankFillWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 7) then
			tutSetBool("REA_TankWorkersHint_LowWorkers", false)
			tutSetFloat("REA_TankWorkersHint_Time", 0.0)
		else
			tutSetBool("REA_TankWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_TankWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_TankWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_TankWorkersHint_LowWorkers")) then
			tutSetFloat("REA_TankWorkersHint_Time", tutGetFloat("REA_TankWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_TankWorkersHint_Time") > tutGetFloat("REA_TankWorkersHint_HintAppearTime")) then
				tutSetBool("REA_TankWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_TankWorkersHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_TankHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(840, 450)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_TankWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("TankFillWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_TankWorkersHint_Time", 0.0)
				tutSetInt("REA_TankWorkersHint_State", 1)
			end
		elseif (tutGetInt("REA_TankWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_TankWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на непостроенные колодцы в водохранилище
function REA_TankWellsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_TankWellsHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_TankWellsHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_TankWellsHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_TankWorkersHint_Working", false)
	end
	if (message:is("TankFillWorkers")) then
		if (message:getIntegerParam() == 0) then
			tutSetBool("REA_TankWorkersHint_Working", false)
			tutSetFloat("REA_TankWorkersHint_Time", 0.0)
		else
			tutSetBool("REA_TankWorkersHint_Working", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_TankWellsHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_TankWellsHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutorial:hasFreeWellFields() and tutGetBool("REA_TankWorkersHint_Working")) then
			tutSetFloat("REA_TankWellsHint_Time", tutGetFloat("REA_TankWellsHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_TankWellsHint_Time") > tutGetFloat("REA_TankWellsHint_HintAppearTime")) then
				tutSetBool("REA_TankWellsHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_TankWellsHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_TankWellsHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_TankWellsHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_TankWellsHint_Time", 0.0)
				tutSetInt("REA_TankWellsHint_State", 1)
			end
		elseif (tutGetInt("REA_TankWellsHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_TankWellsHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку рабочих в Храме Богов
function REA_TempleWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_TempleWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_TempleWorkersHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_TempleWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_TempleWorkersHint_LowWorkers", false)
	end
	if (message:is("TempleWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("REA_TempleWorkersHint_LowWorkers", false)
			tutSetFloat("REA_TempleWorkersHint_Time", 0.0)
		else
			tutSetBool("REA_TempleWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_TempleWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_TempleWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_TempleWorkersHint_LowWorkers")) then
			tutSetFloat("REA_TempleWorkersHint_Time", tutGetFloat("REA_TempleWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_TempleWorkersHint_Time") > tutGetFloat("REA_TempleWorkersHint_HintAppearTime")) then
				tutSetBool("REA_TempleWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_TempleWorkersHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_TempleWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(245, 445)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_TempleWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("TempleWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_TempleWorkersHint_Time", 0.0)
				tutSetInt("REA_TempleWorkersHint_State", 1)
			end
		elseif (tutGetInt("REA_TempleWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_TempleWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку материалов на строительстве Храма Богов
function REA_TempleMaterialsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_TempleMaterialsHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_TempleMaterialsHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("REA_TempleMaterialsHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_TempleMaterialsHint_LowMaterials", false)
	end
	if (message:is("TempleEndMaterials")) then
		if (message:getIntegerParam() > 0) then
			tutSetBool("REA_TempleMaterialsHint_LowMaterials", true)
		else
			tutSetBool("REA_TempleMaterialsHint_LowMaterials", false)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_TempleMaterialsHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_TempleMaterialsHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_TempleMaterialsHint_LowMaterials")) then
			tutSetFloat("REA_TempleMaterialsHint_Time", tutGetFloat("REA_TempleMaterialsHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_TempleMaterialsHint_Time") > tutGetFloat("REA_TempleMaterialsHint_HintAppearTime")) then
				tutSetBool("REA_TempleMaterialsHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_TempleMaterialsHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_TempleMaterialsHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(245, 445)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_TempleMaterialsHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("Update") and not tutGetBool("REA_TempleMaterialsHint_LowMaterials"))) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_TempleMaterialsHint_Time", 0.0)
				tutSetInt("REA_TempleMaterialsHint_State", 1)
			end
		elseif (tutGetInt("REA_TempleMaterialsHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_TempleMaterialsHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку золота на строительстве Храма Богов
function REA_TempleGoldHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_TempleGoldHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_TempleGoldHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("REA_TempleGoldHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_TempleGoldHint_LowGold", false)
	end
	if (message:is("TempleEndMoney")) then
		if (message:getIntegerParam() > 0) then
			tutSetBool("REA_TempleGoldHint_LowGold", true)
		else
			tutSetBool("REA_TempleGoldHint_LowGold", false)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_TempleGoldHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_TempleGoldHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_TempleGoldHint_LowGold")) then
			tutSetFloat("REA_TempleGoldHint_Time", tutGetFloat("REA_TempleGoldHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_TempleGoldHint_Time") > tutGetFloat("REA_TempleGoldHint_HintAppearTime")) then
				tutSetBool("REA_TempleGoldHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_TempleGoldHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("REA_TempleGoldHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(245, 445)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_TempleGoldHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("Update") and not tutGetBool("REA_TempleGoldHint_LowGold"))) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_TempleGoldHint_Time", 0.0)
				tutSetInt("REA_TempleGoldHint_State", 1)
			end
		elseif (tutGetInt("REA_TempleGoldHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_TempleGoldHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на победу в снежном бою
function REA_SnowWinHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_SnowWinHint_Active", false)			-- активность подсказки
		tutSetBool("REA_SnowWinHint_Ready", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_SnowWinHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_SnowWinHint_Active")) then
		-- Обновляем время
		if (message:is("SnowWin") and not tutGetBool("REA_SnowWinHint_Ready")) then
			tutSetBool("REA_SnowWinHint_Ready", true)
			tutSetBool("REA_SnowWinHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("REA_SnowWinHint_State", 0)
			tutorial:setCharacter("Santa")
			tutorial:setText("REA_SnowWinHint_01")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutSetFloat("TutorialShowDelayTime", 0.0)
			tutorial:setObjectsAllowType(allowPass)
			tutorial:show(0.25)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_SnowWinHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_SnowWinHint_Time", 0.0)
				tutSetInt("REA_SnowWinHint_State", 1)
			end
		elseif (tutGetInt("REA_SnowWinHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_SnowWinHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку рабочих в Храме Богов
function REA_FishingWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_FishingWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_FishingWorkersHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("REA_FishingWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_FishingWorkersHint_LowWorkers", false)
	end
	if (message:is("FishingWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 7) then
			tutSetBool("REA_FishingWorkersHint_LowWorkers", false)
			tutSetFloat("REA_FishingWorkersHint_Time", 0.0)
		else
			tutSetBool("REA_FishingWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_FishingWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_FishingWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_FishingWorkersHint_LowWorkers")) then
			tutSetFloat("REA_FishingWorkersHint_Time", tutGetFloat("REA_FishingWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_FishingWorkersHint_Time") > tutGetFloat("REA_FishingWorkersHint_HintAppearTime")) then
				tutSetBool("REA_FishingWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_FishingWorkersHint_State", 0)
				tutorial:setCharacter("Santa")
				tutorial:setText("REA_FishingWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetFreeFishingHoles(0.5, IPoint(0, 20), 1.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_FishingWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("FishingWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_FishingWorkersHint_Time", 0.0)
				tutSetInt("REA_FishingWorkersHint_State", 1)
			end
		elseif (tutGetInt("REA_FishingWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_FishingWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка про потерю денег в домиках
function REA_MoneyLostHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_MoneyLostHint_Active", false)			-- активность подсказки
		tutSetInt("REA_MoneyLostHint_Counter", tutGetInt("REA_MoneyLostHint_Count"))
		tutSetBool("REA_MoneyLostHint_Ready", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_MoneyLostHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_MoneyLostHint_Active")) then
		if (message:is("MoneyLost")) then
			tutSetInt("REA_MoneyLostHint_Counter", tutGetInt("REA_MoneyLostHint_Counter") - 1)
		end
		if (tutGetInt("REA_MoneyLostHint_Counter") <= 0 and not tutGetBool("REA_MoneyLostHint_Ready")) then
			-- Надо перейти в активный режим подсказки
			tutSetBool("REA_MoneyLostHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("REA_MoneyLostHint_State", 0)
			tutorial:setCharacter("Sedrik")
			tutorial:setText("REA_MoneyLostHint_01")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutSetFloat("TutorialShowDelayTime", 0.0)
			tutorial:setObjectsAllowType(allowPass)
			tutorial:show(0.25)
			tutSetBool("REA_MoneyLostHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_MoneyLostHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hide(0.25)
				tutSetInt("REA_MoneyLostHint_State", 2)
			end
		elseif (tutGetInt("REA_MoneyLostHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_MoneyLostHint_Active", false)
			end
		end
	end
end

-- Подсказка на завалы
function REA_JunkBridgeHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_JunkBridgeHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_JunkBridgeHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("REA_JunkBridgeHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_JunkBridgeHint_Ready", false)
	end
	if (message:is("Bridge2", "press")) then
		tutSetBool("REA_JunkBridgeHint_Ready", true)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_JunkBridgeHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_JunkBridgeHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_JunkBridgeHint_Ready")) then
			tutSetFloat("REA_JunkBridgeHint_Time", tutGetFloat("REA_JunkBridgeHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_JunkBridgeHint_Time") > tutGetFloat("REA_JunkBridgeHint_HintAppearTime")) then
				tutSetBool("REA_JunkBridgeHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_JunkBridgeHint_State", 0)
				tutorial:setCharacter("Snowman")
				tutorial:setText("REA_JunkBridgeHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetAllJunkBridges(0.5, IPoint(0, 20), 1.5)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:show(0.25)
			end
		elseif (message:is("Torch", "press")) then
			tutSetBool("REA_JunkBridgeHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_JunkBridgeHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_JunkBridgeHint_Time", 0.0)
				tutSetInt("REA_JunkBridgeHint_State", 2)
			elseif (message:is("Torch", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_JunkBridgeHint_State", 2)
				tutSetBool("REA_JunkBridgeHint_Ready", true)
			end
		elseif (tutGetInt("REA_JunkBridgeHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_JunkBridgeHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			elseif (message:is("Torch", "press")) then
				tutSetBool("REA_JunkBridgeHint_Ready", true)
			end
		end
	end
end

-- Подсказка на нехватку рабочих в Лесничестве
function REA_ForestAreaWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_ForestAreaWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_ForestAreaWorkersHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("REA_ForestAreaWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_ForestAreaWorkersHint_LowWorkers", false)
	end
	if (message:is("ForestAreaWorkers")) then
		if (message:getIntegerParam() == 1) then
			tutSetBool("REA_ForestAreaWorkersHint_LowWorkers", true)
		else
			tutSetBool("REA_ForestAreaWorkersHint_LowWorkers", false)
			tutSetFloat("REA_ForestAreaWorkersHint_Time", 0.0)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_ForestAreaWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_ForestAreaWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_ForestAreaWorkersHint_LowWorkers")) then
			tutSetFloat("REA_ForestAreaWorkersHint_Time", tutGetFloat("REA_ForestAreaWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_ForestAreaWorkersHint_Time") > tutGetFloat("REA_ForestAreaWorkersHint_HintAppearTime")) then
				tutSetBool("REA_ForestAreaWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_ForestAreaWorkersHint_State", 0)
				tutorial:setCharacter("Snowman")
				tutorial:setText("REA_ForestAreaWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(780, 580)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setIgnoreContext(true)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_ForestAreaWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("ForestAreaWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_ForestAreaWorkersHint_Time", 0.0)
				tutSetInt("REA_ForestAreaWorkersHint_State", 1)
			end
		elseif (tutGetInt("REA_ForestAreaWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_ForestAreaWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на строительство снежной крепости
function REA_SnowHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_SnowHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_SnowHint_HintAppearTime", 80.0)	-- время появления подсказки
		tutSetFloat("REA_SnowHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("REA_SnowHint_Ready", false)
	end
	if (message:is("Snow", "press")) then
		tutSetBool("REA_SnowHint_Ready", true)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_SnowHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_SnowHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("REA_SnowHint_Ready")) then
			tutSetFloat("REA_SnowHint_Time", tutGetFloat("REA_SnowHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_SnowHint_Time") > tutGetFloat("REA_SnowHint_HintAppearTime")) then
				tutSetBool("REA_SnowHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_SnowHint_State", 0)
				tutorial:setCharacter("Snowman")
				tutorial:setText("REA_SnowHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(780, 340)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_SnowHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_SnowHint_Time", 0.0)
				tutSetInt("REA_SnowHint_State", 2)
			end
		elseif (tutGetInt("REA_SnowHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_SnowHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку рабочих в постройке Снежного боя
function REA_SnowWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_SnowWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("REA_SnowWorkersHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("REA_SnowWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("REA_SnowWorkersHint_LowWorkers", false)
	end
	if (message:is("SnowWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("REA_SnowWorkersHint_LowWorkers", false)
			tutSetFloat("REA_SnowWorkersHint_Time", 0.0)
		else
			tutSetBool("REA_SnowWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_SnowWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_SnowWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("REA_SnowWorkersHint_LowWorkers")) then
			tutSetFloat("REA_SnowWorkersHint_Time", tutGetFloat("REA_SnowWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("REA_SnowWorkersHint_Time") > tutGetFloat("REA_SnowWorkersHint_HintAppearTime")) then
				tutSetBool("REA_SnowWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("REA_SnowWorkersHint_State", 0)
				tutorial:setCharacter("Snowman")
				tutorial:setText("REA_SnowWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(780, 340)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_SnowWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("SnowWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_SnowWorkersHint_Time", 0.0)
				tutSetInt("REA_SnowWorkersHint_State", 1)
			end
		elseif (tutGetInt("REA_SnowWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_SnowWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на золотое время (20% от золотого)
function REA_GoldTimeHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_GoldTimeHint_Active", false)			-- активность подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_GoldTimeHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_GoldTimeHint_Active")) then
		if (not gameInfo:isDataSet("GoldTimeHint") and message:is("GoldTime")) then
			tutSetBool("REA_GoldTimeHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("REA_GoldTimeHint_State", 0)
			tutorial:setCharacter("Sedrik")
			tutorial:setText("REA_GoldTimeHint_01")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutSetFloat("TutorialShowDelayTime", 0.0)
			tutorial:setObjectsAllowType(allowPass)
			arrowId = tutorial:addArrow()
			tutorial:getArrow(arrowId):setPosition(50, 680)
			tutorial:getArrow(arrowId):setAngle(180)
			tutorial:getArrow(arrowId):setShowTimer(1.5)
			tutorial:getArrow(arrowId):show(0.5)
			tutorial:variables():setBool("TutorialArrowsNoBind", true);
			tutorial:show(0.25)
			gameInfo:setBoolData("GoldTimeHint", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_GoldTimeHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("SilverTime") or message:is("NormalTime")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_GoldTimeHint_State", 2)
			end
		elseif (tutGetInt("REA_GoldTimeHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_GoldTimeHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на окончание золотого и начало серебряного времени
function REA_SilverTimeHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_SilverTimeHint_Active", false)			-- активность подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_SilverTimeHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_SilverTimeHint_Active")) then
		if (not gameInfo:isDataSet("SilverTimeHint") and message:is("SilverTime")) then
			tutSetBool("REA_SilverTimeHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("REA_SilverTimeHint_State", 0)
			tutorial:setCharacter("Sedrik")
			tutorial:setText("REA_SilverTimeHint_01")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutSetFloat("TutorialShowDelayTime", 0.0)
			tutorial:setObjectsAllowType(allowPass)
			arrowId = tutorial:addArrow()
			tutorial:getArrow(arrowId):setPosition(50, 680)
			tutorial:getArrow(arrowId):setAngle(180)
			tutorial:getArrow(arrowId):setShowTimer(1.5)
			tutorial:getArrow(arrowId):show(0.5)
			tutorial:variables():setBool("TutorialArrowsNoBind", true);
			tutorial:show(0.25)
			gameInfo:setBoolData("SilverTimeHint", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_SilverTimeHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("NormalTime")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_SilverTimeHint_State", 2)
			end
		elseif (tutGetInt("REA_SilverTimeHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_SilverTimeHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на окончание золотого и серебряного времени
function REA_NormalTimeHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("REA_NormalTimeHint_Active", false)			-- активность подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("REA_NormalTimeHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("REA_NormalTimeHint_Active")) then
		if (not gameInfo:isDataSet("NormalTimeHint") and message:is("NormalTime")) then
			tutSetBool("REA_NormalTimeHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("REA_NormalTimeHint_State", 0)
			tutorial:setCharacter("Sedrik")
			tutorial:setText("REA_NormalTimeHint_01")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutSetFloat("TutorialShowDelayTime", 0.0)
			tutorial:setObjectsAllowType(allowPass)
			tutorial:show(0.25)
			gameInfo:setBoolData("NormalTimeHint", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("REA_NormalTimeHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:switchText("REA_NormalTimeHint_02", 0.5)
				tutSetInt("REA_NormalTimeHint_State", 1)
			end
		elseif (tutGetInt("REA_NormalTimeHint_State") == 1) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("REA_NormalTimeHint_State", 2)
			end
		elseif (tutGetInt("REA_NormalTimeHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("REA_NormalTimeHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end



















-----------------------------------------------------------------------------------
------------------------------------------------------------------------------------
------------ Туториал для 2 части, потом надо бы перенести в отдельный файлик
----------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------




-- Подсказка при рестарте уровня
function RE2_RestartLevelHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_RestartLevelHint_Active", false)			-- активность подсказки
		tutSetBool("RE2_RestartLevelHint_Shown", false)
	end
	
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_RestartLevelHint_Active")) then
		return
	end
	
	-- Логика подсказки при неактивном состоянии
	if not tutGetBool("RE2_RestartLevelHint_Active") and not tutGetBool("RE2_RestartLevelHint_Shown") then
		tutSetBool("RE2_RestartLevelHint_Active", true)
		tutorial:variables():setBool("TutorialLock", true)
		tutSetInt("RE2_RestartLevelHint_State", 0)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_RestartLevelHint")
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutorial:setObjectsAllowType(allowPass)
		
		arrow = tutorial:addArrow()
		tutorial:getArrow(arrow):setPosition(77, 170)
		tutorial:getArrow(arrow):setAngle(90)
		tutorial:getArrow(arrow):setShowTimer(0.5)
		tutorial:getArrow(arrow):show(0.5)
		tutorial:show(0.25)
		
		gameInfo:SetRestartHintShown(true)
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_RestartLevelHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutSetInt("RE2_RestartLevelHint_State", 1)
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
			end
		elseif (tutGetInt("RE2_RestartLevelHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutSetBool("TutorialLock", false)
				tutSetBool("TutorialToSelect", true)
				tutSetBool("RE2_RestartLevelHint_Shown", true)

				tutorial:eventUpdate(Message("LoadLevel", tutorial:variables():getString("AfterResetHintFunction")))
			end
		end
	end
end

-- Подсказка на лут, который вот-вот пропадет
function RE2_AllLootAlmostBlinkHint(message)
	-- Показываем стрелку на лут, который вот-вот забликует
	if message:is("LootIsAboutToBlink") then
		if not tutGetBool("TutorialLock") then
			tutorial:targetLoot(message:getIntegerParam(), "RE2_AllLootAlmostBlinkHint_Arrow", 0.5, IPoint(0, 10), 0.0)
			tutorial:setObjectsAllowType(allowPass)
			tutorial:variables():setBool("TutorialArrowAlphaBind", true)
			tutorial:variables():setBool("TutorialArrowsNoBind", true);
			tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
			tutorial:show(0.25)
		end
	-- Лут собран или прощелкан
	elseif message:is("LootGathered") or message:is("LootLost") then
		tutorial:hideBindedArrow("RE2_AllLootAlmostBlinkHint_Arrow", message:getIntegerParam(), 0.25)
	end
end

-- Подсказа на постройку первой хижины
function RE2_BuildFirstHouseHint(message)
	local housesPos = IPoint(617, 100)
	local backPos = IPoint(950, 100)
	local house1Pos = IPoint(445, 100)
	------------------------------------------ Дополнительные функции ------------------------------------------
	-- Инициализация переменных
	local function Reset()	
		tutSetBool("RE2_BuildFirstHouseHint_Active", false)				-- активность подсказки
		tutSetFloat("RE2_BuildFirstHouseHint_HintAppearTime", 1.0)		-- время появления подсказки
		tutSetFloat("RE2_BuildFirstHouseHint_Time", 0.0)				-- общее время подсказки
		tutSetInt("RE2_BuildFirstHouseHint_State", -1)
		tutSetBool("RE2_BuildFirstHouseHint_Ready", false)				-- готов ли первый дом
		tutSetInt("RE2_BuildFirstHouseHint_Arrow", -1)					-- Идентификатор стрелочки
		tutSetBool("RE2_BuildFirstHouseHint_BuildingStarted", false)	-- Строительство первого дома началось
		tutSetBool("RE2_BuildFirstHouseHint_ArrowHidden", true)			-- Стрелка скрыта
	end

	local function IsArrowHidden()
		return tutGetBool("RE2_BuildFirstHouseHint_ArrowHidden")
	end
	
	local function SetArrowHidden(hidden)
		tutSetBool("RE2_BuildFirstHouseHint_ArrowHidden", hidden)
	end
	
	-- Начали строить дом?
	local function IsBuildingStarted()
		return tutGetBool("RE2_BuildFirstHouseHint_BuildingStarted")
	end
	
	-- Устанавливает, начали ли строить дом
	local function SetBuildingStarted(started)
		tutSetBool("RE2_BuildFirstHouseHint_BuildingStarted", started)
	end
	
	-- Построили дом, подсказка больше не нужна
	local function IsReady()
		return tutGetBool("RE2_BuildFirstHouseHint_Ready")
	end
	
	-- Устанавливает, нужно ли отображать подсказку
	local function SetReady(ready)
		tutSetBool("RE2_BuildFirstHouseHint_Ready", ready)
	end
	
	-- Обновляет таймер
	local function Update()
		tutSetFloat("RE2_BuildFirstHouseHint_Time", tutGetFloat("RE2_BuildFirstHouseHint_Time") + message:getVariables():getFloat("TimeDelta"))
	end
	
	-- Возвращает true, если пора показывать подсказку
	local function ItsTime()
		return tutGetFloat("RE2_BuildFirstHouseHint_Time") > tutGetFloat("RE2_BuildFirstHouseHint_HintAppearTime")
	end
	
	local function Time()
		return tutGetFloat("RE2_BuildFirstHouseHint_Time")
	end
	
	-- Обнуляет таймер
	local function NullTimer()
		tutSetFloat("RE2_BuildFirstHouseHint_Time", 0.0)
	end
	
	-- Возвращает состояние
	local function GetState()
		return tutGetInt("RE2_BuildFirstHouseHint_State")
	end
	
	-- Устанавливает новое состояние
	local function SetState(newState)
		if newState == GetState() then
			return
		end
		tutSetInt("RE2_BuildFirstHouseHint_State", newState)
	end

	-- Активна ли подсказка
	local function IsActive()
		return tutGetBool("RE2_BuildFirstHouseHint_Active")
	end
	
	-- Устанавливает активность подсказки
	local function SetActive(newActive)
		tutSetBool("RE2_BuildFirstHouseHint_Active", newActive)
	end
	
	-- Нужно ли указывать стрелкой на пустую площадку?
	-- Нужно, если ничего не выделено или выделено, но не пустая площадка
	local function ShouldPointAtFreeLargeField()
		if (not tutorial:game():getSelected()) or (tutorial:game():getSelected() and not tutorial:isLargeFieldFree(tutorial:game():getSelected():id())) then
			return true
		else
			return false
		end
	end
	
	-- Возвращает стрелку (если нет - создает)
	local function GetArrow()
		local arrowId = tutGetInt("RE2_BuildFirstHouseHint_Arrow")
		-- Стрелки нет - создаем
		if arrowId == -1 then
			arrowId = tutorial:addArrow()
			tutSetInt("RE2_BuildFirstHouseHint_Arrow", arrowId)
		end
		
		return arrowId
	end
	
	-- Шаманский код для отображения стрелки
	local function ShowArrow()
		SetArrowHidden(false)
		
		tutorial:variables():setBool("TutorialLock", true)
		tutorial:setObjectsAllowType(allowPass)
		tutorial:variables():setBool("TutorialArrowsNoBind", true);
		tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
		tutorial:setCharacter("Sedrik")
		tutorial:setWidgetVisible("TutorialOk", true)
		tutorial:show(0.25)
	end
	
	-- Прячет стрелку, завершает подсказку
	local function HideArrow()
		tutorial:hideArrows(0.25)
		tutorial:hide(0.25)
		SetArrowHidden(true)
	end
	
	-- Удаляет стрелку
	local function RemoveArrow()
		local arrowId = GetArrow()
		tutorial:removeArrow(arrowId)
		tutSetInt("RE2_BuildFirstHouseHint_Arrow", -1)
	end
	
	-- Указывает на площадку
	local function PointAtField()
		local arrowId = GetArrow()
		
		local middleFieldId = 58972
		local fieldPos
		
		-- Если площадка в центре свободна - тычем в нее
		if tutorial:isLargeFieldFree(middleFieldId) then
			fieldPos = tutorial:game():getObject(middleFieldId):getScreenPosition()
		else
			-- Иначе - тычем в произвольную пустую площадку
			local fieldId = tutorial:getRandomFreeLargeFieldId()
			if fieldId ~= -1 then
				fieldPos = tutorial:game():getObject(fieldId):getScreenPosition()
			else
				return
			end
		end

		tutorial:getArrow(arrowId):setPosition(fieldPos.x, fieldPos.y + 40)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Назад"
	local function PointAtBack()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(backPos.x, backPos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Дома"
	local function PointAtHouses()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(housesPos.x, housesPos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.25)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Дом1"
	local function PointAtHouse1()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(house1Pos.x, house1Pos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)
		
		ShowArrow()
	end
	
	-- Указывает на соответствующую точку в зависимости от ситуации
	local function PointAtAppropriatePoint()
		local arrowId = GetArrow()
		local arrowPos = IPoint(tutorial:getArrow(arrowId):getPosition().x, tutorial:getArrow(arrowId):getPosition().y)
		
		-- Кнопки "Дома" и "Здания"
		if tutorial:isLargeFieldInterface() then
			local pointAtRightPlace = (housesPos.x == arrowPos.x and housesPos.y == arrowPos.y)
			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtHouses()
				end
			end
		-- Интерфейс постройки зданий
		elseif tutorial:isLargeFieldInterfaceBuildings() then
			local pointAtRightPlace = (backPos.x == arrowPos.x and backPos.y == arrowPos.y)

			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtBack()
				end
			end
		-- Интерфейс постройки домов
		elseif tutorial:isLargeFieldInterfaceHouses() then
			local pointAtRightPlace = (house1Pos.x == arrowPos.x and house1Pos.y == arrowPos.y)
			
			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtHouse1()
				end
			end
		end
	end	
	
	------------------------------------------ Начало основной функции ------------------------------------------
	-- Инициализация
	if message:is("LoadLevel") then
		Reset()
	end

	-- Если активна другая подсказка - ничего не делаем
	if tutGetBool("TutorialLock") and not IsActive() then
		return
	end
	
	if tutorial:game():getHouses1Count() > 1 or IsReady() then
		return
	end
	
	if message:is("House1", "press") and not IsBuildingStarted() then
		SetBuildingStarted(true)
	elseif message:is("Cancel", "press") and IsBuildingStarted() then
		SetBuildingStarted(false)
	elseif message:is("BuildingBuilt") and IsBuildingStarted() then
		SetReady(true)
	end
	
	--[[
		-1 - начальное состояние - стрелки нет
		0 - стрелка тычет в площадку
		1 - стрелка тычет в кнопку панель
		111 - прячем стрелку - переинициализация
	]]--
	-- Подсказка не активна
	if not IsActive() then
		-- Обновляем таймер
		if message:is("Update") and not IsBuildingStarted() then
			Update()
			
			-- Пора
			if ItsTime() then
				-- Проверим на предмет начального состояния
				if GetState() == -1 then
					-- Если ничего не выделено или выделено, но не пустая площадка - укажем на площадку
					if ShouldPointAtFreeLargeField() then
						SetActive(true)
						NullTimer()
						PointAtField()
						SetState(0)
					-- Если выделена пустая площадка - проверим, какие кнопки интерфейса доступны
					else
						SetActive(true)
						SetState(1)
					end
				end
			end
		end
	-- Подсказка активна
	else
		-- Стрелочка тычет в площадку
		if GetState() == 0 then
			-- Чтобы стрелка обновлялась
			if message:is("Update") then
				-- Выделена площадка
				if tutorial:game():getSelected() and tutorial:isLargeFieldFree(tutorial:game():getSelected():id()) then
					PointAtAppropriatePoint()
					SetState(1)
				end
			end
		-- Стрелка тычет в панель
		elseif GetState() == 1 then
			-- Чтобы стрелка обновлялась
			if message:is("Update") then
				-- Сняли выделение - все прячем
				if ShouldPointAtFreeLargeField() then
					HideArrow()
					SetState(111)
				else
					PointAtAppropriatePoint()
				end
			end
		elseif GetState() == 111 then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)

				local isBuildingStarted = IsBuildingStarted()
				RemoveArrow()
				Reset()
				SetBuildingStarted(isBuildingStarted)
			end
		end
	end
end

-- Подсказка на постройку второго дома
function RE2_BuildSecondHouseHint(message)
	local housesPos = IPoint(617, 100)
	local backPos = IPoint(950, 100)
	local house1Pos = IPoint(445, 100)
	------------------------------------------ Дополнительные функции ------------------------------------------
	-- Инициализация переменных
	local function Reset()	
		tutSetBool("RE2_BuildSecondHouseHint_Active", false)				-- активность подсказки
		tutSetFloat("RE2_BuildSecondHouseHint_HintAppearTime", 15.0)		-- время появления подсказки
		tutSetFloat("RE2_BuildSecondHouseHint_Time", 0.0)				-- общее время подсказки
		tutSetInt("RE2_BuildSecondHouseHint_State", -1)
		tutSetBool("RE2_BuildSecondHouseHint_Ready", false)				-- готов ли первый дом
		tutSetInt("RE2_BuildSecondHouseHint_Arrow", -1)					-- Идентификатор стрелочки
		tutSetBool("RE2_BuildSecondHouseHint_BuildingStarted", false)	-- Строительство первого дома началось
		tutSetBool("RE2_BuildSecondHouseHint_ArrowHidden", true)			-- Стрелка скрыта
	end

	local function IsArrowHidden()
		return tutGetBool("RE2_BuildSecondHouseHint_ArrowHidden")
	end
	
	local function SetArrowHidden(hidden)
		tutSetBool("RE2_BuildSecondHouseHint_ArrowHidden", hidden)
	end
	
	-- Начали строить дом?
	local function IsBuildingStarted()
		return tutGetBool("RE2_BuildSecondHouseHint_BuildingStarted")
	end
	
	-- Устанавливает, начали ли строить дом
	local function SetBuildingStarted(started)
		tutSetBool("RE2_BuildSecondHouseHint_BuildingStarted", started)
	end
	
	-- Построили дом, подсказка больше не нужна
	local function IsReady()
		return tutGetBool("RE2_BuildSecondHouseHint_Ready")
	end
	
	-- Устанавливает, нужно ли отображать подсказку
	local function SetReady(ready)
		tutSetBool("RE2_BuildSecondHouseHint_Ready", ready)
	end
	
	-- Обновляет таймер
	local function Update()
		tutSetFloat("RE2_BuildSecondHouseHint_Time", tutGetFloat("RE2_BuildSecondHouseHint_Time") + message:getVariables():getFloat("TimeDelta"))
	end
	
	-- Возвращает true, если пора показывать подсказку
	local function ItsTime()
		return tutGetFloat("RE2_BuildSecondHouseHint_Time") > tutGetFloat("RE2_BuildSecondHouseHint_HintAppearTime")
	end

	local function Time()
		return tutGetFloat("RE2_BuildSecondHouseHint_Time")
	end
	
	local function SetAppearTime(newTime)
		tutSetFloat("RE2_BuildSecondHouseHint_HintAppearTime", newTime)
	end
	
	-- Обнуляет таймер
	local function NullTimer()
		tutSetFloat("RE2_BuildSecondHouseHint_Time", 0.0)
	end
	
	-- Возвращает состояние
	local function GetState()
		return tutGetInt("RE2_BuildSecondHouseHint_State")
	end
	
	-- Устанавливает новое состояние
	local function SetState(newState)
		if newState == GetState() then
			return
		end
		tutSetInt("RE2_BuildSecondHouseHint_State", newState)
	end

	-- Активна ли подсказка
	local function IsActive()
		return tutGetBool("RE2_BuildSecondHouseHint_Active")
	end
	
	-- Устанавливает активность подсказки
	local function SetActive(newActive)
		tutSetBool("RE2_BuildSecondHouseHint_Active", newActive)
	end
	
	-- Нужно ли указывать стрелкой на пустую площадку?
	-- Нужно, если ничего не выделено или выделено, но не пустая площадка
	local function ShouldPointAtFreeLargeField()
		if (not tutorial:game():getSelected()) or (tutorial:game():getSelected() and not tutorial:isLargeFieldFree(tutorial:game():getSelected():id())) then
			return true
		else
			return false
		end
	end
	
	-- Возвращает стрелку (если нет - создает)
	local function GetArrow()
		local arrowId = tutGetInt("RE2_BuildSecondHouseHint_Arrow")
		-- Стрелки нет - создаем
		if arrowId == -1 then
			arrowId = tutorial:addArrow()
			tutSetInt("RE2_BuildSecondHouseHint_Arrow", arrowId)
		end
		
		return arrowId
	end
	
	-- Шаманский код для отображения стрелки
	local function ShowArrow()
		SetArrowHidden(false)

		tutorial:variables():setBool("TutorialLock", true)
		tutorial:setObjectsAllowType(allowPass)
		tutorial:variables():setBool("TutorialArrowsNoBind", true);
		tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
		tutorial:setCharacter("Sedrik")
		tutorial:setWidgetVisible("TutorialOk", true)
		tutorial:show(0.25)
	end
	
	-- Прячет стрелку, завершает подсказку
	local function HideArrow()
		tutorial:hideArrows(0.25)
		tutorial:hide(0.25)
		SetArrowHidden(true)
	end
	
	-- Удаляет стрелку
	local function RemoveArrow()
		local arrowId = GetArrow()
		tutorial:removeArrow(arrowId)
		tutSetInt("RE2_BuildSecondHouseHint_Arrow", -1)
	end
	
	-- Указывает на площадку
	local function PointAtField()
		local arrowId = GetArrow()
		
		local middleFieldId = 58972
		local fieldPos
		
		-- Если площадка в центре свободна - тычем в нее
		if tutorial:isLargeFieldFree(middleFieldId) then
			fieldPos = tutorial:game():getObject(middleFieldId):getScreenPosition()
		else
			-- Иначе - тычем в произвольную пустую площадку
			local fieldId = tutorial:getRandomFreeLargeFieldId()
			if fieldId ~= -1 then
				fieldPos = tutorial:game():getObject(fieldId):getScreenPosition()
			else
				return
			end
		end

		tutorial:getArrow(arrowId):setPosition(fieldPos.x, fieldPos.y + 40)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Назад"
	local function PointAtBack()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(backPos.x, backPos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Дома"
	local function PointAtHouses()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(housesPos.x, housesPos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Дом1"
	local function PointAtHouse1()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(house1Pos.x, house1Pos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)
		
		ShowArrow()
	end
	
	-- Указывает на соответствующую точку в зависимости от ситуации
	local function PointAtAppropriatePoint()
		local arrowId = GetArrow()
		local arrowPos = IPoint(tutorial:getArrow(arrowId):getPosition().x, tutorial:getArrow(arrowId):getPosition().y)
		
		-- Кнопки "Дома" и "Здания"
		if tutorial:isLargeFieldInterface() then
			local pointAtRightPlace = (housesPos.x == arrowPos.x and housesPos.y == arrowPos.y)
			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtHouses()
				end
			end
		-- Интерфейс постройки зданий
		elseif tutorial:isLargeFieldInterfaceBuildings() then
			local pointAtRightPlace = (backPos.x == arrowPos.x and backPos.y == arrowPos.y)

			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtBack()
				end
			end
		-- Интерфейс постройки домов
		elseif tutorial:isLargeFieldInterfaceHouses() then
			local pointAtRightPlace = (house1Pos.x == arrowPos.x and house1Pos.y == arrowPos.y)
			
			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtHouse1()
				end
			end
		end
	end	
	
	------------------------------------------ Начало основной функции ------------------------------------------
	-- Инициализация
	if message:is("LoadLevel") then
		Reset()
	end

	-- Еще не построили второй дом - ничего не делаем
	if tutorial:game():getHouses1Count() < 2 then
		return
	end

	-- Если активна другая подсказка - ничего не делаем
	if tutGetBool("TutorialLock") and not IsActive() then
		return
	end
	
	-- Построили третий дом - ничего не делаем
	if tutorial:game():getHouses1Count() > 2 or IsReady() then
		return
	end
	
	
	if message:is("House1", "press") and not IsBuildingStarted() then
		SetBuildingStarted(true)
	elseif message:is("Cancel", "press") and IsBuildingStarted() then
		SetBuildingStarted(false)
	elseif message:is("BuildingBuilt") and IsBuildingStarted() then
		SetReady(true)
	end
	
	--[[
		-1 - начальное состояние - стрелки нет
		0 - стрелка тычет в площадку
		1 - стрелка тычет в кнопку панель
		111 - прячем стрелку - переинициализация
	]]--
	-- Подсказка не активна
	if not IsActive() then
		-- Обновляем таймер
		if message:is("Update") and not IsBuildingStarted() then
			Update()
			
			-- Пора
			if ItsTime() then
				-- Проверим на предмет начального состояния
				if GetState() == -1 then
					-- Если ничего не выделено или выделено, но не пустая площадка - укажем на площадку
					if ShouldPointAtFreeLargeField() then
						SetActive(true)
						NullTimer()
						PointAtField()
						SetState(0)
					-- Если выделена пустая площадка - проверим, какие кнопки интерфейса доступны
					else
						SetActive(true)
						SetState(1)
					end
				end
			end
		end
	-- Подсказка активна
	else
		-- Стрелочка тычет в площадку
		if GetState() == 0 then
			-- Чтобы стрелка обновлялась
			if message:is("Update") then
				-- Выделена площадка
				if tutorial:game():getSelected() and tutorial:isLargeFieldFree(tutorial:game():getSelected():id()) then
					PointAtAppropriatePoint()
					SetState(1)
				end
			end
		-- Стрелка тычет в панель
		elseif GetState() == 1 then
			-- Чтобы стрелка обновлялась
			if message:is("Update") then
				-- Сняли выделение - все прячем
				if ShouldPointAtFreeLargeField() then
					HideArrow()
					SetState(111)
				else
					PointAtAppropriatePoint()
				end
			end
		elseif GetState() == 111 then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)

				local isBuildingStarted = IsBuildingStarted()
				local appearTime = tutGetFloat("RE2_BuildSecondHouseHint_HintAppearTime")
				
				RemoveArrow()
				Reset()
				
				SetBuildingStarted(isBuildingStarted)
				SetAppearTime(appearTime)
			end
		end
	end
end

-- Подсказка на потерю трех лутов
function RE2_MoneyLootLoseHint(message)
	local function Reset()
		tutSetBool("RE2_MoneyLootLoseHint_Active", false)		-- активность подсказки
		tutSetInt("RE2_MoneyLootLostCount", 0)					-- количество потеряных лутов
		tutSetBool("RE2_MoneyLootLoseHint_Shown", false)		-- Была ли показан подсказка
		tutSetInt("RE2_MoneyLootLoseHint_State", -1)
	end

	local function GetLootLostCount()
		return tutGetInt("RE2_MoneyLootLostCount")
	end
	
	local function IncMoneyLootLostCount()
		tutSetInt("RE2_MoneyLootLostCount", tutGetInt("RE2_MoneyLootLostCount") + 1)
	end
	
	local function HintShown()
		return tutGetBool("RE2_MoneyLootLoseHint_Shown")
	end
	
	local function SetShown(shown)
		tutSetBool("RE2_MoneyLootLoseHint_Shown", shown)
	end
	
	local function SetActive(active)
		tutSetBool("RE2_MoneyLootLoseHint_Active", active)	
	end
	
	local function IsActive()
		return tutGetBool("RE2_MoneyLootLoseHint_Active")
	end
	
	local function GetState()
		return tutGetInt("RE2_MoneyLootLoseHint_State")
	end
	
	local function SetState(newState)
		tutSetInt("RE2_MoneyLootLoseHint_State", newState)
	end
	
	-- Инициализация
	if message:is("LoadLevel") then
		Reset()
	end

	if HintShown() then
		return
	end
	
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if tutGetBool("TutorialLock") and not IsActive() then
		return
	end

	if not IsActive() then
		if message:is("LootLost") then
			IncMoneyLootLostCount()
			
			-- Прощелкали три лута и больше
			if GetLootLostCount() > 2 and GetState() == -1 then
				SetActive(true)
				SetState(0)
				tutorial:variables():setBool("TutorialLock", true)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_MoneyLootLoseHint")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.5)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
			end
		end
	else
		-- Отображаем подсказку
		if GetState() == 0 then
			if message:is("TutorialOk", "press") then
				tutorial:hide(0.25)
				SetState(1)
			end
		elseif GetState() == 1 then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				SetShown(true)
			end
		end
	end
end

-- Подсказка после постройки двух домов (общее число домов 3), если игрок тупит 15 секунд
function RE2_HouseBuildHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_HouseBuildHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_HouseBuildHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("RE2_HouseBuildHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_HouseBuildHint_HouseStarted", false)
		tutSetBool("RE2_HouseBuildHint_Shown", false)
	end
	
	-- Еще не построили второй дом - ничего не делаем
	if tutorial:game():getHouses1Count() < 3 then
		return
	end

	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_HouseBuildHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("House1", "press")) then
			tutSetBool("RE2_HouseBuildHint_HouseStarted", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_HouseBuildHint_Active")) then
		if (message:is("House1", "press")) then
			tutSetBool("RE2_HouseBuildHint_HouseStarted", true)
		end
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_HouseBuildHint_HouseStarted") and tutorial:hasFreeLargeFields() and not tutGetBool("RE2_HouseBuildHint_Shown")) then
			tutSetFloat("RE2_HouseBuildHint_Time", tutGetFloat("RE2_HouseBuildHint_Time") + message:getVariables():getFloat("TimeDelta"))
			
			if (tutGetFloat("RE2_HouseBuildHint_Time") > tutGetFloat("RE2_HouseBuildHint_HintAppearTime")) then
			
				tutSetBool("RE2_HouseBuildHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_HouseBuildHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_HouseBuildHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				
				arrow = tutorial:addArrow()
				tutorial:getArrow(arrow):setPosition(713, 713)
				tutorial:getArrow(arrow):setAngle(45)
				tutorial:getArrow(arrow):setShowTimer(1.0)
				tutorial:getArrow(arrow):show(0.5)
				tutorial:show(0.25)

				tutSetBool("RE2_HouseBuildHint_Shown", true)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_HouseBuildHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_HouseBuildHint_Time", 0.0)
				tutSetInt("RE2_HouseBuildHint_State", 1)
			end
		elseif (tutGetInt("RE2_HouseBuildHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				--tutSetBool("RE2_HouseBuildHint_Active", false)
			end
		end
	end
end

-- Подсказка на постройку третьего и четвертого дома после подсказки на таски
function RE2_Build4HouseHint(message)
	local housesPos = IPoint(617, 100)
	local backPos = IPoint(950, 100)
	local house1Pos = IPoint(445, 100)
	------------------------------------------ Дополнительные функции ------------------------------------------
	-- Инициализация переменных
	local function Reset()	
		tutSetBool("RE2_Build4HouseHint_Active", false)				-- активность подсказки
		tutSetFloat("RE2_Build4HouseHint_HintAppearTime", 15.0)		-- время появления подсказки
		tutSetFloat("RE2_Build4HouseHint_Time", 0.0)				-- общее время подсказки
		tutSetInt("RE2_Build4HouseHint_State", -1)
		tutSetBool("RE2_Build4HouseHint_Ready", false)				-- готов ли первый дом
		tutSetInt("RE2_Build4HouseHint_Arrow", -1)					-- Идентификатор стрелочки
		tutSetBool("RE2_Build4HouseHint_BuildingStarted", false)	-- Строительство первого дома началось
		tutSetBool("RE2_Build4HouseHint_ArrowHidden", true)			-- Стрелка скрыта
	end

	local function IsArrowHidden()
		return tutGetBool("RE2_Build4HouseHint_ArrowHidden")
	end
	
	local function SetArrowHidden(hidden)
		tutSetBool("RE2_Build4HouseHint_ArrowHidden", hidden)
	end

	-- Начали строить дом?
	local function IsBuildingStarted()
		return tutGetBool("RE2_Build4HouseHint_BuildingStarted")
	end
	
	-- Устанавливает, начали ли строить дом
	local function SetBuildingStarted(started)
		tutSetBool("RE2_Build4HouseHint_BuildingStarted", started)
	end
	
	-- Построили дом, подсказка больше не нужна
	local function IsReady()
		return tutGetBool("RE2_Build4HouseHint_Ready")
	end
	
	-- Устанавливает, нужно ли отображать подсказку
	local function SetReady(ready)
		tutSetBool("RE2_Build4HouseHint_Ready", ready)
	end
	
	-- Обновляет таймер
	local function Update()
		tutSetFloat("RE2_Build4HouseHint_Time", tutGetFloat("RE2_Build4HouseHint_Time") + message:getVariables():getFloat("TimeDelta"))
	end
	
	-- Возвращает true, если пора показывать подсказку
	local function ItsTime()
		return tutGetFloat("RE2_Build4HouseHint_Time") > tutGetFloat("RE2_Build4HouseHint_HintAppearTime")
	end
	
	local function Time()
		return tutGetFloat("RE2_Build4HouseHint_Time")
	end
	
	local function SetAppearTime(newTime)
		tutSetFloat("RE2_Build4HouseHint_HintAppearTime", newTime)
	end
	
	-- Обнуляет таймер
	local function NullTimer()
		tutSetFloat("RE2_Build4HouseHint_Time", 0.0)
	end
	
	-- Возвращает состояние
	local function GetState()
		return tutGetInt("RE2_Build4HouseHint_State")
	end
	
	-- Устанавливает новое состояние
	local function SetState(newState)
		if newState == GetState() then
			return
		end
		tutSetInt("RE2_Build4HouseHint_State", newState)
	end

	-- Активна ли подсказка
	local function IsActive()
		return tutGetBool("RE2_Build4HouseHint_Active")
	end
	
	-- Устанавливает активность подсказки
	local function SetActive(newActive)
		tutSetBool("RE2_Build4HouseHint_Active", newActive)
	end
	
	-- Нужно ли указывать стрелкой на пустую площадку?
	-- Нужно, если ничего не выделено или выделено, но не пустая площадка
	local function ShouldPointAtFreeLargeField()
		if (not tutorial:game():getSelected()) or (tutorial:game():getSelected() and not tutorial:isLargeFieldFree(tutorial:game():getSelected():id())) then
			return true
		else
			return false
		end
	end
	
	-- Возвращает стрелку (если нет - создает)
	local function GetArrow()
		local arrowId = tutGetInt("RE2_Build4HouseHint_Arrow")
		-- Стрелки нет - создаем
		if arrowId == -1 then
			arrowId = tutorial:addArrow()
			tutSetInt("RE2_Build4HouseHint_Arrow", arrowId)
		end
		
		return arrowId
	end
	
	-- Шаманский код для отображения стрелки
	local function ShowArrow()
		SetArrowHidden(false)

		tutorial:variables():setBool("TutorialLock", true)
		tutorial:setObjectsAllowType(allowPass)
		tutorial:variables():setBool("TutorialArrowsNoBind", true);
		tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
		tutorial:setCharacter("Sedrik")
		tutorial:setWidgetVisible("TutorialOk", true)
		tutorial:show(0.25)
	end
	
	-- Прячет стрелку, завершает подсказку
	local function HideArrow()
		SetArrowHidden(true)

		tutorial:hideArrows(0.25)
		tutorial:hide(0.25)
	end
	
	-- Удаляет стрелку
	local function RemoveArrow()
		local arrowId = GetArrow()
		tutorial:removeArrow(arrowId)
		tutSetInt("RE2_Build4HouseHint_Arrow", -1)
	end
	
	-- Указывает на площадку
	local function PointAtField()
		local arrowId = GetArrow()
		
		local middleFieldId = 58972
		local fieldPos
		
		-- Если площадка в центре свободна - тычем в нее
		if tutorial:isLargeFieldFree(middleFieldId) then
			fieldPos = tutorial:game():getObject(middleFieldId):getScreenPosition()
		else
			-- Иначе - тычем в произвольную пустую площадку
			local fieldId = tutorial:getRandomFreeLargeFieldId()
			if fieldId ~= -1 then
				fieldPos = tutorial:game():getObject(fieldId):getScreenPosition()
			else
				return
			end
		end

		tutorial:getArrow(arrowId):setPosition(fieldPos.x, fieldPos.y + 40)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Назад"
	local function PointAtBack()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(backPos.x, backPos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Дома"
	local function PointAtHouses()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(housesPos.x, housesPos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Дом1"
	local function PointAtHouse1()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(house1Pos.x, house1Pos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)
		
		ShowArrow()
	end
	
	-- Указывает на соответствующую точку в зависимости от ситуации
	local function PointAtAppropriatePoint()
		local arrowId = GetArrow()
		local arrowPos = IPoint(tutorial:getArrow(arrowId):getPosition().x, tutorial:getArrow(arrowId):getPosition().y)
		
		-- Кнопки "Дома" и "Здания"
		if tutorial:isLargeFieldInterface() then
			local pointAtRightPlace = (housesPos.x == arrowPos.x and housesPos.y == arrowPos.y)
			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtHouses()
				end
			end
		-- Интерфейс постройки зданий
		elseif tutorial:isLargeFieldInterfaceBuildings() then
			local pointAtRightPlace = (backPos.x == arrowPos.x and backPos.y == arrowPos.y)

			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtBack()
				end
			end
		-- Интерфейс постройки домов
		elseif tutorial:isLargeFieldInterfaceHouses() then
			local pointAtRightPlace = (house1Pos.x == arrowPos.x and house1Pos.y == arrowPos.y)
			
			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtHouse1()
				end
			end
		end
	end	
	
	------------------------------------------ Начало основной функции ------------------------------------------
	-- Инициализация
	if message:is("LoadLevel") then
		Reset()
	end

	-- Еще не построили второй дом - ничего не делаем
	if tutorial:game():getHouses1Count() < 3 then
		return
	end
	
	-- Подсказки на задачи не было
	if not tutGetBool("RE2_HouseBuildHint_Shown") then
		return
	end

	-- Если активна другая подсказка - ничего не делаем
	if tutGetBool("TutorialLock") and not IsActive() then
		return
	end
	
	-- Построили третий дом - ничего не делаем
	if IsReady() then
		return
	end
	
	
	if message:is("House1", "press") and not IsBuildingStarted() then
		SetBuildingStarted(true)
	elseif message:is("Cancel", "press") and IsBuildingStarted() then
		SetBuildingStarted(false)
	elseif message:is("BuildingBuilt") and IsBuildingStarted() then
		SetReady(true)
	end
	
	--[[
		-1 - начальное состояние - стрелки нет
		0 - стрелка тычет в площадку
		1 - стрелка тычет в кнопку панель
		111 - прячем стрелку - переинициализация
	]]--
	-- Подсказка не активна
	if not IsActive() then
		-- Обновляем таймер
		if message:is("Update") and not IsBuildingStarted() then
			Update()
			
			-- Пора
			if ItsTime() then
				-- Проверим на предмет начального состояния
				if GetState() == -1 then
					-- Если ничего не выделено или выделено, но не пустая площадка - укажем на площадку
					if ShouldPointAtFreeLargeField() then
						SetActive(true)
						NullTimer()
						PointAtField()
						SetState(0)
					-- Если выделена пустая площадка - проверим, какие кнопки интерфейса доступны
					else
						SetActive(true)
						SetState(1)
					end
				end
			end
		end
	-- Подсказка активна
	else
		-- Стрелочка тычет в площадку
		if GetState() == 0 then
			-- Чтобы стрелка обновлялась
			if message:is("Update") then
				-- Выделена площадка
				if tutorial:game():getSelected() and tutorial:isLargeFieldFree(tutorial:game():getSelected():id()) then
					PointAtAppropriatePoint()
					SetState(1)
				end
			end
		-- Стрелка тычет в панель
		elseif GetState() == 1 then
			-- Чтобы стрелка обновлялась
			if message:is("Update") then
				-- Сняли выделение - все прячем
				if ShouldPointAtFreeLargeField() then
					HideArrow()
					SetState(111)
				else
					PointAtAppropriatePoint()
				end
			end
		elseif GetState() == 111 then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)

				local isBuildingStarted = IsBuildingStarted()
				local appearTime = tutGetFloat("RE2_Build4HouseHint_HintAppearTime")
				
				RemoveArrow()
				Reset()
				
				SetBuildingStarted(isBuildingStarted)
				SetAppearTime(appearTime)
			end
		end
	end
end

-- Подсказка на постройку третьего и четвертого дома после подсказки на таски
function RE2_Build5HouseHint(message)
	local housesPos = IPoint(617, 100)
	local backPos = IPoint(950, 100)
	local house1Pos = IPoint(445, 100)
	------------------------------------------ Дополнительные функции ------------------------------------------
	-- Инициализация переменных
	local function Reset()	
		tutSetBool("RE2_Build5HouseHint_Active", false)				-- активность подсказки
		tutSetFloat("RE2_Build5HouseHint_HintAppearTime", 15.0)		-- время появления подсказки
		tutSetFloat("RE2_Build5HouseHint_Time", 0.0)				-- общее время подсказки
		tutSetInt("RE2_Build5HouseHint_State", -1)
		tutSetBool("RE2_Build5HouseHint_Ready", false)				-- готов ли первый дом
		tutSetInt("RE2_Build5HouseHint_Arrow", -1)					-- Идентификатор стрелочки
		tutSetBool("RE2_Build5HouseHint_BuildingStarted", false)	-- Строительство первого дома началось
		tutSetBool("RE2_Build5HouseHint_ArrowHidden", true)			-- Стрелка скрыта
	end

	local function IsArrowHidden()
		return tutGetBool("RE2_Build5HouseHint_ArrowHidden")
	end
	
	local function SetArrowHidden(hidden)
		tutSetBool("RE2_Build5HouseHint_ArrowHidden", hidden)
	end
	
	-- Начали строить дом?
	local function IsBuildingStarted()
		return tutGetBool("RE2_Build5HouseHint_BuildingStarted")
	end
	
	-- Устанавливает, начали ли строить дом
	local function SetBuildingStarted(started)
		tutSetBool("RE2_Build5HouseHint_BuildingStarted", started)
	end
	
	-- Построили дом, подсказка больше не нужна
	local function IsReady()
		return tutGetBool("RE2_Build5HouseHint_Ready")
	end
	
	-- Устанавливает, нужно ли отображать подсказку
	local function SetReady(ready)
		tutSetBool("RE2_Build5HouseHint_Ready", ready)
	end
	
	-- Обновляет таймер
	local function Update()
		tutSetFloat("RE2_Build5HouseHint_Time", tutGetFloat("RE2_Build5HouseHint_Time") + message:getVariables():getFloat("TimeDelta"))
	end
	
	-- Возвращает true, если пора показывать подсказку
	local function ItsTime()
		return tutGetFloat("RE2_Build5HouseHint_Time") > tutGetFloat("RE2_Build5HouseHint_HintAppearTime")
	end
	
	local function Time()
		return tutGetFloat("RE2_Build5HouseHint_Time")
	end

	local function SetAppearTime(newTime)
		tutSetFloat("RE2_Build5HouseHint_HintAppearTime", newTime)
	end
	
	-- Обнуляет таймер
	local function NullTimer()
		tutSetFloat("RE2_Build5HouseHint_Time", 0.0)
	end
	
	-- Возвращает состояние
	local function GetState()
		return tutGetInt("RE2_Build5HouseHint_State")
	end
	
	-- Устанавливает новое состояние
	local function SetState(newState)
		if newState == GetState() then
			return
		end
		tutSetInt("RE2_Build5HouseHint_State", newState)
	end

	-- Активна ли подсказка
	local function IsActive()
		return tutGetBool("RE2_Build5HouseHint_Active")
	end
	
	-- Устанавливает активность подсказки
	local function SetActive(newActive)
		tutSetBool("RE2_Build5HouseHint_Active", newActive)
	end
	
	-- Нужно ли указывать стрелкой на пустую площадку?
	-- Нужно, если ничего не выделено или выделено, но не пустая площадка
	local function ShouldPointAtFreeLargeField()
		if (not tutorial:game():getSelected()) or (tutorial:game():getSelected() and not tutorial:isLargeFieldFree(tutorial:game():getSelected():id())) then
			return true
		else
			return false
		end
	end
	
	-- Возвращает стрелку (если нет - создает)
	local function GetArrow()
		local arrowId = tutGetInt("RE2_Build5HouseHint_Arrow")
		-- Стрелки нет - создаем
		if arrowId == -1 then
			arrowId = tutorial:addArrow()
			tutSetInt("RE2_Build5HouseHint_Arrow", arrowId)
		end
		
		return arrowId
	end
	
	-- Шаманский код для отображения стрелки
	local function ShowArrow()
		SetArrowHidden(false)

		tutorial:variables():setBool("TutorialLock", true)
		tutorial:setObjectsAllowType(allowPass)
		tutorial:variables():setBool("TutorialArrowsNoBind", true);
		tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
		tutorial:setCharacter("Sedrik")
		tutorial:setWidgetVisible("TutorialOk", true)
		tutorial:show(0.25)
	end
	
	-- Прячет стрелку, завершает подсказку
	local function HideArrow()
		SetArrowHidden(true)

		tutorial:hideArrows(0.25)
		tutorial:hide(0.25)
	end
	
	-- Удаляет стрелку
	local function RemoveArrow()
		local arrowId = GetArrow()
		tutorial:removeArrow(arrowId)
		tutSetInt("RE2_Build5HouseHint_Arrow", -1)
	end
	
	-- Указывает на площадку
	local function PointAtField()
		local arrowId = GetArrow()
		
		local middleFieldId = 58972
		local fieldPos
		
		-- Если площадка в центре свободна - тычем в нее
		if tutorial:isLargeFieldFree(middleFieldId) then
			fieldPos = tutorial:game():getObject(middleFieldId):getScreenPosition()
		else
			-- Иначе - тычем в произвольную пустую площадку
			local fieldId = tutorial:getRandomFreeLargeFieldId()
			if fieldId ~= -1 then
				fieldPos = tutorial:game():getObject(fieldId):getScreenPosition()
			else
				return
			end
		end

		tutorial:getArrow(arrowId):setPosition(fieldPos.x, fieldPos.y + 40)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Назад"
	local function PointAtBack()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(backPos.x, backPos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Дома"
	local function PointAtHouses()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(housesPos.x, housesPos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)

		ShowArrow()
	end
	
	-- Указывает на кнопку "Дом1"
	local function PointAtHouse1()
		local arrowId = GetArrow()
		
		tutorial:getArrow(arrowId):setPosition(house1Pos.x, house1Pos.y)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):show(0.5)
		
		ShowArrow()
	end
	
	-- Указывает на соответствующую точку в зависимости от ситуации
	local function PointAtAppropriatePoint()
		local arrowId = GetArrow()
		local arrowPos = IPoint(tutorial:getArrow(arrowId):getPosition().x, tutorial:getArrow(arrowId):getPosition().y)
		
		-- Кнопки "Дома" и "Здания"
		if tutorial:isLargeFieldInterface() then
			local pointAtRightPlace = (housesPos.x == arrowPos.x and housesPos.y == arrowPos.y)
			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtHouses()
				end
			end
		-- Интерфейс постройки зданий
		elseif tutorial:isLargeFieldInterfaceBuildings() then
			local pointAtRightPlace = (backPos.x == arrowPos.x and backPos.y == arrowPos.y)

			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtBack()
				end
			end
		-- Интерфейс постройки домов
		elseif tutorial:isLargeFieldInterfaceHouses() then
			local pointAtRightPlace = (house1Pos.x == arrowPos.x and house1Pos.y == arrowPos.y)
			
			if not IsArrowHidden() and not pointAtRightPlace then
				HideArrow()
				NullTimer()
			else
				Update()
				if Time() > 0.25 then
					PointAtHouse1()
				end
			end
		end
	end	
	
	------------------------------------------ Начало основной функции ------------------------------------------
	-- Инициализация
	if message:is("LoadLevel") then
		Reset()
	end

	-- Еще не построили второй дом - ничего не делаем
	if tutorial:game():getHouses1Count() < 4 then
		return
	end
	
	-- Если активна другая подсказка - ничего не делаем
	if tutGetBool("TutorialLock") and not IsActive() then
		return
	end
	
	-- Построили третий дом - ничего не делаем
	if IsReady() then
		return
	end
	
	
	if message:is("House1", "press") and not IsBuildingStarted() then
		SetBuildingStarted(true)
	elseif message:is("Cancel", "press") and IsBuildingStarted() then
		SetBuildingStarted(false)
	elseif message:is("BuildingBuilt") and IsBuildingStarted() then
		SetReady(true)
	end
	
	--[[
		-1 - начальное состояние - стрелки нет
		0 - стрелка тычет в площадку
		1 - стрелка тычет в кнопку панель
		111 - прячем стрелку - переинициализация
	]]--
	-- Подсказка не активна
	if not IsActive() then
		-- Обновляем таймер
		if message:is("Update") and not IsBuildingStarted() then
			Update()
			
			-- Пора
			if ItsTime() then
				-- Проверим на предмет начального состояния
				if GetState() == -1 then
					-- Если ничего не выделено или выделено, но не пустая площадка - укажем на площадку
					if ShouldPointAtFreeLargeField() then
						SetActive(true)
						NullTimer()
						PointAtField()
						SetState(0)
					-- Если выделена пустая площадка - проверим, какие кнопки интерфейса доступны
					else
						SetActive(true)
						SetState(1)
					end
				end
			end
		end
	-- Подсказка активна
	else
		-- Стрелочка тычет в площадку
		if GetState() == 0 then
			-- Чтобы стрелка обновлялась
			if message:is("Update") then
				-- Выделена площадка
				if tutorial:game():getSelected() and tutorial:isLargeFieldFree(tutorial:game():getSelected():id()) then
					PointAtAppropriatePoint()
					SetState(1)
				end
			end
		-- Стрелка тычет в панель
		elseif GetState() == 1 then
			-- Чтобы стрелка обновлялась
			if message:is("Update") then
				-- Сняли выделение - все прячем
				if ShouldPointAtFreeLargeField() then
					HideArrow()
					SetState(111)
				else
					PointAtAppropriatePoint()
				end
			end
		elseif GetState() == 111 then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)

				local isBuildingStarted = IsBuildingStarted()
				local appearTime = tutGetFloat("RE2_Build5HouseHint_HintAppearTime")
				
				RemoveArrow()
				Reset()
				
				SetBuildingStarted(isBuildingStarted)
				SetAppearTime(appearTime)
			end
		end
	end
end

-- Подсказка после постройки первого дома
function RE2_FirstHouseWasBuilt(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_FirstHouseWasBuilt_Active", false)			-- активность подсказки
		tutSetBool("RE2_FirstHouseWasBuilt_Shown", false)
		tutSetBool("RE2_FirstHouseWasBuilt_Allow", false)
	end
	
	-- Еще не построили первый дом - ничего не делаем
	if message:is("BuildingBuilt") and not tutGetBool("RE2_FirstHouseWasBuilt_Allow") then
		tutSetBool("RE2_FirstHouseWasBuilt_Allow", true)
	end
	
	if not tutGetBool("RE2_FirstHouseWasBuilt_Allow") then
		return
	end

	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_FirstHouseWasBuilt_Active")) then
		return
	end
	
	-- Логика подсказки при неактивном состоянии
	if not tutGetBool("RE2_FirstHouseWasBuilt_Active") and not tutGetBool("RE2_FirstHouseWasBuilt_Shown") then
		tutSetBool("RE2_FirstHouseWasBuilt_Active", true)
		tutorial:variables():setBool("TutorialLock", true)
		tutSetInt("RE2_FirstHouseWasBuilt_State", 0)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_FirstHouseWasBuilt")
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetFloat("TutorialShowDelayTime", 0.0)
		tutorial:setObjectsAllowType(allowPass)
		
		arrow = tutorial:addArrow()
		tutorial:getArrow(arrow):setPosition(713, 713)
		tutorial:getArrow(arrow):setAngle(45)
		tutorial:getArrow(arrow):setShowTimer(1.0)
		tutorial:getArrow(arrow):show(0.5)
		tutorial:show(0.25)
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_FirstHouseWasBuilt_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_FirstHouseWasBuilt_State", 1)
			end
		elseif (tutGetInt("RE2_FirstHouseWasBuilt_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_FirstHouseWasBuilt_Shown", true)
			end
		end
	end
end

function RE2_01_01(message)
	if (message:is("LoadLevel")) then
		-- Добавляем умные подсказки
		tutorial:queueAddMessage("RE2_MoneyLootLoseHint")
		tutorial:queueAddMessage("RE2_AllLootAlmostBlinkHint")
		tutorial:queueAddMessage("RE2_FirstHouseWasBuilt")
		tutorial:queueAddMessage("RE2_HouseBuildHint")
		tutorial:queueAddMessage("RE2_BuildFirstHouseHint")
		tutorial:queueAddMessage("RE2_BuildSecondHouseHint")
		tutorial:queueAddMessage("RE2_Build4HouseHint")
		tutorial:queueAddMessage("RE2_Build5HouseHint")
		
		tutorial:show(0.25)
		tutorial:setCharacter("Dundee")
		tutorial:setText("RE2_01_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		if tutorial:getHouse(58978) then
			tutorial:getHouse(58978):AllowGenerateLootByTutorial(false)
			tutorial:getHouse(58978):setRentPercent(85)
		end
		tutorial:variables():setBool("TutorialFirstHousePodstava", true)
		tutorial:variables():setBool("TutorialRentgenEnabled", false)
	elseif message:is("RentTimeGenerated") then
		tutorial:variables():setBool("TutorialRentgenEnabled", true)
		if tutorial:getHouse(58978) then
			tutorial:getHouse(58978):AllowGenerateLootByTutorial(true)
		end
		tutorial:variables():setBool("TutorialFirstHousePodstava", false)
	end
	
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_01_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Dundee")
			tutorial:switchText("RE2_01_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_01_01_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function RE2_LootLoseHint(message)
	local function Reset()
		tutSetBool("RE2_LootLoseHint_Active", false)		-- активность подсказки
		tutSetInt("RE2_LootLostCount", 0)					-- количество потеряных лутов
		tutSetBool("RE2_LootLoseHint_Shown", false)		-- Была ли показан подсказка
		tutSetInt("RE2_LootLoseHint_State", -1)
	end

	local function GetLootLostCount()
		return tutGetInt("RE2_LootLostCount")
	end
	
	local function IncMoneyLootLostCount()
		tutSetInt("RE2_LootLostCount", tutGetInt("RE2_LootLostCount") + 1)
	end
	
	local function HintShown()
		return tutGetBool("RE2_LootLoseHint_Shown")
	end
	
	local function SetShown(shown)
		tutSetBool("RE2_LootLoseHint_Shown", shown)
	end
	
	local function SetActive(active)
		tutSetBool("RE2_LootLoseHint_Active", active)	
	end
	
	local function IsActive()
		return tutGetBool("RE2_LootLoseHint_Active")
	end
	
	local function GetState()
		return tutGetInt("RE2_LootLoseHint_State")
	end
	
	local function SetState(newState)
		tutSetInt("RE2_LootLoseHint_State", newState)
	end
	
	-- Инициализация
	if message:is("LoadLevel") then
		Reset()
	end

	if HintShown() then
		return
	end
	
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if tutGetBool("TutorialLock") and not IsActive() then
		return
	end

	if not IsActive() then
		if message:is("LootLost") then
			IncMoneyLootLostCount()
			
			-- Прощелкали три лута и больше
			if GetLootLostCount() > 4 and GetState() == -1 then
				SetActive(true)
				SetState(0)
				tutorial:variables():setBool("TutorialLock", true)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_AllLootHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.5)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
			end
		end
	else
		-- Отображаем подсказку
		if GetState() == 0 then
			if message:is("TutorialOk", "press") then
				tutorial:hide(0.25)
				SetState(1)
			end
		elseif GetState() == 1 then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				SetShown(true)
			end
		end
	end
end

function RE2_ForestLandHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_ForestLandHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_ForestLandHint_HintAppearTime", 7.0)	-- время появления подсказки
		tutSetFloat("RE2_ForestLandHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_ForestLandHint_Ready", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_ForestLandHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("ForestLand", "press")) then
			tutSetBool("RE2_ForestLandHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_ForestLandHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_ForestLandHint_Ready")) then
			tutSetFloat("RE2_ForestLandHint_Time", tutGetFloat("RE2_ForestLandHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_ForestLandHint_Time") > tutGetFloat("RE2_ForestLandHint_HintAppearTime")) then
				-- Надо показать стрелку на таски и перейти в активный режим подсказки
				tutSetBool("RE2_ForestLandHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_ForestLandHint_State", 0)
				tutorial:targetForestLand("RE2_ForestLandHint_Arrow", 0.5, IPoint(0, 50), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
				tutorial:setCharacter("Sedrik")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("ForestLand", "press")) then
			tutSetBool("RE2_ForestLandHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_ForestLandHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("ForestLand", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetBool("RE2_ForestLandHint_Ready", true)
				tutSetInt("RE2_ForestLandHint_State", 2)
			end
		elseif (tutGetInt("RE2_ForestLandHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_ForestLandHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_WorkersAllHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_WorkersAllHint_Active", false)			-- активность подсказки
		tutSetInt("RE2_WorkersAllHint_Count", 2)				-- начальное количество кликов для появления подсказки
		tutSetInt("RE2_WorkersAllHint_Counter", tutGetInt("RE2_WorkersAllHint_Count")) -- текущее количество кликов, оставшееся до появления подсказки
		tutSetFloat("RE2_WorkersAllHint_Time", 0.0)
		tutSetBool("RE2_WorkersAllHint_ArrowHidden", true)
	end
	
	local function IsArrowHidden()
		return tutGetBool("RE2_WorkersAllHint_ArrowHidden")
	end
	
	local function SetArrowHidden(hidden)
		tutSetBool("RE2_WorkersAllHint_ArrowHidden", hidden)
	end
	
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_WorkersAllHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_WorkersAllHint_Active")) then
		-- Обновляем количество кликов
		if (message:is("WorkersBlock") and tutorial:game():getWorkersCount() < 5 and not tutorial:isBaseBusy()) then
			tutSetInt("RE2_WorkersAllHint_Counter", tutGetInt("RE2_WorkersAllHint_Counter") - 1)
			if (tutGetInt("RE2_WorkersAllHint_Counter") <= 0) then
				-- Обновляем счётчики кликов
				if (tutGetInt("RE2_WorkersAllHint_Count") == 2) then
					tutSetInt("RE2_WorkersAllHint_Count", 3)
				elseif (tutGetInt("RE2_WorkersAllHint_Count") == 3) then
					tutSetInt("RE2_WorkersAllHint_Count", 5)
				end
				tutSetInt("RE2_WorkersAllHint_Counter", tutGetInt("RE2_WorkersAllHint_Count"))
				-- Надо перейти в активный режим подсказки
				tutSetBool("RE2_WorkersAllHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_WorkersAllHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", -1.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				if (tutorial:getSelectedBuildingType() == BaseBuildingType) then
					arrowId = tutorial:addArrow()
					tutorial:getArrow(arrowId):setPosition(705, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutSetInt("RE2_WorkersAllHint_Arrow", arrowId)
				else
					tutSetInt("RE2_WorkersAllHint_Arrow", tutorial:targetBase(0.5, IPoint(0, 50), 0.0))
				end
				tutSetFloat("RE2_WorkersAllHint_Time", 0.0)
				tutorial:show(0.25)
				SetArrowHidden(false)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_WorkersAllHint_State") == 0) then
			if (message:is("Update")) then
				if (tutorial:getSelectedBuildingType() == BaseBuildingType) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetArrowHidden(true)
					
					tutSetFloat("RE2_WorkersAllHint_Time", 0.0)
					tutSetInt("RE2_WorkersAllHint_State", 1)
				else
					tutSetFloat("RE2_WorkersAllHint_Time", tutGetFloat("RE2_WorkersAllHint_Time") + message:getVariables():getFloat("TimeDelta"))
					if (tutGetFloat("RE2_WorkersAllHint_Time") > 7.0) then
						tutorial:hideArrows(0.25)
						tutorial:hide(0.25)
						SetArrowHidden(true)
						tutSetInt("RE2_WorkersAllHint_State", 2)
					end
				end
			elseif (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetArrowHidden(true)
				tutSetInt("RE2_WorkersAllHint_State", 2)
			end
		elseif (tutGetInt("RE2_WorkersAllHint_State") == 1) then
			if (message:is("Update")) then
				tutSetFloat("RE2_WorkersAllHint_Time", tutGetFloat("RE2_WorkersAllHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if IsArrowHidden() and tutGetFloat("RE2_WorkersAllHint_Time") > 0.25 then
					local arrowId = tutGetInt("RE2_WorkersAllHint_Arrow")
					
					tutorial:variables():setBool("TutorialLock", true)
					tutorial:setCharacter("Sedrik")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutSetFloat("TutorialShowDelayTime", -1.0)
					tutorial:setObjectsAllowType(allowPass)
					tutorial:variables():setBool("TutorialArrowsNoBind", true);
					
					tutorial:getArrow(arrowId):setPosition(705, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)

					tutorial:show(0.25)
				end
				
				if (tutorial:getSelectedBuildingType() ~= BaseBuildingType) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetArrowHidden(true)
					tutSetInt("RE2_WorkersAllHint_State", 2)
				else
					tutSetFloat("RE2_WorkersAllHint_Time", tutGetFloat("RE2_WorkersAllHint_Time") + message:getVariables():getFloat("TimeDelta"))
					if (tutGetFloat("RE2_WorkersAllHint_Time") > 5.0) then
						tutorial:hideArrows(0.25)
						tutorial:hide(0.25)
						SetArrowHidden(true)
						tutSetInt("RE2_WorkersAllHint_State", 2)
					end
				end
			elseif (message:is("Worker", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetArrowHidden(true)
				tutSetInt("RE2_WorkersAllHint_State", 2)
			end
		elseif (tutGetInt("RE2_WorkersAllHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_WorkersAllHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_MaterialsAllHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_MaterialsAllHint_Active", false)			-- активность подсказки
		tutSetInt("RE2_MaterialsAllHint_Count", 2)				-- начальное количество кликов для появления подсказки
		tutSetInt("RE2_MaterialsAllHint_Counter", tutGetInt("RE2_MaterialsAllHint_Count")) -- текущее количество кликов, оставшееся до появления подсказки
		tutSetFloat("RE2_MaterialsAllHint_Time", 0.0)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_MaterialsAllHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_MaterialsAllHint_Active")) then
		-- Обновляем количество кликов
		if (message:is("MaterialsBlock") and tutorial:getForestLandsWithMaterialsCount() > 0) then
			tutSetInt("RE2_MaterialsAllHint_Counter", tutGetInt("RE2_MaterialsAllHint_Counter") - 1)
			if (tutGetInt("RE2_MaterialsAllHint_Counter") <= 0) then
				showSedrik = false
				-- Обновляем счётчики кликов
				if (tutGetInt("RE2_MaterialsAllHint_Count") == 2) then
					tutSetInt("RE2_MaterialsAllHint_Count", 3)
					showSedrik = true
				elseif (tutGetInt("RE2_MaterialsAllHint_Count") == 3) then
					tutSetInt("RE2_MaterialsAllHint_Count", 5)
				end
				tutSetInt("RE2_MaterialsAllHint_Counter", tutGetInt("RE2_MaterialsAllHint_Count"))
				-- Надо перейти в активный режим подсказки
				tutSetBool("RE2_MaterialsAllHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_MaterialsAllHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				if (showSedrik) then
					tutSetFloat("TutorialShowDelayTime", 0.5)
					tutSetInt("RE2_MaterialsAllHint_State", 0)
				else
					tutSetFloat("TutorialShowDelayTime", -1.0)
					tutSetInt("RE2_MaterialsAllHint_State", 1)
					tutSetFloat("RE2_MaterialsAllHint_Time", 0.0)
				end
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:targetAllForestLands(0.5, IPoint(0, 50), 0.0)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_MaterialsAllHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_MaterialsAllHint_State", 2)
			end
		elseif (tutGetInt("RE2_MaterialsAllHint_State") == 1) then
			if (message:is("Update")) then
				tutSetFloat("RE2_MaterialsAllHint_Time", tutGetFloat("RE2_MaterialsAllHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("RE2_MaterialsAllHint_Time") > 5.0) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetInt("RE2_MaterialsAllHint_State", 2)
				end
			elseif (message:is("ForestLand", "click")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_MaterialsAllHint_State", 2)
			end
		elseif (tutGetInt("RE2_MaterialsAllHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_MaterialsAllHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Клик по недоступному объекту на другом берегу
function RE2_UnreachableHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_UnreachableHint_Active", false)			-- активность подсказки
		tutSetInt("RE2_UnreachableHint_Count", 3)				-- начальное количество кликов для появления подсказки
		tutSetInt("RE2_UnreachableHint_Counter", tutGetInt("RE2_UnreachableHint_Count")) -- текущее количество кликов, оставшееся до появления подсказки
		tutSetFloat("RE2_UnreachableHint_Time", 0.0)
		tutSetBool("RE2_UnreachableHint_ShowSedrik", true)		-- Вначале показываем Седрика
		tutSetBool("RE2_UnreachableHint_Needed", true)
	end
	
	if message:is("Bridge", "press") then
		tutSetBool("RE2_UnreachableHint_Needed", false)
	end
	
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_UnreachableHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_UnreachableHint_Active")) then
		-- Обновляем количество кликов
		if (message:is("UnreachableClick") and tutGetBool("RE2_UnreachableHint_Needed")) then
			tutSetInt("RE2_UnreachableHint_Counter", tutGetInt("RE2_UnreachableHint_Counter") - 1)
			if (tutGetInt("RE2_UnreachableHint_Counter") <= 0) then
				showSedrik = false
				-- Обновляем счётчики кликов
				if (tutGetInt("RE2_UnreachableHint_Count") == 3) then
					tutSetInt("RE2_UnreachableHint_Count", 5)
					
					-- Вначале показываем Седрика
					if tutGetBool("RE2_UnreachableHint_ShowSedrik") then
						showSedrik = true
						tutSetBool("RE2_UnreachableHint_ShowSedrik", false)
					end
				end
				tutSetInt("RE2_UnreachableHint_Counter", tutGetInt("RE2_UnreachableHint_Count"))
				-- Надо перейти в активный режим подсказки
				tutSetBool("RE2_UnreachableHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_UnreachableHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				if (showSedrik) then
					tutSetFloat("TutorialShowDelayTime", 0.5)
					tutSetInt("RE2_UnreachableHint_State", 0)
				else
					tutSetFloat("TutorialShowDelayTime", -1.0)
					tutSetInt("RE2_UnreachableHint_State", 1)
					tutSetFloat("RE2_UnreachableHint_Time", 0.0)
				end
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
					arrowId = tutorial:addArrow()
					tutorial:getArrow(arrowId):setPosition(542, 520)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_UnreachableHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("Bridge", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_UnreachableHint_State", 2)
			end
		elseif (tutGetInt("RE2_UnreachableHint_State") == 1) then
			if (message:is("Update")) then
				tutSetFloat("RE2_UnreachableHint_Time", tutGetFloat("RE2_UnreachableHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("RE2_UnreachableHint_Time") > 5.0) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetInt("RE2_UnreachableHint_State", 2)
				end
			elseif (message:is("Bridge", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_UnreachableHint_State", 2)
			end
		elseif (tutGetInt("RE2_UnreachableHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_UnreachableHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Если в течение 30 секунд ни разу не покупали рабочих
function RE2_NoMoreWorkersDuring30Sec(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_NoMoreWorkersDuring30Sec_Active", false)			-- активность подсказки
		tutSetFloat("RE2_NoMoreWorkersDuring30Sec_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_NoMoreWorkersDuring30Sec_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_NoMoreWorkersDuring30Sec_Shown", false)
		tutSetInt("RE2_NoMoreWorkersDuring30Sec_State", -1)
	end
	
	local function SetState(state)
		tutSetFloat("RE2_NoMoreWorkersDuring30Sec_Time", 0.0)
		tutSetInt("RE2_NoMoreWorkersDuring30Sec_State", state)
	end
	
	local function GetState()
		return tutGetInt("RE2_NoMoreWorkersDuring30Sec_State")
	end
	-- Уже закупали рабочих - подсказка не нужна
	if tutorial:game():getWorkersCount() > 1 then
		if tutGetBool("RE2_NoMoreWorkersDuring30Sec_Active") and not tutGetBool("RE2_NoMoreWorkersDuring30Sec_Shown") then
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutorial:variables():setBool("TutorialLock", false)
			tutSetBool("RE2_NoMoreWorkersDuring30Sec_Shown", true)
		end
		return
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_NoMoreWorkersDuring30Sec_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("Worker", "press")) then
			tutSetBool("RE2_NoMoreWorkersDuring30Sec_Shown", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if not tutGetBool("RE2_NoMoreWorkersDuring30Sec_Active") then
		if (message:is("Worker", "press")) then
			tutSetBool("RE2_NoMoreWorkersDuring30Sec_Shown", true)
		end
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_NoMoreWorkersDuring30Sec_Shown")) then
			tutSetFloat("RE2_NoMoreWorkersDuring30Sec_Time", tutGetFloat("RE2_NoMoreWorkersDuring30Sec_Time") + message:getVariables():getFloat("TimeDelta"))
			
			if (tutGetFloat("RE2_NoMoreWorkersDuring30Sec_Time") > tutGetFloat("RE2_NoMoreWorkersDuring30Sec_HintAppearTime")) then
			
				tutSetBool("RE2_NoMoreWorkersDuring30Sec_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				
				if (tutorial:getSelectedBuildingType() == BaseBuildingType) then
					local arrowId = tutorial:addArrow()
					tutorial:getArrow(arrowId):setPosition(705, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutSetInt("RE2_NoMoreWorkersDuring30Sec_Arrow", arrowId)
					SetState(1)	-- стрелка тычет в рабочего
					
					tutorial:setObjectsAllowType(allowPass)
					tutorial:variables():setBool("TutorialArrowsNoBind", true);
					tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
					tutorial:setCharacter("Sedrik")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:show(0.25)
					
				else
					tutorial:setObjectsAllowType(allowPass)
					tutorial:variables():setBool("TutorialArrowsNoBind", true);
					tutorial:variables():setFloat("TutorialShowDelayTime", 0.0)
					tutorial:setCharacter("Sedrik")
					tutorial:setText("RE2_NoMoreWorkersDuring30Sec")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:show(0.25)
					
					tutSetInt("RE2_NoMoreWorkersDuring30Sec_Arrow", tutorial:targetBase(0.5, IPoint(0, 50), 0.0))
					SetState(0)	-- стрелка тычет в базу
				end
				tutSetFloat("RE2_NoMoreWorkersDuring30Sec_Time", 0.0)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if GetState() == 0 then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetState(2)	-- ожидание выделения базы
			end
		elseif (GetState() == 1) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetState(2)	-- ожидание выделения базы
			elseif message:is("Worker", "press") then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetState(101)
			elseif message:is("Update") then
				if tutorial:getSelectedBuildingType() ~= BaseBuildingType then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetState(2)
				end
			end
		elseif GetState() == 2 then
			if message:is("Update") then
				tutSetFloat("RE2_NoMoreWorkersDuring30Sec_Time", tutGetFloat("RE2_NoMoreWorkersDuring30Sec_Time") + message:getVariables():getFloat("TimeDelta"))
				
				if tutGetFloat("RE2_NoMoreWorkersDuring30Sec_Time") > 0.5 and tutorial:getSelectedBuildingType() == BaseBuildingType then
					SetState(3)
					local arrowId = tutGetInt("RE2_NoMoreWorkersDuring30Sec_Arrow")
					tutorial:getArrow(arrowId):setPosition(705, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
					tutorial:show(0.25)
				end
			end
		elseif GetState() == 3 then
			if message:is("Update") then 
				if tutorial:getSelectedBuildingType() ~= BaseBuildingType then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetState(2)
				end
			elseif message:is("Worker", "press") then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetState(101)
			end
		elseif (GetState() == 101) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_NoMoreWorkersDuring30Sec_Shown", true)
			end
		end
	end
end

-- Если таск про золото уже выполнен, а рабочих еще не достаточно.
function RE2_HireWorkersToWinHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_HireWorkersToWinHint_Active", false)			-- активность подсказки
		tutSetBool("RE2_HireWorkersToWinHint_Shown", false)
		tutSetInt("RE2_HireWorkersToWinHint_State", -1)
		tutSetFloat("RE2_HireWorkersToWinHint_Time", 0.0)
		tutSetInt("RE2_HireWorkersToWinHint_Arrow", -1)
	end
	
	local function Time()
		return tutGetFloat("RE2_HireWorkersToWinHint_Time")
	end
	
	local function SetTime(t)
		tutSetFloat("RE2_HireWorkersToWinHint_Time", t)
	end
	
	local function Update()
		SetTime(Time() + message:getVariables():getFloat("TimeDelta"))
	end
	
	local function SetState(state)
		tutSetInt("RE2_HireWorkersToWinHint_State", state)
	end
	
	local function GetState()
		return tutGetInt("RE2_HireWorkersToWinHint_State")
	end
	
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_HireWorkersToWinHint_Active")) then
		-- Если при этом денег и рабочих достаточно - подсказку не показываем
		if tutorial:game():getMoneyCount() >= 1500 and tutorial:game():getWorkersCount() >= 5 then
			tutSetBool("RE2_HireWorkersToWinHint_Shown", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if not tutGetBool("RE2_HireWorkersToWinHint_Active") and not tutGetBool("RE2_HireWorkersToWinHint_Shown") then
		if tutorial:game():getMoneyCount() >= 1500 and tutorial:game():getWorkersCount() < 5 then
			tutSetBool("RE2_HireWorkersToWinHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			
			tutorial:setObjectsAllowType(allowPass)
			tutorial:variables():setBool("TutorialArrowsNoBind", true);
			tutorial:variables():setFloat("TutorialShowDelayTime", 0.0)
			tutorial:setCharacter("Sedrik")
			tutorial:setText("RE2_HireWorkersToWin")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutorial:show(0.25)
			
			local arrow = tutorial:addArrow()
			tutorial:getArrow(arrow):setPosition(713, 713)
			tutorial:getArrow(arrow):setAngle(45)
			tutorial:getArrow(arrow):setShowTimer(1.0)
			tutorial:getArrow(arrow):show(0.5)
			tutorial:show(0.25)			
				
			SetState(0)	
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if GetState() == 0 then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetState(1)
				SetTime(0.0)
			end
		elseif GetState() == 1 then
			if message:is("Update") then
				Update()
				if Time() > 0.25 then
					-- Если база не выделена - тычем стрелкой в базу
					if tutorial:getSelectedBuildingType() ~= BaseBuildingType then
						tutorial:setObjectsAllowType(allowPass)
						tutorial:variables():setBool("TutorialArrowsNoBind", true);
						tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
						tutorial:setCharacter("Sedrik")
						tutorial:setWidgetVisible("TutorialOk", true)
						tutorial:show(0.25)
						
						tutSetInt("RE2_HireWorkersToWinHint_Arrow", tutorial:targetBase(0.5, IPoint(0, 50), 0.0))
						SetState(2)
						SetTime(0.0)
					else
						local arrowId
						if tutGetInt("RE2_HireWorkersToWinHint_Arrow") ~= -1 then
							arrowId = tutGetInt("RE2_HireWorkersToWinHint_Arrow")
						else
							arrowId = tutorial:addArrow()
						end
						tutorial:getArrow(arrowId):setPosition(705, 100)
						tutorial:getArrow(arrowId):setAngle(270)
						tutorial:getArrow(arrowId):setIgnoreContext(true)
						tutorial:getArrow(arrowId):show(0.5)
						tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
						tutorial:show(0.25)
						
						SetState(4)
						SetTime(0.0)
					end
				-- Если базавыделена - в кнопку покупки рабочего
				end
			end
		-- Выделена база
		elseif GetState() == 2 then
			if message:is("Update") then
				-- Выделяем базу - стрелка на кнопку покупки рабочего
				if tutorial:getSelectedBuildingType() == BaseBuildingType then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetState(3)
					SetTime(0.0)
				end
			end
		-- Стрелка тычет в покупку рабочего
		elseif GetState() == 3 then
			if message:is("Update") then
				Update()
				if Time() > 0.25 then
					local arrowId = tutGetInt("RE2_HireWorkersToWinHint_Arrow")
					tutorial:getArrow(arrowId):setPosition(705, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
					tutorial:show(0.25)
					
					SetState(4)
				end
			end
		elseif GetState() == 4 then
			if message:is("Worker", "press") then
				-- Покупаем последнего рабочего
				if tutorial:game():getWorkersCount() == 4 then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetState(101)
				else
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetState(100)
					SetTime(0.0)
				end
			elseif message:is("Update") then
				if tutorial:getSelectedBuildingType() ~= BaseBuildingType then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetState(1)
					SetTime(0.0)
				end
			end
		elseif GetState() == 100 then
			if message:is("Update") then
				Update()
				if Time() > 15.0 then
					SetTime(0.0)
					SetState(1)
				end
			end
		elseif (GetState() == 101) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_HireWorkersToWinHint_Shown", true)
			end
		end
	end
end

function RE2_01_02(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_LootLoseHint")
		tutorial:queueAddMessage("RE2_AllLootAlmostBlinkHint")
		tutorial:queueAddMessage("RE2_ForestLandHint")
		tutorial:queueAddMessage("RE2_WorkersAllHint")
		tutorial:queueAddMessage("RE2_MaterialsAllHint")
		tutorial:queueAddMessage("RE2_UnreachableHint")
		tutorial:queueAddMessage("RE2_NoMoreWorkersDuring30Sec")
		tutorial:queueAddMessage("RE2_HireWorkersToWinHint")
		
		tutSetBool("TutorialToSelect", true)
	end
end

function RE2_SawmillButtonHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_SawmillButtonHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_SawmillButtonHint_HintAppearTime", 3.0)	-- время появления подсказки
		tutSetFloat("RE2_SawmillButtonHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_SawmillButtonHint_Ready", false)
		tutSetInt("RE2_SawmillButtonHint_Arrow", tutorial:addArrow())
		tutSetBool("RE2_SawmillButtonHint_ArrowHidden", true)
	end
	
	local function SetArrowHidden(hidden)
		tutSetBool("RE2_SawmillButtonHint_ArrowHidden", hidden)
	end
	
	local function IsArrowHidden()
		return tutGetBool("RE2_SawmillButtonHint_ArrowHidden")
	end
	
	local function HideArrow()
		tutorial:hideArrows(0.25)
		tutorial:hide(0.25)
		
		SetArrowHidden(true)
	end
	
	local function ShowArrow(arrowId)
		tutorial:getArrow(arrowId):setIgnoreContext(true)
		tutorial:getArrow(arrowId):setAngle(270)
		tutorial:getArrow(arrowId):show(0.5)

		tutorial:variables():setBool("TutorialLock", true)
		tutorial:setObjectsAllowType(allowPass)
		tutorial:variables():setBool("TutorialArrowsNoBind", true);
		tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
		tutorial:setCharacter("Sedrik")
		tutorial:setWidgetVisible("TutorialOk", true)
		tutorial:show(0.25)
		
		SetArrowHidden(false)
	end
	
	local function Update()
		tutSetFloat("RE2_SawmillButtonHint_Time", tutGetFloat("RE2_SawmillButtonHint_Time") + message:getVariables():getFloat("TimeDelta"))
	end
	
	local function Time()
		return tutGetFloat("RE2_SawmillButtonHint_Time")
	end
	
	local function SetTime(t)
		tutSetFloat("RE2_SawmillButtonHint_Time", t)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_SawmillButtonHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("Sawmill", "press")) then
			tutSetBool("RE2_SawmillButtonHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_SawmillButtonHint_Active")) then
		if (message:is("Sawmill", "press")) then
			tutSetBool("RE2_SawmillButtonHint_Ready", true)
		end
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_SawmillButtonHint_Ready")) then
			if (tutorial:isLargeFieldInterface() or tutorial:isLargeFieldInterfaceHouses() or tutorial:isLargeFieldInterfaceBuildings()) then
				tutSetBool("RE2_SawmillButtonHint_Active", true)
				tutSetInt("RE2_SawmillButtonHint_State", 0)
				
				arrowId = tutGetInt("RE2_SawmillButtonHint_Arrow")
				if (tutorial:isLargeFieldInterface()) then
					tutorial:getArrow(arrowId):setPosition(765, 100)
				elseif (tutorial:isLargeFieldInterfaceHouses()) then
					tutorial:getArrow(arrowId):setPosition(950, 100)
				elseif (tutorial:isLargeFieldInterfaceBuildings()) then
					tutorial:getArrow(arrowId):setPosition(500, 100)
				end
				
				ShowArrow(arrowId)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_SawmillButtonHint_State") == 0) then
			if (message:is("Update")) then
				local arrowId = tutGetInt("RE2_SawmillButtonHint_Arrow")
				if (not (tutorial:isLargeFieldInterface() or  tutorial:isLargeFieldInterfaceHouses() or tutorial:isLargeFieldInterfaceBuildings())) then
					HideArrow()
					tutSetFloat("RE2_SawmillButtonHint_Time", 0.0)
					tutSetInt("RE2_SawmillButtonHint_State", 1)
				elseif (tutorial:isLargeFieldInterface()) then
					if (tutorial:getArrow(arrowId):getPosition().x ~= 765) then
						if not IsArrowHidden() then
							HideArrow()
							SetTime(0)
						else
							Update()
							if Time() > 0.25 then
								tutorial:getArrow(arrowId):setPosition(765, 100)
								ShowArrow(arrowId)
							end
						end
					end
				elseif (tutorial:isLargeFieldInterfaceHouses()) then
					if (tutorial:getArrow(arrowId):getPosition().x ~= 950) then
						if not IsArrowHidden() then
							HideArrow()
							SetTime(0)
						else
							Update()
							if Time() > 0.25 then
								tutorial:getArrow(arrowId):setPosition(950, 100)
								ShowArrow(arrowId)
							end
						end
					end
				elseif (tutorial:isLargeFieldInterfaceBuildings()) then
					if (tutorial:getArrow(arrowId):getPosition().x ~= 500) then
						if not IsArrowHidden() then
							HideArrow()
							SetTime(0)
						else
							Update()
							if Time() > 0.25 then
								tutorial:getArrow(arrowId):setPosition(500, 100)
								ShowArrow(arrowId)
							end
						end
					end
				end
			elseif (message:is("Sawmill", "press")) then
				tutSetBool("RE2_SawmillButtonHint_Ready", true)
				HideArrow()
				tutSetFloat("RE2_SawmillButtonHint_Time", 0.0)
				tutSetInt("RE2_SawmillButtonHint_State", 1)
			end
		elseif (tutGetInt("RE2_SawmillButtonHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_SawmillButtonHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)
			end
		end
	end
end


function RE2_FoodGatherHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_FoodGatherHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_FoodGatherHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("RE2_FoodGatherHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_FoodGatherHint_Ready", false)
		tutSetBool("RE2_FoodGatherHint_Sawmill", false)			-- Построена ли лесопилка
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_FoodGatherHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("Bush", "press")) then
			tutSetBool("RE2_FoodGatherHint_Ready", true)
		elseif (message:is("Sawmill", "press")) then
			tutSetBool("RE2_FoodGatherHint_Sawmill", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_FoodGatherHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_FoodGatherHint_Ready") and tutGetBool("RE2_FoodGatherHint_Sawmill") and tutorial:getBushesWithFoodCount() > 0) then
			tutSetFloat("RE2_FoodGatherHint_Time", tutGetFloat("RE2_FoodGatherHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_FoodGatherHint_Time") > tutGetFloat("RE2_FoodGatherHint_HintAppearTime")) then
				-- Надо показать стрелку на таски и перейти в активный режим подсказки
				tutSetBool("RE2_FoodGatherHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_FoodGatherHint_State", 0)
				tutorial:targetAllBushes(0.5, IPoint(5, 50), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
				tutorial:setCharacter("Sedrik")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("Bush", "press")) then
			tutSetBool("RE2_FoodGatherHint_Ready", true)
		elseif (message:is("Sawmill", "press")) then
			tutSetBool("RE2_FoodGatherHint_Sawmill", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_FoodGatherHint_State") == 0) then
			if (message:is("Bush", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetBool("RE2_FoodGatherHint_Ready", true)
				tutSetInt("RE2_FoodGatherHint_State", 2)
			end
		elseif (tutGetInt("RE2_FoodGatherHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_FoodGatherHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_WoodGatherHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_WoodGatherHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_WoodGatherHint_HintAppearTime", 60.0)	-- время появления подсказки
		tutSetFloat("RE2_WoodGatherHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_WoodGatherHint_Ready", false)
	end
	
	if tutorial:getBuiltBridgesCount() < 2 then
		return
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_WoodGatherHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("ForestLand", "press")) then
			tutSetBool("RE2_WoodGatherHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_WoodGatherHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_WoodGatherHint_Ready") and tutorial:getForestLandsWithMaterialsCount() > 0) then
			tutSetFloat("RE2_WoodGatherHint_Time", tutGetFloat("RE2_WoodGatherHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_WoodGatherHint_Time") > tutGetFloat("RE2_WoodGatherHint_HintAppearTime")) then
				-- Надо показать стрелку на таски и перейти в активный режим подсказки
				tutSetBool("RE2_WoodGatherHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_WoodGatherHint_State", 0)
				tutorial:targetAllForestLands(0.5, IPoint(5, 50), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
				tutorial:setCharacter("Sedrik")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("ForestLand", "press")) then
			tutSetBool("RE2_WoodGatherHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_WoodGatherHint_State") == 0) then
			if (message:is("ForestLand", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetBool("RE2_WoodGatherHint_Ready", true)
				tutSetInt("RE2_WoodGatherHint_State", 2)
			end
		elseif (tutGetInt("RE2_WoodGatherHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_WoodGatherHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_FoodAllHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_FoodAllHint_Active", false)			-- активность подсказки
		tutSetInt("RE2_FoodAllHint_Count", 2)				-- начальное количество кликов для появления подсказки
		tutSetInt("RE2_FoodAllHint_Counter", tutGetInt("RE2_FoodAllHint_Count")) -- текущее количество кликов, оставшееся до появления подсказки
		tutSetFloat("RE2_FoodAllHint_Time", 0.0)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_FoodAllHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_FoodAllHint_Active")) then
		-- Обновляем количество кликов
		if (message:is("FoodBlock") and tutorial:getAllBushesWithFoodCount() > 0) then
			tutSetInt("RE2_FoodAllHint_Counter", tutGetInt("RE2_FoodAllHint_Counter") - 1)
			if (tutGetInt("RE2_FoodAllHint_Counter") <= 0) then
				showSedrik = false
				-- Обновляем счётчики кликов
				if (tutGetInt("RE2_FoodAllHint_Count") == 2) then
					tutSetInt("RE2_FoodAllHint_Count", 3)
					showSedrik = true
				elseif (tutGetInt("RE2_FoodAllHint_Count") == 3) then
					tutSetInt("RE2_FoodAllHint_Count", 5)
				end
				tutSetInt("RE2_FoodAllHint_Counter", tutGetInt("RE2_FoodAllHint_Count"))
				-- Надо перейти в активный режим подсказки
				tutSetBool("RE2_FoodAllHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_FoodAllHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				if (showSedrik) then
					tutSetFloat("TutorialShowDelayTime", 0.5)
					tutSetInt("RE2_FoodAllHint_State", 0)
				else
					tutSetFloat("TutorialShowDelayTime", -1.0)
					tutSetInt("RE2_FoodAllHint_State", 1)
					tutSetFloat("RE2_FoodAllHint_Time", 0.0)
				end
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:targetAllBushesWithUnreachable(0.5, IPoint(5, 50), 0.0)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_FoodAllHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_FoodAllHint_State", 2)
			end
		elseif (tutGetInt("RE2_FoodAllHint_State") == 1) then
			if (message:is("Update")) then
				tutSetFloat("RE2_FoodAllHint_Time", tutGetFloat("RE2_FoodAllHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("RE2_FoodAllHint_Time") > 5.0) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetInt("RE2_FoodAllHint_State", 2)
				end
			elseif (message:is("Bush", "click")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_FoodAllHint_State", 2)
			end
		elseif (tutGetInt("RE2_FoodAllHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_FoodAllHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end


function RE2_SawmillHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_SawmillHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_SawmillHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("RE2_SawmillHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_SawmillHint_Ready", false)
		tutSetBool("RE2_SawmillHint_Started", false)
		tutSetInt("RE2_SawmillHint_State", -1)
		tutSetBool("RE2_SawmillHint_ButtonHint", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_SawmillHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("Sawmill", "press")) then
			tutSetBool("RE2_SawmillHint_Ready", true)
		elseif (message:is("Bridge", "press")) then
			tutSetBool("RE2_SawmillHint_Started", true)
		elseif (tutGetInt("RE2_SawmillHint_State") == 3 and message:is("Destroy", "press")) then
			tutSetBool("RE2_SawmillHint_Ready", true)
		elseif (tutGetInt("RE2_SawmillHint_State") == 6 and message:is("Destroy", "press")) then
			tutSetBool("RE2_SawmillHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_SawmillHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_SawmillHint_Ready") and tutGetBool("RE2_SawmillHint_Started")) then
			tutSetFloat("RE2_SawmillHint_Time", tutGetFloat("RE2_SawmillHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetInt("RE2_SawmillHint_State") == -1) then
				if (tutGetFloat("RE2_SawmillHint_Time") > tutGetFloat("RE2_SawmillHint_HintAppearTime")) then
					-- Надо показать стрелку на таски и перейти в активный режим подсказки
					tutSetBool("RE2_SawmillHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutorial:setObjectsAllowType(allowPass)
					tutorial:variables():setBool("TutorialArrowsNoBind", true);
					tutorial:variables():setFloat("TutorialShowDelayTime", 0.5)
					tutorial:setCharacter("Sedrik")
					tutorial:setWidgetVisible("TutorialOk", true)
								
					if (tutorial:hasFreeLargeFields()) then
						tutorial:targetAllFreeLargeFields("RE2_SawmillHint_Arrow", 0.5, IPoint(0, 40), 1.5)
						tutorial:setText("RE2_SawmillHint_01")
						tutSetInt("RE2_SawmillHint_State", 0)
					else
						tutorial:setText("RE2_SawmillHint_01")
						tutSetInt("RE2_SawmillHint_State", 1)
					end
					
					tutorial:show(0.25)
				end
			elseif (tutGetInt("RE2_SawmillHint_State") == 3) then
				if (tutGetFloat("RE2_SawmillHint_Time") > 15.0) then
					-- Надо показать стрелку на таски и перейти в активный режим подсказки
					tutSetBool("RE2_SawmillHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutorial:setObjectsAllowType(allowPass)
					tutorial:variables():setBool("TutorialArrowsNoBind", true);
					tutorial:variables():setFloat("TutorialShowDelayTime", 0.5)
					tutorial:setCharacter("Sedrik")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setText("RE2_SawmillHint_02")
					tutSetInt("RE2_SawmillHint_State", 4)
					tutorial:show(0.25)
				end
			elseif (tutGetInt("RE2_SawmillHint_State") == 6) then
				if (tutGetFloat("RE2_SawmillHint_Time") > 15.0 and not tutorial:isHouseInterface()) then
					-- Надо показать стрелку на таски и перейти в активный режим подсказки
					tutSetBool("RE2_SawmillHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutorial:setObjectsAllowType(allowPass)
					tutorial:variables():setBool("TutorialArrowsNoBind", true);
					tutorial:variables():setFloat("TutorialShowDelayTime", 0.5)
					tutorial:setCharacter("Sedrik")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setText("RE2_SawmillHint_03")
					tutSetInt("RE2_SawmillHint_State", 7)
					tutorial:targetAllHouses("RE2_SawmillHint_HouseArrow", 0, 0.5, IPoint(0, 40), 1.5)
					tutorial:show(0.25)
				end
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("Bridge", "press")) then
			tutSetBool("RE2_SawmillHint_Started", true)
		elseif (message:is("Sawmill", "press")) then
			tutSetBool("RE2_SawmillHint_Ready", true)
		elseif (tutGetInt("RE2_SawmillHint_State") == 3 and message:is("Destroy", "press")) then
			tutSetBool("RE2_SawmillHint_Ready", true)
		elseif (tutGetInt("RE2_SawmillHint_State") == 6 and message:is("Destroy", "press")) then
			tutSetBool("RE2_SawmillHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_SawmillHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetBool("RE2_SawmillHint_Ready", true)
				tutSetInt("RE2_SawmillHint_State", 20)
			end
		elseif (tutGetInt("RE2_SawmillHint_State") == 1) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_SawmillHint_State", 2)
			end
		elseif (tutGetInt("RE2_SawmillHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_SawmillHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
				tutSetInt("RE2_SawmillHint_State", 3)
				tutSetFloat("RE2_SawmillHint_Time", 0.0)
			end
		elseif (tutGetInt("RE2_SawmillHint_State") == 4) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_SawmillHint_State", 5)
			end
		elseif (tutGetInt("RE2_SawmillHint_State") == 5) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_SawmillHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
				tutSetInt("RE2_SawmillHint_State", 6)
				tutSetFloat("RE2_SawmillHint_Time", 0.0)
			end
		elseif (tutGetInt("RE2_SawmillHint_State") == 7) then
			if (message:is("Update") and tutorial:game():getSelected()) then
				id = tutorial:game():getSelected():id()
				arrowId = tutGetInt("RE2_SawmillHint_HouseArrow"..tostring(id))
				if (arrowId ~= nil and not tutorial:getHouseByField(id):isUpgrading()) then
					tutorial:hideArrows(0.5)
					tutorial:getArrow(arrowId):moveTo(950, 100, 270, 1.0, 0.75)
					tutorial:getArrow(arrowId):setShown()
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutSetInt("RE2_SawmillHint_State", 8)
					tutorial:switchText("RE2_SawmillHint_04", 0.5)
				else
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetInt("RE2_SawmillHint_State", 20)
					tutSetBool("RE2_SawmillHint_Ready", true)
				end
				tutSetBool("RE2_SawmillHint_ButtonHint", true)
			end
		elseif (tutGetInt("RE2_SawmillHint_State") == 8) then
			if (message:is("TutorialOk", "press") or message:is("Destroy", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("REA_House1DestroyHint_Time", 0.0)
				tutSetInt("REA_House1DestroyHint_State", 2)
				tutSetBool("RE2_SawmillHint_Ready", true)
			end
		elseif (tutGetInt("RE2_SawmillHint_State") == 20) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_SawmillHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_HouseDestroyButtonHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_HouseDestroyButtonHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_HouseDestroyButtonHint_HintAppearTime", 5.0)	-- время появления подсказки
		tutSetFloat("RE2_HouseDestroyButtonHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_HouseDestroyButtonHint_Ready", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_HouseDestroyButtonHint_Active")) then
		if (message:is("Destroy", "press")) then
			tutSetBool("RE2_HouseDestroyButtonHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_HouseDestroyButtonHint_Active")) then
		-- Обновляем время
		if (message:is("Update")) then
			if (tutorial:isHouseInterface() and tutGetBool("RE2_SawmillHint_ButtonHint")
					and tutGetInt("RE2_HouseDestroyButtonHint_FieldId") == tutorial:game():getSelected():id()) then
				tutSetFloat("RE2_HouseDestroyButtonHint_Time", tutGetFloat("RE2_HouseDestroyButtonHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("RE2_HouseDestroyButtonHint_Time") > tutGetFloat("RE2_HouseDestroyButtonHint_HintAppearTime")) then
					tutSetBool("RE2_HouseDestroyButtonHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("RE2_HouseDestroyButtonHint_State", 0)
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					arrowId = tutorial:addArrow()
					tutorial:getArrow(arrowId):setPosition(950, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:show(0.25)
				end
			else
				tutSetFloat("RE2_HouseDestroyButtonHint_Time", 0.0)
				if (tutorial:isHouseInterface()) then
					tutSetInt("RE2_HouseDestroyButtonHint_FieldId", tutorial:game():getSelected():id())
				end
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_HouseDestroyButtonHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("Destroy", "press") or message:is("Upgrade", "press") or message:is("Repair", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_HouseDestroyButtonHint_State", 1)
				tutSetBool("RE2_HouseDestroyButtonHint_Ready", true)
			elseif (message:is("Update")) then
				if (not tutorial:isHouseInterface() or tutGetInt("RE2_HouseDestroyButtonHint_FieldId") ~= tutorial:game():getSelected():id()) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetInt("RE2_HouseDestroyButtonHint_State", 1)
					tutSetBool("RE2_HouseDestroyButtonHint_Ready", true)
				end
			end
		elseif (tutGetInt("RE2_HouseDestroyButtonHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_HouseDestroyButtonHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)
			end
		end
	end
end

function RE2_MaterialsSawmillHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_MaterialsSawmillHint_Active", false)			-- активность подсказки
		tutSetInt("RE2_MaterialsSawmillHint_Count", 2)				-- начальное количество кликов для появления подсказки
		tutSetInt("RE2_MaterialsSawmillHint_Counter", tutGetInt("RE2_MaterialsSawmillHint_Count")) -- текущее количество кликов, оставшееся до появления подсказки
		tutSetFloat("RE2_MaterialsSawmillHint_Time", 0.0)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_MaterialsSawmillHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_MaterialsSawmillHint_Active")) then
		-- Обновляем количество кликов
		if (message:is("MaterialsBlock") and (tutorial:getForestLandsWithMaterialsCount() > 0 or tutorial:getSawmillsCount() > 0)) then
			tutSetInt("RE2_MaterialsSawmillHint_Counter", tutGetInt("RE2_MaterialsSawmillHint_Counter") - 1)
			if (tutGetInt("RE2_MaterialsSawmillHint_Counter") <= 0) then
				-- Обновляем счётчики кликов
				if (tutGetInt("RE2_MaterialsSawmillHint_Count") == 2) then
					tutSetInt("RE2_MaterialsSawmillHint_Count", 3)
				elseif (tutGetInt("RE2_MaterialsSawmillHint_Count") == 3) then
					tutSetInt("RE2_MaterialsSawmillHint_Count", 5)
				end
				tutSetInt("RE2_MaterialsSawmillHint_Counter", tutGetInt("RE2_MaterialsSawmillHint_Count"))
				-- Надо перейти в активный режим подсказки
				tutSetBool("RE2_MaterialsSawmillHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutorial:setCharacter("Sedrik")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", -1.0)
				tutSetInt("RE2_MaterialsSawmillHint_State", 1)
				tutSetFloat("RE2_MaterialsSawmillHint_Time", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:targetAllForestLands(0.5, IPoint(0, 50), 0.0)
				tutorial:targetAllSawmills(0.5, IPoint(0, 50), 0.0)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_MaterialsSawmillHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_MaterialsSawmillHint_State", 2)
			end
		elseif (tutGetInt("RE2_MaterialsSawmillHint_State") == 1) then
			if (message:is("Update")) then
				tutSetFloat("RE2_MaterialsSawmillHint_Time", tutGetFloat("RE2_MaterialsSawmillHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("RE2_MaterialsSawmillHint_Time") > 5.0 or tutorial:isSawmillInterface()) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetInt("RE2_MaterialsSawmillHint_State", 2)
				end
			elseif (message:is("ForestLand", "click")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_MaterialsSawmillHint_State", 2)
			end
		elseif (tutGetInt("RE2_MaterialsSawmillHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_MaterialsSawmillHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_UpgradeHousesHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_UpgradeHousesHint_Active", false)			-- активность подсказки
		tutSetBool("RE2_UpgradeHousesHint_Shown", false)
		tutSetInt("RE2_UpgradeHousesHint_State", -1)
	end
	
	local function SetState(state)
		tutSetInt("RE2_UpgradeHousesHint_State", state)
	end
	
	local function GetState()
		return tutGetInt("RE2_UpgradeHousesHint_State")
	end
	
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_UpgradeHousesHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if not tutGetBool("RE2_UpgradeHousesHint_Active") and not tutGetBool("RE2_UpgradeHousesHint_Shown") then
		if tutorial:game():getWoodCount() >= 500 and tutorial:getSawmillsCount() >= 1 and tutorial:getHousesCountP(1, 0) > 0 then
			tutSetBool("RE2_UpgradeHousesHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			
			tutorial:setObjectsAllowType(allowPass)
			tutorial:variables():setBool("TutorialArrowsNoBind", true);
			tutorial:variables():setFloat("TutorialShowDelayTime", 0.0)
			tutorial:setCharacter("Sedrik")
			tutorial:setText("RE2_UpgradeHousesHint")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutorial:show(0.25)
			
			tutorial:targetAnyHouse1WithNoUpgrade("RE2_UpgradeHousesHint_Arrow", 0.5, IPoint(0, 40), 0.5)
			SetState(0)	-- стрелка тычет в базу
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if GetState() == 0 then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetState(1)
			end
		elseif (GetState() == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_UpgradeHousesHint_Shown", true)
			end
		end
	end
end

function RE2_LookItIsFood(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_LookItIsFood_Active", false)			-- активность подсказки
		tutSetBool("RE2_LookItIsFood_Shown", false)
		tutSetBool("RE2_LookItIsFood_Allow", false)
	end
	
	-- Еще не построили первый дом - ничего не делаем
	if tutorial:getBreakBridgesCount() == 0 and not tutGetBool("RE2_LookItIsFood_Allow") then
		tutSetBool("RE2_LookItIsFood_Allow", true)
	end
	
	if not tutGetBool("RE2_LookItIsFood_Allow") then
		return
	end

	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_LookItIsFood_Active")) then
		return
	end
	
	-- Логика подсказки при неактивном состоянии
	if not tutGetBool("RE2_LookItIsFood_Active") and not tutGetBool("RE2_LookItIsFood_Shown") then
		tutSetBool("RE2_LookItIsFood_Active", true)
		tutorial:variables():setBool("TutorialLock", true)
		tutSetInt("RE2_LookItIsFood_State", 0)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_LookItIsFood")
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetFloat("TutorialShowDelayTime", 0.0)
		tutorial:setObjectsAllowType(allowPass)
		
		arrow = tutorial:addArrow()
		tutorial:getArrow(arrow):setPosition(920, 500)
		tutorial:getArrow(arrow):setAngle(270)
		tutorial:getArrow(arrow):setShowTimer(0.5)
		tutorial:getArrow(arrow):show(0.5)
		tutorial:show(0.25)
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_LookItIsFood_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_LookItIsFood_State", 1)
			end
		elseif (tutGetInt("RE2_LookItIsFood_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_LookItIsFood_Shown", true)
			end
		end
	end
end

function RE2_01_03(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_LootLoseHint")
		tutorial:queueAddMessage("RE2_AllLootAlmostBlinkHint")
		tutorial:queueAddMessage("RE2_SawmillButtonHint")
		tutorial:queueAddMessage("RE2_FoodGatherHint")
		tutorial:queueAddMessage("RE2_WoodGatherHint")
		tutorial:queueAddMessage("RE2_FoodAllHint")
		tutorial:queueAddMessage("RE2_SawmillHint")
		tutorial:queueAddMessage("RE2_HouseDestroyButtonHint")
		tutorial:queueAddMessage("RE2_MaterialsSawmillHint")
		tutorial:queueAddMessage("RE2_UpgradeHousesHint")
		tutorial:queueAddMessage("RE2_LookItIsFood")
		
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_01_03_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		tutorial:variables():setBool("TutorialArrowsNoBind", true)
		
		local arrow1 = tutorial:addArrow()
		tutorial:getArrow(arrow1):setPosition(400, 380)
		tutorial:getArrow(arrow1):setAngle(270)
		tutorial:getArrow(arrow1):show(0.5)
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end	
	end
end


function RE2_JunksHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_JunksHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_JunksHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("RE2_JunksHint_Time", 0.0)				-- общее время подсказки
	end
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_JunksHint_Active")) then
		if (message:is("Bridge2", "press")) then
			tutSetFloat("RE2_JunksHint_Time", 0.0)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_JunksHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutorial:getReachableJunksCount() > 0) then
			tutSetFloat("RE2_JunksHint_Time", tutGetFloat("RE2_JunksHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_JunksHint_Time") > tutGetFloat("RE2_JunksHint_HintAppearTime")) then
				-- Надо показать стрелку на таски и перейти в активный режим подсказки
				tutSetBool("RE2_JunksHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_JunksHint_State", 0)
				tutorial:targetReachableJunks(0.5, IPoint(-5, 0), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
				tutorial:setCharacter("Sedrik")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("Bridge2", "press")) then
			tutSetFloat("RE2_JunksHint_Time", 0.0)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_JunksHint_State") == 0) then
			if (message:is("Bridge2", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_JunksHint_Time", 0.0)
				tutSetInt("RE2_JunksHint_State", 2)
			end
		elseif (tutGetInt("RE2_JunksHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_JunksHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Камень преткновения
function RE2_FirstStumblingBlock(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_FirstStumblingBlock_Active", false)		-- активность подсказки
		tutSetBool("RE2_FirstStumblingBlock_Shown", false)
	end
	if tutGetBool("TutorialLock") and not tutGetBool("RE2_FirstStumblingBlock_Active") then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if not tutGetBool("RE2_FirstStumblingBlock_Active") then
		-- Обновляем время
		if message:is("StumblingBlockAppear") and not tutGetBool("RE2_FirstStumblingBlock_Shown") then
			-- Надо показать стрелку на камень преткновения и показать Седрика
			tutSetBool("RE2_FirstStumblingBlock_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("RE2_FirstStumblingBlock_State", 0)
			
			areaPos = message:getVariables():getPoint("position")
			arrow = tutorial:addArrow()
			
			if areaPos.x < 350 and areaPos.y < 250 then
				tutorial:setOffset(IPoint(400, 0))
			end
			
			local arrowOffsetX = 0
			if message:getVariables():getBool("normalStone") == false then
				arrowOffsetX = -7
			end
			tutorial:getArrow(arrow):setPosition(areaPos.x + arrowOffsetX, areaPos.y + 40)
			tutorial:getArrow(arrow):setAngle(270)
			tutorial:getArrow(arrow):show(0.5)
			tutorial:getArrow(arrow):setShowTimer(1.0)
			
			tutorial:setObjectsAllowType(allowList)
			tutorial:variables():setBool("TutorialArrowsNoBind", true);
			tutorial:variables():setFloat("TutorialShowDelayTime", 0.5)
			tutorial:setCharacter("Sedrik")
			tutorial:setText("RE2_01_04_ArrowHint1")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutorial:show(0.25)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_FirstStumblingBlock_State") == 0) then
			if message:is("TutorialOk", "press") then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetBool("RE2_FirstStumblingBlock_Shown", true)
				tutSetInt("RE2_FirstStumblingBlock_State", 2)
			end
		elseif (tutGetInt("RE2_FirstStumblingBlock_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_FirstStumblingBlock_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
				tutorial:setOffset(IPoint(0, 0))
			end
		end
	end
end

function RE2_CantCutHint(message)
	if message:is("LoadLevel") then
		tutSetBool("RE2_CantCutHint_Active", false)
		tutSetFloat("RE2_CantCutHint_Time", 0.0)
		tutSetFloat("RE2_CantCutHint_DisappearTime", 3.5)
		tutSetInt("RE2_CantCutHint_ActiveBubble", -1)
		tutSetInt("RE2_CantCutHint_FutureBubble", -1)
	end
	-- Айдишники завалов для правого рабочего
	local rightIds = { 
		59389, 59531, 59535, 59541, 59777, 
		59543, 59539, 59795, 59537 }
	-- айдишники завалов для левого рабочего
	local leftIds = { 59799, 59545 }
	
	local function ActiveBubble()
		return tutGetInt("RE2_CantCutHint_ActiveBubble")
	end
	
	local function SetActiveBubble(i)
		tutSetInt("RE2_CantCutHint_ActiveBubble", i)
	end
	
	local function IsActive()
		return tutGetBool("RE2_CantCutHint_Active")
	end

	local function Time()
		return tutGetFloat("RE2_CantCutHint_Time")
	end

	local function Update()
		tutSetFloat("RE2_CantCutHint_Time", Time() + message:getVariables():getFloat("TimeDelta"))
	end
	
	local function SetFutureBubble(i)
		tutSetInt("RE2_CantCutHint_FutureBubble", i)
	end
	
	local function FutureBubble()
		return tutGetInt("RE2_CantCutHint_FutureBubble")
	end
	
	local function HideBubble()
		tutSetBool("RE2_CantCutHint_Active", false)
		tutSetFloat("RE2_CantCutHint_Time", 0.0)
		gameInfo:game():HideSpeachBubble(ActiveBubble())
		SetActiveBubble(-1)
		
		if gameInfo:game():HasLuaLevelUpdateFunc() and not gameInfo:game():IsLuaUpdateFunctionTimerAllowed() then
			gameInfo:game():AllowLuaUpdateFunctionTimer(true)
		end
	end
	
	local function ShowBubble(i)
		local otherBubble = 0
		if i == 0 then
			otherBubble = 1
		end
		
		gameInfo:game():HideSpeachBubble(otherBubble)
		gameInfo:game():HideSpeachBubble(i)
		gameInfo:game():SetSpeachBubbleText(i, "CaveHumanDialogCantCut")
		gameInfo:game():ShowSpeachBubble(i)
		
		tutSetFloat("RE2_CantCutHint_Time", 0.0)
		tutSetBool("RE2_CantCutHint_Active", true)
		SetActiveBubble(i)
	end
	
	--PrintDebug("Active = "..tostring(tutGetBool("RE2_CantCutHint_Active")).."\n")
	-- left worker
	--[[
	if gameInfo:game():isObjectReachable(59554) == false and tutGetBool("RE2_CantCutHint_Active") == true then
		HideBubble()
	-- right worker
	elseif gameInfo:game():isObjectReachable(59556) == false and tutGetBool("RE2_CantCutHint_Active") == true then
		HideBubble()
	end
	]]--
	-- left worker
	if gameInfo:game():isObjectReachable(59554) == true and ActiveBubble() == 0 then
		HideBubble()
	-- right worker
	elseif gameInfo:game():isObjectReachable(59556) == true and ActiveBubble() == 1 then
		HideBubble()
	end

	if IsActive() then
		-- Баббл сам исчезнет через заданное время
		if message:is("Update") then
			Update()
			
			if Time() > tutGetFloat("RE2_CantCutHint_DisappearTime") then
				HideBubble()
			end
		end
	else
		if FutureBubble() ~= -1 then
			if message:is("Update") then
				Update()
				if Time() > 0.5 then
					ShowBubble(FutureBubble())
					SetFutureBubble(-1)
					tutSetFloat("RE2_CantCutHint_Time", 0.0)
				end
			end
		end
	end
	
	-- Кликнули по недоступному завалу
	if message:is("Bridge2", "clickUnreachable") then
		local id = message:getIntegerParam()
		
		-- right worker
		if gameInfo:game():isObjectReachable(59556) == false then
			for k, v in pairs(rightIds) do
				if v == id then 
					if not (IsActive() and ActiveBubble() == 1) then
						if gameInfo:game():HasLuaLevelUpdateFunc() and gameInfo:game():IsLuaUpdateFunctionTimerAllowed() then
							gameInfo:game():HideSpeachBubble(0)
							gameInfo:game():HideSpeachBubble(1)
							gameInfo:game():AllowLuaUpdateFunctionTimer(false)
							
							tutSetFloat("RE2_CantCutHint_Time", 0.0)
							SetFutureBubble(1)
						else
							ShowBubble(1)
						end
					end
					break
				end
			end -- for
		end -- if
		
		-- left worker
		if gameInfo:game():isObjectReachable(59554) == false then
			for k, v in pairs(leftIds) do
				if v == id then
					if not (IsActive() and ActiveBubble() == 0) then
						if gameInfo:game():HasLuaLevelUpdateFunc() and gameInfo:game():IsLuaUpdateFunctionTimerAllowed() then
							gameInfo:game():HideSpeachBubble(0)
							gameInfo:game():HideSpeachBubble(1)
							gameInfo:game():AllowLuaUpdateFunctionTimer(false)
							
							tutSetFloat("RE2_CantCutHint_Time", 0.0)
							SetFutureBubble(0)
						else
							ShowBubble(0)
						end
					end
					break
				end
			end -- for
		end -- if
	end
end

function RE2_01_04(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_JunksHint")
		tutorial:queueAddMessage("RE2_FirstStumblingBlock")
		tutorial:queueAddMessage("RE2_CantCutHint")
		
		tutorial:setOffset(IPoint(0, 0))
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_01_04_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_01_04_02", 0.5)
			arrowId = tutorial:addArrow()
			tutorial:getArrow(arrowId):setPosition(180, 460)
			tutorial:getArrow(arrowId):setAngle(270)
			tutorial:getArrow(arrowId):setShowTimer(0.5)
			tutorial:getArrow(arrowId):show(0.25)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_ChestsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_ChestsHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_ChestsHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_ChestsHint_Time", 0.0)				-- общее время подсказки
	end
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_ChestsHint_Active")) then
		if (message:is("Bridge2", "press")) then
			tutSetFloat("RE2_ChestsHint_Time", 0.0)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_ChestsHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutorial:getReachableChestsCount() > 0) then
			tutSetFloat("RE2_ChestsHint_Time", tutGetFloat("RE2_ChestsHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_ChestsHint_Time") > tutGetFloat("RE2_ChestsHint_HintAppearTime")) then
				-- Надо показать стрелку на таски и перейти в активный режим подсказки
				tutSetBool("RE2_ChestsHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_ChestsHint_State", 0)
				tutorial:targetReachableChests(0.5, IPoint(-5, 40), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
				tutorial:setCharacter("Sedrik2")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("Treasure", "press")) then
			tutSetFloat("RE2_ChestsHint_Time", 0.0)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_ChestsHint_State") == 0) then
			if (message:is("Treasure", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_ChestsHint_Time", 0.0)
				tutSetInt("RE2_ChestsHint_State", 2)
			end
		elseif (tutGetInt("RE2_ChestsHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_ChestsHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_CottageHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_CottageHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_CottageHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_CottageHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_CottageHint_Ready", false)
		tutSetBool("RE2_CottageHint_Shown", false)
		tutSetInt("RE2_CottageHint_State", -1)
		tutSetBool("RE2_CottageHint_DestroyPressed", false)
	end
	
	if message:is("Destroy", "press") then
		tutSetBool("RE2_CottageHint_DestroyPressed", true)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_CottageHint_Active")) then
		if (message:is("Destroy", "press")) then
			tutSetBool("RE2_CottageHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_CottageHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_CottageHint_Ready") and not tutGetBool("RE2_CottageHint_Shown") and
			tutorial:game():getVariables().materials >= 50 and tutorial:game():getVariables().food >= 50) then
			
			if tutGetBool("RE2_CottageHint_DestroyPressed") then
				tutSetFloat("RE2_CottageHint_Time", 0.0)
			end
			tutSetFloat("RE2_CottageHint_Time", tutGetFloat("RE2_CottageHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutorial:hasFreeLargeFields()) then
				tutSetFloat("RE2_CottageHint_Time", 0.0)
			end
			if (tutGetFloat("RE2_CottageHint_Time") > tutGetFloat("RE2_CottageHint_HintAppearTime")) then
				tutSetBool("RE2_CottageHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_CottageHint_State", 0)
				tutorial:setCharacter("Sedrik2")
				tutorial:setText("RE2_CottageHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
				tutSetBool("RE2_CottageHint_Shown", true)
			end
		elseif (message:is("Destroy", "press")) then
			tutSetBool("RE2_CottageHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_CottageHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_CottageHint_Time", 0.0)
				tutSetInt("RE2_CottageHint_State", 2)
			elseif (message:is("Destroy", "press")) then
				tutSetBool("RE2_CottageHint_Ready", true)
			end
		elseif (tutGetInt("RE2_CottageHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_CottageHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			elseif (message:is("Destroy", "press")) then
				tutSetBool("RE2_CottageHint_Ready", true)
			end
		end
	end
end

function RE2_House1DestroyHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_House1DestroyHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_House1DestroyHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("RE2_House1DestroyHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_House1DestroyHint_ButtonHint", false)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_House1DestroyHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_House1DestroyHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_CottageHint_Ready") and tutGetBool("RE2_CottageHint_Shown")) then
			tutSetFloat("RE2_House1DestroyHint_Time", tutGetFloat("RE2_House1DestroyHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutorial:hasFreeLargeFields()) then
				tutSetFloat("RE2_House1DestroyHint_Time", 0.0)
			end
			if (tutGetFloat("RE2_House1DestroyHint_Time") > tutGetFloat("RE2_House1DestroyHint_HintAppearTime") and not tutorial:isHouseInterface()) then
				tutSetBool("RE2_House1DestroyHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_House1DestroyHint_State", 0)
				tutorial:setCharacter("Sedrik2")
				tutorial:setText("RE2_House1DestroyHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetAllHouses("RE2_House1DestroyHint_Arrow", 0, 0.5, IPoint(0, 40), 1.5)
				tutorial:show(0.25)
				tutorial:clearSelection()
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_House1DestroyHint_State") == 0) then
			if (message:is("Update") and tutorial:game():getSelected()) then
				id = tutorial:game():getSelected():id()
				arrowId = tutGetInt("RE2_House1DestroyHint_Arrow"..tostring(id))
				if (arrowId ~= nil and not tutorial:getHouseByField(id):isUpgrading()) then
					tutorial:hideArrows(0.25)
					tutSetInt("RE2_House1DestroyHint_State", 1)
					tutorial:switchText("RE2_House1DestroyHint_02", 0.5)
					tutSetFloat("RE2_House1DestroyHint_Time", 0.0)
				else
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetFloat("RE2_House1DestroyHint_Time", 0.0)
					tutSetInt("RE2_House1DestroyHint_State", 2)
				end
				tutSetBool("RE2_House1DestroyHint_ButtonHint", true)
			elseif (message:is("TutorialOk", "press") and tutorial:game():getActive()) then
				id = tutorial:game():getActive():id()
				arrowId = tutGetInt("RE2_House1DestroyHint_Arrow"..tostring(id))
				if (arrowId == nil) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					tutSetFloat("RE2_House1DestroyHint_Time", 0.0)
					tutSetInt("RE2_House1DestroyHint_State", 2)
					tutSetBool("RE2_House1DestroyHint_ButtonHint", true)
				end
			elseif (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_House1DestroyHint_Time", 0.0)
				tutSetInt("RE2_House1DestroyHint_State", 2)
				tutSetBool("RE2_House1DestroyHint_ButtonHint", true)
			end
		elseif (tutGetInt("RE2_House1DestroyHint_State") == 1) then
			if message:is("Update") then
				tutSetFloat("RE2_House1DestroyHint_Time", tutGetFloat("RE2_House1DestroyHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if tutGetFloat("RE2_House1DestroyHint_Time") > 0.25 then
					tutorial:getArrow(arrowId):setPosition(950, 100)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):show(0.5)
				end
			elseif (message:is("TutorialOk", "press") or message:is("Destroy", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_House1DestroyHint_Time", 0.0)
				tutSetInt("RE2_House1DestroyHint_State", 2)
			end
		elseif (tutGetInt("RE2_House1DestroyHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_House1DestroyHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_House1DestroyButtonHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_House1DestroyButtonHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_House1DestroyButtonHint_HintAppearTime", 5.0)	-- время появления подсказки
		tutSetFloat("RE2_House1DestroyButtonHint_Time", 0.0)				-- общее время подсказки
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_House1DestroyButtonHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_House1DestroyButtonHint_Active")) then
		-- Обновляем время
		if (message:is("Update")) then
			if (tutorial:isHouseInterface() and tutorial:isSelectedIsHouse1() and tutGetBool("RE2_House1DestroyHint_ButtonHint") and 
					not tutGetBool("REA_DestroyHint_Ready") and tutGetInt("RE2_House1DestroyButtonHint_FieldId") == tutorial:game():getSelected():id()) then
				tutSetFloat("RE2_House1DestroyButtonHint_Time", tutGetFloat("RE2_House1DestroyButtonHint_Time") + message:getVariables():getFloat("TimeDelta"))
				if (tutGetFloat("RE2_House1DestroyButtonHint_Time") > tutGetFloat("RE2_House1DestroyButtonHint_HintAppearTime")) then
					tutSetBool("RE2_House1DestroyButtonHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("RE2_House1DestroyButtonHint_State", 0)
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					arrowId = tutorial:addArrow()
					tutorial:getArrow(arrowId):setPosition(950, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
					tutorial:variables():setFloat("TutorialTextDelayTime", -1.0)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:show(0.25)
				end
			else
				tutSetFloat("RE2_House1DestroyButtonHint_Time", 0.0)
				if (tutorial:isHouseInterface()) then
					tutSetInt("RE2_House1DestroyButtonHint_FieldId", tutorial:game():getSelected():id())
				end
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_House1DestroyButtonHint_State") == 0) then
			if (message:is("TutorialOk", "press") or message:is("Destroy", "press") or message:is("Upgrade", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_House1DestroyButtonHint_Time", 0.0)
				tutSetInt("RE2_House1DestroyButtonHint_State", 1)
			end
		elseif (tutGetInt("RE2_House1DestroyButtonHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_House1DestroyButtonHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false)
			end
		end
	end
end

-- Если не строим лесопилку - говорим, что надо построить
function RE2_BuildSawmillHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_BuildSawmillHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_BuildSawmillHint_HintAppearTime", 70.0)	-- время появления подсказки
		tutSetFloat("RE2_BuildSawmillHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_BuildSawmillHint_SawmillStarted", false)
		tutSetBool("RE2_BuildSawmillHint_Shown", false)
	end
	
	-- Еще не построили второй дом - ничего не делаем
	if tutorial:getSawmillsCount() > 1 then
		return
	end

	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_BuildSawmillHint_Active")) then
		-- Тоже небольшое исключение из правил, если в другой подсказке будет построен дом, то эта подсказка уже будет не нужна
		if (message:is("Sawmill", "press")) then
			tutSetBool("RE2_BuildSawmillHint_SawmillStarted", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_BuildSawmillHint_Active")) then
		if (message:is("Sawmill", "press")) then
			tutSetBool("RE2_BuildSawmillHint_SawmillStarted", true)
		end
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_BuildSawmillHint_SawmillStarted") and not tutGetBool("RE2_BuildSawmillHint_Shown")) then
			tutSetFloat("RE2_BuildSawmillHint_Time", tutGetFloat("RE2_BuildSawmillHint_Time") + message:getVariables():getFloat("TimeDelta"))
			
			if (tutGetFloat("RE2_BuildSawmillHint_Time") > tutGetFloat("RE2_BuildSawmillHint_HintAppearTime")) then
			
				tutSetBool("RE2_BuildSawmillHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_BuildSawmillHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_BuildSawmillHint")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)

				tutorial:targetAllBridges(0.5, IPoint(0, 0), 0.0)
				tutorial:show(0.25)

				tutSetBool("RE2_BuildSawmillHint_Shown", true)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_BuildSawmillHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_BuildSawmillHint_Time", 0.0)
				tutSetInt("RE2_BuildSawmillHint_State", 1)
			end
		elseif (tutGetInt("RE2_BuildSawmillHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
			end
		end
	end
end

function RE2_02_01(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_ChestsHint")
		tutorial:queueAddMessage("RE2_CottageHint")
		tutorial:queueAddMessage("RE2_House1DestroyHint")
		tutorial:queueAddMessage("RE2_House1DestroyButtonHint")
		tutorial:queueAddMessage("RE2_BuildSawmillHint")
		
		tutorial:show(0.25)
		tutorial:setCharacter("Snowman")
		tutorial:setText("RE2_02_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik2")
			tutorial:switchText("RE2_02_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Snowman")
			tutorial:switchText("RE2_02_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

-- если количество застроенных площадок 5 или 6 и в течении 40 секунд это число не расло, показать на любую свободную площадку стрелку.
function RE2_2or3FreeLargeFieldsHint(message)
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_2or3FreeLargeFields_Active", false)			-- активность подсказки
		tutSetFloat("RE2_2or3FreeLargeFields_HintAppearTime", 40.0)	-- время появления подсказки
		tutSetFloat("RE2_2or3FreeLargeFields_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_2or3FreeLargeFields_Shown", false)
	end
	
	if tutorial:getFreeLargeFieldsCount() < 2 or tutorial:getFreeLargeFieldsCount() > 3 then
		return
	end

	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_2or3FreeLargeFields_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_2or3FreeLargeFields_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_2or3FreeLargeFields_Shown")) then
			tutSetFloat("RE2_2or3FreeLargeFields_Time", tutGetFloat("RE2_2or3FreeLargeFields_Time") + message:getVariables():getFloat("TimeDelta"))
			
			if (tutGetFloat("RE2_2or3FreeLargeFields_Time") > tutGetFloat("RE2_2or3FreeLargeFields_HintAppearTime")) then
				tutSetInt("RE2_2or3FreeLargeFields_State", 0)
				tutSetBool("RE2_2or3FreeLargeFields_Active", true)
				tutSetBool("RE2_WoodGatherHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_WoodGatherHint_State", 0)
				tutorial:targetEveryFreeLargeField("RE2_2or3FreeLargeFields", 0.5, IPoint(0, 40), 1.5)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
				tutorial:setCharacter("Sedrik")
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_2or3FreeLargeFields_State") == 0) then
			if message:is("Update") and tutorial:isFreeLargeFieldSelected() then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_2or3FreeLargeFields_State", 1)
			end
		elseif (tutGetInt("RE2_2or3FreeLargeFields_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_2or3FreeLargeFields_Shown", true)
			end
		end
	end
end

-- если количество застроенных площадок = 7 и в течении 20 секунд на 8 не пытаются ничего строить показать на площадку стрелку.
function RE2_1FreeLargeFieldHint(message)
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_1FreeLargeFieldHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_1FreeLargeFieldHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("RE2_1FreeLargeFieldHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_1FreeLargeFieldHint_Shown", false)
	end
	
	if tutorial:getFreeLargeFieldsCount() ~= 1 then
		return
	end

	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_1FreeLargeFieldHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_1FreeLargeFieldHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_1FreeLargeFieldHint_Shown")) then
			tutSetFloat("RE2_1FreeLargeFieldHint_Time", tutGetFloat("RE2_1FreeLargeFieldHint_Time") + message:getVariables():getFloat("TimeDelta"))
			
			if (tutGetFloat("RE2_1FreeLargeFieldHint_Time") > tutGetFloat("RE2_1FreeLargeFieldHint_HintAppearTime")) then
				tutSetInt("RE2_1FreeLargeFieldHint_State", 0)
				tutSetBool("RE2_1FreeLargeFieldHint_Active", true)
				tutSetBool("RE2_WoodGatherHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_WoodGatherHint_State", 0)
				tutorial:targetEveryFreeLargeField("RE2_1FreeLargeFieldHint", 0.5, IPoint(0, 40), 1.5)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
				tutorial:setCharacter("Sedrik")
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_1FreeLargeFieldHint_State") == 0) then
			if message:is("Update") and tutorial:isFreeLargeFieldSelected() then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_1FreeLargeFieldHint_State", 1)
			end
		elseif (tutGetInt("RE2_1FreeLargeFieldHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_1FreeLargeFieldHint_Shown", true)
			end
		end
	end
end

function RE2_BuildBridgeHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_BuildBridgeHint_Active", false)			-- активность подсказки
		tutSetBool("RE2_BuildBridgeHint_Shown", false)
		tutSetFloat("RE2_BuildBridgeHint_Time", 0.0)
		tutSetFloat("RE2_BuildBridgeHint_HintAppearTime", 35.0)
		tutSetInt("RE2_BuildBridgeHint_State", -1)
	end
	
	local function SetState(state)
		tutSetInt("RE2_BuildBridgeHint_State", state)
	end
	
	local function GetState()
		return tutGetInt("RE2_BuildBridgeHint_State")
	end

	if message:is("Bridge", "press") then
		tutSetBool("RE2_BuildBridgeHint_Shown", true)
		return
	end
	
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_BuildBridgeHint_Active")) then
		if message:is("Bridge", "press") then
			tutSetBool("RE2_BuildBridgeHint_Shown", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if not tutGetBool("RE2_BuildBridgeHint_Active") and not tutGetBool("RE2_BuildBridgeHint_Shown") then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_BuildBridgeHint_Shown")) then
			tutSetFloat("RE2_BuildBridgeHint_Time", tutGetFloat("RE2_BuildBridgeHint_Time") + message:getVariables():getFloat("TimeDelta"))
			
			if (tutGetFloat("RE2_BuildBridgeHint_Time") > tutGetFloat("RE2_BuildBridgeHint_HintAppearTime")) then
				tutSetBool("RE2_BuildBridgeHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", 0.0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_RepairBridgeToGetWoodHint")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
				
				local arrow1 = tutorial:addArrow()
				tutorial:getArrow(arrow1):setPosition(240, 500)
				tutorial:getArrow(arrow1):setAngle(270)
				tutorial:getArrow(arrow1):show(0.5)
				
				SetState(0)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if GetState() == 0 then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetState(1)
			end
		elseif (GetState() == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_BuildBridgeHint_Shown", true)
			end
		end
	end
end

function RE2_02_02(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_2or3FreeLargeFieldsHint")
		tutorial:queueAddMessage("RE2_1FreeLargeFieldHint")
		tutorial:queueAddMessage("RE2_BuildBridgeHint")
	
		tutorial:show(0.25)
		tutorial:setCharacter("Snowman")
		tutorial:setText("RE2_02_02_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_02_02_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik2")
			tutorial:switchText("RE2_02_02_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end


function RE2_ForestAreaWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_ForestAreaWorkersHint_Active", false)
		tutSetBool("RE2_ForestAreaWorkersHint_Ready", false)
	end
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_ForestAreaWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_ForestAreaWorkersHint_Active")) then
		if (message:is("ForestAreaWorkers") and not tutGetBool("RE2_ForestAreaWorkersHint_Ready")) then
			-- Надо показать стрелку на таски и перейти в активный режим подсказки
			tutSetBool("RE2_ForestAreaWorkersHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("RE2_ForestAreaWorkersHint_State", 0)
			
			forestArea = tutorial:game():getObject(message:getIntegerParam())
			areaPos = forestArea:getScreenPosition()
			arrow = tutorial:addArrow()
			tutorial:getArrow(arrow):setPosition(areaPos.x + 3, areaPos.y)
			tutorial:getArrow(arrow):setAngle(270)
			tutorial:getArrow(arrow):show(0.5)
			tutorial:getArrow(arrow):setShowTimer(1.5)
			tutorial:getArrow(arrow):setIgnoreContext(true)
			
			tutorial:setObjectsAllowType(allowPass)
			tutorial:variables():setBool("TutorialArrowsNoBind", true);
			tutorial:variables():setFloat("TutorialShowDelayTime", 1.5)
			tutorial:setCharacter("Snowman")
			tutorial:setText("RE2_ForestAreaWorkersHint_01")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutorial:show(0.25)
			tutSetBool("RE2_ForestAreaWorkersHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_ForestAreaWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_ForestAreaWorkersHint_State", 2)
			end
		elseif (tutGetInt("RE2_ForestAreaWorkersHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_ForestAreaWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Если в течении 20 секунд подряд было 0 свободных рабочих и всего их меньше 8
function RE2_OrderWorkersHint(message)
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_OrderWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_OrderWorkersHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("RE2_OrderWorkersHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_OrderWorkersHint_Shown", false)
	end
	
	if not (tutorial:game():getWorkersCount() < 8 and tutorial:game():getFreeWorkersCount() == 0) then
		tutSetFloat("RE2_OrderWorkersHint_Time", 0.0)
		return
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_OrderWorkersHint_Active")) then
		return
	end
	
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_OrderWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_OrderWorkersHint_Shown")) then
			tutSetFloat("RE2_OrderWorkersHint_Time", tutGetFloat("RE2_OrderWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			
			if (tutGetFloat("RE2_OrderWorkersHint_Time") > tutGetFloat("RE2_OrderWorkersHint_HintAppearTime")) then
			
				tutSetBool("RE2_OrderWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_OrderWorkersHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_OrderWorkersHint")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_OrderWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hide(0.25)
				tutSetFloat("RE2_OrderWorkersHint_Time", 0.0)
				tutSetInt("RE2_OrderWorkersHint_State", 1)
			end
		elseif (tutGetInt("RE2_OrderWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_OrderWorkersHint_Shown", true)
			end
		end
	end	
end

-- Если в после ремонта Лесничества, туда не отправили рабочих в течении 30 сек.
function RE2_SendWorkersToForestAreaHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_SendWorkersToForestAreaHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_SendWorkersToForestAreaHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_SendWorkersToForestAreaHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_SendWorkersToForestAreaHint_Shown", false)
		tutSetInt("RE2_SendWorkersToForestAreaHint_State", -1)
		tutSetInt("RE2_SendWorkersToForestAreaHint_ForestAreaId", -1)
	end
	
	local function SetState(state)
		tutSetFloat("RE2_SendWorkersToForestAreaHint_Time", 0.0)
		tutSetInt("RE2_SendWorkersToForestAreaHint_State", state)
		--PrintDebug("state = "..tostring(state).."\n")
	end
	
	local function GetState()
		return tutGetInt("RE2_SendWorkersToForestAreaHint_State")
	end
	
	local function GetId()
		return tutGetInt("RE2_SendWorkersToForestAreaHint_ForestAreaId")
	end
	
	local function SetId(id)
		tutSetInt("RE2_SendWorkersToForestAreaHint_ForestAreaId", id)
	end
	
	local function GetSelectedId()
		return tutorial:game():getSelected():id()
	end

	-- Лесничество еще не отремонтировали
	if GetId() == -1 and not tutGetBool("RE2_SendWorkersToForestAreaHint_Shown") then	
		SetId(tutorial:getForestAreaReadyForWork())
		return
	end

	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_SendWorkersToForestAreaHint_Active")) then
		if tutorial:getForestAreaOrderWorkers(GetId()) > 0 and tutGetBool("RE2_SendWorkersToForestAreaHint_Shown") == false then
			tutSetBool("RE2_SendWorkersToForestAreaHint_Shown", true)
		end
		return
	end
	
	-- Логика подсказки при неактивном состоянии
	if not tutGetBool("RE2_SendWorkersToForestAreaHint_Active") then
		-- Обновляем время
		local orderWorkers = tutorial:getForestAreaOrderWorkers(GetId())
		if orderWorkers > 0 then
			tutSetBool("RE2_SendWorkersToForestAreaHint_Shown", true)
			return
		end
		
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_SendWorkersToForestAreaHint_Shown")) then
			tutSetFloat("RE2_SendWorkersToForestAreaHint_Time", tutGetFloat("RE2_SendWorkersToForestAreaHint_Time") + message:getVariables():getFloat("TimeDelta"))
			
			if (tutGetFloat("RE2_SendWorkersToForestAreaHint_Time") > tutGetFloat("RE2_SendWorkersToForestAreaHint_HintAppearTime")) then
			
				tutSetBool("RE2_SendWorkersToForestAreaHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				
				if tutorial:getSelectedBuildingType() == ForestArea and GetSelectedId() == GetId() then
					local arrowId = tutorial:addArrow()
					tutorial:getArrow(arrowId):setPosition(855, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutSetInt("RE2_SendWorkersToForestAreaHint_Arrow", arrowId)
					SetState(1)	-- стрелка тычет в рабочего
				else
					local fa = tutorial:game():getObject(GetId())
					local pos = fa:getScreenPosition()
					local arrow = tutorial:addArrow()
					tutorial:getArrow(arrow):setPosition(pos.x + 3, pos.y)
					tutorial:getArrow(arrow):setAngle(270)
					tutorial:getArrow(arrow):show(0.5)
					tutorial:getArrow(arrow):setShowTimer(1.5)
					tutorial:getArrow(arrow):setIgnoreContext(true)
					tutSetInt("RE2_SendWorkersToForestAreaHint_Arrow", arrow)
					
					SetState(0)	-- стрелка тычет в лесничество
				end
				
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true)
				tutorial:variables():setFloat("TutorialShowDelayTime", 0.0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_SendWorkersToForestAreaHint")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
				
				tutSetFloat("RE2_SendWorkersToForestAreaHint_Time", 0.0)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if GetState() == 0 then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetState(2)	-- ожидание выделения лесничества
			end
		elseif (GetState() == 1) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetState(2)	-- ожидание выделения лесничества
			elseif message:is("Update") then
				if not (tutorial:getSelectedBuildingType() == ForestArea and GetSelectedId() == GetId())  then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetState(2)
				end
			end
		elseif GetState() == 2 then
			if message:is("Update") then
				tutSetFloat("RE2_SendWorkersToForestAreaHint_Time", tutGetFloat("RE2_SendWorkersToForestAreaHint_Time") + message:getVariables():getFloat("TimeDelta"))
				
				if tutGetFloat("RE2_SendWorkersToForestAreaHint_Time") > 0.5 and tutorial:getSelectedBuildingType() == ForestArea and GetSelectedId() == GetId() then
					SetState(3)
					local arrowId = tutGetInt("RE2_SendWorkersToForestAreaHint_Arrow")
					tutorial:getArrow(arrowId):setPosition(855, 100)
					tutorial:getArrow(arrowId):setAngle(270)
					tutorial:getArrow(arrowId):setIgnoreContext(true)
					tutorial:getArrow(arrowId):show(0.5)
					tutorial:variables():setFloat("TutorialShowDelayTime", -1.0)
					tutorial:show(0.25)
				elseif tutorial:getForestAreaOrderWorkers(GetId()) > 0 then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetState(101)
				end
			end
		elseif GetState() == 3 then
			if message:is("Update") then 
				if not (tutorial:getSelectedBuildingType() == ForestArea and GetSelectedId() == GetId()) then
					tutorial:hideArrows(0.25)
					tutorial:hide(0.25)
					SetState(2)
				end
			elseif message:is("ForestArea", "press") then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				SetState(101)
			end
		elseif (GetState() == 101) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_SendWorkersToForestAreaHint_Shown", true)
			end
		end
	end
end
function RE2_02_03(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_ForestAreaWorkersHint")
		tutorial:queueAddMessage("RE2_OrderWorkersHint")
		tutorial:queueAddMessage("RE2_SendWorkersToForestAreaHint")		
		
		tutorial:show(0.25)
		tutorial:setCharacter("Snowman")
		tutorial:setText("RE2_02_03_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		tutorial:variables():setBool("TutorialArrowsNoBind", true)
	
		local arrow1 = tutorial:addArrow()
		tutorial:getArrow(arrow1):setPosition(325, 540)
		tutorial:getArrow(arrow1):setAngle(90)
		tutorial:getArrow(arrow1):show(0.5)
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchText("RE2_02_03_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_02_04(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Snowman")
		tutorial:setText("RE2_02_04_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_02_04_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchText("RE2_02_04_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			ShowFAN()
		end
	end
end

function RE2_FonarsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_FonarsHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_FonarsHint_HintAppearTime", 10.0)	-- время появления подсказки
		tutSetFloat("RE2_FonarsHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_FonarsHint_Ready", false)
		tutSetInt("RE2_FonarsHint_State", -1)
	end
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_FonarsHint_Active")) then
		if (message:is("Torch", "press")) then
			tutSetBool("RE2_FonarsHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_FonarsHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_FonarsHint_Ready")) then
			tutSetFloat("RE2_FonarsHint_Time", tutGetFloat("RE2_FonarsHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_FonarsHint_Time") > tutGetFloat("RE2_FonarsHint_HintAppearTime")) then
				tutSetBool("RE2_FonarsHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_FonarsHint_State", 0)
				tutorial:targetReachableFonars(0.5, IPoint(0, 30), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", 1.5)
				tutorial:setCharacter("Dartanian")
				tutorial:setText("RE2_FonarsHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
			end
		elseif (message:is("Torch", "press")) then
			tutSetBool("RE2_FonarsHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_FonarsHint_State") == 0) then
			if (message:is("Torch", "press") or message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_FonarsHint_Time", 0.0)
				tutSetInt("RE2_FonarsHint_State", 2)
			end
		elseif (tutGetInt("RE2_FonarsHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_FonarsHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
				tutSetInt("RE2_FonarsHint_State", 3)
			end
		end
	end
end

function RE2_FonarsBuildHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_FonarsBuildHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_FonarsBuildHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_FonarsBuildHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_FonarsBuildHint_Ready", false)
	end
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_FonarsBuildHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_FonarsBuildHint_Active")) then
		-- Обновляем время
		if (message:is("Update")) then
			tutSetFloat("RE2_FonarsBuildHint_Time", tutGetFloat("RE2_FonarsBuildHint_Time") + message:getVariables():getFloat("TimeDelta"))
			readyFonars = tutorial:getReadyFonarsCount()
			if (readyFonars == 0 or readyFonars > 2) then
				tutSetFloat("RE2_FonarsBuildHint_Time", 0.0)
			end
			if (tutGetFloat("RE2_FonarsBuildHint_Time") > tutGetFloat("RE2_FonarsBuildHint_HintAppearTime")) then
				tutSetBool("RE2_FonarsBuildHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_FonarsBuildHint_State", 0)
				tutorial:targetReachableFonars(0.5, IPoint(0, 30), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", 1.5)
				tutorial:setCharacter("Dartanian")
				tutorial:setText("RE2_FonarsBuildHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_FonarsBuildHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_FonarsBuildHint_Time", 0.0)
				tutSetInt("RE2_FonarsBuildHint_State", 2)
			end
		elseif (tutGetInt("RE2_FonarsBuildHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_FonarsBuildHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
				tutSetInt("RE2_FonarsBuildHint_State", 3)
			end
		end
	end
end

function RE2_03_01(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_FonarsHint")
		tutorial:queueAddMessage("RE2_FonarsBuildHint")
		
		tutorial:show(0.25)
		tutorial:setCharacter("Dartanian")
		tutorial:setText("RE2_03_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_03_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Dartanian")
			tutorial:switchText("RE2_03_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchText("RE2_03_01_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_03_01_05", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 5) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 6)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_UpgradeHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_UpgradeHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_UpgradeHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("RE2_UpgradeHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_UpgradeHint_Ready", false)
	end
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_UpgradeHint_Active")) then
		if (message:is("Upgrade", "press")) then
			tutSetBool("RE2_UpgradeHint_Ready", true)
		end
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_UpgradeHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutorial:getBanksCount() > 0 and tutorial:getHousesCount() > 0 and not tutGetBool("RE2_UpgradeHint_Ready")) then
			tutSetFloat("RE2_UpgradeHint_Time", tutGetFloat("RE2_UpgradeHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_UpgradeHint_Time") > tutGetFloat("RE2_UpgradeHint_HintAppearTime")) then
				tutSetBool("RE2_UpgradeHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_UpgradeHint_State", 0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", 1.5)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_UpgradeHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
				tutSetBool("RE2_UpgradeHint_Ready", true)
			end
		-- Если пользователь строит дом, то подсказку больше показывать не надо
		elseif (message:is("Upgrade", "press")) then
			tutSetBool("RE2_UpgradeHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_UpgradeHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_UpgradeHint_Time", 0.0)
				tutSetInt("RE2_UpgradeHint_State", 2)
			end
		elseif (tutGetInt("RE2_UpgradeHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_UpgradeHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_BridgeHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_BridgeHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_BridgeHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_BridgeHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_BridgeHint_Ready", false)
	end
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_BridgeHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_BridgeHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_BridgeHint_Ready") and tutorial:getBreakBridgesCount() > 0 ) then
			tutSetFloat("RE2_BridgeHint_Time", tutGetFloat("RE2_BridgeHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_BridgeHint_Time") > tutGetFloat("RE2_BridgeHint_HintAppearTime")) then
				tutSetBool("RE2_BridgeHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_BridgeHint_State", 0)
				tutorial:targetAllJunkBridges(0.5, IPoint(-5, 10), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", 1.5)
				tutorial:setCharacter("Dartanian")
				tutorial:setText("RE2_BridgeHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
				tutSetBool("RE2_BridgeHint_Ready", true)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_BridgeHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:switchCharacter("Sedrik")
				tutorial:switchText("RE2_BridgeHint_02", 0.5)
				tutSetInt("RE2_BridgeHint_State", 1)
			end
		elseif (tutGetInt("RE2_BridgeHint_State") == 1) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_BridgeHint_Time", 0.0)
				tutSetInt("RE2_BridgeHint_State", 2)
			end
		elseif (tutGetInt("RE2_BridgeHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_BridgeHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_03_02(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_UpgradeHint")
		tutorial:queueAddMessage("RE2_BridgeHint")
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)
		
		ShowFAN()
	end
end


function RE2_FarmWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_FarmWorkersHint_Active", false)
		tutSetBool("RE2_FarmWorkersHint_Ready", false)
	end
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_FarmWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_FarmWorkersHint_Active")) then
		if (message:is("FarmWorkers") and not tutGetBool("RE2_FarmWorkersHint_Ready")) then
			-- Надо показать стрелку на таски и перейти в активный режим подсказки
			tutSetBool("RE2_FarmWorkersHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("RE2_FarmWorkersHint_State", 0)
			
			Farm = tutorial:game():getObject(message:getIntegerParam())
			areaPos = Farm:getScreenPosition()
			arrow = tutorial:addArrow()
			tutorial:getArrow(arrow):setPosition(areaPos.x + 3, areaPos.y)
			tutorial:getArrow(arrow):setAngle(270)
			tutorial:getArrow(arrow):show(0.5)
			tutorial:getArrow(arrow):setShowTimer(1.5)
			tutorial:getArrow(arrow):setIgnoreContext(true)
			
			tutorial:setObjectsAllowType(allowPass)
			tutorial:variables():setBool("TutorialArrowsNoBind", true);
			tutorial:variables():setFloat("TutorialShowDelayTime", 1.5)
			tutorial:setCharacter("Dartanian")
			tutorial:setText("RE2_FarmWorkersHint_01")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutorial:show(0.25)
			tutSetBool("RE2_FarmWorkersHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_FarmWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_FarmWorkersHint_State", 2)
			end
		elseif (tutGetInt("RE2_FarmWorkersHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_FarmWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_03_03(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_FarmWorkersHint")
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)
		
		ShowFAN()
	end
end

function RE2_03_04(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Dartanian")
		tutorial:setText("RE2_03_04_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_03_04_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Dartanian")
			tutorial:switchText("RE2_03_04_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_ShipWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_ShipWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_ShipWorkersHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_ShipWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_ShipWorkersHint_LowWorkers", false)
		tutSetBool("RE2_ShipWorkersHint_Shown", false)			-- была ли показана эта подсказка
	end
	if (message:is("ShipWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("RE2_ShipWorkersHint_LowWorkers", false)
			tutSetFloat("RE2_ShipWorkersHint_Time", 0.0)
		else
			tutSetBool("RE2_ShipWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_ShipWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_ShipWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("RE2_ShipWorkersHint_LowWorkers")) and (not tutGetBool("RE2_ShipWorkersHint_Shown")) then
			tutSetFloat("RE2_ShipWorkersHint_Time", tutGetFloat("RE2_ShipWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_ShipWorkersHint_Time") > tutGetFloat("RE2_ShipWorkersHint_HintAppearTime")) then
				tutSetBool("RE2_ShipWorkersHint_Active", true)
				tutSetBool("RE2_ShipWorkersHint_Shown", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_ShipWorkersHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_ShipWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(835, 480)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_ShipWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("ShipWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_ShipWorkersHint_Time", 0.0)
				tutSetInt("RE2_ShipWorkersHint_State", 1)
			end
		elseif (tutGetInt("RE2_ShipWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_ShipWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_ShipMaterialsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_ShipMaterialsHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_ShipMaterialsHint_HintAppearTime", 5.0)	-- время появления подсказки
		tutSetFloat("RE2_ShipMaterialsHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_ShipMaterialsHint_LowMaterials", false)
		tutSetBool("RE2_ShipMaterialsHint_Shown", false)			-- была ли показана эта подсказка
	end

	-- Закончились материалы
	if message:is("ShipEndMaterials") then
		-- А мы об этом еще ничего не знаем
		if not tutGetBool("RE2_ShipMaterialsHint_LowMaterials") then
			-- Запоминаем это
			tutSetBool("RE2_ShipMaterialsHint_LowMaterials", true)
		end
	end

	-- Если рабочие не работали из-за того, что не было материалов, а тут они вдруг начали работать - сбросим таймер у подскази на материалы
	if message:is("ShipWorking") and message:getIntegerParam() > 0 and tutGetBool("RE2_ShipMaterialsHint_LowMaterials") then
			tutSetBool("RE2_ShipMaterialsHint_LowMaterials", false)
			tutSetFloat("RE2_ShipMaterialsHint_Time", 0.0)
	end
	
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_ShipMaterialsHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_ShipMaterialsHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("RE2_ShipMaterialsHint_LowMaterials")) and (not tutGetBool("RE2_ShipMaterialsHint_Shown")) then
			tutSetFloat("RE2_ShipMaterialsHint_Time", tutGetFloat("RE2_ShipMaterialsHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_ShipMaterialsHint_Time") > tutGetFloat("RE2_ShipMaterialsHint_HintAppearTime")) then
				tutSetBool("RE2_ShipMaterialsHint_Active", true)
				tutSetBool("RE2_ShipMaterialsHint_Shown", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_ShipMaterialsHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_ShipMaterialsHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(835, 480)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_ShipMaterialsHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("Update") and not tutGetBool("RE2_ShipMaterialsHint_LowMaterials"))) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_ShipMaterialsHint_Time", 0.0)
				tutSetInt("RE2_ShipMaterialsHint_State", 1)
			end
		elseif (tutGetInt("RE2_ShipMaterialsHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_ShipMaterialsHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_03_06(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_ShipWorkersHint")
		tutorial:queueAddMessage("RE2_ShipMaterialsHint")
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)
		
		ShowFAN()
	end
end

function RE2_04_01(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("RE2_04_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_04_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_04_02(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_04_02_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_04_02_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_TreasuresHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_TreasuresHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_TreasuresHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_TreasuresHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_TreasuresHint_Ready", false)
	end
	if (message:is("Treasure", "press")) then
			tutSetBool("RE2_TreasuresHint_Ready", true)
		end
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_TreasuresHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_TreasuresHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_TreasuresHint_Ready") and tutorial:getReachableTreasuresCount() > 0) then
			tutSetFloat("RE2_TreasuresHint_Time", tutGetFloat("RE2_TreasuresHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_TreasuresHint_Time") > tutGetFloat("RE2_TreasuresHint_HintAppearTime")) then
				-- Надо показать стрелку на таски и перейти в активный режим подсказки
				tutSetBool("RE2_TreasuresHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_TreasuresHint_State", 0)
				tutorial:targetReachableTreasures(0.5, IPoint(0, 0), 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:variables():setBool("TutorialArrowsNoBind", true);
				tutorial:variables():setFloat("TutorialShowDelayTime", 1.0)
				tutorial:setCharacter("Tippy")
				tutorial:setText("RE2_TreasuresHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutorial:show(0.25)
				tutSetBool("RE2_TreasuresHint_Ready", true)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_TreasuresHint_State") == 0) then
			if (message:is("Treasure", "press") or message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_TreasuresHint_State", 2)
			end
		elseif (tutGetInt("RE2_TreasuresHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_TreasuresHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_04_03(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_TreasuresHint")
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)
		
		ShowFAN()
	end
end

function RE2_SmokeHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_SmokeHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_SmokeHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("RE2_SmokeHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_SmokeHint_Ready", false)
	end
	if (message:is("Smoke", "press")) then
		tutSetBool("RE2_SmokeHint_Ready", true)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_SmokeHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_SmokeHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_SmokeHint_Ready") and tutorial:game():getVariables().money >= 5000) then
			tutSetFloat("RE2_SmokeHint_Time", tutGetFloat("RE2_SmokeHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_SmokeHint_Time") > tutGetFloat("RE2_SmokeHint_HintAppearTime")) then
				tutSetBool("RE2_SmokeHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_SmokeHint_State", 0)
				tutorial:setCharacter("Tippy")
				tutorial:setText("RE2_SmokeHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 1.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(890, 415)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
				tutSetBool("RE2_SmokeHint_Ready", true)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_SmokeHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:switchCharacter("Sedrik")
				tutorial:switchText("RE2_SmokeHint_02", 0.5)
				tutSetInt("RE2_SmokeHint_State", 1)
			end
		elseif (tutGetInt("RE2_SmokeHint_State") == 1) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_SmokeHint_State", 2)
			end
		elseif (tutGetInt("RE2_SmokeHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_SmokeHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_04_04(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_SmokeHint")
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)
		
		ShowFAN()
	end
end


function RE2_RomFactoryHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_RomFactoryHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_RomFactoryHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_RomFactoryHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_RomFactoryHint_LowWorkers", false)
		tutSetBool("RE2_RomFactoryHint_Shown", false)
	end
	if (message:is("RomFactoryWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("RE2_RomFactoryHint_LowWorkers", false)
			tutSetFloat("RE2_RomFactoryHint_Time", 0.0)
		else
			tutSetBool("RE2_RomFactoryHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_RomFactoryHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_RomFactoryHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("RE2_RomFactoryHint_LowWorkers") and not tutGetBool("RE2_RomFactoryHint_Shown")) then
			tutSetFloat("RE2_RomFactoryHint_Time", tutGetFloat("RE2_RomFactoryHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_RomFactoryHint_Time") > tutGetFloat("RE2_RomFactoryHint_HintAppearTime")) then
				tutSetBool("RE2_RomFactoryHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_RomFactoryHint_State", 0)
				tutorial:setCharacter("Tippy")
				tutorial:setText("RE2_RomFactoryHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(860, 490)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_RomFactoryHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("RomFactoryWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_RomFactoryHint_Time", 0.0)
				tutSetInt("RE2_RomFactoryHint_State", 1)
				tutSetBool("RE2_RomFactoryHint_Shown", true)
			end
		elseif (tutGetInt("RE2_RomFactoryHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_RomFactoryHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_04_06(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_RomFactoryHint")
	
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("RE2_04_06_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_04_06_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_04_06_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_MiniHint(message)
	local MiniType = 10
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_MiniHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_MiniHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("RE2_MiniHint_Time", 0.0)				-- общее время подсказки
		tutSetBool("RE2_MiniHint_Ready", false)
		tutSetBool("RE2_MiniHint_Selection", false)
	end
	if (message:is("Small1", "press") or message:is("Small2", "press") or message:is("Small3", "press") or message:is("Small4", "press") or message:is("Small5", "press")) then
		tutSetBool("RE2_MiniHint_Ready", true)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_MiniHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_MiniHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_MiniHint_Ready") and tutorial:isTaskReady(0) and tutorial:isTaskReady(4)) then
			tutSetFloat("RE2_MiniHint_Time", tutGetFloat("RE2_MiniHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_MiniHint_Time") > tutGetFloat("RE2_MiniHint_HintAppearTime")) then
				if (not tutGetBool("RE2_MiniHint_Selection")) then
					tutSetBool("RE2_MiniHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("RE2_MiniHint_State", 0)
					tutSetBool("RE2_MiniHint_Selection", true)
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					tutorial:setCharacter("Sedrik")
					tutorial:setText("RE2_MiniHint_01")
					tutorial:variables():setFloat("TutorialShowDelayTime", 15.0)
					tutSetFloat("RE2_MiniHint_HintAppearTime", 15.0)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:targetAllFreeMiniFields("RE2_MiniHint_Arrow", 0.5, IPoint(0, 20), 0.0)
					tutorial:show(0.25)
				else
					tutSetBool("RE2_MiniHint_Active", true)
					tutorial:variables():setBool("TutorialLock", true)
					tutSetInt("RE2_MiniHint_State", 2)
					tutorial:setCharacter("Sedrik")
					tutorial:setText("RE2_MiniHint_01")
					tutorial:setWidgetVisible("TutorialOk", true)
					tutorial:setObjectsAllowType(allowPass)
					tutorial:variables():setFloat("TutorialShowDelayTime", 0.0)
					tutorial:targetAllFreeMiniFields("RE2_MiniHint_Arrow", 0.5, IPoint(0, 20), 1.5)
					tutorial:variables():setBool("TutorialArrowsNoBind", true)
					tutorial:show(0.25)
				end
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_MiniHint_State") == 0) then
			if ((message:is("Update") and tutorial:isSmallFieldSelected()) or message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_MiniHint_Time", 0.0)
				tutSetInt("RE2_MiniHint_State", 1)
			end
		elseif (tutGetInt("RE2_MiniHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_MiniHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
				tutSetInt("RE2_MiniHint_State", 2)
			end
		elseif (tutGetInt("RE2_MiniHint_State") == 2) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_MiniHint_Time", 0.0)
				tutSetInt("RE2_MiniHint_State", 3)
			end
		elseif (tutGetInt("RE2_MiniHint_State") == 3) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_MiniHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
				tutSetInt("RE2_MiniHint_State", 4)
			end
		
		end
	end
end

function RE2_05_01(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_MiniHint")
	
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("RE2_05_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_05_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchText("RE2_05_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_05_01_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_GoldMineWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_GoldMineWorkersHint_Active", false)
		tutSetBool("RE2_GoldMineWorkersHint_Ready", false)
	end
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_GoldMineWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_GoldMineWorkersHint_Active")) then
		if (message:is("GoldMineWorkers") and not tutGetBool("RE2_GoldMineWorkersHint_Ready")) then
			-- Надо показать стрелку на таски и перейти в активный режим подсказки
			tutSetBool("RE2_GoldMineWorkersHint_Active", true)
			tutorial:variables():setBool("TutorialLock", true)
			tutSetInt("RE2_GoldMineWorkersHint_State", 0)
			
			goldMine = tutorial:game():getObject(message:getIntegerParam())
			areaPos = goldMine:getScreenPosition()
			arrow = tutorial:addArrow()
			tutorial:getArrow(arrow):setPosition(areaPos.x + 3, areaPos.y)
			tutorial:getArrow(arrow):setAngle(270)
			tutorial:getArrow(arrow):show(0.5)
			tutorial:getArrow(arrow):setShowTimer(1.5)
			tutorial:getArrow(arrow):setIgnoreContext(true)
			
			tutorial:setObjectsAllowType(allowPass)
			tutorial:variables():setBool("TutorialArrowsNoBind", true);
			tutorial:variables():setFloat("TutorialShowDelayTime", 1.5)
			tutorial:setCharacter("Sedrik")
			tutorial:setText("RE2_GoldMineWorkersHint_01")
			tutorial:setWidgetVisible("TutorialOk", true)
			tutorial:show(0.25)
			tutSetBool("RE2_GoldMineWorkersHint_Ready", true)
		end
	-- Логика подсказки при активном состоянии
	else
		-- Логика при показе стрелок
		if (tutGetInt("RE2_GoldMineWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_GoldMineWorkersHint_State", 2)
			end
		elseif (tutGetInt("RE2_GoldMineWorkersHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_GoldMineWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_05_02(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_GoldMineWorkersHint")
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)
		
		ShowFAN()
	end
end

function RE2_LeprekonHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_LeprekonHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_LeprekonHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("RE2_LeprekonHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_LeprekonHint_Ready", false)
	end
	if (message:is("Leprekon", "press")) then
		tutSetBool("RE2_LeprekonHint_Ready", true)
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_LeprekonHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_LeprekonHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and not tutGetBool("RE2_LeprekonHint_Ready") and tutorial:game():getVariables().happy >= 150) then
			tutSetFloat("RE2_LeprekonHint_Time", tutGetFloat("RE2_LeprekonHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_LeprekonHint_Time") > tutGetFloat("RE2_LeprekonHint_HintAppearTime")) then
				tutSetBool("RE2_LeprekonHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_LeprekonHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_LeprekonHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 1.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(405, 590)
				tutorial:getArrow(arrowId):setAngle(270)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
				tutSetBool("RE2_LeprekonHint_Ready", true)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_LeprekonHint_State") == 0) then
			if (message:is("TutorialOk", "press")) then
				tutorial:switchCharacter("Tippy")
				tutorial:switchText("RE2_LeprekonHint_02", 0.5)
				tutSetInt("RE2_LeprekonHint_State", 1)
			end
		elseif (tutGetInt("RE2_LeprekonHint_State") == 1) then
			if (message:is("TutorialOk", "press")) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetInt("RE2_LeprekonHint_State", 2)
			end
		elseif (tutGetInt("RE2_LeprekonHint_State") == 2) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_LeprekonHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_05_04(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_LeprekonHint")
	
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_05_03_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		arrow = tutorial:addArrow()
		tutorial:getArrow(arrow):setPosition(405, 590)
		tutorial:getArrow(arrow):setAngle(270)
		tutorial:getArrow(arrow):show(0.5)
		tutorial:getArrow(arrow):setShowTimer(1.5)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_05_03_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_05_03_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_05_03_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_05_05(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_05_06(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_05_06_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_05_06_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_05_06_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_05_06_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_05_06_05", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 5) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 6)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_RailsWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_RailsWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_RailsWorkersHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_RailsWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_RailsWorkersHint_LowWorkers", false)
		tutSetBool("RE2_RailsWorkersHint_Ready", false)
	end
	if (message:is("WagonWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("RE2_RailsWorkersHint_LowWorkers", false)
			tutSetFloat("RE2_RailsWorkersHint_Time", 0.0)
		else
			tutSetBool("RE2_RailsWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_RailsWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_RailsWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("RE2_RailsWorkersHint_LowWorkers") and not tutGetBool("RE2_RailsWorkersHint_Ready")) then
			tutSetFloat("RE2_RailsWorkersHint_Time", tutGetFloat("RE2_RailsWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_RailsWorkersHint_Time") > tutGetFloat("RE2_RailsWorkersHint_HintAppearTime")) then
				tutSetBool("RE2_RailsWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_RailsWorkersHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_RailsWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(170, 550)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
				tutSetBool("RE2_RailsWorkersHint_Ready", true)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_RailsWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("WagonWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_RailsWorkersHint_Time", 0.0)
				tutSetInt("RE2_RailsWorkersHint_State", 1)
			end
		elseif (tutGetInt("RE2_RailsWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_RailsWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_05_07(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_RailsWorkersHint")
	
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("RE2_05_07_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		arrow = tutorial:addArrow()
		tutorial:getArrow(arrow):setPosition(170, 550)
		tutorial:getArrow(arrow):setAngle(90)
		tutorial:getArrow(arrow):show(0.5)
		tutorial:getArrow(arrow):setShowTimer(1.5)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_05_07_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_05_07_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_06_01(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_06_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Bubba")
			tutorial:switchText("RE2_06_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_06_02(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Bubba")
		tutorial:setText("RE2_06_02_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		tutSetBool("RE2_06_02_BeehiveBuilt", false)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_06_02_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_06_02_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Bubba")
			tutorial:switchText("RE2_06_02_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	elseif (tutGetInt("TutorialState") == 5) then
		if (message:is("BeehiveBuilt") and not message:is("BeehiveBuilt", "press")) then
			tutSetBool("RE2_06_02_BeehiveBuilt", true)
		end
		if (tutGetBool("RE2_06_02_BeehiveBuilt") and not tutGetBool("TutorialLock")) then
			tutorial:setCharacter("Bubba")
			tutorial:setText("RE2_06_02_05")
			tutSetFloat("TutorialShowDelayTime", 0.0)
			tutSetInt("TutorialState", 6)
			tutorial:setWidgetVisible("TutorialOk", true)
			tutSetBool("TutorialLock", true)
			tutorial:show(0.25)
		end
	elseif (tutGetInt("TutorialState") == 6) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 7)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end

function RE2_PalmsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_PalmsHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_PalmsHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_PalmsHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_PalmsHint_LowWorkers", false)
		tutSetBool("RE2_PalmsHint_Ready", false)
	end
	if (message:is("PalmsWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("RE2_PalmsHint_LowWorkers", false)
			tutSetFloat("RE2_PalmsHint_Time", 0.0)
		else
			tutSetBool("RE2_PalmsHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_PalmsHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_PalmsHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("RE2_PalmsHint_LowWorkers") and not tutGetBool("RE2_PalmsHint_Ready")) then
			tutSetFloat("RE2_PalmsHint_Time", tutGetFloat("RE2_PalmsHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_PalmsHint_Time") > tutGetFloat("RE2_PalmsHint_HintAppearTime")) then
				tutSetBool("RE2_PalmsHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_PalmsHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_PalmsHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(680, 510)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
				tutSetBool("RE2_PalmsHint_Ready", true)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_PalmsHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("PalmsWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_PalmsHint_Time", 0.0)
				tutSetInt("RE2_PalmsHint_State", 1)
			end
		elseif (tutGetInt("RE2_PalmsHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_PalmsHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_06_03(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_06_04(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_PalmsHint")
		
		tutorial:show(0.25)
		tutorial:setCharacter("Bubba")
		tutorial:setText("RE2_06_04_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_06_04_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_06_05(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_06_06(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Bubba")
		tutorial:setText("RE2_06_06_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_06_06_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_06_06_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_07_01(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Tippy")
		tutorial:setText("RE2_07_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Fakir")
			tutorial:switchText("RE2_07_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchText("RE2_07_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_07_02(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Fakir")
		tutorial:setText("RE2_07_02_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_07_02_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_TankWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_TankWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_TankWorkersHint_HintAppearTime", 20.0)	-- время появления подсказки
		tutSetFloat("RE2_TankWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_TankWorkersHint_LowWorkers", false)
		tutSetBool("RE2_TankWorkersHint_Ready", false)
	end
	if (message:is("TankFillWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 7) then
			tutSetBool("RE2_TankWorkersHint_LowWorkers", false)
			tutSetFloat("RE2_TankWorkersHint_Time", 0.0)
		else
			tutSetBool("RE2_TankWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_TankWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_TankWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("RE2_TankWorkersHint_LowWorkers") and not tutGetBool("RE2_TankWorkersHint_Ready")) then
			tutSetFloat("RE2_TankWorkersHint_Time", tutGetFloat("RE2_TankWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_TankWorkersHint_Time") > tutGetFloat("RE2_TankWorkersHint_HintAppearTime")) then
				tutSetBool("RE2_TankWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_TankWorkersHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_TankWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(840, 470)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
				tutSetBool("RE2_TankWorkersHint_Ready", true)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_TankWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("TankFillWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_TankWorkersHint_Time", 0.0)
				tutSetInt("RE2_TankWorkersHint_State", 1)
			end
		elseif (tutGetInt("RE2_TankWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_TankWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_07_03(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_07_04(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_07_05(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end
function RE2_07_06(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end
function RE2_07_07(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_07_08(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_TankWorkersHint")
	
		tutorial:show(0.25)
		tutorial:setCharacter("Fakir")
		tutorial:setText("RE2_07_08_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_07_08_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchText("RE2_07_08_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_07_08_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_08_01(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Saruman")
		tutorial:setText("RE2_08_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_08_01_02", 0.5)
			
			arrow = tutorial:addArrow()
			tutorial:getArrow(arrow):setPosition(126, 652)
			tutorial:getArrow(arrow):setAngle(270)
			tutorial:getArrow(arrow):show(0.5)
			tutorial:getArrow(arrow):setScale(0.7)
			tutorial:getArrow(arrow):setShowTimer(1.0)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Saruman")
			tutorial:switchText("RE2_08_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_08_01_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_08_02(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Saruman")
		tutorial:setText("RE2_08_05_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_08_05_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_08_03(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_08_04(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_08_05(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_08_06(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_TempleWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_TempleWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_TempleWorkersHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_TempleWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_TempleWorkersHint_LowWorkers", false)
		tutSetBool("RE2_TempleWorkersHint_Shown", false)
	end
	if (message:is("TempleWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 4) then
			tutSetBool("RE2_TempleWorkersHint_LowWorkers", false)
			tutSetFloat("RE2_TempleWorkersHint_Time", 0.0)
		else
			tutSetBool("RE2_TempleWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_TempleWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_TempleWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("RE2_TempleWorkersHint_LowWorkers") and not tutGetBool("RE2_TempleWorkersHint_Shown")) then
			tutSetFloat("RE2_TempleWorkersHint_Time", tutGetFloat("RE2_TempleWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_TempleWorkersHint_Time") > tutGetFloat("RE2_TempleWorkersHint_HintAppearTime")) then
				tutSetBool("RE2_TempleWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_TempleWorkersHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_TempleWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(245, 445)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_TempleWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("TempleWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_TempleWorkersHint_Time", 0.0)
				tutSetInt("RE2_TempleWorkersHint_State", 1)
				tutSetBool("RE2_TempleWorkersHint_Shown", true)
			end
		elseif (tutGetInt("RE2_TempleWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_TempleWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку материалов на строительстве Храма Богов
function RE2_TempleMaterialsHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_TempleMaterialsHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_TempleMaterialsHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("RE2_TempleMaterialsHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_TempleMaterialsHint_LowMaterials", false)
	end
	if (message:is("TempleEndMaterials")) then
		if (message:getIntegerParam() > 0) then
			tutSetBool("RE2_TempleMaterialsHint_LowMaterials", true)
		else
			tutSetBool("RE2_TempleMaterialsHint_LowMaterials", false)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_TempleMaterialsHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_TempleMaterialsHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("RE2_TempleMaterialsHint_LowMaterials")) then
			tutSetFloat("RE2_TempleMaterialsHint_Time", tutGetFloat("RE2_TempleMaterialsHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_TempleMaterialsHint_Time") > tutGetFloat("RE2_TempleMaterialsHint_HintAppearTime")) then
				tutSetBool("RE2_TempleMaterialsHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_TempleMaterialsHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_TempleMaterialsHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(245, 445)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_TempleMaterialsHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("Update") and not tutGetBool("RE2_TempleMaterialsHint_LowMaterials"))) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_TempleMaterialsHint_Time", 0.0)
				tutSetInt("RE2_TempleMaterialsHint_State", 1)
			end
		elseif (tutGetInt("RE2_TempleMaterialsHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_TempleMaterialsHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

-- Подсказка на нехватку золота на строительстве Храма Богов
function RE2_TempleGoldHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_TempleGoldHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_TempleGoldHint_HintAppearTime", 15.0)	-- время появления подсказки
		tutSetFloat("RE2_TempleGoldHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_TempleGoldHint_LowGold", false)
	end
	if (message:is("TempleEndMoney")) then
		if (message:getIntegerParam() > 0) then
			tutSetBool("RE2_TempleGoldHint_LowGold", true)
		else
			tutSetBool("RE2_TempleGoldHint_LowGold", false)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_TempleGoldHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_TempleGoldHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("RE2_TempleGoldHint_LowGold")) then
			tutSetFloat("RE2_TempleGoldHint_Time", tutGetFloat("RE2_TempleGoldHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_TempleGoldHint_Time") > tutGetFloat("RE2_TempleGoldHint_HintAppearTime")) then
				tutSetBool("RE2_TempleGoldHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_TempleGoldHint_State", 0)
				tutorial:setCharacter("Sedrik")
				tutorial:setText("RE2_TempleGoldHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				arrowId = tutorial:addArrow()
				tutorial:getArrow(arrowId):setPosition(245, 445)
				tutorial:getArrow(arrowId):setAngle(90)
				tutorial:getArrow(arrowId):setShowTimer(1.5)
				tutorial:getArrow(arrowId):show(0.5)
				tutorial:show(0.25)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_TempleGoldHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("Update") and not tutGetBool("RE2_TempleGoldHint_LowGold"))) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_TempleGoldHint_Time", 0.0)
				tutSetInt("RE2_TempleGoldHint_State", 1)
			end
		elseif (tutGetInt("RE2_TempleGoldHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_TempleGoldHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_08_07(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_TempleWorkersHint")
		tutorial:queueAddMessage("RE2_TempleMaterialsHint")
		tutorial:queueAddMessage("RE2_TempleGoldHint")
	
		tutorial:show(0.25)
		tutorial:setCharacter("Saruman")
		tutorial:setText("RE2_08_07_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_08_07_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_09_01(message)
	if message:is("LoadLevel") then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_09_02(message)
	if message:is("LoadLevel") then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_09_03(message)
	if message:is("LoadLevel") then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_09_04(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Santa")
		tutorial:setText("RE2_09_04_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		tutSetBool("RE2_09_04_Win", false)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_09_04_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchText("RE2_09_04_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			ShowFAN()
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("SnowWin")) then
			tutSetBool("RE2_09_04_Win", true)
		end
		if (tutGetBool("RE2_09_04_Win") and not tutGetBool("TutorialLock")) then
			tutorial:setCharacter("Santa")
			tutorial:setText("RE2_09_04_04")
			tutSetFloat("TutorialShowDelayTime", 0.0)
			tutSetInt("TutorialState", 5)
			tutorial:setWidgetVisible("TutorialOk", true)
			tutSetBool("TutorialLock", true)
			tutorial:show(0.25)
		end
	elseif (tutGetInt("TutorialState") == 5) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 6)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_09_05(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Santa")
		tutorial:setText("RE2_09_05_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik2")
			tutorial:switchText("RE2_09_05_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Tippy2")
			tutorial:switchText("RE2_09_05_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_FishingWorkersHint(message)
	-- Инициализация
	if (message:is("LoadLevel")) then
		tutSetBool("RE2_FishingWorkersHint_Active", false)			-- активность подсказки
		tutSetFloat("RE2_FishingWorkersHint_HintAppearTime", 30.0)	-- время появления подсказки
		tutSetFloat("RE2_FishingWorkersHint_Time", 0.0)			-- общее время подсказки
		tutSetBool("RE2_FishingWorkersHint_LowWorkers", false)
		tutSetBool("RE2_FishingWorkersHint_Ready", false)
	end
	if (message:is("FishingWorkers")) then
		if (message:getIntegerParam() < 1 or message:getIntegerParam() > 7) then
			tutSetBool("RE2_FishingWorkersHint_LowWorkers", false)
			tutSetFloat("RE2_FishingWorkersHint_Time", 0.0)
		else
			tutSetBool("RE2_FishingWorkersHint_LowWorkers", true)
		end
	end
	-- Если активна другая подсказка, то с этой мы ничего не делаем
	if (tutGetBool("TutorialLock") and not tutGetBool("RE2_FishingWorkersHint_Active")) then
		return
	end
	-- Логика подсказки при неактивном состоянии
	if (not tutGetBool("RE2_FishingWorkersHint_Active")) then
		-- Обновляем время
		if (message:is("Update") and tutGetBool("RE2_FishingWorkersHint_LowWorkers") and not tutGetBool("RE2_FishingWorkersHint_Ready")) then
			tutSetFloat("RE2_FishingWorkersHint_Time", tutGetFloat("RE2_FishingWorkersHint_Time") + message:getVariables():getFloat("TimeDelta"))
			if (tutGetFloat("RE2_FishingWorkersHint_Time") > tutGetFloat("RE2_FishingWorkersHint_HintAppearTime")) then
				tutSetBool("RE2_FishingWorkersHint_Active", true)
				tutorial:variables():setBool("TutorialLock", true)
				tutSetInt("RE2_FishingWorkersHint_State", 0)
				tutorial:setCharacter("Santa")
				tutorial:setText("RE2_FishingWorkersHint_01")
				tutorial:setWidgetVisible("TutorialOk", true)
				tutSetFloat("TutorialShowDelayTime", 0.0)
				tutorial:setObjectsAllowType(allowPass)
				tutorial:targetFreeFishingHoles(0.5, IPoint(0, 20), 1.5)
				tutorial:show(0.25)
				tutSetBool("RE2_FishingWorkersHint_Ready", true)
			end
		end
	-- Логика подсказки при активном состоянии
	else
		if (tutGetInt("RE2_FishingWorkersHint_State") == 0) then
			if (message:is("TutorialOk", "press") or (message:is("FishingWorkers") and message:getIntegerParam() == 0)) then
				tutorial:hideArrows(0.25)
				tutorial:hide(0.25)
				tutSetFloat("RE2_FishingWorkersHint_Time", 0.0)
				tutSetInt("RE2_FishingWorkersHint_State", 1)
			end
		elseif (tutGetInt("RE2_FishingWorkersHint_State") == 1) then
			if (message:is("TutorialPop")) then
				tutorial:variables():setBool("TutorialLock", false)
				tutSetBool("RE2_FishingWorkersHint_Active", false)
				tutorial:variables():setBool("TutorialArrowsNoBind", false);
			end
		end
	end
end

function RE2_09_06(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_09_07(message)
	if (message:is("LoadLevel")) then
		tutorial:queueAddMessage("RE2_FishingWorkersHint")
		
		tutorial:show(0.25)
		tutorial:setCharacter("Santa")
		tutorial:setText("RE2_09_07_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_09_07_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik2")
			tutorial:switchText("RE2_09_07_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_10_01(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Sheldon")
		tutorial:setText("RE2_10_01_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		arrow = tutorial:addArrow()
		tutorial:getArrow(arrow):setPosition(850, 520)
		tutorial:getArrow(arrow):setAngle(270)
		tutorial:getArrow(arrow):show(0.5)
		tutorial:getArrow(arrow):setScale(0.7)
		tutorial:getArrow(arrow):setShowTimer(2.0)
				
		arrow = tutorial:addArrow()
		tutorial:getArrow(arrow):setPosition(920, 480)
		tutorial:getArrow(arrow):setAngle(270)
		tutorial:getArrow(arrow):show(0.5)
		tutorial:getArrow(arrow):setScale(0.7)
		tutorial:getArrow(arrow):setShowTimer(2.0)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_10_01_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Tippy")
			tutorial:switchText("RE2_10_01_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hideArrows(0.25)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_10_02(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_10_03(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Sheldon")
		tutorial:setText("RE2_10_03_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_10_03_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sheldon")
			tutorial:switchText("RE2_10_03_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_10_04(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_10_05(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_10_05_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
		
		HideFAN()
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchCharacter("Sheldon")
			tutorial:switchText("RE2_10_05_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sedrik")
			tutorial:switchText("RE2_10_05_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
			
			ShowFAN()
		end
	end
end

function RE2_10_06(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_10_07(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

function RE2_10_08(message)
	if (message:is("LoadLevel")) then
		tutSetBool("TutorialLock", false)
		tutSetBool("TutorialToSelect", true)

		ShowFAN()
	end
end

--[[
function RE2_10_08(message)
	if (message:is("LoadLevel")) then
		tutorial:show(0.25)
		tutorial:setCharacter("Sedrik")
		tutorial:setText("RE2_10_08_01")
		tutSetFloat("TutorialShowDelayTime", 1.5)
		tutSetInt("TutorialState", 1)
		tutorial:setWidgetVisible("TutorialOk", true)
		tutSetBool("TutorialLock", true)
	end
	if (tutGetInt("TutorialState") == 1) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 2)
			tutorial:switchText("RE2_10_08_02", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 2) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 3)
			tutorial:switchCharacter("Sheldon")
			tutorial:switchText("RE2_10_08_03", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 3) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 4)
			tutorial:switchText("RE2_10_08_04", 0.5)
		end
	elseif (tutGetInt("TutorialState") == 4) then
		if (message:is("TutorialOk", "press")) then
			tutSetInt("TutorialState", 5)
			tutorial:hide(0.25)
			tutSetBool("TutorialLock", false)
			tutSetBool("TutorialToSelect", true)
		end
	end
end
]]--