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

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

Ответ
 
Sullome

offline
Опыт: 945
Активность:
Абилка, мана и JASS
Меня тут на днях заинтересовал вопрос -
Можно ли присвоить некоторой переменной(real) количество маны, потраченной юнитом на кастование абилки?
Например:
Триггер:
Событие - Юнит начинает/заканчивает кастовать заклинание (или Юнит тратит ману, если это можно отследить)
Действие - Присвоить переменной R (типа real) количество маны, затраченной юнитом на кастование заклинания
Нужно, чтоб триггер срабатывал при произнесении любой способности, тратящей ману юнита (юнит - любой юнит, находящийся на расстоянии, меньшем L (некое расстояние), от точки с координатами {X;Y} (или просто от дестрактабла) ), и в переменную записывалось кол-во именно потраченной маны у юнита...
Старый 23.12.2010, 23:50
Иноземец
сJass = true
offline
Опыт: 4,379
Активность:
Sullome:
Можно ли присвоить некоторой переменной(real) количество маны, потраченной юнитом на кастование абилки?
Можно. Кол-во маны у юнита в момент начала каста - Кол-во маны в конце = (real).
Правда, придётся создавать еще 1 триггер, чтобы отследить, когда заклинание подействует.
Иноземец добавил:
Событие EVENT_PLAYER_UNIT_SPELL_CAST - по идее должно срабатывать, когда юнит начинает кастовать, но мана еще не израсходованна.
Событие EVENT_PLAYER_UNIT_SPELL_EFFECT - когда необходимая мана уже отнята. Мб я ошибаюсь, но в любом случае - попробуй.
Старый 24.12.2010, 00:21
Sullome

offline
Опыт: 945
Активность:
Иноземец:
Правда, придётся создавать еще 1 триггер, чтобы отследить, когда заклинание подействует.
это не нужно. Мне абсолютно всё равно, что делает заклинание. Главное - Юнит потратил ману.
Иноземец:
Кол-во маны у юнита в момент начала каста - Кол-во маны в конце = (real).
создавать триггер, который будет отслеживать, что юнит начал кастовать заклинание, и записывать ману в начале каста в переменную (глобалку), создавать второй триггер, который будет отслеживать, когда юнит начал кастовать заклинание, и записывающий в переменную разность глобалки и кол-ва маны в конце?
Или ты не это имел ввиду?
Старый 24.12.2010, 00:23
Иноземец
сJass = true
offline
Опыт: 4,379
Активность:
Sullome, Ну да, именно это. Попробуй.
Иноземец добавил:
Еще можно тупо ID абилки смотреть и уровень - как вариант.
Старый 24.12.2010, 00:45
Sullome

offline
Опыт: 945
Активность:
Иноземец добавил:
Еще можно тупо ID абилки смотреть и уровень - как вариант.
а вот про это пожалуйста поподробней...я не очень хорошо разбираюсь в JASS'e (не знаю многих функций и возможностей)
Старый 24.12.2010, 15:15
Sullome

offline
Опыт: 945
Активность:
Sullome:
создавать триггер, который будет отслеживать, что юнит начал кастовать заклинание, и записывать ману в начале каста в переменную (глобалку), создавать второй триггер, который будет отслеживать, когда юнит начал кастовать заклинание, и записывающий в переменную разность глобалки и кол-ва маны в конце?
Создал систему триггеров, использующую данную схему.
Итог - примерное кол-во маны, потраченной юнитом на каст заклинания я получаю (проверял через FloatingText), но вот остальная часть системы не работает. А именно - установление Макс.ХП появляющегося юнита (юнит появляется) равным кол-ву потраченной маны Героя.
Вот карта, внутри (в редакторе триггеров) описано всё, что должен делать триггер.
Пожалуйста, укажите на ошибку...(если не лень, то и исправте её, чтоб всё работало, или скажите, как исправить).
Прикрепленные файлы
Тип файла: w3x Spell_Mana_andMONSTER.w3x (37.3 Кбайт, 18 просмотров )
Старый 27.12.2010, 00:09
Skino

