Пробую создать фрейм по нажатию клавиши "P" сам триггер работает но не создает нужный мне "SimpleFrame" для локального игрока.
library TotorOn
globals
 private framehandle KeyboxD
 private real Key 
 private real Key2 
endglobals
private function Trig_TutorialkeyOn_Actions takes nothing returns nothing
    local player p = GetOwningPlayer(GetTriggerUnit())
     local framehandle gameUIВ = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
   
    
    call DisplayTextToForce( GetPlayersAll(), "112211" )
   
    
    
     
     
     
    set Key = 0.30
    set Key2 = 0.40
    if GetLocalPlayer() == p then
    
    call BlzLoadTOCFile("war3mapImported\\tocs2.toc")
    set KeyboxD = BlzCreateSimpleFrame("KeyboxS", gameUIB, 0)
    
    call BlzFrameSetAbsPoint(KeyboxD, FRAMEPOINT_CENTER, Key2, Key)
    endif


    set p = null
    set gameUIВ = null



endfunction

//===========================================================================
function InitTrig_TutorialkeyOn takes nothing returns nothing
    set gg_trg_TutorialkeyOn = CreateTrigger(  )
    
    call BlzTriggerRegisterPlayerKeyEvent(gg_trg_TutorialkeyOn,Player(0),OSKEY_P,0,true)
    
   
    call TriggerAddAction( gg_trg_TutorialkeyOn, function Trig_TutorialkeyOn_Actions )
endfunction

endlibrary
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
27
8 месяцев назад
0
Вам вряд ли кто-то подскажет в чем ошибка, это нужно угадать. надо дебажить тогда.
  1. Создается ли вообще симплфрейм "KeyboxS" без всего этого в обычном режиме
  2. проверьте хэндл, дебаг выведите в конце фрейма, рвботает ли он
  3. проверьте, подзагружает ли ток-файл
function LoadToc(s)
    if BlzLoadTOCFile(s) then
        print("Loaded: "..s)
    else
        print("Failed to Load: "..s)
    end  
end
  1. проверьте фдф-файлы, мб у вас что-то в шаблоне не так
0
8
8 месяцев назад
0
МрачныйВорон, Когда добавляю "if GetLocalPlayer() == p then" вставлю туда фреймы они перестают показываться.
0
27
8 месяцев назад
0
0
8
8 месяцев назад
0
Вот так все работает.
library TotorOn
globals
 private framehandle KeyboxD
 private real Key 
 private real Key2 
endglobals
private function Trig_TutorialkeyOn_Actions takes nothing returns nothing
    local player p = GetOwningPlayer(GetTriggerUnit())
    
   local framehandle gameUIB = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
    
    call DisplayTextToForce( GetPlayersAll(), "112211" )
   
    
    
     
     
     
    set Key = 0.30
    set Key2 = 0.40
    
    
    call BlzLoadTOCFile("war3mapImported\\tocs2.toc")
    set KeyboxD = BlzCreateSimpleFrame("KeyboxS", gameUIB, 0)
    
    call BlzFrameSetAbsPoint(KeyboxD, FRAMEPOINT_CENTER, Key2, Key)
    


    set p = null
    set gameUIB = null
    



endfunction

//===========================================================================
function InitTrig_TutorialkeyOn takes nothing returns nothing
    set gg_trg_TutorialkeyOn = CreateTrigger(  )
    
    call BlzTriggerRegisterPlayerKeyEvent(gg_trg_TutorialkeyOn,Player(0),OSKEY_P,0,true)
    
    call BlzTriggerRegisterPlayerKeyEvent(gg_trg_TutorialkeyOn,Player(1),OSKEY_P,0,true)
    
    call BlzTriggerRegisterPlayerKeyEvent(gg_trg_TutorialkeyOn,Player(2),OSKEY_P,0,true)
    
    call BlzTriggerRegisterPlayerKeyEvent(gg_trg_TutorialkeyOn,Player(3),OSKEY_P,0,true)
    call TriggerAddAction( gg_trg_TutorialkeyOn, function Trig_TutorialkeyOn_Actions )
endfunction

endlibrary
0
27
8 месяцев назад
Отредактирован MpW
0
МрачныйВорон, Когда добавляю "if GetLocalPlayer() == p then" вставлю туда фреймы они перестают показываться.
Ну тогда не знаю. Пробуй всякое
Уверен, что нужно это
call BlzLoadTOCFile("war3mapImported\\tocs2.toc")
внутрь блока if GetLocalPlayer() == p then пихать? Попробуй вывести его. Оставь остальное

jasonrus96, эту функцию создают и вызывают один раз при инициализации или загрузке карты. Мб код оптимизировать?
0
8
8 месяцев назад
0
МрачныйВорон, Создание TOC я туда не вставлял как я указал выше работает у всех игроков.
 set Key = 0.30
    set Key2 = 0.40
    
    
    call BlzLoadTOCFile("war3mapImported\\tocs2.toc")
    
    if GetLocalPlayer() == p then
    
    set KeyboxD = BlzCreateSimpleFrame("KeyboxS", gameUIB, 0)
    call BlzFrameSetAbsPoint(KeyboxD, FRAMEPOINT_CENTER, Key2, Key)
    
    endif
Делаю вот так и все....
0
27
8 месяцев назад
Отредактирован MpW
0
jasonrus96, можно конечно вставить туда измененную строку
local string s =""
if GetLocalPlayer() == p then
  s= "war3mapImported\\tocs2.toc"
endif
call BlzLoadTOCFile(s)
Но лучше не рисковать, мб и такой вариант тоже не пройдет. Или десинхи будут. ладно, тема исчерпана?
0
8
8 месяцев назад
0
Думаю да

Вообще странно локально у каждого игрока отдельно можно стандартные фреймы двигать а вот свои не понятно как отображать.
0
27
8 месяцев назад
Отредактирован MpW
0
Вообще странно локально у каждого игрока отдельно можно стандартные фреймы двигать а вот свои не понятно как отображать.
Не бойся изменять)) с этого ниче не будет.
У каждого игрока на своем компе свой набор фреймов, которые только они видят. И могут что то там делать. Они могут изменять фреймы как угодно: двигать, прятать. Главное, что это сильно не влияет на игру, иначе десинкает. У каждого на компе будет что то свое в зависимости от игры.
фреймы срабатывают локально, но работа триггеров для фреймов, вернее поток общий для всех срабатывает. Пример, игрок-1 нажал на кнопку, и у всех сработал триггер фрейма. Опасны чтения данных
Изначально, дефолтные фреймы у всех инициируются одинаково, поэтому тут без проблем. Дальше, данные могут изменяться, даже, какой-то игрок в результате каких то действии по коду загрузит шаблон, а другие нет. Или как то изменится. Уже фреймы будут отличаться, например, у одного есть, у другого нет. Опасны чтения данных фреймов, это через нативки геттеры (но не все и не всегда, но лучше не рисковать). Когда ты читаешь, то у всех воспроизводит разные данные
0
8
8 месяцев назад
0
МрачныйВорон, Не получается даже в статьях толком нет инфы
0
27
8 месяцев назад
0
jasonrus96, что не получается?
0
8
8 месяцев назад
0
0
32
8 месяцев назад
0
Фреймы нужно создавать полностью глобально! (чтобы не было десинхов и была автоматическая синхронизация всего и вся), локально вы лишь меняете видимость в самом конце через FrameSetVisible!
Чтобы оставить комментарий, пожалуйста, войдите на сайт.