Jaker01
Ученик академии XGM
offline
Опыт:
4,149Активность: |
Триггерное восполнение здоровья
Создал нестандартный предмет (при использовании восполняет здоровье герою). Длительность действия предмета - 15 секунд.
Итак, 1 триггер - при использовании предмета герой заносится в группу (отряд)
2 триггер - каждые 3 секунды восполняет здоровье всем участникам этой группы. Вот проблема, как сделать так, чтобы здоровье восполнялось именно каждые 3 секунды после использования предмета? У меня это выглядит несколько иначе, например, во 2 триггере пройдет 2 секунды и затем герой использует предмет, здоровье ему восполнится сразу через секунду (ибо в триггере уже прошло 2 секунды), а нужно чтобы отсчет времени начинался только после использования предмета.
Триггер для многопользовательской игры. |
11.06.2011, 21:28 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Jaker01, юзай таймеры и хеш. |
11.06.2011, 21:33 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Jaker01
Ученик академии XGM
offline
Опыт:
4,149Активность: |
С хешом не совсем умею работать ): А других нету вариантов? |
11.06.2011, 21:37 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
naxim
offline
Опыт:
10,186Активность: |
Jaker01:
Есть же стандартный итем, который со временем восстанавливает. |
11.06.2011, 21:41 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Jaker01
Ученик академии XGM
offline
Опыт:
4,149Активность: |
|
11.06.2011, 21:48 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FEARSTARTER
desert eagle
offline
Опыт:
19,364Активность: |
Цитата:
|
|
11.06.2011, 21:59 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
triggering unit после первого же вэйта потеряется - лучше занести в локалку |
11.06.2011, 22:04 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FEARSTARTER
desert eagle
offline
Опыт:
19,364Активность: |
Он и после пятого и 105ого не потеряется
|
11.06.2011, 22:05 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Jaker01
Ученик академии XGM
offline
Опыт:
4,149Активность: |
FEARSTARTER:
Что правда, то правда. Только что проверил, не теряется... Хотя сам раньше думал что такое нельзя сделать D; А если предмет используют несколько героев, работать будет? :o |
11.06.2011, 22:13 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Jaker01, будет. но вэйты дерьмо, лучше их не использовать. |
11.06.2011, 22:20 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Jaker01
Ученик академии XGM
offline
Опыт:
4,149Активность: |
|
11.06.2011, 22:32 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Jaker01, периодическим триггером в 1 секунду пикать всех кто в группе, прибавлять к Custom Value 1, если оно равно 2, ставить его равным 0, прибавлять хп. |
11.06.2011, 22:40 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
offline
Опыт:
39,512Активность: |
Jaker01:
переодически юзать +N*0.05 каждые 0.05 сек... будет плавный реген Оо |
11.06.2011, 23:12 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
как грамотно решать такие задачи:
1) Создаем виртуальный класс-свойство объектов HealingItemTypeAlpha01. 2) Определяем действия которые данное свойство может и будет выполнять, тупо пишем на это действие исчерпывающую функцию и связываем её с названием. 2.2) У нас все завязано на событие, событие в нашем случае - время, вы должны конкретно указать время, подробнее ниже 3) Каждый юнит должен иметь некоторое свойство, делающее этот юнит уникальным именно для нас, это тупо порядковый номер регистрации. 4) Юниты зарегестрированы по номеру, существует плотный список существующих юнитов, чтобы не проверять номера которые давным давно уже удалены и не присвоены заново. 5) Наша система должна оперировать юнитами, тестзапуск происходит в момент инициализации системы и при добавлении-удалении любого юнита из системы, но не чаще чем 0.03125 секунды, это 32 фрейма в секунду, то есть максимум 32 запуска в секунду. 6) В момент проверки система проверяет юнитов состояние которых изменилось с прошлого запуска, для этого мы ведем дополнительные списки, если юнит создан, мы пишем его кроме прочего в batchlist ровно как удаленных юнитов. 7) Система запускается 32 раза в секунду все равно, но смотрит только батчлист, если он пуст то таймер пропускает итерацию. 7.2) Метод может иметь альтернативу, так называемый variabletimeframe когда система анализирует действия и запускает таймер на нужное число фреймов, но тут возникают сложности в управлении, так как если появились новые задания, их потребуется обработать отдельно, отложив одно задание и выполнив другое, а потом продолжить. Это у нас стек с сортировкой действий по времени исполнения. У нас есть 100500 заданий, которые пишутся в хронологическом порядке и исполнение идет от одного задания к другому. 8) В batchlist е после повешания этого самого бафа мы обнаружим ID юнита, проверив ID юнита мы обнаружим в списке эффектов HealingItemTypeAlpha01_INIT_TIMESTAMP что предписывает каждые 3 секунды производить предписанные в отношении юнита действия. 9) Следующая итерация которая предписывает действия произойдет через 96 вызовов и потом каждые 96 вызовов. 9.2) Соответственно мы добавляем к итерации таймера проверку на прохождение нужного промежутка времени или пишем в сортированный стек действия в том порядке, в котором они будут исполнены. Такой подход, некоторые называют OOP - каждый эффект, каждое действие создается и обрабатывается как объект, объекты формируют классы и подклассы. Все дополнительные классы являются свойством основного класса, будь то юнит или любой другой хендл в варе. Что касается выбора, у нас самое быстрое это нативки, таймер который срабатывает 32 раза в секунду и ни о чем не думает как правило предпочтительнее таймера которые срабатывает 10 раз в секунду, но при этом думает за всех, сортирует батчлист и перезапускается после каждой итерации на новое время, в любой момент может быть прерван без ограничений. тем более у вас запросто могут быть свойства плана PushBackGeneric которые вызываются каждый фрейм, или например обработка урона или еще чего либо, что опять таки сработает каждый фрейм все равно. |
12.06.2011, 00:07 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Anufis
offline
Опыт:
6,290Активность: |
DioD:
На этом моменте чуток не понял. Куча таймеров на нативках предпочтительнее одного крупного? |
12.06.2011, 10:03 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
silumin
offline
Опыт:
11,153Активность: |
|
12.06.2011, 10:49 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Anufis
offline
Опыт:
6,290Активность: |
silumin:
Если оно стабильнее работает и с минимумом нагрузки, то оно лучше будет. |
12.06.2011, 10:59 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
|
12.06.2011, 11:00 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Jaker01
Ученик академии XGM
offline
Опыт:
4,149Активность: |
silumin:
Как я и писал выше, не умею работать с хешом... И где- то ещё читал, что его лучше использовать для сингла (могу и ошибаться), а у меня мультиплеерная карта D; И как я понял, хеш подразумевает собой сохранение каких-либо данных в игре, не? Я не совсем понимаю, что именно я там сохранять буду ы ): Были идеи сделать на каждого игрока отдельный триггер, который будет восполнять здоровье, но это не оптимально, ибо возможно сделать все 1-им триггером. Вообщем, пока все что я могу, это сделать восполнение через wait'ы, но может вы предложите ещё какие-нибудь способы решения? |
12.06.2011, 16:58 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
silumin
offline
Опыт:
11,153Активность: |
Anufis, у тебя Пентиум 2 и 128 озу? Я думаю ты понял к чему этот вопрос... Jaker01, ХТ для всего хорош: и для сингла и для мультиплеера, если использовать правильно. Для твоего случая - это идеальный вариант. Есть определённые тонкости в работе с ХТ, но удобство реализации некоторых задач это компенсирует сполна. Поэтому советую прочитать статьи по ХТ и таймерам, не пожалеешь точно. |
12.06.2011, 17:37 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|