offline
Опыт: 4,683
Активность:
глянь в опен доте как работает вард у пугны.
Skino добавил:
Я думал триггерно нельзя увеличивать макс хп Оо
Старый 27.12.2010, 00:48
Sullome

offline
Опыт: 945
Активность:
Skino:
глянь в опен доте как работает вард у пугны.
Skino добавил:
Я думал триггерно нельзя увеличивать макс хп Оо
Вард у пугны работает на основе скила дракончика ночных эльфов. Но он работает с ХП , а мне нужно работать ещё и с Макс.ХП
Я думал, что можно работать через JASS, но похоже, что ты прав. Что делать?
Старый 27.12.2010, 01:30
NoSilence
Случайный прохожий
offline
Опыт: 1,927
Активность:
Меняет максимальные хп юниту:
function SetUnitMaxLife takes unit u, real life returns nothing
  local real r = life - GetUnitState(u, UNIT_STATE_MAX_LIFE)
  if r > 0. then
    if r > 1000. then
      loop
        call UnitAddAbility(u, 'A005')
        call SetUnitAbilityLevel(u, 'A005', 0x05)
        call UnitRemoveAbility(u, 'A005')
        set r = r - 1000.
        exitwhen r < 1000.
      endloop
    endif
    if r > 100. then
      loop
        call UnitAddAbility(u, 'A005')
        call SetUnitAbilityLevel(u, 'A005', 0x04)
        call UnitRemoveAbility(u, 'A005')
        set r = r - 100.
        exitwhen r < 100.
      endloop
    endif
    if r > 10. then
      loop
        call UnitAddAbility(u, 'A005')
        call SetUnitAbilityLevel(u, 'A005', 0x03)
        call UnitRemoveAbility(u, 'A005')
        set r = r - 10.
        exitwhen r < 10.
      endloop
    endif
    if r > 1. then
      loop
        call UnitAddAbility(u, 'A005')
        call SetUnitAbilityLevel(u, 'A005', 0x02)
        call UnitRemoveAbility(u, 'A005')
        set r = r - 1.
        exitwhen r < 1.
      endloop
    endif
  else
    if r < -1000. then
      loop
        call UnitAddAbility(u, 'A005')
        call SetUnitAbilityLevel(u, 'A005', 0x09)
        call UnitRemoveAbility(u, 'A005')
        set r = r + 1000.
        exitwhen r > -1000.
      endloop
    endif
    if r < -100. then
      loop
        call UnitAddAbility(u, 'A005')
        call SetUnitAbilityLevel(u, 'A005', 0x08)
        call UnitRemoveAbility(u, 'A005')
        set r = r + 100.
        exitwhen r > -100.
      endloop
    endif
    if r < -10. then
      loop
        call UnitAddAbility(u, 'A005')
        call SetUnitAbilityLevel(u, 'A005', 0x07)
        call UnitRemoveAbility(u, 'A005')
        set r = r + 10.
        exitwhen r > -10.
      endloop
    endif
    if r < -1. then
      loop
        call UnitAddAbility(u, 'A005')
        call SetUnitAbilityLevel(u, 'A005', 0x06)
        call UnitRemoveAbility(u, 'A005')
        set r = r + 1.
        exitwhen r > -1.
      endloop
    endif
  endif
endfunction
Где 'A005' ид спела на основе "Предмет: увеличение запаса здоровья" с уровнями:
1: +0 здоровья
2: -1
3: -10
4: -100
5: -1000
6: +1
7: +10
8: +100
9: +1000
Старый 27.12.2010, 01:57
Skino

