ofeerist, Я бы и рад попробовать мемхак, но у меня его не получается подружить с 1.27b.
Может есть другие варианты, с триггерами или по jass коду как-то, без работы с памятью?
Нет.
Анрайз вроде как заявляет о поддержки 127б, но не у тебя одного оно не работает
Блин, этот функционал был, но я его вырезал из-за ненадобности.
Делается ещё один массив, уже булевых, ну и в ините заполняется false.
И дальше какая нибудь функция с периодическим срабатыванием проверяет циклом все кнопки.
IsKeyPressed(Buttons[i])
Если тру, то и переменная из массива тру, фолс > фолс.
Просто стоит учитывать что вызов внутринних функций игры посредством мемхака очень ресурсоемкий, и юзать все эти callthis, stdcall нужно с умом.
Нативки или код в движке гораздо шустрее, потому все и пилят Длл с этими магазинами, талантами и тому подобным, ибо когда в карте и без того много чего, 6 кадров обеспечено, не стоит юзать функции этого типа бездумно.
Давно заметил, что лагает, если слишком много натыкать, а у меня здесь как раз очень много натыкано, если сделать нормальный селектор или как-нибудь оптимизировать существующий, то лаги все пропадут.
Поэтому и говорю, что кому надо, тот сделает вообще без проблем.
Делается бэкдроп с какой-нибудь рамкой и перемещается он, и вот вызовов 2, а не 254.
получается это там тысячи изображении (кадров), чтобы получилась анимация?
Да.
В моем случае, 109.
И как обычно, скачивается видос, а не карта...
Init
//TESH.scrollpos=0
//TESH.alwaysfold=0
globals
integer GifBackdrop
string array GifFrame
integer Current = 0
integer LastFrame
endglobals
function InitGifFrames takes nothing returns nothing
local integer i = 0
set LastFrame = 109
loop
exitwhen i == LastFrame + 1
set GifFrame[i] = "war3mapImported\\SZN1-"+I2S(i)+".blp"
set i = i + 1
endloop
endfunction
function Trig_Init_Actions takes nothing returns nothing
local integer i = 0
call LoadTOCFile("uitoc.toc")
call InitGifFrames()
set GifBackdrop = CreateFrame("SliderBackdrop", pGameUI, 0)
call SetFrameSize(GifBackdrop, .28, .2)
call SetFrameAbsolutePoint(GifBackdrop, 4, .4, .3)
call SetFrameTexture(GifBackdrop, GifFrame[Current], false)
endfunction
//===========================================================================
function InitTrig_Init takes nothing returns nothing
set gg_trg_Init = CreateTrigger( )
call TriggerRegisterTimerEventSingle( gg_trg_Init, 0.05 )
call TriggerAddAction( gg_trg_Init, function Trig_Init_Actions )
endfunction
GifUpdate
function Trig_GifUpdate_Actions takes nothing returns nothing
set Current = Current + 1
if Current > LastFrame then
set Current = 0
endif
call SetFrameTexture(GifBackdrop, GifFrame[Current], false)
endfunction
//===========================================================================
function InitTrig_GifUpdate takes nothing returns nothing
set gg_trg_GifUpdate = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_GifUpdate, 0.03 )
call TriggerAddAction( gg_trg_GifUpdate, function Trig_GifUpdate_Actions )
endfunction
text.fdf и uitoc.toc можно взять с кастомного слайдера
Я даже не открывая изображения, могу тебе дать идеальный совет, чтобы закрыть такие вопросы.
У тебя есть такая кнопочка сверху, изображена красная галочка в желтом квадрате, чекбоксе, у нее даже есть хоткей.
Вот это кнопочка сможет решить половину твоих вопросов.
Берешь и используешь, написаны же переменные, DisplayTimedTextToPlayer(Player(0),0,0,1,"test") МрачныйВорон:
можно фреймы с текстом вывести. создаем главный фрейм, на него вешаем 4 фрейма TEXT. Или Можно обойтись и 4 фреймами типа TEXT. Изучите фреймы, я уже перевел норм. Потом мб статью норм замутим, если желание будет.
Это не решение для гуи 126, так что статья бесполезна в данном вопросе.
Вроде никак, если подряд написать, но с разными координатами, то оба выведят по значениям последнего.
Есть ещё фреймы, но такое решение тебе точно не подходит.
Тогда все сходится, получения что скорость зависит от обоих факторов, но в любом случае, это лучше и быстрее гейм Кеша. Код добавь что-ли, хочется сам метод синхронизации увидеть
Init
globals
integer SpawnUnitBackdrop
integer array SpawnUnit[7]
string array ButtonName[7]
integer array UnitButtonId[7]
unit array SyncUnit[1][7]
endglobals
function Trig_Init_Actions takes nothing returns nothing
local integer i = 0
call LoadTOCFile("uitoc.toc")
set ButtonName[0] = "Футмен"
set ButtonName[1] = "Рифл"
set ButtonName[2] = "Вертолет"
set ButtonName[3] = "Грифон"
set ButtonName[4] = "Паладин"
set ButtonName[5] = "Гном"
set ButtonName[6] = "Праудмур"
set ButtonName[7] = "Гаритос"
set UnitButtonId[0] = 'hfoo'
set UnitButtonId[1] = 'hrif'
set UnitButtonId[2] = 'hgyr'
set UnitButtonId[3] = 'hgry'
set UnitButtonId[4] = 'Hpal'
set UnitButtonId[5] = 'Hmkg'
set UnitButtonId[6] = 'Hapm'
set UnitButtonId[7] = 'Hlgr'
// Бэкдропчик
set SpawnUnitBackdrop = CreateFrame("ChatHistoryBackdrop", pGameUI, 1)
call SetFrameAbsolutePoint(SpawnUnitBackdrop, 4, .1, .37)
call SetFrameSize(SpawnUnitBackdrop, .2, .42)
// Кнопочки
loop
exitwhen i == 8
set SpawnUnit[i] = CreateFrame("ButtonChat", SpawnUnitBackdrop, 2 + i)
// call DisplayTimedTextToPlayer(GetLocalPlayer(), 1, 0, 0, I2S(SpawnUnit[i]))
call SetFrameAbsolutePoint(SpawnUnit[i], 4, .1, .2 + I2R(i) / 20)
call SetFrameSize(SpawnUnit[i], 0.15, 0.05)
call SetFrameText(SpawnUnit[i], ButtonName[i])
set i = i + 1
endloop
// Юниты для синха
set i = 0
loop
exitwhen i == 8
set SyncUnit[0][i] = CreateUnit(Player(0), 'hfoo', -3000, 2900, 0)
set SyncUnit[1][i] = CreateUnit(Player(1), 'hfoo', -3000, 2900, 0)
set i = i + 1
endloop
endfunction
//===========================================================================
function InitTrig_Init takes nothing returns nothing
set gg_trg_Init = CreateTrigger( )
call TriggerRegisterTimerEventSingle( gg_trg_Init, .01 )
call TriggerAddAction( gg_trg_Init, function Trig_Init_Actions )
endfunction
Sync
function Trig_Sync_Actions takes nothing returns nothing
local integer i = 0
local unit u
loop
exitwhen i == 8
if GetTriggerUnit() == SyncUnit[GetPlayerId(GetTriggerPlayer())][i] then
set u = CreateUnit(GetTriggerPlayer(), UnitButtonId[i], 0, 0, 0)
if GetLocalPlayer() == GetTriggerPlayer() then
call ShowFrame(SpawnUnitBackdrop)
endif
endif
set i = i + 1
endloop
set u = null
endfunction
//===========================================================================
function InitTrig_Sync takes nothing returns nothing
set gg_trg_Sync = CreateTrigger( )
call TriggerRegisterPlayerSelectionEventBJ( gg_trg_Sync, Player(0), true )
call TriggerRegisterPlayerSelectionEventBJ( gg_trg_Sync, Player(1), true )
call TriggerAddAction( gg_trg_Sync, function Trig_Sync_Actions )
endfunction
MouseEvent
globals
boolean array KeySpan
endglobals
function Trig_MouseEvent_Actions takes nothing returns nothing
local integer i = 0
local integer j = 0
loop
exitwhen(i==12)
if(Player(i) == GetLocalPlayer()) then
//call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 0.1, "X = "+R2S(GetCursorX())+", Y = "+R2S(GetCursorY()))
loop
exitwhen j == 8
// Button Press
if FindCLayerUnderCursor() == SpawnUnit[j] and IsKeyPressed(0x01) and KeySpan[i] then
set KeySpan[i] = false
call HideFrame(SpawnUnitBackdrop)
call SelectUnit(SyncUnit[GetPlayerId(GetLocalPlayer())][j], true)
call ClearSelection()
endif
set j = j + 1
endloop
if not (IsKeyPressed(0x01)) then
set KeySpan[i] = true
endif
if IsKeyPressed(0x01) then
set KeySpan[i] = false
endif
endif
set i = i + 1
endloop
endfunction
//===========================================================================
function InitTrig_MouseEvent takes nothing returns nothing
set gg_trg_MouseEvent = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_MouseEvent, 0.01 )
call TriggerAddAction( gg_trg_MouseEvent, function Trig_MouseEvent_Actions )
endfunction
Код ни разу не универсальный и подходит только конкретно к этой мапе.
» WarCraft 3 / Дизейбл кнопок, фреймов?
Ред. ofeerist
» WarCraft 3 / Дизейбл кнопок, фреймов?
Я не хочу тебя расстраивать, но для этого нужен мемхак
Анрайз вроде как заявляет о поддержки 127б, но не у тебя одного оно не работает
Ред. PT153
» WarCraft 3 / Дизейбл кнопок, фреймов?
» WarCraft 3 / Дизейбл кнопок, фреймов?
» WarCraft 3 / KeyCode - структура, для работы с клавишами
Делается ещё один массив, уже булевых, ну и в ините заполняется false.
И дальше какая нибудь функция с периодическим срабатыванием проверяет циклом все кнопки.
IsKeyPressed(Buttons[i])
Если тру, то и переменная из массива тру, фолс > фолс.
Ред. ofeerist
» WarCraft 3 / Магазин на фреймах
Поэтому и говорю, что кому надо, тот сделает вообще без проблем.
Делается бэкдроп с какой-нибудь рамкой и перемещается он, и вот вызовов 2, а не 254.
» WarCraft 3 / Магазин на фреймах
Ред. ofeerist
» WarCraft 3 / Gif на фреймах
И такие анимированные кнопки можно и на 126 сделать.
Особого труда тоже не составит.
Ред. ofeerist
» WarCraft 3 / Gif на фреймах
В моем случае, 109.
» WarCraft 3 / Успеет ли варик?
Вот это кнопочка сможет решить половину твоих вопросов.
Ред. ofeerist
» WarCraft 3 / Отображение текста
» WarCraft 3 / Отображение текста
» WarCraft 3 / Отображение текста
МрачныйВорон: Это не решение для гуи 126, так что статья бесполезна в данном вопросе.
» WarCraft 3 / Отображение текста
Есть ещё фреймы, но такое решение тебе точно не подходит.
» WarCraft 3 / Плеер плейлистов на фреймах
Есть пауза.
Остальные два пункта очень просто добавить.
15 минут и будет расширенный функционал.
» WarCraft 3 / Плеер плейлистов на фреймах
» IrInA Host Bot / Ник
Ред. ofeerist
» WarCraft 3 / Извлечь защиту юнита с бонусами
Если не можете поставить мемхак, то только хештейблы, переменные и другие замечательные костыли...
» WarCraft 3 / Не работает система союзов.
Нужно использовать подстроку для проверки написании -merger.
Условие выше просто не сработает.
» WarCraft 3 / Спавн юнита с помощью фрейма
» WarCraft 3 / Спавн юнита с помощью фрейма
Может и от пинга, но тогда почему есть задержка в соло?
А если задержка выделения, то почему всегда разная скорость?
» WarCraft 3 / Спавн юнита с помощью фрейма
На гифке видно же, что с челом играю
» WarCraft 3 / Редактор звука
» WarCraft 3 / Редактор звука