Функционал:

будет пополняться
  1. Полное отключение интерфейса
  2. Отдаление и приближении камеры при помощи END HOME
  3. Открытие карты для всех игроков
  4. Скрытие курсора через 3 секунды при неактивности
  5. Скрытие/отображение миникарты
  6. Очистка экрана от сообщений

Как импортировать себе

  1. Перевести карту в режима Lua (к сожалению я так и не потянул Jass Версию, так что инструменты будут всегда на lua)
Scenario => Map Options => Script Language
  1. Скопировать весь код в пустой блок New Custom Script

Сам код

раскрыть
do
    TimerStart(CreateTimer(), .1, false, function()
        HideEverything()
        IsSystemON=true
        InitCamControl()
        InitMouseMoveTrigger()
        MouseHider(3, 0) -- 0 для красного игрока
        CreateUI()
        RestoreMiniPap()
    end)
end
function HideEverything()
    BlzFrameSetVisible(BlzGetFrameByName("ConsoleUIBackdrop", 0), false)
    for i = 0, 11 do
        --BlzFrameSetVisible(BlzGetFrameByName("CommandButton_"..i, 0), false) --отключить
        BlzFrameSetSize(BlzGetFrameByName("CommandButton_" .. i, 0), 0, 0)--скрыть, но работать будут по хоткеям
    end
    BlzHideOriginFrames(true)--скрыть всё
end

function ShowEverything()
    BlzFrameSetVisible(BlzGetFrameByName("ConsoleUIBackdrop", 0), true)
    for i = 0, 11 do
        --BlzFrameSetVisible(BlzGetFrameByName("CommandButton_"..i, 0), false)
        BlzFrameSetSize(BlzGetFrameByName("CommandButton_" .. i, 0), 0.039, 0.039)
    end
    BlzHideOriginFrames(false)--скрыть всё
end


CamZ = {}
Step = 100 -- шаг подъёма камеры
function InitCamControl()
    local EventUp = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
        CreateFogModifierRectBJ(true, Player(i), FOG_OF_WAR_VISIBLE, GetEntireMapRect())

        BlzTriggerRegisterPlayerKeyEvent(EventUp, Player(i), OSKEY_HOME, 0, true)
        CamZ[i] = GetCameraField(CAMERA_FIELD_ZOFFSET)
    end
    local EventDown = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
        BlzTriggerRegisterPlayerKeyEvent(EventDown, Player(i), OSKEY_END, 0, true)
    end
    TriggerAddAction(EventUp, function()
        CamZ[GetPlayerId(GetTriggerPlayer())] = GetCameraField(CAMERA_FIELD_ZOFFSET) + Step
    end)
    TriggerAddAction(EventDown, function()
        CamZ[GetPlayerId(GetTriggerPlayer())] = GetCameraField(CAMERA_FIELD_ZOFFSET) - Step
    end)

    TimerStart(CreateTimer(), 0.02, true, function()
        for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
            if GetLocalPlayer() == Player(i) then
                SetCameraField(CAMERA_FIELD_ZOFFSET, CamZ[i], 0.1)
            end
        end
    end)
end

GetPlayerMouseX = {}
GetPlayerMouseY = {}
function InitMouseMoveTrigger()
    local MouseMoveTrigger = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
        local player = Player(i)
        TriggerRegisterPlayerEvent(MouseMoveTrigger, player, EVENT_PLAYER_MOUSE_MOVE)
        GetPlayerMouseX[i] = 0
        GetPlayerMouseY[i] = 0
    end
    TriggerAddAction(MouseMoveTrigger, function()
        local id = GetPlayerId(GetTriggerPlayer())
        if BlzGetTriggerPlayerMouseX() ~= 0 then
            GetPlayerMouseX[id] = BlzGetTriggerPlayerMouseX()
            GetPlayerMouseY[id] = BlzGetTriggerPlayerMouseY()
        end
    end)
end

function MouseHider(delay, pid)
    local pointer = BlzFrameGetChild(BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 13)
    local period = 0.02
    local sec = 0
    local showPointer = true
    local preX = GetPlayerMouseX[pid]
    TimerStart(CreateTimer(), period, true, function()
        sec = sec + period
        if preX ~= GetPlayerMouseX[pid] then
            showPointer = true
            sec = 0
            CustomUIShow(showPointer)
            --print("показываем курсор")
            BlzFrameSetAlpha(pointer, 255)
        end
        if sec >= delay and showPointer and not mouseOnFrame then
            showPointer = false
            CustomUIShow(showPointer)
            BlzFrameSetAlpha(pointer, 0)
            ClearTextMessages()
            --print("Скрываем курсор")
        end
        preX = GetPlayerMouseX[pid]
    end)
