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

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

Ответ
 
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
handle...
В открытой версии доты видел использование игрового "буфера" через тип данных handle. Насколько я понял, этим реализовано что-то вроде создания переменных во время игры, доступных в различных функциях. Вроде глобальных. Но так и не понял принцип работы. Для внесения в буфер переменная используется строка. Зачем? Это выполняет роль идентификатора? Или что это вообще? Прошу объяснить знающих, пожалуйста.
Второй вопрос. Перерыл мпку архивы и так и не нашел, в каком файле(файлах) находятся выполнения стандартных спеллов. Хотелось бы код посмотреть.
Старый 07.02.2008, 17:52
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
senatus, первый вопрос непонятен, приведи пример кода. Начет второго - код спелов заключен в коде самой игры, и его не как не посмотреть (по крайней мере пока близзард не отдаст исходники).
Старый 07.02.2008, 17:54
S

offline
Опыт: 43,833
Активность:
Цитата:
Перерыл мпку архивы и так и не нашел, в каком файле(файлах) находятся выполнения стандартных спеллов. Хотелось бы код посмотреть.

Некоторые спеллы зашиты в движок игры напрочь (иллюзия, огненное лассо), некоторые можно воспроизвести джассово... как уже сказал exploder без исходников мало что светит.
Старый 07.02.2008, 18:00
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
exploder опен доты сейчас с собой нету. Не могу отыскать, что бы скачать.

так. а на счет вшитых спеллов. Поню последний патч, где были добавлены тинкер, повелитель зверей и абилки к ним. Ну, превратиться в кибер-гоблина и стадо ящериц, к примеру. Так вот, вместе с патчем и экзешник изменился? Разве так. я думал где-то в архиве есть файлик, который содержит описание спеллов на джасе...

Sasha ясно. Жаль. У меня проблема возникла следующая:
Просто написал уже немало спеллов на джасе и в одном проэкте возникла нужда в спелле, который снимает баффы. Очищение, скажем. Так вот. Для каста используются дамми-спеллы. Кислотная бомба, к примеру. Очищение снимает бафф, а эффект остается один фиг на время, которое написано на джассе.

Можно опять же с помощью джасса убрать эффекты. Но отслеживать это... как?..
Да и другие приемы, может быть, я бы усмотрел в выполнении стандартных спеллов...
Старый 07.02.2008, 18:05
Лось

offline
Опыт: 7,223
Активность:
senatus это же обычный RB+cache. Если не знаеш что это, найди в наработках сайта систему SCV.
Старый 07.02.2008, 18:15
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
да и статьи по джассу почитай, там все это есть
Старый 07.02.2008, 18:22
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
senatus, бафф с юнита можно свесить функцией RemoveAbility(unit, baffID).
Старый 07.02.2008, 18:35
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
exploder я в курсе. Бафф удаляется и очищением хорошо. Мне эффект снять надо.
Лось rb = Return bug?
про game cache я понял. Но у него были написаны вручную функции, которые с ним работали. Вот я и удивился. Поэтому я и не понял, зачем это, если есть глобальные функции?
Старый 08.02.2008, 12:10
adic3x

offline
Опыт: 107,539
Активность:
при сработке спела проверять баф тригерно?
Старый 08.02.2008, 13:14
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
ADOLF
Смотрите. Есть абилка (назовем ее xx) , обслуживающаяся триггером при срабатывании. Она увеличивает максимальное здоровье персонажа на определенное время. Затем снимает его.

При сработке какого спелла вы имеете ввиду? Очищения?
Допустим, я словлю триггером время его вызова. Проверю, было ли кинуто очищение на юнита, у которого временно повышено здоровье. Сниму триггерно его здоровье. А потом здоровье еще и снимется триггером, обслуживающим xx. Какой выход? Поддерживать xx двумя функциями? Вторая будет снимать спелл? В таком случае, первая будет вызывать вторую. Проблема опять останется
Старый 08.02.2008, 13:24
adic3x

offline
Опыт: 107,539
Активность:
при касте увелечения жизни создаем таймер, аттачем на него юнита, и каждые .5 сек прверяем наличие бафа, если его нет удаляем абилу на увелечение жизни
либо при касте развеивания проверять баф и ремовать абилу, смотри сам как лучше
Старый 08.02.2008, 13:35
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
Цитата:
Сообщение от ADOLF
либо при касте развеивания проверять баф и ремовать абилу, смотри сам как лучше


