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

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

Ответ
 
Мистер Вейдер

offline
Опыт: 1,070
Активность:
Хаос в диалогах
Есть кнопки A, B и C в диалоге X.
Есть первый триггер,который реагирует на нажатие кнопки A. (кнопка нажата для диалога - нажатая кнопка = A - действие)
Есть второй триггер,который реагирует на нажатие кнопки B. (кнопка нажата для диалога - нажатая кнопка = B - действие)
Есть третий триггер,который реагирует на нажатие кнопки C. (кнопка нажата для диалога - нажатая кнопка = C - действие)
В локации 2 статиста.Если герой подходит к первому статисту. Выскакивает диалоговое окно, с кнопками A и B.
Если герой подходит ко второму статисту,выскакивает диалоговое окно с кнопкой C.
Так вот,если Нажимать на кнопку A , запросто могут запуститься триггеры на кнопках B и C,и так для каждой кнопки.Почему условия игнорятся?В триггерах же блджад прописано требование к кнопке!(
Причем что смешно,на маленьких масштабах (кнопок 7-8 на карту) всё прекрасно работает,а стоит сделать кнопок 50,как у меня,и всё проваливается в тар-тары.Что делать-то? :(
Мистер Вейдер добавил:
если что,то кнопки записаны в массив,а диалог всегда один,то есть каждый раз я просто очищаю диалог X ,создаю для него кнопки заново и присваиваю им значение.
Старый 09.11.2013, 11:41
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
массивы диалогов и массивы кнопок диалогов должны иметь указанную размерность, сделано?
Старый 09.11.2013, 11:44
Мистер Вейдер

offline
Опыт: 1,070
Активность:
То есть? :D У меня один диалог и массив на 50 кнопок,говоришь с одним нпц - диалог очищается,для него создаются кнопки конкретно для этого нпц,и каждая заносится в свою ячейку в массиве.Нажал на какую-то из этих кнопок - запускается триггер,связанный с этой кнопкой.Триггер у каждой кнопки один,и в нем есть условие на проверку нажатой кнопки(какая нажата?). Кнопка buttons[5] запускает триггер,в котором торговец тебя поливает матом,кнопка buttons[11] запускает триггер где ты грузишь ящики на корабль,они вообще впринципе связаны с разными нпц,но фишка в том что если нажать buttons[5] в разговоре с торговцем мне запросто могут показать как я гружу ящики на корабль,потом мне покажут как крестьяне рубят лес,и как гг убивает главного злодея,хотя кнопки,отвечающие за эти действия вообще в диалоге с другими персонажами появляются.
Мистер Вейдер добавил:
Понял в чем беда.В том,что массив кнопок не был заполнен изначально.
Решил проблему созданием триггера,который заполняет все кнопки из массива.
Миниатюры
Кликните на картинку для увеличения
Название:  180px-Indian.jpg
Просмотров: 12
Размер:  13.3 Кбайт  
Старый 09.11.2013, 12:09
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
То есть
Миниатюры
Кликните на картинку для увеличения
Название:  Безымянный.JPG
Просмотров: 31
Размер:  11.5 Кбайт  
Старый 09.11.2013, 12:09
Мистер Вейдер

offline
Опыт: 1,070
Активность:
ну да,массив кнопок с пустыми значениями.Просто пока у меня перс говорит с одним нпц в самом начале игры,для него кнопки создаются в первый раз и закидываются в массив,а остальные кнопки у остальных нпц,c которыми я еще поговорить не успел,еще не создались.Таким образом,проверка условий для других триггеров расценивала любую несозданную кнопку как удовлетворяющую условию (интересно,почему)
Старый 09.11.2013, 12:27
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
Мистер Вейдер, карочияничивонипонилкартастройгавно сделай так, как на скрине показано, проверь. Этого должно быть достаточно. Если не поможет - скажи.
Старый 09.11.2013, 12:40
ScorpioT1000
Работаем
offline
Опыт: отключен
да не должны. размерность - предаллок значений при загрузке ... не слушай тех, кто пустословит =)
Старый 09.11.2013, 12:42
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
ScorpioT1000, нуб - это поправимо
NatureKid добавил:
Диалоги, кнопки диалогов, таймеры и группы игроков должны иметь размерность.
Учись, пока я не в бане.
Старый 09.11.2013, 12:52
Мистер Вейдер

offline
Опыт: 1,070
Активность:
Лол,так то теперь всё работает.Просто триггеры проверяли какая нажата кнопка,при этом если триггер проверял нажата ли кнопка,которая еще не создана,(то есть в массиве в этой ячейке ничего нет),он считал,что все окей,и раз кнопки нет,то почему бы не выполнить триггер.Или он считал что любая несозданная кнопка это все созданные кнопки.Или еще что-нибудь,от чего сейчас в моем worldedit'e откроется черная дыра и всё сожрет.
Старый 09.11.2013, 13:01
ScorpioT1000
Работаем
offline
Опыт: отключен
NatureKid, ну затестируй тогда, я то просто так не пишу =)
local unit array arr
if(arr[100500] == null) then // обращение без любой аллокации
    call BJDebugMsg("gotcha!") //  выдает нулл без проблем и в памяти выделяет 131072 ячеек (размерность 100500)
