Есть прицел искусственный. И когда наводим на точку, в некоторых места она подкрашивается красным/зеленым. Там где нельзя красным, а там где можно зеленым. Короче у меня обычный невидимый прицел канала channel. Ему все равно, что там. Когда жму, прицел закрывается. Нужно, чтобы в точках, где нельзя ниче ставить, не закрывался (ипа нельзя).
Можно ли каким то способом сделать так, чтобы он не закрывался?
И похоже прицел придется вызывать только Force hot key? Горячие клавиши это просто проблема, но иначе никак. Они не всегда активируются, ибо кнопка должна быть видима. Задержки надо делать.
нашел только интересную функцию, где можно прятать курсор. Мб пошаманить с интерфейсом ссылка. тогда другие наработки посредством channel теряют смысла
---@param enable boolean
function BlzEnableCursor(enable) end    -- (native)

Как сделать так, чтобы прицел не закрывался?
  1. отслеживаем клик по зданию/абилке (не каст!!) <= начало вызова прицела. Эти новые рефорджеские события
  2. создаем невидимый фрейм на весь экран. Он будет располагаться ниже, чем весь интерфейс. Но закроет игровую область. Это значит, что вы можете делать все (двигать прицел, перемещать камеру и пр). Но вы не сможете мышью кликнуть по цели, тк клик идет по фрейму. У вас останется открытый таргет. Одновременно с этим вы не сможете выделить юнитов, объекты на карте и прочее. Только кнопки интерфейса работают.
frame = BlzCreateFrameByType("BUTTON", "", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
BlzFrameSetSize(frame, 1.088, 0.6)--размер, распространяем на весь экран 
BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, 0.4, 0.3) --создаем в центре экрана
BlzFrameSetVisible(frame, false) --если нужно чтобы работал показываем, не нужно прячем. А мб и каждый раз пересоздавать. просто у меня при инициализации один раз создан на всю игру
  1. Движение курсора - отслеживаем событием движения. И чекаем координаты.
  2. отслеживаем клик. Есть события мыши - правая и левая. Правая отмена, левая нажатие. Еще можно отслеживать клик фрейма. Тут как бы мы можем чекать условие - подходит, не подходит.
  3. ну и отмены отслеживаем, чтобы убрать этот фрейм (если его не убрали).
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
Где то я видел такую карту, не помню уже как там сделано, там какой то черт с горы стрелял по врагам бегающим по карте, типа стрелялки в варкравте.
27
quq_CCCP, мб фреймы там. Уже изучаю их. Если че мб триггерно: скрываем кнопки комманд (атака, патруль, стоп ид) с кнопками абил. И выдать пустую панель с кнопкой отмена. И курсор поменять. Все. Сам контришь процесс. Просто у меня канал, не знаю как запретить закрывать прицел. Придется кнопку-пустышку делать.
13
МрачныйВорон, только курсор просто так не поменять. Придется использовать image, который будет отставать, потому что криво работает отслеживание мыши.
27
Nelloy, ниче страшного, image, так image. я решил эту проблему здесь даже карта есть с примером, там координаты криво выдает, и я понял причину.
27
самые странные нативки, которые частично скрывают кнопки. скрывают, но не навсегда?! Если сделать переключение или кликание по кнопкам, то собьет.
call BlzFrameSetVisible(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 0), not b)
пробовал скрыть, делая прозрачным фрейм BlzFrameSetAlpha. Они становятся невидимыми кнопки. Но там горячие клавиши работают, и кликнуть можно мышкой. Пробовал заблокировать BlzFrameSetEnable. Ниче не получилось. Наверн не по назначению или че то не так.
только вот такая комбинация работает. чисто случайно открыл через parent
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,0)), FALSE)

ребята подскажите путь текстурки Cancel
ReplaceableTextures\CommandButtons\BTNCancel.blp
или framehandle к кнопке cancel?
13
Дашь человеку рыбу, он будет сыт один день,. Научишь рыбачить - будет сыт всегда. CascView в помощь.

Открываешь архив игры и ищешь то что нужно
27
Как сделать так, чтобы прицел не закрывался?
  1. отслеживаем клик по зданию/абилке (не каст!!) <= начало вызова прицела. Эти новые рефорджеские события
  2. создаем невидимый фрейм на весь экран. Он будет располагаться ниже, чем весь интерфейс. Но закроет игровую область. Это значит, что вы можете делать все (двигать прицел, перемещать камеру и пр). Но вы не сможете мышью кликнуть по цели, тк клик идет по фрейму. У вас останется открытый таргет. Одновременно с этим вы не сможете выделить юнитов, объекты на карте и прочее. Только кнопки интерфейса работают.
frame = BlzCreateFrameByType("BUTTON", "", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
BlzFrameSetSize(frame, 1.088, 0.6)--размер, распространяем на весь экран 
BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, 0.4, 0.3) --создаем в центре экрана
BlzFrameSetVisible(frame, false) --если нужно чтобы работал показываем, не нужно прячем. А мб и каждый раз пересоздавать. просто у меня при инициализации один раз создан на всю игру
  1. Движение курсора - отслеживаем событием движения. И чекаем координаты.
  2. отслеживаем клик. Есть события мыши - правая и левая. Правая отмена, левая нажатие. Еще можно отслеживать клик фрейма. Тут как бы мы можем чекать условие - подходит, не подходит.
  3. ну и отмены отслеживаем, чтобы убрать этот фрейм (если его не убрали).
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.