XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Obelick

offline
Опыт: 26,071
Активность:
Перестали работать простейшие триггеры
Вдруг внезапно перестали работать элементарные триггеры. Например: триггер напроч не хочет реагировать на событие юнит продает предмет. Перепробовал уже все что можно. Пишу с телефона поэтому поиском не могу воспользоваться. Спасайте, комрады, с этим багом я не могу дальше работать
Старый 04.06.2014, 10:11
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Obelick, а триггеры то включены? Увидить бы карту, то очень странно, видимо триггеры не создаются вовсе (это если ты игрался с функцией main )
Старый 04.06.2014, 11:08
Obelick

offline
Опыт: 26,071
Активность:
Конечно они включены. Проверил на пустой карте, эти события работают, а там нет. Выключить их случайно тоже я не мог в течении игры. Я видел похожую тему на форуме ,но давно. У меня есть поедположения, что это из за кол-ва триггеров, но надо знать точно
Старый 04.06.2014, 11:48
Goodie

offline
Опыт: 2,825
Активность:
Возможно много одних и тех же событий. У меня в старой карте кажется из за этого было. Хотя видимо какой то последний триггер который ты сделал, перевернул всю карту
Старый 04.06.2014, 11:57
DioD

offline
Опыт: 45,134
Активность:
оплимит инфа 100%
Старый 04.06.2014, 12:41
Obelick

offline
Опыт: 26,071
Активность:
Прости, но лимит чего именно, триггеров?
Старый 04.06.2014, 13:24
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
мне кажется диод имел ввиду лимит операций
Старый 04.06.2014, 15:07
Obelick

offline
Опыт: 26,071
Активность:
И что нужно препринять? Объединять триггеры с одинаковыми событиями? Или проблема в самих действиях, которых у меня рили много. Достаточно открыть триггнр с отловом урон, содержимое загружается секунд 5
Старый 04.06.2014, 15:20
ScorpioT1000
Работаем
online
Опыт: отключен
офигели не читать статьи?
банить таких надо
Старый 04.06.2014, 15:24
Extremator

offline
Опыт: 39,428
Активность:
А триггер точно не срабатывает?
поставь самым первым действие (до условий), вывод текста на экран
если ничего не будет в игре - найди другой триггер с аналогичным событием и сделай такую же проверку
если там будет работать - то скопируй рабочий триггер с проверкой и проверь будет ли оба триггера срабатывать...
неужели так трудно просто эллементарно проверять свои действия? .-.
Старый 04.06.2014, 15:31
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,696
Активность:
Такое - не редкость.
Скопируй триггеры в другую карту.
Обнули их в оригинале
Скопируй обратно.
Именно так, а не иначе.
Старый 04.06.2014, 15:39
Obelick

offline
Опыт: 26,071
Активность:
Экстрематор о рили? не ты один такой умный
Старый 04.06.2014, 16:02
DioD

offline
Опыт: 45,134
Активность:
ктото слишком тупой чтобы просто следовать простой инструкции.
или делаете отладку как белые люди или отключаете триггеры по одному до выяснения места которое вызывает опбрейк
Старый 04.06.2014, 17:39
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,696
Активность:
кое-кто снова умничает, не зная соли проблемы.
можно хоть все триггеры удалить и создать новый типа "приводит способность в действие" - показать сообщение.
И этот триггер не будет работать. NatureKid:
Скопируй триггеры в другую карту.
Обнули их в оригинале
Скопируй обратно.
Именно так, а не иначе.
после обнуления всё вылечится, а код и триггеры перекопировать надо будет с копии.
Старый 04.06.2014, 19:26
Obelick

offline
Опыт: 26,071
Активность:
Попробую как буду за компьтером
Старый 04.06.2014, 19:51
Obelick

offline
Опыт: 26,071
Активность:
Не работает твой способ.
Obelick добавил:
Пожалуйста, скажите решение проблемы в статье которую скорп кинул, я не могу с техи по ссылкам переходить, а интернеты дома неизвестно когда будут теперь
Старый 05.06.2014, 08:38
ScorpioT1000
Работаем
online
Опыт: отключен
А теперь сюрприз! Каждый поток в Warcraft 3 имеет лимит операций. Как только выполнится определенное количество операций, варкрафт экстренно завершает поток и даже не сообщает об этом.
Скорее всего, это было сделано, чтобы избежать бесконечных циклов и различных ошибок зависания, допущеных дизайнерами во время написания карт Blizzard.
Подробнее про лимит операций с примерами можно посмотреть в теме XGM Forum - Прерывание потоков & limit op.

Что же теперь делать?!

За простые потоки волноваться не надо, а вот за поток инициализации различных баз данных стоит побеспокоиться и разбить его на новые потоки.

Как создать новый поток

Создать поток можно запуском одноразового таймера с минимальной задержкой, но в редких случаях я предлагаю не заморачиваться с таймерами и использовать функцию ExecuteFunc().
Простой пример:
function test3 takes nothing returns nothing
	много кода
endfunction

function test2 takes nothing returns nothing
	много кода
	call ExecuteFunc("test3")
endfunction

function test1 takes nothing returns nothing
	много кода
	call ExecuteFunc("test2")
endfunction

// ...
	call test1()
Пример с передачей параметров. Внимание: это работает хорошо только в Warcraft 3 и подобных! Как раз из-за того замечания про потоки.
На других, современных языках программирования появится проблема синхронизации данных.
globals
	unit test_receive_u = null
	int test_receive_i = 0
endglobals

function test_receive takes nothing returns nothing
	local unit u = test_receive_u
	local int i = test_receive_i
	
	// ваш код, глобальные в нем не используются,
	// потому что они могут быть перезаписаны другим потоком
	
endfunction

function test_send takes nothing returns nothing
	local unit u
	local int i
	
	// ваш код
	
	// передача аргументов в новый поток и создание нового потока
	set test_receive_u = u
	set test_receive_i = i
	call ExecuteFunc("test_receive")
	
	// Здесь внимание! Даже если вы вызовете TriggerSleepAction, 
	// новый поток продолжит выполняться. И это хорошо! =)
	
	// ваш код, например, обнуление (но не удаление) локальных юнитов
endfunction
Ещё два примера: раз, два.
Старый 05.06.2014, 08:48
Obelick

offline
Опыт: 26,071
Активность:
Спасибо конечно но у меня тоже не получается с таймером. Попробовал разные комбинации, добавлял событие, включал триггер, ранил после таймера, ни в какую. Я что то не так может делаю? На ссылки примеров тоже не могу перейти
Старый 05.06.2014, 10:21
ScorpioT1000
Работаем
online
Опыт: отключен
на самом деле,
поставь самым первым действие (до условий), вывод текста на экран
если ничего не будет в игре - найди другой триггер с аналогичным событием и сделай такую же проверку
Старый 05.06.2014, 10:26
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,696
Активность:
Obelick:
Не работает твой способ.
(((
Ну сорри. Уже раз 8 просто подобное было, в т.ч. в моей карте, лечилось так. Ты копировал триггеры или импортировал обратно? Сохранял до реимпорта?
Старый 05.06.2014, 10:44
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 15:13.