endif
ScorpioT1000 добавил:
Мистер Вейдер, это уже проблемы вашей логики, что вы обращаетесь к объектам, которые не были созданы
Старый 09.11.2013, 13:05
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
ScorpioT1000, неть.
Я не помню точно из-за чего наступает момент, что незаданная размерность в кнопках диалога глючит.
Достаточно знать, что её нужно указывать. На этом точка.
Не веришь - тестани проверенный пример -
создай массив таймера без задания размерности.
запусти таймер 12 на 3 секунды
в триггере, где истекает таймер 12 поставь вывод сообщения.

сообщения не будет.
Старый 09.11.2013, 13:10
ScorpioT1000
Работаем
offline
Опыт: отключен
создай массив таймера без задания размерности.
запусти таймер 12 на 3 секунды
а "создай таймер" в цикле уже не модно?) зря близзы сделали эту размерность - теперь все забывают о том, что такое lazy loading
Старый 09.11.2013, 13:13
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
ScorpioT1000,
говоря быдлоязыком - ******* куда подальше со своими заумностями.
Люди хотят научиться делать интересные карты, а не выслушивать лекции по программированию и истории программирования.
Не презентацию возможностей варика.
И не красиво отточенный до блеска код.
Не понимать, почему то или то глючит.
Нет.
Старый 09.11.2013, 13:25
ScorpioT1000
Работаем
offline
Опыт: отключен
Почти в любых процессах, будь то биология, математика, физика, да хоть юриспруденция, есть некоторые базовые операции:
  1. Зарождение объекта (создание, регистрация, ...)
  2. Получение информации об объекте (чтение, запрос, справка, ...)
  3. Изменение объекта или его части (вмешательство, манипуляция, воздействие, внесение изменений, ...)
  4. Конец жизни объекта (уничтожение, обнулиение, границы, аннулирование, устаревание, смерть, ...)
Так вот, вы пытаетесь сделать 2, не сделав 1. И в любых процессах вы будете получать на это отказ, не важно, в какой области наук.
(хотя, lazy loading решает проблему, но это немного другая тема)
Старый 09.11.2013, 13:36
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
ScorpioT1000, я быдло и мне наплевать на всю эту теоретическую размазню.
Мне проще уяснить, например, что 2+2 вызывает баг, лучше юзать 2+1+1, при этом мне абсолютно неинтересно из-за чего такой баг.
Старый 09.11.2013, 13:40
ScorpioT1000
Работаем
offline
Опыт: отключен
1 за вас делает вар, если проставить размерность)
Старый 09.11.2013, 13:51
DioD

offline
Опыт: 45,184
Активность:
почему никто до сих пор не предложил сделать отладку?
туже проверку типа NPEtest
да и размерность массивов рак, учитывая что если нужен массив 8192 для таймеров, на гуи придётся создать 8192 таймера и нельзя делать таймеры только когда надо.
Старый 09.11.2013, 17:53
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
DioD:
если нужен массив 8192 для таймеров
Старый 09.11.2013, 20:11
DioD

offline
Опыт: 45,184
Активность:
В вашей персональной розовой реальности больше одного таймера создавать не торт и этот таймер обязательно должен хранится в начале массива?
советую почитать про алгоритмы автоматической сборки мусора, имхо для таймеров это очень и очень реализуемо, достаточно вычищать таймеры которые не запущены через некоторое время после того как выяснилось, что они не запущены, схожим методом можно вычищать многие другие объекты, вот только чтобы не тянуть за собой 100500 списков и счётчиков и не страдать от фрагментации имеет смысл двигать их по массиву когда надо, для чего нужен массив полного размера.
Старый 09.11.2013, 21:16
Melissa
Я всегда хочу как лучше!
offline
Опыт: 30,496
Активность:
DioD, существует только 1 таймер в "моей розовой реальности"
и 8192 в вашей.
Больше вариантов нет и быть не может.
Старый 09.11.2013, 21:25
Ответ

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

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

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

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



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