Возможно ли сделать определённую зону для курсора где можно запретить например вывод текста при нажатии на лкм.

я уже написал в своей статье. но мы не читаем конечно
вот
--чекаем принадлежность курсора в игровом поле
  local cursorInGame = true
  TimerStart(CreateTimer(),0.0, false,function()
     local parent = BlzGetFrameByName("ConsoleUIBackdrop", 0)  
     local gameUI = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
     --DestroyTimer(GetExpiredTimer())
     --Screen - родитель игрового поля (т.е. экрана)
     local Screen = BlzCreateFrameByType("FRAME", "FaceFrame", parent, "", 0)
                
     --левая центральная
     local ScreenFrame1 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(ScreenFrame1, 50)
     BlzFrameSetAbsPoint(ScreenFrame1, FRAMEPOINT_CENTER, 0.1,0.154+((0.416)/2))
     BlzFrameSetSize(ScreenFrame1, 0.2, 0.416)
     --центральная игровая
     local ScreenFrame2 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(ScreenFrame2, 50)
     BlzFrameSetAbsPoint(ScreenFrame2, FRAMEPOINT_CENTER, 0.4,0.128+((0.442)/2))
     BlzFrameSetSize(ScreenFrame2, 0.4, 0.442)
     --правая центральная игровая
     local ScreenFrame3 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(ScreenFrame3, 50)
     BlzFrameSetAbsPoint(ScreenFrame3, FRAMEPOINT_CENTER, 0.7,0.154+((0.416)/2))
     BlzFrameSetSize(ScreenFrame3, 0.2, 0.416)
     --левая боковая игровая
     local ScreenFrame4 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(ScreenFrame4, 50)
     BlzFrameSetAbsPoint(ScreenFrame4, FRAMEPOINT_CENTER, -0.144/2,(0.164+0.410)/2)
     BlzFrameSetSize(ScreenFrame4, 0.144, 0.164+0.410)
     --правая боковая игровая
     local ScreenFrame5 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(ScreenFrame5, 50)
     BlzFrameSetAbsPoint(ScreenFrame5, FRAMEPOINT_CENTER, 0.8+0.144/2,(0.164+0.410)/2)
     BlzFrameSetSize(ScreenFrame5, 0.144, 0.164+0.410)

     --Sreentools - всплывающая подсказка-пустышка
     local Sreentools = BlzCreateFrameByType("FRAME", "FaceFrame", parent, "", 0)
     BlzFrameSetAlpha(Sreentools, 0)
     BlzFrameSetAbsPoint(Sreentools, FRAMEPOINT_BOTTOMLEFT, 0, 0)
     BlzFrameSetSize(Sreentools, 0, 0)
     BlzFrameSetTooltip(ScreenFrame1, Sreentools)
     BlzFrameSetTooltip(ScreenFrame2, Sreentools)
     BlzFrameSetTooltip(ScreenFrame3, Sreentools)
     BlzFrameSetTooltip(ScreenFrame4, Sreentools)
     BlzFrameSetTooltip(ScreenFrame5, Sreentools)
       
     --InterfaceField - родитель интерфейса
     local InterfaceField = BlzCreateFrameByType("FRAME", "FaceFrame", gameUI, "", 0)
            
     --левая нижняя панель
     local Interface1 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", InterfaceField, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(Interface1, 50)
     BlzFrameSetAbsPoint(Interface1, FRAMEPOINT_CENTER, 0.1, 0.144/2)
     BlzFrameSetSize(Interface1, 0.2, 0.154) --0.176
     --центральная панель
     local Interface2 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", InterfaceField, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(Interface2, 50)
     BlzFrameSetAbsPoint(Interface2, FRAMEPOINT_CENTER, 0.4, 0.118/2)
     BlzFrameSetSize(Interface2, 0.4, 0.128) --0.15
     --правая нижняя панель
     local Interface3 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", InterfaceField, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(Interface3, 50)
     BlzFrameSetAbsPoint(Interface3, FRAMEPOINT_CENTER, 0.7, 0.146/2)
     BlzFrameSetSize(Interface3, 0.2, 0.154) --0.176
     --верхняя панель
     local Interface4 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", parent, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(Interface4, 50)
     BlzFrameSetAbsPoint(Interface4, FRAMEPOINT_CENTER, 0.4, 0.6-(0.026/2))
     BlzFrameSetSize(Interface4, 1.088, 0.026) --0.176
           
     --Interfacetools - всплывающая подсказка поля интерфейса
     local Interfacetools = BlzCreateFrameByType("FRAME", "FaceFrame", parent, "", 0)
     BlzFrameSetAlpha(Interfacetools, 0)
     BlzFrameSetAbsPoint(Interfacetools, FRAMEPOINT_BOTTOMLEFT, 0, 0)
     BlzFrameSetSize(Interfacetools, 0, 0)
     BlzFrameSetTooltip(Interface1, Interfacetools)
     BlzFrameSetTooltip(Interface2, Interfacetools)
     BlzFrameSetTooltip(Interface3, Interfacetools)
     BlzFrameSetTooltip(Interface4, Interfacetools)
                
     TimerStart(CreateTimer(),1/32, true,function()
                    
        if BlzFrameIsVisible(Sreentools) then
            print("курсор в игровом поле")
            BlzFrameSetVisible(ScreenFrame1,false)
            BlzFrameSetVisible(ScreenFrame2,false)
            BlzFrameSetVisible(ScreenFrame3,false)
            BlzFrameSetVisible(ScreenFrame4,false)
            BlzFrameSetVisible(ScreenFrame5,false)
            BlzFrameSetVisible(InterfaceField,true)
            if GetLocalPlayer() ~= nil then
                cursorInGame = true
            end
        elseif BlzFrameIsVisible(Interfacetools) or BlzFrameIsVisible(BlzGetOriginFrame(ORIGIN_FRAME_UBERTOOLTIP,0)) then
            print("курсор в поле интерфейса")
            BlzFrameSetVisible(ScreenFrame1,true)
            BlzFrameSetVisible(ScreenFrame2,true)
            BlzFrameSetVisible(ScreenFrame3,true)
            BlzFrameSetVisible(ScreenFrame4,true)
            BlzFrameSetVisible(ScreenFrame5,true)
            BlzFrameSetVisible(InterfaceField,false)
            if GetLocalPlayer()~=nil then
                cursorInGame = false
            end                    
       end

карта немного старая, тут портрета нет. посмотри в моим вопросах, где вопрос недавно задавал про портрет
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
МрачныйВорон, не, нажимаешь лкм летит снаряд все, срабатывает даже когда предметы на панели юзаешь.
27
Survivalist, кажется понял. У тебя клик мыши срабатывается и по интерфейсу.
выше скинул пример как определить лежит ли курсор в игровом поле (см. выше код). там разделил на две части: поле интерфейса и игровое поле. потом есть события нажатия мыши (ЛКМ и ПКМ, еще СКМ). Когда жмешь, ты чекаешь лежит ли курсор в игровом поле, если лежит стреляешь, не лежит, не стреляем.
1
МрачныйВорон, можешь написать какой под чёт не понятно.

МрачныйВорон, я пока ток с интерфейсом работать научился вопросы вот задаю.
27
я уже написал в своей статье. но мы не читаем конечно
вот
--чекаем принадлежность курсора в игровом поле
  local cursorInGame = true
  TimerStart(CreateTimer(),0.0, false,function()
     local parent = BlzGetFrameByName("ConsoleUIBackdrop", 0)  
     local gameUI = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
     --DestroyTimer(GetExpiredTimer())
     --Screen - родитель игрового поля (т.е. экрана)
     local Screen = BlzCreateFrameByType("FRAME", "FaceFrame", parent, "", 0)
                
     --левая центральная
     local ScreenFrame1 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(ScreenFrame1, 50)
     BlzFrameSetAbsPoint(ScreenFrame1, FRAMEPOINT_CENTER, 0.1,0.154+((0.416)/2))
     BlzFrameSetSize(ScreenFrame1, 0.2, 0.416)
     --центральная игровая
     local ScreenFrame2 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(ScreenFrame2, 50)
     BlzFrameSetAbsPoint(ScreenFrame2, FRAMEPOINT_CENTER, 0.4,0.128+((0.442)/2))
     BlzFrameSetSize(ScreenFrame2, 0.4, 0.442)
     --правая центральная игровая
     local ScreenFrame3 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(ScreenFrame3, 50)
     BlzFrameSetAbsPoint(ScreenFrame3, FRAMEPOINT_CENTER, 0.7,0.154+((0.416)/2))
     BlzFrameSetSize(ScreenFrame3, 0.2, 0.416)
     --левая боковая игровая
     local ScreenFrame4 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(ScreenFrame4, 50)
     BlzFrameSetAbsPoint(ScreenFrame4, FRAMEPOINT_CENTER, -0.144/2,(0.164+0.410)/2)
     BlzFrameSetSize(ScreenFrame4, 0.144, 0.164+0.410)
     --правая боковая игровая
     local ScreenFrame5 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(ScreenFrame5, 50)
     BlzFrameSetAbsPoint(ScreenFrame5, FRAMEPOINT_CENTER, 0.8+0.144/2,(0.164+0.410)/2)
     BlzFrameSetSize(ScreenFrame5, 0.144, 0.164+0.410)

     --Sreentools - всплывающая подсказка-пустышка
     local Sreentools = BlzCreateFrameByType("FRAME", "FaceFrame", parent, "", 0)
     BlzFrameSetAlpha(Sreentools, 0)
     BlzFrameSetAbsPoint(Sreentools, FRAMEPOINT_BOTTOMLEFT, 0, 0)
     BlzFrameSetSize(Sreentools, 0, 0)
     BlzFrameSetTooltip(ScreenFrame1, Sreentools)
     BlzFrameSetTooltip(ScreenFrame2, Sreentools)
     BlzFrameSetTooltip(ScreenFrame3, Sreentools)
     BlzFrameSetTooltip(ScreenFrame4, Sreentools)
     BlzFrameSetTooltip(ScreenFrame5, Sreentools)
       
     --InterfaceField - родитель интерфейса
     local InterfaceField = BlzCreateFrameByType("FRAME", "FaceFrame", gameUI, "", 0)
            
     --левая нижняя панель
     local Interface1 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", InterfaceField, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(Interface1, 50)
     BlzFrameSetAbsPoint(Interface1, FRAMEPOINT_CENTER, 0.1, 0.144/2)
     BlzFrameSetSize(Interface1, 0.2, 0.154) --0.176
     --центральная панель
     local Interface2 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", InterfaceField, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(Interface2, 50)
     BlzFrameSetAbsPoint(Interface2, FRAMEPOINT_CENTER, 0.4, 0.118/2)
     BlzFrameSetSize(Interface2, 0.4, 0.128) --0.15
     --правая нижняя панель
     local Interface3 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", InterfaceField, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(Interface3, 50)
     BlzFrameSetAbsPoint(Interface3, FRAMEPOINT_CENTER, 0.7, 0.146/2)
     BlzFrameSetSize(Interface3, 0.2, 0.154) --0.176
     --верхняя панель
     local Interface4 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", parent, "ScriptDialogButton", 0)
     BlzFrameSetAlpha(Interface4, 50)
     BlzFrameSetAbsPoint(Interface4, FRAMEPOINT_CENTER, 0.4, 0.6-(0.026/2))
     BlzFrameSetSize(Interface4, 1.088, 0.026) --0.176
           
     --Interfacetools - всплывающая подсказка поля интерфейса
     local Interfacetools = BlzCreateFrameByType("FRAME", "FaceFrame", parent, "", 0)
     BlzFrameSetAlpha(Interfacetools, 0)
     BlzFrameSetAbsPoint(Interfacetools, FRAMEPOINT_BOTTOMLEFT, 0, 0)
     BlzFrameSetSize(Interfacetools, 0, 0)
     BlzFrameSetTooltip(Interface1, Interfacetools)
     BlzFrameSetTooltip(Interface2, Interfacetools)
     BlzFrameSetTooltip(Interface3, Interfacetools)
     BlzFrameSetTooltip(Interface4, Interfacetools)
                
     TimerStart(CreateTimer(),1/32, true,function()
                    
        if BlzFrameIsVisible(Sreentools) then
            print("курсор в игровом поле")
            BlzFrameSetVisible(ScreenFrame1,false)
            BlzFrameSetVisible(ScreenFrame2,false)
            BlzFrameSetVisible(ScreenFrame3,false)
            BlzFrameSetVisible(ScreenFrame4,false)
            BlzFrameSetVisible(ScreenFrame5,false)
            BlzFrameSetVisible(InterfaceField,true)
            if GetLocalPlayer() ~= nil then
                cursorInGame = true
            end
        elseif BlzFrameIsVisible(Interfacetools) or BlzFrameIsVisible(BlzGetOriginFrame(ORIGIN_FRAME_UBERTOOLTIP,0)) then
            print("курсор в поле интерфейса")
            BlzFrameSetVisible(ScreenFrame1,true)
            BlzFrameSetVisible(ScreenFrame2,true)
            BlzFrameSetVisible(ScreenFrame3,true)
            BlzFrameSetVisible(ScreenFrame4,true)
            BlzFrameSetVisible(ScreenFrame5,true)
            BlzFrameSetVisible(InterfaceField,false)
            if GetLocalPlayer()~=nil then
                cursorInGame = false
            end                    
       end

карта немного старая, тут портрета нет. посмотри в моим вопросах, где вопрос недавно задавал про портрет
Загруженные файлы
Принятый ответ
1
МрачныйВорон, у меня карта на jass уже ну ничего страшного разберёмся.
27
Survivalist, я уже объяснял как работает. Тут на каждый фрейм создают подсказку пустышку-фрейм. Когда курсор оказывается внутри фрейма появляется эта самая подсказка. Когда мы уходим из фрейма, подсказка исчезает. Отдельно работают подсказки варивские. Тк в рефорджете нет нативок, определяющих положения фрейма на экране, то на помощь пришли эти подсказки они быстрее.
Есть события у фреймов, которые ловят вход в фрейм/выход из фрейма - они не работают так хорошо как хотелось бы. Там обновляется событие медленно. Можно мышью крутануть в конец экрана, и все, у тебя курсор не внутри фрейма, событие может не зафиксировать вход/выход. Только если очень медленно подводить курсор. вО-ВТОРЫХ, ЕСЛИ КРУТАНУТЬ СИЛЬНО. И КУРСОР ОКАЖЕТСЯ ВНУТРИ, то событие не фиксируется, что мышь внутри, только входы/выходы. В-третьих, не все типы фреймов могут иметь нужными событиями.
Подсказки более приемлемый вариант, ниче более не остается. Подсказки тоже не очень, они мгновенно не могут переключаться, если один фрейм выключить, то подсказка исчезнет не сразу. И точно также не сразу появится след подсказка. Короче, частота обновления подсказки 0.01-0.02 сек. Щас все так используют. Хотя способ немного причудливый.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.