код "Проверка" при добавлении в j файл не работает
не хватает:
globals
leaderboard udg_HandleBoard = null
function main takes nothing returns nothing
call InitTrig_HandleCounter()
endfunction
вот верный полный код
только надо строку из "function main" перенести в свою main функцию на карте
globals
leaderboard udg_HandleBoard = null
function HandleCounter_Update takes nothing returns nothing
local integer i = 0
local integer id
local location array P
local real result=0
loop
exitwhen i >= 50
set i = i + 1
set P[i] = Location(0,0)
set id = GetHandleId(P[i])
set result = result + (id-0x100000)
endloop
set result = result/i-i/2
loop
call RemoveLocation(P[i])
set P[i] = null
exitwhen i <= 1
set i = i - 1
endloop
call LeaderboardSetItemValue(udg_HandleBoard,0,R2I(result))
endfunction
function HandleCounter_Actions takes nothing returns nothing
set udg_HandleBoard = CreateLeaderboard()
call LeaderboardSetLabel(udg_HandleBoard, "Handle Counter")
call PlayerSetLeaderboard(GetLocalPlayer(),udg_HandleBoard)
call LeaderboardDisplay(udg_HandleBoard,true)
call LeaderboardAddItem(udg_HandleBoard,"Handles",0,Player(0))
call LeaderboardSetSizeByItemCount(udg_HandleBoard,1)
call HandleCounter_Update()
call TimerStart(GetExpiredTimer(),0.05,true,function HandleCounter_Update)
endfunction
function InitTrig_HandleCounter takes nothing returns nothing
call TimerStart(CreateTimer(),0,false,function HandleCounter_Actions)
endfunction
function main takes nothing returns nothing
call InitTrig_HandleCounter()
endfunction
Игровые объекты
Мы рассмотрели переменные, и как их обнулять, переменная - это ссылка на определенный игровой объект, но обнуление переменной не значит, что удаляется и объект по ссылке из переменной, объект нужно удалять отдельно (ДО(!) обнуления переменой) с помощью специальной функции. т.к. иначе после обнуление переменной ссылка на объект потеряется, и его нельзя будет удалить.
как можно работать 4 месяца над картой, но не иметь папку с сотней релизных рабочих версий 0.1 0.2 0.3 ... 1.1 1.2
или тем более не залить карту куда то ни разу
как это работает?
ты хочешь чтобы кто-то за тебя всё делал, а ты ничего не пытался и не писал и не тестил? один раз у тебя критануло и весь xgm побежал тоже тестить по 4 часа за 1 ран? 5 дней прошло, а от тебя никакой инфы кроме "нууу, у меня критануло 1 раз"
вылетать не должно вообще ни разу
хотя это зависит от навороченности карты. когда нетиз ещё жил и позволял играть в навороченные китайские карты размером по 400 МБ (которые даже JN loader открывал со скрипом и частично неработающими функциями) (и я сейчас не про импорт многотонных моделей, а про движок в карте и новые возможности всяких окошек и менюшек) - то не просто так сам нетиз при подключении к кому-то в игру открывал новое окно варика, а при отключении от игры это окно закрывал - т.е. принудительно делал так, что на каждую игру у всех игроков открывается новое окно.
другое дело, насколько у тебя там навороченная карта?
и странно, что в этой теме не было дано ни одной ссылки по оптимизации кода от других картоделов
чё-нить хотя бы такое
если первое небыло привязано к какой либо переменной, то оно (первое) утекает.
это и есть ответ, который нужен был на вопрос 2-1
В чем загадка то?
с таким вопросом можно весь раздел /qa закрыть, т.к. ответ на любой вопрос кому-нибудь да известен и не является загадкой для него, а вот для вопрошающего как раз наоборот
наоборот. я не хочу готовить яишницу (я ковыряюсь в яишнице, созданной вариком) и не хочу создавать 3 "умных" отдельных окна. я хочу разобраться как эти 3 окна создал варкрафт и что с ними можно сделать. именно разобраться - могу ли я что-то с этими уже созданными (не мной как я захотел, а варкрафтом через функцию -test3-test3-test3) окнами сделать или нет
версия выше с перехватом через
set TestDialogArr[0] = TestDialog
уже больше похоже на правду, она не меняет изначальную структуру создания окон
только все 3 новых строчки с перехватом выше фразы "мы тут", т.е. этакое компромиссное решение
из чего делаю вывод по вопросу 2-1
2-1:
что после создания подряд трёх окон (при условии что во время создания мы рядом не стояли и переменную не копировали себе в массив) - мы не можем к ним никак обратиться и что-то с ними сделать. а можем только с самым последним созданным
по поводу вопроса 3-1 :
выявлено опытным путём, что DestroyTimer(t) нежелательно пользоваться, т.к. после этой нативки надо заново создавать таймер, как мы это делали в инициализации глобалок через timer t=CreateTimer()
call DestroyTimer(t)
set t=CreateTimer()
TimerStart(t,60,false,null)
при этом же - конечно же если мы юзаем PauseTimer(t), то сама переменная не уничтожается, а остается таймером, с которым можно опять работать, т.е. через паузу результат примерно такой же но более щадящий.
call PauseTimer(t)
TimerStart(t,60,false,null)
в отличие от самого окна - после уничтожения нам уже не требуется заново назначать окно, как мы это делали при инициализации глобалок, а можно сразу создавать готовое окно
DestroyTimerDialog(GetLastCreatedTimerDialogBJ())
DestroyTimerDialog(TestDialog)
set TestDialog=CreateTimerDialogBJ(t,"Time")
и еще дополнение:
уничтожение таймерного окна не уничтожает и не останавливает сам таймер
т.е. окна не будет, а таймер продолжит тикать и будут срабатывать все привязанные к этому таймеру функции т.е. нужно уничтожать и окно и останавливать таймер
Borodach:
всё, что выше строки "// мы тут" нельзя редактировать по условию вопроса
в вопросе 2-1 таймер и окно уже заданы как
timer t=CreateTimer()
timerdialog TestDialog=null
и не подлежит изменению
вообще говоря, почему-то варкрафт для окна TestDialog при повторном создании такого же - не заменяет его вместо ранее созданного, а добавляет новое. т.е. на одной переменной TestDialog висят много окон. в этом и суть вопроса
т.е. если перевести на числа и провести аналогию:
у нас есть integer i . мы пишем i = 1 , i = 2 , i = 3 . по нормальной логике - i заменяется с 1 на 2, потом i заменяется с 2 на 3 - и в итоге у нас i = 3 , а варкрафт вместо замены просто сам создает три независимых i = 1 i = 2 i = 3 , потом мы пишем i = 0 , он одну i из трёх обнуляет, а у двух псевдо-i старые значения остаются. и это у него как то всё хранится
Borodach:
P.S. в 2.1 имелся ввиду такой случай, когда уже созданы три таймер-диалога и посажены на один триггер, на единый таймер. три окошка с одинаковым таймером. т.е. когда мы уже оказались в такой ситуации и не можем больше повлиять на создание таймер-диалогов. и если попытаться 3 раза удалить, то вместо трёх удалится только один, а остальные 2 останутся висеть и никак не удаляются. вопрос состоял в том - в данной ситуации есть ли возможность удалить эти висячие 2 окошка? или ответ будет - нет, эти висячие 2 окошка никак не удалить больше, кроме как перезапуском карты?
TimerStart(t,60,false,null)
set TestDialog=CreateTimerDialogBJ(t,"Time")
set TestDialog=CreateTimerDialogBJ(t,"Time")
set TestDialog=CreateTimerDialogBJ(t,"Time")
// мы тут
call DestroyTimerDialog(GetLastCreatedTimerDialogBJ())
call DestroyTimerDialog(GetLastCreatedTimerDialogBJ())
call DestroyTimerDialog(GetLastCreatedTimerDialogBJ())
call DestroyTimerDialog(TestDialog)
call DestroyTimerDialog(TestDialog)
call DestroyTimerDialog(TestDialog)
Особенность моей ошибки в том что ее десинхронит не на старте
а кто-то говорил что обязательно десинхронить на старте?
вообще-то карт на которых со старта десинхрон не так и много, гораздо больше карт в которых десинх через 5-10-20 минут игры
ещё 3 причины:
кстати на iccup десинхроны зависят еще и от их ланчера. те карты, которые на ирине НИКОГДА и НИ РАЗУ не десинхронили - на iccup волшебным образом начинают критовать и десинхать
еще десинх бывает если взять оригинальный варик, запустить его через ланчер iccup и подключиться к игре на ирину
еще десинх бывает если не совпадает твой ник на ирине и в игре (в некоторых картах прямо вообще можно 100% отлавливать такой десинх через ввод -кода, который есть в карте)
но эти 3 причины можно быстро, просто, один раз и навсегда вылечить лично своими действиями как игрока, а вот десинх из-за кода в карте будучи игроком не вылечишь ничем кроме постоянного ребута варика
каждый кто хотя бы неделю играл по сети в разные кастомки варкрафта - с ней встречался, поэтому никакой уникальности. другое дело что очень мало людей знают как 100% лечить регулярный десинхрон (а я знаю, да)
может кто-то знает что ее вызывает?
вызывает код внутри карты, десинхрон зависит ТОЛЬКО от самой карты
лечится он перезапуском вара, но если карта сама по себе "десинхронная" - то после перезапуска сразу при первой же игре можно получить десинхрон
Когда тестируем вдвоем с кем-то, все работает идеально, но если игроков 3 или больше то
в этом ключ. десинхрон "вешается" на всех игроков. если втроем играть в десинхронную карту - то вам троим будет хорошо, а вот всем остальным нет. чтобы всех остальных не десинхронило - нужно после каждой игры в эту карту всем участникам ребутать варик (ну либо чинить код карты от десинрона). при этом если вы в 10 тел ребутнули варик и зашли в карту, то 11й может зайти ИЗ ДРУГОЙ (десинхронной или обычной) карты, в которой он только что был и не ребутал варик - и именно он 11й и словит десинхрон
Unryze
Планируется ли поддержка карт, для которых требуется JN Loader ?
Например карты от корейца z1z1z1 (скачка карт ниже) - он делает уникальные интересные карты, при этом всегда они многопользовательские. т.е. заточены на командную работу. и т.к. ирина их не поддерживает - остается только один вариант RadminVPN, но там пинг очень плохой (если много игроков). Поэтому идеальным вариантом была бы поддержка JN карт на ирине.
Как это проще сделать?
переписывать все нативки или
может как то можно подключить dll от JN лоадера? может быть в UjAPILauncher.exe можно добавить путь к папке JN лоадера и он его как посредник подключит через себя к ирине?
или может быть Kirill78 и Kokomi смогут прикрутить JN Loader к ирине? Чтобы запускать через JN loader.exe и справа от создания карты выбрать что-то типа "JN"
Мы уже 2 или 3 года играем в карты от z1z1z1, и последнее время он делает только для JN, в которые нипаиграть на ирине с нормальным пингом. При этом мы всегда покупаем випку на всю команду и приходится играть в его карты старых версий "до-JN" эпохи
Также есть и другие игроки, так называемые "игроки в корейские RPG", которые тоже играют через JN loader в корейские карты
Вот пример карт от z1z1z1 (Скачивать карты на синюю кнопку):
или все 3 карты одной ссылкой www.mediafire.com/?59w9pnbo4wwk845 (тут есть скриншоты карт, по которым можно убедиться в их уникальности и непохожести на обычные карты для варкрафта)
я вчера проверял все 3 карты на UjAPI 1.0.19.78 - ни одна не запустилась, карта не инициализировалась и не дошла до выбора команд в лобби (а с JN loader они конечно же запускаются прекрасно)
и если найдётся - 橙色蘑菇约会-双人版 - или - 橙色蘑菇的约会-双人版 - или - Mushroom Story 双人V2版, эту карту на нетизе не могу найти и в гугле тоже. нашёл только видео, на которых экран загрузки карты нетизовский, т.е. либо название другое, либо она была удалена из нетиза?
Гайд по регистрации 2022 был бы полезен, это тема вечная с нетизом, в частности актуальные сайты с китайскими сервисами приёма SMS
Могли бы посмотреть что делает GetForceOfPlayer перед сомнительным использованием.
Я пока не силён в джасе.
force это группа игроков?
Если в эту группу добавить одного игрока, то здесь же нет проблемы.
Или проблема, что у одного игрока эта группа создаётся, а у других игроков нет, что и вызывает десинх?
А ты после установки переменной ее считываешь вне Локал плеера?
нет конечно, тем более что вся функция локальная целиком
function AAA takes nothing returns nothing
local real cam1 = 0
if GetLocalPlayer() == GetTriggerPlayer() then
set cam1 = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE)
endif
endfunction
Потестировал код, оказалось всё забавнее - эта команда выдачи текста выкидывает игрока, если используется под условием :
if GetLocalPlayer() == GetTriggerPlayer() then
call DisplayTimedTextToForce(GetForceOfPlayer(GetTriggerPlayer()), 10, "2")
endif
Поменял её на другую выдачу, всё заработало
Хотя логику не понял, почему GetForceOfPlayer(GetTriggerPlayer()) не работает с GetLocalPlayer()
даже GetForceOfPlayer(Player(0)) не работает с if GetLocalPlayer()
Ред. host_pi
» WarCraft 3 / Как сделать чтобы статистика игрока сохранялась. Если можно
Ред. host_pi
» WarCraft 3 / Как написать код на Jass
Ред. host_pi
» WarCraft 3 / Оптимизация jass кода
не хватает:
только надо строку из "function main" перенести в свою main функцию на карте
» WarCraft 3 / как уничтожить все таймер-диалоги timerdialog ?
» WarCraft 3 / Можно ли с помощью триггеров/JASS вращать юнита по любым осям?
Ред. host_pi
» WarCraft 3 / Карта откатилась :(
или тем более не залить карту куда то ни разу
как это работает?
Ред. host_pi
» WarCraft 3 / Фатал
Ред. host_pi
» WarCraft 3 / Вообще нет идей с десинхроном...
что ты там в ней скрываешь? свои пароли на биткоины?
Ред. host_pi
» WarCraft 3 / Десинхронизация
в гугле xgm сплошные Q A и ответы в стиле "да нет" от бывалых
Ред. host_pi
» WarCraft 3 / Десинхронизация
если десинхов на картах будет меньше - то от этого выйграют все
Ред. host_pi
» WarCraft 3 / Десинхронизация
хотя это зависит от навороченности карты. когда нетиз ещё жил и позволял играть в навороченные китайские карты размером по 400 МБ (которые даже JN loader открывал со скрипом и частично неработающими функциями) (и я сейчас не про импорт многотонных моделей, а про движок в карте и новые возможности всяких окошек и менюшек) - то не просто так сам нетиз при подключении к кому-то в игру открывал новое окно варика, а при отключении от игры это окно закрывал - т.е. принудительно делал так, что на каждую игру у всех игроков открывается новое окно.
и странно, что в этой теме не было дано ни одной ссылки по оптимизации кода от других картоделов
чё-нить хотя бы такое
https://maxcheaters.com/topic/13071-guidetriggers-memory-leaks-a...
https://world-editor-tutorials.thehelper.net/cat_usersubmit.php?...
Ред. host_pi
» WarCraft 3 / как уничтожить все таймер-диалоги timerdialog ?
Ред. host_pi
» WarCraft 3 / как уничтожить все таймер-диалоги timerdialog ?
только все 3 новых строчки с перехватом выше фразы "мы тут", т.е. этакое компромиссное решение
из чего делаю вывод по вопросу 2-1
2-1:
что после создания подряд трёх окон (при условии что во время создания мы рядом не стояли и переменную не копировали себе в массив) - мы не можем к ним никак обратиться и что-то с ними сделать. а можем только с самым последним созданным
выявлено опытным путём, что DestroyTimer(t) нежелательно пользоваться, т.к. после этой нативки надо заново создавать таймер, как мы это делали в инициализации глобалок через timer t=CreateTimer()
уничтожение таймерного окна не уничтожает и не останавливает сам таймер
т.е. окна не будет, а таймер продолжит тикать и будут срабатывать все привязанные к этому таймеру функции т.е. нужно уничтожать и окно и останавливать таймер
Ред. host_pi
» WarCraft 3 / как уничтожить все таймер-диалоги timerdialog ?
всё, что выше строки "// мы тут" нельзя редактировать по условию вопроса
в вопросе 2-1 таймер и окно уже заданы как и не подлежит изменению
у нас есть integer i . мы пишем i = 1 , i = 2 , i = 3 . по нормальной логике - i заменяется с 1 на 2, потом i заменяется с 2 на 3 - и в итоге у нас i = 3 , а варкрафт вместо замены просто сам создает три независимых i = 1 i = 2 i = 3 , потом мы пишем i = 0 , он одну i из трёх обнуляет, а у двух псевдо-i старые значения остаются. и это у него как то всё хранится
Ред. host_pi
» WarCraft 3 / как уничтожить все таймер-диалоги timerdialog ?
P.S. в 2.1 имелся ввиду такой случай, когда уже созданы три таймер-диалога и посажены на один триггер, на единый таймер. три окошка с одинаковым таймером. т.е. когда мы уже оказались в такой ситуации и не можем больше повлиять на создание таймер-диалогов. и если попытаться 3 раза удалить, то вместо трёх удалится только один, а остальные 2 останутся висеть и никак не удаляются. вопрос состоял в том - в данной ситуации есть ли возможность удалить эти висячие 2 окошка? или ответ будет - нет, эти висячие 2 окошка никак не удалить больше, кроме как перезапуском карты?
Ред. host_pi
» WarCraft 3 / Десинхронизация
вообще-то карт на которых со старта десинхрон не так и много, гораздо больше карт в которых десинх через 5-10-20 минут игры
Ред. host_pi
» WarCraft 3 / Проверка проходимости юнита
Ред. host_pi
» WarCraft 3 / Десинхронизация
лечится он перезапуском вара, но если карта сама по себе "десинхронная" - то после перезапуска сразу при первой же игре можно получить десинхрон в этом ключ. десинхрон "вешается" на всех игроков. если втроем играть в десинхронную карту - то вам троим будет хорошо, а вот всем остальным нет. чтобы всех остальных не десинхронило - нужно после каждой игры в эту карту всем участникам ребутать варик (ну либо чинить код карты от десинрона). при этом если вы в 10 тел ребутнули варик и зашли в карту, то 11й может зайти ИЗ ДРУГОЙ (десинхронной или обычной) карты, в которой он только что был и не ребутал варик - и именно он 11й и словит десинхрон
Ред. host_pi
» Unryze Jass API / UjAPI
ну нет так нет, шо
Ред. host_pi
» Unryze Jass API / UjAPI
Планируется ли поддержка карт, для которых требуется JN Loader ?
Например карты от корейца z1z1z1 (скачка карт ниже) - он делает уникальные интересные карты, при этом всегда они многопользовательские. т.е. заточены на командную работу. и т.к. ирина их не поддерживает - остается только один вариант RadminVPN, но там пинг очень плохой (если много игроков). Поэтому идеальным вариантом была бы поддержка JN карт на ирине.
Также есть и другие игроки, так называемые "игроки в корейские RPG", которые тоже играют через JN loader в корейские карты
Ред. host_pi
» WarCraft 3 / Как загружать карту на epicwar не имея полного листфайла?
Ред. host_pi
» WarCraft III: Battle Platform / WarCraft III: Battle Platform
Animal Story 双人V2版 dz.blizzard.cn/rpgmaps/detail/184326
橙色蘑菇的约会 汉化版 dz.blizzard.cn/rpgmaps/detail/102375
Ред. host_pi
» WarCraft 3 / за 300р найти 3 файла в листфайле
это имя надо найти, естественно этого имени нет в листфайле, для этого и ищется
File00000652.blp
File00000653.blp
File00000654.blp
» WarCraft 3 / GetCameraField + GetLocalPlayer = ошибка
force это группа игроков?
Если в эту группу добавить одного игрока, то здесь же нет проблемы.
Или проблема, что у одного игрока эта группа создаётся, а у других игроков нет, что и вызывает десинх?
Ред. host_pi
» WarCraft 3 / GetCameraField + GetLocalPlayer = ошибка
Хотя логику не понял, почему GetForceOfPlayer(GetTriggerPlayer()) не работает с GetLocalPlayer()
даже GetForceOfPlayer(Player(0)) не работает с if GetLocalPlayer()