offline
Опыт: 4,683
Активность:
NoSilence, Очень хорошая функция, просто слов нет.
Добавь ка ты её сюда xgm.ru/forum/showthread.php?t=8525
Старый 27.12.2010, 02:19
NoSilence
Случайный прохожий
offline
Опыт: 1,927
Активность:
Skino, это из какой-то очень старой наработки. Да и алгаритм я думаю не очень. Хотя у меня она по несколько раз в секунду бывает вызывается и лагов нету.
Старый 27.12.2010, 11:33
Sullome

offline
Опыт: 945
Активность:
NoSilence:
Да и алгаритм я думаю не очень.
Да, алгоритм можно немного улучшить...но в любом случае - спасибо за идею!
P.S.
        call UnitAddAbility(u, 'A005')
        call SetUnitAbilityLevel(u, 'A005', 0x05)
        call UnitRemoveAbility(u, 'A005')
Добавляем абилку (она добавляет Макс.ХП), удаляем абилку, но Макс.ХП, добавленные абилкой остаются?...интересно...
Старый 27.12.2010, 15:51
Zanozus
Уехал учиться
offline
Опыт: 8,512
Активность:
Вот держи пример. Вычисляет со 100% точностью.
При касте способности юниту восстанавливается половина(можно и всю поставить) затраченной маны.
Прикрепленные файлы
Тип файла: w3x ManaCost.w3x (20.4 Кбайт, 17 просмотров )

Отредактировано Zanozus, 27.12.2010 в 21:31.
Старый 27.12.2010, 21:06
Sullome

offline
Опыт: 945
Активность:
эм...ну вообще-то мне больше чем пофиг на точность вычислений, мне и примерно подходит + мне кажется, что мой код разность в мане находит лучше(меньше процессор жрёт), чем твой...(только в моих триггерах совершается ещё куча других действий и меня щас больше интересуют именно они...)
Старый 27.12.2010, 23:01
Zanozus
Уехал учиться
offline
Опыт: 8,512
Активность:
ну действия тут можно прикрутить любые, например наносить урон вокруг юнита равный потраченной мане. И процессор тут нЕчему жрать: нет ни циклов ни энумов.

Отредактировано Zanozus, 28.12.2010 в 00:24.
Старый 27.12.2010, 23:42
Zanozus
Уехал учиться
offline
Опыт: 8,512
Активность:
да кста у тебя баг в системе:
если спелл канальный или со временем подготовки то регенерация маны или другие факторы оооочень сильно исказят манакост пока спелл не завершен.
Старый 28.12.2010, 12:59
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
вообще функцию увеличения здоровья выгоднее делать, скажем, на степенях двойки...
Старый 28.12.2010, 18:00
Sullome

offline
Опыт: 945
Активность:
Zanozus:
да кста у тебя баг в системе:
если спелл канальный или со временем подготовки то регенерация маны или другие факторы оооочень сильно исказят манакост пока спелл не завершен.
Я знаю, и это не баг. Так и задумывалось.
Master_chan:
вообще функцию увеличения здоровья выгоднее делать, скажем, на степенях двойки...
А можно чуть подробней мысль изложить...
Старый 28.12.2010, 18:48
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
типо вот так тока вместо дамми абилак с атакой дамми абилки на хп
Прикрепленные файлы
Тип файла: w3x Bonus Attack.w3x (11.1 Кбайт, 16 просмотров )
Старый 28.12.2010, 19:53
Sullome

offline
Опыт: 945
Активность:
мда...
может хоть кто-нибудь хотя бы намекнуть, что имел ввиду Master_chan, когда говорил
вообще функцию увеличения здоровья выгоднее делать, скажем, на степенях двойки...
Я ток знаю, что 10,100,1000 и т.д. в двоичной системе счисления - степени двойки в десятиричной......можно перевести в 16-ричную....но сам алгоритм-то как лучше изменить?...
P.S.я про изменение макс.хп говорю, на всякий случай повторяю...
Старый 30.12.2010, 00:55
Ответ

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

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

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

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



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