Обладая framehandle можно ли узнать, что лежит внутри?
Ну вот я нашел нужный frame, нужный framehandle. Он прячет, создает, и удаляет и прочее. Я так понял framehandle это что вроде ячейки информации для интерфейса (будь изображение, текст и др).
С помощью GetHandleId я смотрю, что хэндл этих фреймов совсем не изменяется от выбора юнитов. Handle = I2S(GetHandleId(GAME_UI))
А вот мне необходимо узнать, то лежит внутри. А еще интересно узнать юнита интерфейса. Смотрел весь функционал, его мало. Получается ли что рефорджет совсем ничего не принес. Часто строка выводит BlzFrameGetText(GAME_UI) = null, а реал число R2S(BlzFrameGetValue(GAME_UI)) = 0.0. Или совсем вылетает, когда достаешь что-то не существующее (часто вина в real, когда достает не существующее реал число). Просто изменять и создавать - этого мало, мне бы не хотелось пересоздавать интерфейс. Достаточно было получить информацию.
На хайве я не нашел примеров.
Но похоже свою базу что-ли писать? и привязывать? единственная проблема, мне нужно получить юнита интерфейса. К примеру, если у вас гер, у вас кнопки героя. А если переключиться, у вас совсем другие кнопки будут. без этого у вас вообще не работает.

Лучший ответ:
ладно. юнит интерфейса нафиг нужен. решил другим способом. вспомнил - что если буду переключаться, то это можно отследить.
я уже щас свою статью по этим фрэймам стал писать со всеми скринами. Но понял, что это не нужно. Лень. Хотя как сказать... Мне вот помогло в некоторых местах знание того, где лежат и какие фрэймы надо отключать, и заменять новыми. Поизучать побольше стоит.
Была бы норм база. Древовидную ветвь и названия, и что все эти fdf означают. Было бы хорошо. Щас минус, то что рефорджет не очень, мемхак выигрывает.


Views: 75

Nelloy #1 - 1 month ago (изм. ) 2
Голосов: +2 / -0
Нет, ничего путного из них не получится вытащить. Мне хватает такого для определения списка выбранных юнитов. TypeScript, _groups - хеш-таблица, хранящая выбранных юнитов конкретного игрока.
    function _runActios(pl: jplayer, event: 'SELECT' | 'DESELECT'){
        let u = GetTriggerUnit()
        let gr = _groups.get(pl)
        if (!gr || !u){return}

        let found = gr.indexOf(u)

        if (_lock){
            if (found < 0 && pl == GetLocalPlayer()){
                SelectUnit(u, event == 'DESELECT')
            }
        } else {
            if (event == 'SELECT' && found < 0){
                gr.push(u)
            } else if (event == 'DESELECT' && found >= 0){
                gr.splice(found, 1)
            }
            _actions.run(pl, Object.assign([], gr))
        }
    }

    function _checkDied(this: void){
        let u = GetTriggerUnit()

        for (let [pl, gr] of _groups){
            if (gr.indexOf(u) >= 0){_runActios(pl, 'DESELECT')}
        }
    }
		...
        _trigger_select = CreateTrigger()
        _trigger_deselect = CreateTrigger()
        _trigger_died = CreateTrigger()
        TriggerAddAction(_trigger_select, (() => {_runActios(GetTriggerPlayer(), 'SELECT')}))
        TriggerAddAction(_trigger_deselect, (() => {_runActios(GetTriggerPlayer(), 'DESELECT')}))
        TriggerAddAction(_trigger_died, _checkDied)

        for (let i = 0; i < bj_MAX_PLAYER_SLOTS; i++){
            let pl = Player(i)
            if (GetPlayerController(pl) == MAP_CONTROL_USER &&
                GetPlayerSlotState(pl) == PLAYER_SLOT_STATE_PLAYING){

                _groups.set(pl, [])
                TriggerRegisterPlayerUnitEvent(_trigger_select, pl, EVENT_PLAYER_UNIT_SELECTED)
                TriggerRegisterPlayerUnitEvent(_trigger_deselect, pl, EVENT_PLAYER_UNIT_DESELECTED)
                TriggerRegisterPlayerUnitEvent(_trigger_died, pl, EVENT_PLAYER_UNIT_DEATH)
            } 
        }
		...
Bergi_Bear #2 - 1 month ago 2
Голосов: +2 / -0
Можно обращаться к потомкам, но у стандартных фреймов вы никуда не попадете, я примерно месяц убил на эту требуху, для самодельных фреймов все легко.
МрачныйВорон #3 - 1 month ago (изм. ) 0
Голосов: +0 / -0
Nelloy, понятно. но я этой же аналогичной системой и пользуюсь. но нужно точнее. можно код на jass?
Bergi_Bear, ладно. попробую потыкаюсь еще, и потом к окончательному выводу приду. щас пока что для меня это ново
МрачныйВорон #4 - 1 month ago 1
Голосов: +1 / -0

ладно. юнит интерфейса нафиг нужен. решил другим способом. вспомнил - что если буду переключаться, то это можно отследить.
я уже щас свою статью по этим фрэймам стал писать со всеми скринами. Но понял, что это не нужно. Лень. Хотя как сказать... Мне вот помогло в некоторых местах знание того, где лежат и какие фрэймы надо отключать, и заменять новыми. Поизучать побольше стоит.
Была бы норм база. Древовидную ветвь и названия, и что все эти fdf означают. Было бы хорошо. Щас минус, то что рефорджет не очень, мемхак выигрывает.