end

function CreateUI()
    ui={}
    tt={}
    ui[1]=CreateSimpleFrameGlue(0.02, 0.56,"ReplaceableTextures\\CommandButtons\\BTNPurge",1)
    ui[2]=CreateSimpleFrameGlue(0.02+0.039, 0.56,"ReplaceableTextures\\CommandButtons\\BTNSpy",2)
    ui[3]=CreateSimpleFrameGlue(0.02+0.039*2, 0.56,"ReplaceableTextures\\CommandButtons\\BTNCryptFiendUnBurrow",3)
    tt[1],tt[2],tt[3]=CreateToolTipBox()

end

function CreateSimpleFrameGlue(posX, PosY, texture, flag)
    local NextPoint = 0.039
    if not texture then
        texture = "ReplaceableTextures\\CommandButtons\\BTNSelectHeroOn"
    end
    local SelfFrame = BlzCreateFrameByType('GLUEBUTTON', 'FaceButton', BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 'ScoreScreenTabButtonTemplate', 0)
    local buttonIconFrame = BlzCreateFrameByType('BACKDROP', 'FaceButtonIcon', SelfFrame, '', 0)
    --BlzFrameSetVisible(SelfFrame, false)
   -- BlzFrameSetVisible(SelfFrame, GetLocalPlayer() == player)
    BlzFrameSetAllPoints(buttonIconFrame, SelfFrame)
    BlzFrameSetTexture(buttonIconFrame, texture, 0, true)
    BlzFrameSetSize(SelfFrame, NextPoint, NextPoint)
    BlzFrameSetAbsPoint(SelfFrame, FRAMEPOINT_CENTER, posX, PosY)

    local ClickTrig = CreateTrigger()
    BlzTriggerRegisterFrameEvent(ClickTrig, SelfFrame, FRAMEEVENT_CONTROL_CLICK)
    TriggerAddAction(ClickTrig, function()
       -- print("Нажата кнопка ")
        BlzFrameSetEnable(BlzGetTriggerFrame(), false)
        BlzFrameSetEnable(BlzGetTriggerFrame(), true)
        if flag==1 then
            ClearTextMessages()
        end
        if flag==2 then
            if mapIsVisible then
                mapIsVisible=false
            else
                mapIsVisible=true
            end
            BlzFrameSetVisible(map, mapIsVisible)
        end
        if flag==3 then
            if IsSystemON then
                IsSystemON=false
                mapIsVisible=true
                ShowEverything()
                BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtons\\BTNCryptFiendBurrow", 0, true)
            else
                IsSystemON=true
                mapIsVisible=false
                HideEverything()
                BlzFrameSetTexture(buttonIconFrame, texture, 0, true)
            end
        end
    end)

    local TrigMOUSE_ENTER = CreateTrigger()
    BlzTriggerRegisterFrameEvent(TrigMOUSE_ENTER, SelfFrame, FRAMEEVENT_MOUSE_ENTER)

    TriggerAddAction(TrigMOUSE_ENTER, function()
        --print("показать подсказку "..flag)
        mouseOnFrame=true
        BlzFrameSetVisible(tt[1],true)
        if flag==1 then
            SetTooltipText(tt[3],"Очистить экран от сообщений")
        elseif flag==2 then
            SetTooltipText(tt[3],"Включить/выключить миникарту")
        elseif flag==3 then
            SetTooltipText(tt[3],"Включить/выключить интерфейс")
        end

    end)
    local TrigMOUSE_LEAVE = CreateTrigger()
    BlzTriggerRegisterFrameEvent(TrigMOUSE_LEAVE, SelfFrame, FRAMEEVENT_MOUSE_LEAVE)
    TriggerAddAction(TrigMOUSE_LEAVE, function()
        mouseOnFrame=false
        BlzFrameSetVisible(tt[1],false)
    end)
    return SelfFrame
end


function RestoreMiniPap()
    map=BlzGetOriginFrame(ORIGIN_FRAME_MINIMAP, 0)
    mapIsVisible=false
    BlzFrameSetVisible(map, false)
end

function CustomUIShow(show)
    for i=1,#ui do
        BlzFrameSetVisible(ui[i],show)
    end
end

