Warcraft III: Frozen Throne
1.26
[GUI]
Редактор: Jass New Gen Pack Rebuild
Скрин 1: prnt.sc/CTUxeNhbV3Yu
Скрин 2: prnt.sc/aBk0QRrHwlnI
Скрин 3: prnt.sc/f3FsxBbPH9Ml
UPD0: Без цикла та же история.
Доброго времени суток.
Собственно, такая проблема, при запуске карты, вот эти два тригера(см.скрин 1 и 2) каким-то мистическим для меня образом делают две вещи.
  1. Не дают запустить карту, и при запуске меня выкидывает попросту в меню варкрафта.
  2. Если один из них отключен - крашат игру с ошибкой(см.скрин 3).
Собственно, если отключить их оба - игра запускается. А так же, если выключить и включить редактор, и сразу, ничего не трогая, запустить проверку, то карта запускается и работает всё, в том числе эти тригеры.
Мой вопрос заключается в том, что собственно не так? Потому что я откровенно говоря не понимаю. Сперва грешил на переменные. Менял их - ноль реакции. Каждое действие тригера менял, переделывал. Каждое условие, каждое событие. И до сих пор не понимаю.
Есть ли какая-то возможность, отследить что конкретно даёт ошибку? В логах дето?
Доступ у редактора админский. Антивирусы всякие вырублены.

Методом "тыка", понял что ОШИБКУ, вызывает НЕ это( prnt.sc/PnDmRw7Um01B ) условие. А взаимодействие ЭТОГО условия, и ВОТ этого:
prnt.sc/PnDmRw7Um01B
prnt.sc/LkOUvuerzeFv
И вот совпадение, ОБА условия, обращаются к ОДНОЙ способности. И если любое из них есть(по отдельности и вместе) в тригере - игра крашится, или карта не запускается.

Пока что не понимаю, каким образом эта способность ломает игру, она геройская, но сделана на основе каменного доспеха тини.
Но теперь понятно, почему на этапе инициализации выкидывает. Игра прогружает способность. Хотя сама способность работает, но обращение к ней с помощью тригера, ломает игру. Даже если сам тригер никто не активировал. Это видимо какой-то баг редактора. Или способности.

Остаётся узнать - ПОЧЕМУ? Почему способность сама по себе работает, а обращение к ней тригера, даже если сам тригер не активируется, ломает игру?

ПОЧЕМУ? Почему способность сама по себе работает(ОНА ПАССИВНАЯ, и она работает), а обращение к ней тригера(ПРОВЕРКА того что, способность у героя есть), даже если сам тригер не активируется(СОБЫТИЕ, ещё ни разу не произошло, или галочка "изначально включен" убрана), ломает игру?

Принятый ответ

В том и дело что ОТВЕТА - НЕТ. Способность я НЕ кастую. Я проверяю - есть ли она у героя, и какого она уровня. Мне нужна ПАССИВНАЯ, способность. В данном случае моя способность блокирует часть урона, в зависимости от уровня, она не является пустышкой. Всё. Теперь я в тригере делаю проверку - что способность у героя есть. И если она есть, то на каждом 20-м ударе по герою, будет добавлятся способность - защита +10, или больше, взависимости от уровня способности, и затем через 30 секунд удалятся.
Я не спрашивал как кастовать скилл, и как с ним работать.
Я спросил другое:

ПОЧЕМУ? Почему способность сама по себе работает(ОНА ПАССИВНАЯ, и она работает), а обращение к ней тригера(ПРОВЕРКА того что, способность у героя есть), даже если сам тригер не активируется(СОБЫТИЕ, ещё ни разу не произошло, или галочка "изначально включен" убрана), ломает игру?

Прочитай внимательно всё что я писал пожалуйста, у меня просто ощущение что ты не всё прочитал, и не всё скрины посмотрел.

