Проявление
Баг проявляется в любом патче и на 126 и на рефордже
Выглядит он так:
Если во время нажатия любой кнопки с клавиатуры, нажать левую кнопку мыши (в любом месте экрана), а потом отпустить нажатую клавишу, то события, что кнопка отжата не произойдёт, потребуется нажать кнопку ещё раз (эффект залипания)
Если совсем проще, то персонаж идёт туда куда и шёл до клика, несмотря на то что вы уже отпустили кнопку
Выглядит он так:
Если во время нажатия любой кнопки с клавиатуры, нажать левую кнопку мыши (в любом месте экрана), а потом отпустить нажатую клавишу, то события, что кнопка отжата не произойдёт, потребуется нажать кнопку ещё раз (эффект залипания)
Если совсем проще, то персонаж идёт туда куда и шёл до клика, несмотря на то что вы уже отпустили кнопку
Это касается как дефолтных гуи событий на стрелочках в 126 патче
Так и нового события
BlzTriggerRegisterPlayerKeyEvent(TriggerName,Player(i),OSKEY_D,0,true)
Так и нового события
BlzTriggerRegisterPlayerKeyEvent(TriggerName,Player(i),OSKEY_D,0,true)
---@param whichTrigger trigger
---@param whichPlayer player
---@param key oskeytype
---@param metaKey integer
---@param keyDown boolean
---@return event
function BlzTriggerRegisterPlayerKeyEvent(whichTrigger, whichPlayer, key, metaKey, keyDown)
Этот баг в своё время сделал не играбельным огромную кучу карт на стрелочном управлении, и возможно бы сделал не играбельными и новые карты на рефорджевом патче, но есть решения:
И эти решения уже найдены давно.. многие картоделы сами до этого дошли, но я лишь тут для того, чтобы собрать всё до кучи, и подытожить материал:
И эти решения уже найдены давно.. многие картоделы сами до этого дошли, но я лишь тут для того, чтобы собрать всё до кучи, и подытожить материал:
Способ №1 принудительный поиск цели
Если курсор находиться в режиме поиска цели для приказа или способности, то клик левой кнопкой не вызывает этого бага.
И сделать это очень просто, достаточно отдать приказ ForceUIKeyBJ
И сделать это очень просто, достаточно отдать приказ ForceUIKeyBJ
ForceUIKeyBJ(Player(0),"M")
Где М - Горячая клавиша приказа без на точку или юнита, можно использовать как стандартные приказы так и пустышку, но пустышка должна быть неограниченной дальности
Минусы:
Минусы:
- Полный отказ от системы движения
- Полная потеря панели приказов и инвентаря героя
- CustomKey, ломают данную систему
- Нет больше залипания левой кнопки
- Работает на любом патче
Способ №2 Отмена после клика
Если после приказа левой кнопки
TriggerRegisterPlayerEvent(TrigPressRMB, Player(i), EVENT_PLAYER_MOUSE_DOWN)
if BlzGetTriggerPlayerMouseButton() == MOUSE_BUTTON_TYPE_LEFT then
--огрызок кода
Выполнить ForceUICancelBJ(Player(0)), то бага залипания левой кнопки мыши не произойдёт
Минусы:
Минусы:
- Не возможно выйти из игры и манипулировать меню
- Полная потери панель приказов и инвентаря, но**
- Событие отслеживания левого клика, есть только на новых патчах
- Нет визуальной потери панели приказов, только лишь клики
- Меньше нагружает систему.. так как срабатывает только после факта клика
Способ №3 Переактивация интерфейса
После события нажатия мыши, вызываем EnableUserControl(true) под локальным игроком
trigger = CreateTrigger()
TriggerRegisterPlayerEvent(trigger, Player(0), EVENT_PLAYER_MOUSE_DOWN)
TriggerAddAction(trigger, function()
print("Mouse")
if(GetLocalPlayer() == GetTriggerPlayer()) then
EnableUserControl(true)
end
end)
Плюсы:
- самый не кастыльный способ
- инвентарь на месте
- Если быстро нажать левая+другая кнопка, то всё равно произойдёт залипание, плохо для динамических игр
- Не тестировал
- Требуется проверка перетягивания предметов с инвентаря
Событие клика по Frame
Можно всё вылечить любым из способов перечисленных выше, но если в карте существуют клики про фреймам, то происходит действие ещё более ужасное, происходит полная потеря фокуса и контроля над игрой, необходимо вернуть фокус, кликнув в пустом месте экрана.. Но и это лечится =), код внизу надо вызывать сразу после совершения клика
BlzFrameSetEnable(FrameName, false)
BlzFrameSetEnable(FrameName, true)
Всем спасибо кто дочитал, не тратье своё время на решение багов, пользуйтесь опытом других людей.
Если есть ещё другие решения, обязательно напишите об этом.
Если есть ещё другие решения, обязательно напишите об этом.
а я планирую сделать маленкую библиотеку типо
war3['game.input'].on()
})
BlzFrameSetEnable(FrameName, false)
BlzFrameSetEnable(FrameName,true)
тоже самое, если быстро кликать то всё равно залипает, для динамических карт не годится, будь то стрелялка Брилока или пеонрпгп
и у меня да можно в карте вначале игры мышку зажать и отпустить в конце
Ред. Makeba