JN Loader из официальных ссылок не полный (в том числе в шапке этой темы).
при первом запуске он докачивает dll для связи с m16 (пока не докачает - не запустится нормально)
но докачивает он очень коряво и может так этого и не сделать за 30 перезапусков и 2 часа
поэтому вот готовые файлы уже докачанные, которые сразу работают с 1.28.5 и ничего не докачивают (на сегодняшний день)
из новшеств - во время запуска появляется такое окошко, которое надо закрыть на крестик и после этого нормально запустится JN-варкрафт
если вспомнить, что исходники JN Loader открыты и лежат на гитхабе - было бы хорошо, если нашелся бы человек, который смог бы пересобрать JN Loader, который бы не стучался в Корею в m16, а нормально быстро запускался бы
тем более на Ирине уже пару лет функционирует патч 1.28.5 и там отлично играется через JN Loader в JN карты с друзьями по сети
на хайве найден способ запуска версий с 1.28 по ~1.31 в мультиокнах
используется связка ForceBindIP + Sandboxie
работает не идеально (не работает на 1.26 и не работает на JNLoader), но что-то запустить да можно
function ColorPlayerClassic takes string s, integer i returns string
if 1==0 then
elseif i==1 then
return Color00PlayerRedClassic(s)
elseif i==2 then
return Color01PlayerBlueClassic(s)
elseif i==3 then
return Color02PlayerCyanClassic(s)
elseif i==4 then
return Color03PlayerPurpleClassic(s)
elseif i==5 then
return Color04PlayerYellowClassic(s)
elseif i==6 then
return Color05PlayerOrangeClassic(s)
elseif i==7 then
return Color06PlayerGreenClassic(s)
elseif i==8 then
return Color07PlayerPinkClassic(s)
elseif i==9 then
return Color08PlayerLightGrayClassic(s)
elseif i==10 then
return Color09PlayerLightBlueClassic(s)
elseif i==11 then
return Color10PlayerAquaClassic(s)
elseif i==12 then
return Color11PlayerBrownClassic(s)
endif
return null
endfunction
Reforged
Код
function ColorPlayerReforged takes string s, integer i returns string
if 1==0 then
elseif i==1 then
return Color00PlayerRedReforged(s)
elseif i==2 then
return Color01PlayerBlueReforged(s)
elseif i==3 then
return Color02PlayerCyanReforged(s)
elseif i==4 then
return Color03PlayerPurpleReforged(s)
elseif i==5 then
return Color04PlayerYellowReforged(s)
elseif i==6 then
return Color05PlayerOrangeReforged(s)
elseif i==7 then
return Color06PlayerGreenReforged(s)
elseif i==8 then
return Color07PlayerPinkReforged(s)
elseif i==9 then
return Color08PlayerLightGrayReforged(s)
elseif i==10 then
return Color09PlayerLightBlueReforged(s)
elseif i==11 then
return Color10PlayerAquaReforged(s)
elseif i==12 then
return Color11PlayerBrownReforged(s)
elseif i==13 then
return Color12PlayerMaroonReforged(s)
elseif i==14 then
return Color13PlayerNavyReforged(s)
elseif i==15 then
return Color14PlayerTurquoiseReforged(s)
elseif i==16 then
return Color15PlayerVioletReforged(s)
elseif i==17 then
return Color16PlayerWheatReforged(s)
elseif i==18 then
return Color17PlayerPeachReforged(s)
elseif i==19 then
return Color18PlayerMintReforged(s)
elseif i==20 then
return Color19PlayerLavenderReforged(s)
elseif i==21 then
return Color20PlayerCoalReforged(s)
elseif i==22 then
return Color21PlayerSnowReforged(s)
elseif i==23 then
return Color22PlayerEmeraldReforged(s)
elseif i==24 then
return Color23PlayerPeanutReforged(s)
endif
return null
endfunction
function ColorPlayer takes string s, integer i returns string
if 1==0 then
elseif i==1 then
return ColorPlayerRed(s)
elseif i==2 then
return ColorPlayerBlue(s)
elseif i==3 then
return ColorPlayerCyan(s)
elseif i==4 then
return ColorPlayerPurple(s)
elseif i==5 then
return ColorPlayerYellow(s)
elseif i==6 then
return ColorPlayerOrange(s)
elseif i==7 then
return ColorPlayerGreen(s)
elseif i==8 then
return ColorPlayerPink(s)
elseif i==9 then
return ColorPlayerLightGray(s)
elseif i==10 then
return ColorPlayerLightBlue(s)
elseif i==11 then
return ColorPlayerAqua(s)
elseif i==12 then
return ColorPlayerBrown(s)
endif
return null
endfunction
elseif SubString(s,0,3)=="-s " then
if S2R(SubString(s,3,999))>0 and S2R(SubString(s,3,999))<101 then
set Dancer_speed=S2R(SubString(s,3,999))
call DisableTrigger(Dancer_t)
call TriggerRemoveAction(Dancer_t, Dancer_Act0)
set Dancer_t=CreateTrigger()
call TriggerRegisterTimerEvent(Dancer_t,Dancer_speed,true)
set Dancer_Act0=TriggerAddAction(Dancer_t,function Dancer_Main)
endif
на это
elseif SubString(s,0,3)=="-s " then
if S2R(SubString(s,3,999))>0 and S2R(SubString(s,3,999))<101 then
set Dancer_speed=S2R(SubString(s,3,999))
call DisableTrigger(Dancer_t)
call TriggerRemoveAction(Dancer_t, Dancer_Act0)
call DestroyTrigger(Dancer_t)
set Dancer_t=null
set Dancer_Act0=null
set Dancer_t=CreateTrigger()
call TriggerRegisterTimerEvent(Dancer_t,Dancer_speed,true)
set Dancer_Act0=TriggerAddAction(Dancer_t,function Dancer_Main)
endif
короче
второе решение на таймере примерно такое - через непериодический но с перезапуском и возможностью запаузить:
сам код не напишешь - никто не напишет
function Main takes nothing returns nothing
local timer t = CreateTimer()
call DestroyTimer(GetExpiredTimer())
//Actions
if pause==0 then
call TimerStart(t, time, false, function Main)
endif
set t = null
endfunction
function time_main takes nothing returns nothing
set time=2
endfunction
function pause_main takes nothing returns nothing
set pause=1
endfunction
НО
это решение оплимитно
поэтому нормальное решение только одно и оно в шапке
либо садить этот таймер на отдельный оплимито-обходный триггер и всем говорить, что это решение на таймере
LastUchiha: О господи, библиотеки и структуры, а полегче никак нельзя? Не обязательно что-бы мудрёно как то было.
по меркам варика это не такой большой код, всего 200 строк
это тебе не 2000 строк только для одной поддержки синхронизации
по сути у тебя выбора то нету, можешь сам написать
в принципе это не сложно делается:
если отследить применение абилки тригером - такое возможно?
то просто в цикл загоняешь
снимаешь координаты ГЕРОЕВ или ЮНИТОВ + StopSound() + StartSound() для тех, кто проходит по условиям
это на 20 строк пишется
LastUchiha: что-бы он воспроизвелся для всех тех у кого в радиусе обзора применяющий игрок
а если ты хочешь, чтобы учитывалось не по положению юнитов, а именно по текущим координатам камеры игрока - то добро пожаловать в дебри синхронизации по 2000 строк, либо вкатывайся в JN или reforged
PT153: Чтобы удалить ивенты у триггера, нужно триггер удалить.
а если мы используем DisableTrigger(t) + TriggerRemoveAction(t) + DestroyTrigger(t) - то будет правильно и без утечек?
или можно просто DestroyTrigger(t)?
то есть делать единоразовый непериодический таймер и каждые 0.1 сек его отлавливать как истёкший, чтобы заного его запустить на следующие 0.1 сек?
либо делать периодический таймер, но в случае паузы вручную отлавливать натиканное время и потом это время докармливать другому периодическому таймеру чтобы он продолжил тикать с этого же места?
получается, из простых решений - ответ только тот что указан в шапке темы
это нужно было для радужного текста, в принципе он уже релизнут итак на этом решении
PT153: Причём я думаю, что отключение триггера не останавливает ивент-таймер, он дальше тикает
Extremator: периодический триггер в отличии от таймера будет молотить всю игру, независимо от того включен ли триггер. Тебя это устраивает?
даже если DisableTrigger() + TriggerRemoveAction() ?
а какая есть альтернатива то?
во-первых периодический таймер нельзя запаузить, а потом включить работать дальше (без костылей)
во-вторых изменение времени в нём же не будет отличаться по сути от тригера? т.е. в таймере тоже надо заново его объявлять если надо сменить периодичность таймера, да?
для периодики он не годится, т.к. пауза тупо не работает:
ResumeTimer
Has no effect if passed timer is running. If passed timer is paused or has expired, launches it for TimerGetRemaining, and after this time is elapsed, launches it again for TimerGetTimeout. After that passed timer is stopped even if it is periodic.
Ред. host_pi
» WarCraft 3 / JN Loader
при первом запуске он докачивает dll для связи с m16 (пока не докачает - не запустится нормально)
но докачивает он очень коряво и может так этого и не сделать за 30 перезапусков и 2 часа
поэтому вот готовые файлы уже докачанные, которые сразу работают с 1.28.5 и ничего не докачивают (на сегодняшний день)
из новшеств - во время запуска появляется такое окошко, которое надо закрыть на крестик и после этого нормально запустится JN-варкрафт
Ред. host_pi
» WarCraft 3 / Warcraft III - MultiWindow
там вообще через webui\gluemanager.js + gameId:e.state.selectedGameId и хостить может только первое окно
» WarCraft 3 / Warcraft III - MultiWindow
используется связка ForceBindIP + Sandboxie
работает не идеально (не работает на 1.26 и не работает на JNLoader), но что-то запустить да можно
Ред. host_pi
» WarCraft 3 / Создание и добавление нового чит-кода для singleplayer
» WarCraft 3 / ЦВЕТ - как из игры получить точные значения playercolor в RGB кодировке ?
Ред. host_pi
» WarCraft 3 / ЦВЕТ - как из игры получить точные значения playercolor в RGB кодировке ?
Vanilla
Reforged
» Администрация XGM / где кнопка создать подпроект?
» Администрация XGM / где кнопка создать подпроект?
» WarCraft 3 / ЦВЕТ - как из игры получить точные значения playercolor в RGB кодировке ?
» WarCraft 3 / Радужный текст
Ред. host_pi
» WarCraft 3 / как изменить время внутри таймерного периодического триггера?
второе решение на таймере примерно такое - через непериодический но с перезапуском и возможностью запаузить:
сам код не напишешь - никто не напишет
это решение оплимитно
поэтому нормальное решение только одно и оно в шапке
либо садить этот таймер на отдельный оплимито-обходный триггер и всем говорить, что это решение на таймере
Ред. host_pi
» WarCraft 3 / Внеочередная ошибка при запуске карты
» WarCraft 3 / Как сделать звук который будет слышен в поле зрения игрока? World Editor
Ред. host_pi
» WarCraft 3 / Одновременный краш у всех игроков
а то ты не туда пишешь так то
пиши близам в сапорт калифорнию, что у них платный продукт критует
Ред. host_pi
» WarCraft 3 / Как сделать звук который будет слышен в поле зрения игрока? World Editor
это тебе не 2000 строк только для одной поддержки синхронизации
по сути у тебя выбора то нету, можешь сам написать
если отследить применение абилки тригером - такое возможно?
то просто в цикл загоняешь
снимаешь координаты ГЕРОЕВ или ЮНИТОВ + StopSound() + StartSound() для тех, кто проходит по условиям
это на 20 строк пишется
Ред. host_pi
» WarCraft 3 / как изменить время внутри таймерного периодического триггера?
или можно просто DestroyTrigger(t)?
либо делать периодический таймер, но в случае паузы вручную отлавливать натиканное время и потом это время докармливать другому периодическому таймеру чтобы он продолжил тикать с этого же места?
Ред. host_pi
» WarCraft 3 / как изменить время внутри таймерного периодического триггера?
это нужно было для радужного текста, в принципе он уже релизнут итак на этом решении
а какая есть альтернатива то?
Ред. host_pi
» WarCraft 3 / Радужный текст
- написать -name слово - навести мышку на синего
- написать -go - и над крестьянином и в F11 ник будет меняться, для мультибоарда должен тоже работать
функция и писалась как раз для подобных операций» WarCraft 3 / Радужный текст
» WarCraft 3 / Функция определения длины символа
Ред. host_pi
» WarCraft 3 / Функция определения длины символа
Ред. host_pi
» WarCraft 3 / как изменить время внутри таймерного периодического триггера?
во-вторых изменение времени в нём же не будет отличаться по сути от тригера? т.е. в таймере тоже надо заново его объявлять если надо сменить периодичность таймера, да?
Ред. host_pi
» WarCraft 3 / как изменить время внутри таймерного периодического триггера?
самописные ещё более заморочеголовые чем нативки