Да. Он отремувится развеиванием. А потом еще и отремувится триггером с событием ,5 еще раз...
А может глобальную логическую переменную, которая будет означать, отремувился ли уже бафф очищением, и не ремувить триггерно еще раз, если в переменной хранится true...
Вот поэтому-то я и хотел глянуть на исполнение стандарнтых спеллов. Что бы рассмотреть все условия и заранее избежать глюков.

п.с. нам же не известно, будет ли рассеивание кастоваться, либо нет. А абилка на увеличение жизни накладывается на несколько секунд. и обязательно должна ремувиться.
Старый 08.02.2008, 13:39
adic3x

offline
Опыт: 107,539
Активность:
Цитата:
А потом еще и отремувится триггером с событием ,5 еще раз...

а зачем тригер с событием? ну я же и говорил, наверное лучше вариант с таймером...
Цитата:
А может глобальную логическую переменную

бтв, два паралеьных каста и идем курыть=/
Старый 08.02.2008, 13:56
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
ADOLF Да... а курить вредно.
Поэто втф и дупликэйт моды отключены. Но это так... между прочим.

А всю прелесть периодического триггера теперь понял. Идея хорошая, но не будет ли это карту больше нагружать? Боюсь спеллов с подобным устройством у меня не мало будет.
Старый 08.02.2008, 13:59
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
нет, если есть группа объектов которые надо периодически чекить то лучше делать линейный пробег по массиву оных объектов, нежели чем каждому вешать таймер
Старый 08.02.2008, 14:11
adic3x

offline
Опыт: 107,539
Активность:
омг=/ я вообще считаю спелы которые не растчитаны на паралеьный каст кг/ам по своей натуре
периодический триг - зло, таймер добро
есть перевод експлодера, там описан кафновариант с кешем, вобщем это основа поможет понять принцип аттача на таймер)
Старый 08.02.2008, 14:11
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
ADOLF, FellGuard
Все дело в том, что, как я уже сказал, абилки именно и не расчитаны на парллельный каст, ибо у героев находятся. Приходится успокаивать себя с тем, что это причина.
Сам не люблю, когда они не кастуются параллельно, но заморачиваться не стоит.

Так что? Лучше вешать таймер на юнита? Так будет менее нагружено и решит проблему?
Старый 08.02.2008, 15:44
adic3x

offline
Опыт: 107,539
Активность:
Цитата:
но заморачиваться не стоит

мда, делать одинаково по времени разработки=/

опять же, наверное тогда легче запускать таймер с прверкой наличия бафа.

зы и всетаки прочти перевод про создания простого стомп спела, там понятно написанно очень, фор думмиес^^
Старый 08.02.2008, 15:52
senatus
тихий и скромный...
offline
Опыт: 7,023
Активность:
Прочту. Ибо думмис, как я вижу, по отношению к некоторым.

А вот
Цитата:
мда, делать одинаково по времени разработки=/
не совсем понятно
Старый 08.02.2008, 15:56
adic3x

offline
Опыт: 107,539
Активность:
Код:
function MySpellPer takes nothing returns nothing
 local timer t=GetExpiredTimer()
 local integer s=XAT_GetInt(t)
 if GetUnitAbilityLevel(DTM_u_s[s], 0x41303030)==0x00then
 //
 // removing ability
 //
 //
 call XAT_RemoveInt(t)
 call DTM_sRemove(s)
 call DestoyTimer(t)
 endif
 set t=null
endfunction

function MySpellStart takes nothing returns nothing
 local integer s=DTM_sGet()
 local timer t=CreateTimer()
 call XAT_SetInt(t, s)
 set DTM_u_s[s]=GetSpellTargetUnit()
 //
 // do somethigh with unit
 //
 //
 call TimerStart(t, .5, true, function MySpellPer)
 set t=null
endfunction


ADOLF добавил:
мой код, т.е. как бы сделал это я
тут вобщем юзаются системы, но короче, место ХАТ_СетИнт юзать сцв (крап конешно) и ДТМ модуль не использовать, а аттачить напряму АшДваАй (юнит)

я даже незнаю поможет ли мой пример, но иначе писать просто уже не умею, но в принципе как видишь написание спела заняло около 2 минут =) (писал по памяти, могут быть ашипки)

ADOLF добавил:
exploder, кста ава жжот, только ща разглядел, можешь сделать что то аналогичное про доту и моск?)
Старый 08.02.2008, 16:10
Ответ

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

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

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

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



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