mouseOnFrame=false
--mainTooltip=nil
function CreateToolTipBox()
    local tooltip = BlzCreateFrameByType("FRAME", "TestDialog", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "StandardFrameTemplate", 0)
    local text = BlzCreateFrameByType("TEXT", "ButtonChargesText", tooltip, "", 0)
    local backdrop = BlzCreateFrame("QuestButtonDisabledBackdropTemplate", tooltip, 0, 0)
    BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, 0.04+0.04, 0.6-0.04-0.04)
    BlzFrameSetSize(tooltip, 0.2, 0.04)
    BlzFrameSetSize(backdrop, 0.2, 0.04)
    BlzFrameSetPoint(backdrop, FRAMEPOINT_CENTER, tooltip, FRAMEPOINT_CENTER, 0.0, 0.0)
    BlzFrameSetAlpha(backdrop,100)
    BlzFrameSetText(text,"Первичный текст")
    BlzFrameSetPoint(text, FRAMEPOINT_CENTER, tooltip, FRAMEPOINT_CENTER, 0.0, 0.0)
    BlzFrameSetVisible(tooltip,false)
    return tooltip,backdrop,text
end

function SetTooltipText(text,tips)
    BlzFrameSetText(text,tips)
end

Назначение (для тех кто ещё не понял)

Смотреть ландшафт и делать скриншоты
`
ОЖИДАНИЕ РЕКЛАМЫ...
33
Мне пока что достаточно этого, буду с этим обозревать конкурс, если пригодится ещё кому кроме меня, то пишите какой функционал вы бы хотели тут увидеть, возможно он станет не таким скудным, например появятся кнопочки (iseedeadpeople, показать миникарту) или ползунки для отдаления камеры.
38
Только ко мне не надо это засовывать, там и так всё есть)

Хотя скрывать курсор было бы полезно. Если найдешь фрейм для этого былоб огонь
Можно вообще сделать систему саму-в-себе, которая скрывает курсор после 3 сек бездействия
33
Скрытие курсора возможно тоже, добавлю скрытие при бездействии, спасибо за подсказку
33
UPD ScorpioT1000, добавил возможность скрыть курсор
MouseHider(delay,pid)
delay - задержка в секундах, после которой курсор будет скрыт
pid - ид игрока, 0 для красного и так далее
МрачныйВорон:
не понял назначение этой штуки
Назначение любое, смотри раздел "функционал"
38
Почему не сделал версию на jass, в итоге у половины карт не проверить
33
ScorpioT1000, На всех картах с конкурса работает, все карты на гуи, просто переводим в луа и вперёд.
к сожалению я так и не потянул Jass Версию
Я убил 5 часов чтобы перегнать в Jass и сдался
38
Bergi_Bear, так там нельзя перевести в луа, мне что, их триггеры надо было переписывать?
Теперь не удивительно, на что у тебя по 2 часа на карту ушло
33
ScorpioT1000, нет, лишь 2 карты из 11 имеют кастом скрипт и их нельзя так просто перевести на Jass, я просто удалил их код ради скринов и это заняло + 20 секунд.
38
Без кастом скрипта кнопка луа тоже заблочена
33
Будет Апдейд, ибо во многих картах не хватало Far Z для дальности прорисовки, и так же обнаружен баг: выход из режима кинематики заново отображает кусок панели интерфейса.

ScorpioT1000:
Без кастом скрипта кнопка луа тоже заблочена
нет, скорее попутан порядок, кнопку луа заблочена, когда уже есть блок кастом кода даже если он содержит луа код, что бердово в целом звучит, но увы этот так.
сначала надо перевести карту в луа, а только потом создавать кастомный блок кода куда будет вставлен луа код
38
А, мб я так и запутался
33
UPD:
Добавлена возможность управлять интерфейсом через кнопки, пока что их 3:
  1. Очистка экрана от сообщений
  2. Скрыть/показать миникарту
  3. Скрыть/показать интерфейс
Сами кнопки исчезают также по таймауту неактивности курсора
Загруженные файлы
38
Так сделал бы их внизу по центру
33
Они и при включенном интерфейсе активны, и там будет наложение на infopanel юнита
33
Добавил подсказку при наведении
Загруженные файлы
21
Перевести карту в режима Lua (к сожалению я так и не потянул Jass Версию, так что инструменты будут всегда на lua)
Просто сознайся, что впадлу делать на jass ;D
я б если делал какую-либо систему то скорее всего только на одном языке
33
Proshel_Doty, я правда пытался, но там на столько всё плохо, что лучше не делать =), мне всё это пригодилось для хороших скринов

Добавил все скриншоты в шапку
25
Это не проблема конкретно этой наработки, но надо бы хоть где-то об этом отписать. Вдоль нижнего края экрана существует прозрачная полоска за которой не рендерятся тени. Ширина полоски зависит от параметров текущей игровой камеры. Коммьюнити просить исправить.
Вот видос с примером, внимание на тень паджиков, которая частично скрывается за неопознанным объектом.
Загруженные файлы
21
poisoNDealer, пожалуй это самая незначительная проблема в варике :D
Чтобы оставить комментарий, пожалуйста, войдите на сайт.