В общем и целом. Подвожу итоги:
Проблема оказалась конкретно в способности. Я так посмотрел, она видимо каким-то образом забаговалась.
Она была сделана на основе способности "каменные доспехи", но конкретно у этой способности почему-то изначальная раса была "наги". Т.е. это уже странно, потому что эта способность изначально от "ночных эльфов". Кроме этого, я отличий от стандарта в ней никаких не видел.
Я ее удалил, создал абсолютно такую же способность, и она работает, всё запускается. Скилл(тригерный) я сделал ровно так как и хотел, никакой ошибки в нём нет и не было в помине, о чем я в принципе подозревал с самого начала. Не знаю с чем связать этот баг, поэтому в принципе вопрос закрываю.
Ответ на него я нашёл сам: это баг редактора.
Других вариантов я не вижу.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
8
1 год назад
0
конечно русская локализация радует глаз но с первым триггером Скрин 1 все нормально а со 2 Скрином, бред, юзай таймеры вместо вейтов, они утечные и не универсальные, и фатал вызывает что в цикле от 1 до 30 ты стопоришь поток, конечно он выкинет игрока который кастовал способность
0
4
1 год назад
Отредактирован WorldEdition
0
конечно русская локализация радует глаз но с первым триггером Скрин 1 все нормально а со 2 Скрином, бред, юзай таймеры вместо вейтов, они утечные и не универсальные, и фатал вызывает что в цикле от 1 до 30 ты стопоришь поток, конечно он выкинет игрока который кастовал способность
Если бы. Цикл я добавил позже, и знаю, что он скорее всего нерабочий. Оно и без цикла крашит или не даёт запустить карту. =(
UPD0: Сейчас даже удалил цикл, на всякий, как и говорил - та же история. Карту не запускает, сразу в меню варика выкидывает.
UPD1: Если удалить(отключить) первый тригер, то игра крашается. Если его не удалять, то не крашается, но не запускается. =/
UPD2: Та же история, если удалить(отключить) второй тригер.
0
8
1 год назад
0
WorldEdition:
приведу пример как это должно работать

конечно русская локализация радует глаз но с первым триггером Скрин 1 все нормально а со 2 Скрином, бред, юзай таймеры вместо вейтов, они утечные и не универсальные, и фатал вызывает что в цикле от 1 до 30 ты стопоришь поток, конечно он выкинет игрока который кастовал способность
Если бы. Цикл я добавил позже, и знаю что он скорее всего нерабочий. Оно и без цикла крашит или не даёт запустить карту. =(
UPD: Сейчас даже удалил цикл, на всякий, как и говорил - та же история. Карту не запускает, сразу в меню варика выкидывает.
UPD1: Если удалить первый тригер, то игра крашается. Если его не удалять, то не крашается, но не запускается. =/
тогда карту в студию
Загруженные файлы
0
4
1 год назад
Отредактирован WorldEdition
0
WorldEdition:
приведу пример как это должно работать

конечно русская локализация радует глаз но с первым триггером Скрин 1 все нормально а со 2 Скрином, бред, юзай таймеры вместо вейтов, они утечные и не универсальные, и фатал вызывает что в цикле от 1 до 30 ты стопоришь поток, конечно он выкинет игрока который кастовал способность
Если бы. Цикл я добавил позже, и знаю что он скорее всего нерабочий. Оно и без цикла крашит или не даёт запустить карту. =(
UPD: Сейчас даже удалил цикл, на всякий, как и говорил - та же история. Карту не запускает, сразу в меню варика выкидывает.
UPD1: Если удалить первый тригер, то игра крашается. Если его не удалять, то не крашается, но не запускается. =/
тогда карту в студию
Всё переменные и способности, конкретно для этих двух тригеров я создал с нуля. Ни одно событие/условие/действие никак не затрагивает другие тригеры в карте. Поэтому, я не думаю что проблема в карте, и хотелось бы по возможности, решить проблему без ее отправки.
UPD0: Спасибо за пример, но у меня пассивная способность, которая будет добавлять е-ное количество защиты на е-ный промежуток времени, а затем с каким-то количеством времени отката.
UPD1: А есть какой-то метод отслеживания ошибок? Где-то логи можно посмотреть?
0
8
1 год назад
0
WorldEdition:
UPD1: А есть какой-то метод отслеживания ошибок? Где-то логи можно посмотреть?
для этого есть замечательная функция BJDebugMsg, вставляешь и смотришь где она стопорится
0
13
1 год назад
0
Centyrion, Может способность не для героя, либо юнит не герой. Краш бывает, если проводить манипуляции с характеристиками на простых юнитах
0
4
1 год назад
Отредактирован WorldEdition
0
WorldEdition:
UPD1: А есть какой-то метод отслеживания ошибок? Где-то логи можно посмотреть?
для этого есть замечательная функция BJDebugMsg, вставляешь и смотришь где она стопорится
Спасибо!)

Centyrion, Может способность не для героя, либо юнит не герой. Краш бывает, если проводить манипуляции с характеристиками на простых юнитах
Юнит герой. А вот способность... Скрин: prnt.sc/NMCQ86mZp-Iv
Но она работает на юнита. Когда редактор выключаю, и сразу включив, проверку, карта запускается. Вот там способность работает адекватно без ошибок.
0
8
1 год назад
0
Centyrion, Может способность не для героя, либо юнит не герой. Краш бывает, если проводить манипуляции с характеристиками на простых юнитах
может быть, я даю способность вампиризм когда юнит выучил способность, триггер проверяет уровень способности и если уровень абилки больше 0 то даю герою пасивку на основе вампиризма, у него тут рекурсивная абилка в 2 Скрине которая стопорит поток, в цикле никогда не надо использовать Wait, дал все что нужно герою и запустил таймер далее достаешь значения из переменных и работаешь с ними.

тогда убирай циклы переменные и вейты и юзай таймеры.

перестроить скил надо

function BackEnd takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer id=GetHandleId(t)
local unit c=LoadUnitHandle(udg_HT,id,0)
call UnitRemoveAbility(c,'A06I')
call DestroyTimer(t)
call FlushChildHashtable(udg_HT,id)
set t=null
set c=null
endfunction
function Back takes nothing returns nothing
local unit u=GetSpellAbilityUnit()
local timer t=CreateTimer()
call SaveUnitHandle(udg_HT,GetHandleId(t),0,u)
call UnitAddAbility(u,'A06I')
call TimerStart(t,0.5,false,function BackEnd)
set u=null
set t=null
endfunction
0
4
1 год назад
0
Centyrion, Может способность не для героя, либо юнит не герой. Краш бывает, если проводить манипуляции с характеристиками на простых юнитах
может быть, я даю способность вампиризм когда юнит выучил способность, триггер проверяет уровень способности и если уровень абилки больше 0 то даю герою пасивку на основе вампиризма, у него тут рекурсивная абилка в 2 Скрине которая стопорит поток, в цикле никогда не надо использовать Wait, дал все что нужно герою и запустил таймер далее достаешь значения из переменных и работаешь с ними.
В моем случае мне нужно было чтобы тригер работал с другими игроками, но при этом на "нужном" игроке, счётчик не увеличивался. Поэтому просто выключить его я не могу. И потому, я решил таким образом попробовать реализовать. Цикл я ещё даже не тестил, можно не обращать на него внимание.
В принципе если конкретно то в чем проблема не найдем, я попробую завтра снести полностью этот тригер, и переделать его как только смогу. Мне просто интересно что конкретно может вызывать эту проблему.
0
8
1 год назад
Отредактирован Centyrion
0
Centyrion, Может способность не для героя, либо юнит не герой. Краш бывает, если проводить манипуляции с характеристиками на простых юнитах
может быть, я даю способность вампиризм когда юнит выучил способность, триггер проверяет уровень способности и если уровень абилки больше 0 то даю герою пасивку на основе вампиризма, у него тут рекурсивная абилка в 2 Скрине которая стопорит поток, в цикле никогда не надо использовать Wait, дал все что нужно герою и запустил таймер далее достаешь значения из переменных и работаешь с ними.
В моем случае мне нужно было чтобы тригер работал с другими игроками, но при этом на "нужном" игроке, счётчик не увеличивался. Поэтому просто выключить его я не могу. И потому, я решил таким образом попробовать реализовать. Цикл я ещё даже не тестил, можно не обращать на него внимание.
В принципе если конкретно то в чем проблема не найдем, я попробую завтра снести полностью этот тригер, и переделать его как только смогу. Мне просто интересно что конкретно может вызывать эту проблему.
Мне просто интересно что конкретно может вызывать эту проблему.
я тебе в 10 раз говорю НИКОГДА не используй вейты в Циклах
0
4
1 год назад
Отредактирован WorldEdition
0
Centyrion, Может способность не для героя, либо юнит не герой. Краш бывает, если проводить манипуляции с характеристиками на простых юнитах
может быть, я даю способность вампиризм когда юнит выучил способность, триггер проверяет уровень способности и если уровень абилки больше 0 то даю герою пасивку на основе вампиризма, у него тут рекурсивная абилка в 2 Скрине которая стопорит поток, в цикле никогда не надо использовать Wait, дал все что нужно герою и запустил таймер далее достаешь значения из переменных и работаешь с ними.

тогда убирай циклы переменные и вейты и юзай таймеры.

перестроить скил надо

function BackEnd takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer id=GetHandleId(t)
local unit c=LoadUnitHandle(udg_HT,id,0)
call UnitRemoveAbility(c,'A06I')
call DestroyTimer(t)
call FlushChildHashtable(udg_HT,id)
set t=null
set c=null
endfunction
function Back takes nothing returns nothing
local unit u=GetSpellAbilityUnit()
local timer t=CreateTimer()
call SaveUnitHandle(udg_HT,GetHandleId(t),0,u)
call UnitAddAbility(u,'A06I')
call TimerStart(t,0.5,false,function BackEnd)
set u=null
set t=null
endfunction
Я в коде полный 0. Скилл сейчас переделаю, поменяю по-разному, посмотрю.

Centyrion, Может способность не для героя, либо юнит не герой. Краш бывает, если проводить манипуляции с характеристиками на простых юнитах
может быть, я даю способность вампиризм когда юнит выучил способность, триггер проверяет уровень способности и если уровень абилки больше 0 то даю герою пасивку на основе вампиризма, у него тут рекурсивная абилка в 2 Скрине которая стопорит поток, в цикле никогда не надо использовать Wait, дал все что нужно герою и запустил таймер далее достаешь значения из переменных и работаешь с ними.
В моем случае мне нужно было чтобы тригер работал с другими игроками, но при этом на "нужном" игроке, счётчик не увеличивался. Поэтому просто выключить его я не могу. И потому, я решил таким образом попробовать реализовать. Цикл я ещё даже не тестил, можно не обращать на него внимание.
В принципе если конкретно то в чем проблема не найдем, я попробую завтра снести полностью этот тригер, и переделать его как только смогу. Мне просто интересно что конкретно может вызывать эту проблему.
Мне просто интересно что конкретно может вызывать эту проблему.
я тебе в 10 раз говорю НИКОГДА не используй вейты в Циклах
Я цикл убрал ещё полчаса назад.)
UPD: Вру, час назад убрал. Вот время летит...

Эту ошибку вызывает вот это условие: prnt.sc/PnDmRw7Um01B
Я даже не представляю с чем это связано.
Я с нуля 2 новых тригера сделал, поменял всё переменные. Отфильтровал всё. И только когда убираю это условие, игра запускается нормально.
И это странно. Событие даже не срабатывает, не с чем. Но игру ломает.

Теперь мне интересно, почему оно ее вызывает...
Скрины способности:
0
18
1 год назад
0
я тебе в 10 раз говорю НИКОГДА не используй вейты в Циклах
Ну не знаю, я использовал на практике специальную функцию, где есть таймер и цикл, а в цикле вейт(!) на 1 сек, цикл работает, пока не истекает таймер. Так вот, с ней никогда никаких ошибок и крашей не было, всё стабильно. Даже на паузе. Версия 1.26а
0
4
1 год назад
Отредактирован WorldEdition
0
Методом "тыка", понял что ОШИБКУ, вызывает НЕ это условие. А взаимодействие ЭТОГО условия, и ВОТ этого:
prnt.sc/PnDmRw7Um01B
prnt.sc/LkOUvuerzeFv
И вот совпадение, ОБА условия, обращаются к ОДНОЙ способности. И если любое из них есть(по отдельности и вместе) в тригере - игра крашится, или не запускается.
Пока что не понимаю, каким образом эта способность ломает игру, она геройская, но сделана на основе каменного доспеха тини.

Но теперь понятно, почему на этапе инициализации выкидывает. Игра прогружает способность. Хотя сама способность работает, но обращение к ней с помощью тригера, ломает игру. Даже если сам тригер никто не активировал. Это видимо какой-то баг редактора. Или способности.

Остаётся узнать - ПОЧЕМУ? Почему способность сама по себе работает, а обращение к ней тригера, даже если сам тригер не активируется, ломает игру?
0
8
1 год назад
0
я тебе в 10 раз говорю НИКОГДА не используй вейты в Циклах
Ну не знаю, я использовал на практике специальную функцию, где есть таймер и цикл, а в цикле вейт(!) на 1 сек, цикл работает, пока не истекает таймер. Так вот, с ней никогда никаких ошибок и крашей не было, всё стабильно. Даже на паузе. Версия 1.26а
в мултиплеере она себя проявит. это только надо поиграть на 2 машинах которые не находятся в одной локалке

Остаётся узнать - ПОЧЕМУ? Почему способность сама по себе работает, а обращение к ней тригера, даже если сам тригер не активируется, ломает игру?
потому что нельзя кастовать пассивную способность.

function BackEnd takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer id=GetHandleId(t)
local unit c=LoadUnitHandle(udg_HT,id,0)
call UnitRemoveAbility(c,'A06I') // здесь убираем абилку и очищаем следы
call DestroyTimer(t)
call FlushChildHashtable(udg_HT,id)
set t=null
set c=null
endfunction
function Back takes nothing returns nothing
local unit u=GetSpellAbilityUnit()
local timer t=CreateTimer()
call SaveUnitHandle(udg_HT,GetHandleId(t),0,u)
call UnitAddAbility(u,'A06I') // это пассивная абилка
call TimerStart(t,0.5,false,function BackEnd) //запускаем таймер чтобы делать чтото
set u=null
set t=null
endfunction

ответ дал. как надо кастовать скил и как с ним работать

Я в коде полный 0. Скилл сейчас переделаю, поменяю по-разному, посмотрю.
тогда иди читай гайды как создать первоклассный скил
0
4
1 год назад
Отредактирован WorldEdition
0
В том и дело что ОТВЕТА - НЕТ. Способность я НЕ кастую. Я проверяю - есть ли она у героя, и какого она уровня. Мне нужна ПАССИВНАЯ, способность. В данном случае моя способность блокирует часть урона, в зависимости от уровня, она не является пустышкой. Всё. Теперь я в тригере делаю проверку - что способность у героя есть. И если она есть, то на каждом 20-м ударе по герою, будет добавлятся способность - защита +10, или больше, взависимости от уровня способности, и затем через 30 секунд удалятся.
Я не спрашивал как кастовать скилл, и как с ним работать.
Я спросил другое:

ПОЧЕМУ? Почему способность сама по себе работает(ОНА ПАССИВНАЯ, и она работает), а обращение к ней тригера(ПРОВЕРКА того что, способность у героя есть), даже если сам тригер не активируется(СОБЫТИЕ, ещё ни разу не произошло, или галочка "изначально включен" убрана), ломает игру?

Прочитай внимательно всё что я писал пожалуйста, у меня просто ощущение что ты не всё прочитал, и не всё скрины посмотрел.

В общем и целом. Подвожу итоги:
Проблема оказалась конкретно в способности. Я так посмотрел, она видимо каким-то образом забаговалась.
Она была сделана на основе способности "каменные доспехи", но конкретно у этой способности почему-то изначальная раса была "наги". Т.е. это уже странно, потому что эта способность изначально от "ночных эльфов". Кроме этого, я отличий от стандарта в ней никаких не видел.
Я ее удалил, создал абсолютно такую же способность, и она работает, всё запускается. Скилл(тригерный) я сделал ровно так как и хотел, никакой ошибки в нём нет и не было в помине, о чем я в принципе подозревал с самого начала. Не знаю с чем связать этот баг, поэтому в принципе вопрос закрываю.
Ответ на него я нашёл сам: это баг редактора.
Других вариантов я не вижу.
Принятый ответ
0
8
1 год назад
0
смотри я тебе дал готовый пример как должно все работать, он будет крашится если не соблюдать правила
даю тебе карту где наглядно есть подобный механизм от него и отталкивайся
Загруженные файлы
0
4
1 год назад
Отредактирован WorldEdition
0
смотри я тебе дал готовый пример как должно все работать, он будет крашится если не соблюдать правила
даю тебе карту где наглядно есть подобный механизм от него и отталкивайся
Прочитай выше. Ответ я нашёл сам.
Upd: код ваще не понимаю, так что пример я тоже не понял.
0
18
1 год назад
0
Centyrion, Имеется ввиду мультиплеер по Ирина боту или что?
А что должно произойти? Десинк?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.