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

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

Ответ
 
Eraston
aka's CHLSN
offline
Опыт: 1,600
Активность:
Запуск периодического события
В общем, кто скажет, как написать такую штуку:
При подборе предмета запускается периодический таймер (скажем секунд 1320.), который будет добавлять заряд этому предмету?
Старый 27.08.2011, 23:34
Gudfree
гуи (V)_( Oo )_(V)
offline
Опыт: 8,233
Активность:
триггерами
Учи основы
Старый 27.08.2011, 23:52
Eraston
aka's CHLSN
offline
Опыт: 1,600
Активность:
xak12, ты умный?
Юнит получает предмет > Создать триггер, добавить событие "каждые Х секунд", добавить действие "добавить заряд предмету I" = всё. Но есть в этом способе одно но: события не удаляются, если по 100500 раз поднять и выложить предмет, то вар повиснет.
Поэтому и спрашиваю, как это сделать по-другому.
Старый 28.08.2011, 00:35
Velociraptor
В пространстве и времени
offline
Опыт: 14,801
Активность:
Ну ставь нужные тебе условия на триггер, чтобы события на каждый предмет добавлялись только один раз...
Старый 28.08.2011, 00:40
Eraston
aka's CHLSN
offline
Опыт: 1,600
Активность:
Velociraptor, эмм.. Снова не дописал.. Смысл в общем в том, что заряды предмет получает только если находится у героя, но проверять у каждого героя все 6 слотов на мой взгляд слишком затратно, особенно, если период идет, допустим, до 60 секунд.

Цитата:
Сообщение от Velociraptor
чтобы события на каждый предмет добавлялись только один раз...
Это можно было бы использовать, если бы можно было проверить, находится ли предмет у героя, а не имеет ли какой-либо герой этот предмет.
Старый 28.08.2011, 00:53
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Eraston, хэш с локальными таймерами тебе в помощь..
Старый 28.08.2011, 00:54
AsagiriGen
щпаовапа
offline
Опыт: 2,853
Активность:
Создай переменную, возьми ее за колличество зарядов, и прибавляй...
Старый 28.08.2011, 00:54
Eraston
aka's CHLSN
offline
Опыт: 1,600
Активность:
Vampirrr, а так получится?:
Создаем один таймер.
В хеш по хендлу таймера в 0 заносим количество предметов данного типа в игре.
Далее каждые Х секунд проверяем все занесенные в хеш по хендлу таймера предметы (начиная с 1 до значения в 0). В этот же хеш по хендлу таймера в ячейку с номером хендла предмета заносим состояние предмета (у героя/не у героя (true/false)).
Старый 28.08.2011, 00:59
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Eraston, эм, ну как бы я хз, как ты будешь делать это:
каждые Х секунд проверяем все занесенные в хеш по хендлу таймера предметы
Да и вообще, есть такие функции как
native UnitHasItem takes unit whichUnit, item whichItem returns boolean
и
native IsItemOwned takes item whichItem returns boolean //(это кажется привязанность предмета к игроку, но не уверен)
А что бы количество предметов сохранить, нужна всего 1 глобальная переменная. Ну а если ты будешь делать через 1 переодический триггер, то хэш тут нафиг ненужен - юзай массивы.
Старый 28.08.2011, 01:13
Eraston
aka's CHLSN
offline
Опыт: 1,600
Активность:
Vampirrr:
IsItemOwned
В этом случае заряды будут даваться даже в том случае, если предмет не у героя.
Vampirrr:
UnitHasItem
Нужно проверять в худшем случае 72 слота...для компа немного, но все равно не слишком оптимизировано.
Vampirrr:
А что бы количество предметов сохранить, нужна всего 1 глобальная переменная. Ну а если ты будешь делать через 1 переодический триггер, то хэш тут нафиг ненужен - юзай массивы.
Вообще-то я предложил вариант с хешем по той причине, что таких предметов будет несколько, а написать одну функцию гораздо легче и проще, чем создавать глобальный массив, и потом разбираться где там что.
Старый 28.08.2011, 01:25
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Eraston:
Нужно проверять в худшем случае 72 слота...для компа немного, но все равно не слишком оптимизировано.
Я там не вижу передаваемого параметра "слот".. Сейчас не могу проверить, как именно эта функция работает, но по логике она тебе вернет тру, если у юнита есть айтем и пофигу в каком слоте.
Eraston:
Вообще-то я предложил вариант с хешем по той причине, что таких предметов будет несколько, а написать одну функцию гораздо легче и проще, чем создавать глобальный массив, и потом разбираться где там что.
Вообще-то параллельные массивы ничем не хуже хэша. Для удобства есть VJass в котором можно использовать структуры. Да и вообще, не пойму в чем проблема. Вариантов куча и они ограничены лишь воображением..

Отредактировано Vampirrr, 28.08.2011 в 01:47.
Старый 28.08.2011, 01:36
Eraston
aka's CHLSN
offline
Опыт: 1,600
Активность:
Vampirrr:
Вариантов куча и они ограничены лишь воображением..
Как реализовать - вот проблема.
Vampirrr:
Я там не вижу передаваемого параметра "слот"
А.. Понял.. Ну тогда количество проверок = 12 * кол-во предметов 1 типа.
Старый 28.08.2011, 01:54
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Eraston:
Как реализовать - вот проблема.
Зависит от твоих способностей.
Eraston:
Ну тогда количество проверок = 12 * кол-во предметов 1 типа.
Не вижу другого варианта.
Старый 28.08.2011, 01:58
Ответ

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

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

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

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



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