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

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

Ответ
 
icefrost

offline
Опыт: 259
Активность:
Как разделить скиллы на категории и отлавливать из какой категории скилл
Мне нужно создать несколько заклинаний, каждая из которых будет защищать от определенных способностей(под защитой имеется ввиду - снимать дебаффы, восстанавливать наносящийся урон итп...), и вообщем-то создать защищающее заклинание я могу, но не знаю как распределить существующие скиллы по категориям и отлавливать принадлежность способности к той или иной категории. Просьба предлагать решения на уровне обычного jass, gui, редактора обьектов итд... но не на vjass cjass итп...
Важно: в карте присутствуют наносящие аое урон способности, но, во всяком случае пока что, все скиллы сделаны на триггерах, на основе "канала", и урон наносится триггерно.
Старый 19.10.2013, 18:44
Карточка
Kicked by SSrunX
offline
Опыт: 2,017
Активность:
бд заводишь и прописываешь любые типы куда угодно как угодно
Старый 19.10.2013, 18:51
icefrost

offline
Опыт: 259
Активность:
Карточка:
бд заводишь и прописываешь любые типы куда угодно как угодно
допустим так я разделю скиллы на категории, но как я буду отслеживать категорию скилла при нанесении урона, если скилл не имеет конкретной цели, а бьет по области ?
Ксатати, я вот что подумал, учитывая что категорий будет не очень много(от 3 до 5), можно ли при нанесении урона функцией
call UnitDamagePointLoc
в DAMAGE_TYPE для скиллов например первой категории ставить normal, для скиллов второй категории - fire, для третьей - cold итд... а потом какой-то функцией улавливать тип нанесенного урона ? и будет ли влиять изменение типа урона на сам урон ? если да, то можно это как-то обойти ?
Старый 19.10.2013, 20:38
Карточка
Kicked by SSrunX
offline
Опыт: 2,017
Активность:
ну так если ты прописываешь код спеллов, значит те цели что были продамажены - ты уже знаешь какой конкретный скилл это был. далее пробегаешь по базе данных с этим скиллом и получаешь свою категорию
Старый 19.10.2013, 21:28
icefrost

offline
Опыт: 259
Активность:
Карточка:
ну так если ты прописываешь код спеллов, значит те цели что были продамажены - ты уже знаешь какой конкретный скилл это был. далее пробегаешь по базе данных с этим скиллом и получаешь свою категорию
например кто-то кастует скилл, который создает дамми и направляет в точку каста нанося урон всем по пути, каждые 0.05 секунд, и допустим спустя 5 сек дамми доходит до юнита с спеллом-защитой и последнему наносится урон, как я смогу узнать из за какого скилла был нанесен урон ?
кстати, а что насчет этого ? возможно или нет ?
icefrost:
я вот что подумал, учитывая что категорий будет не очень много(от 3 до 5), можно ли при нанесении урона функцией
call UnitDamagePointLoc
в DAMAGE_TYPE для скиллов например первой категории ставить normal, для скиллов второй категории - fire, для третьей - cold итд... а потом какой-то функцией улавливать тип нанесенного урона ? и будет ли влиять изменение типа урона на сам урон ? если да, то можно это как-то обойти ?
если да, то какой функцией отслеживается тип урона.

Отредактировано icefrost, 19.10.2013 в 22:47.
Старый 19.10.2013, 22:41
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
никак он не отслеживается.
вам правильно сказали - делаете дб, указываете абилки и типы
т.к. вы наносите урон триггерно, то вы знаете какие абилки вы юзаете -> знаете откуда плясать
Старый 20.10.2013, 03:29
icefrost

offline
Опыт: 259
Активность:
Ну ок, тогда сделаю через бд. Всем спасибо. Тему можно закрывать Пока что тему не закрывайте.

Отредактировано icefrost, 21.10.2013 в 12:51.
Старый 20.10.2013, 12:21
adic3x

offline
Опыт: 107,539
Активность:
call UnitDamagePointLoc
Насколько я помню, ее лучше не использовать, а наносить урон каждому юниту отдельно.
И да, была фишка с равкодами, где можно сразу зашифровать тип урона. Например 'A100' и 'A101' наносят тип урона 1, 'A204' - тип 2. Второй чар, который очень легко достать сдвигами.
Но БД через хеш - универсальнее.
Старый 20.10.2013, 12:39
ScorpioT1000
Работаем
offline
Опыт: отключен
UnitDamagePointLoc не работает на мак ос)
ScorpioT1000 добавил:
у меня что-то было столетней давности ...
требует IFDEBUG
bool UnitDamageRange(unit damager, real x, real y, real radius, real damage, bool damage_ally, bool damage_neutral, attacktype at, damagetype dt) {
    player pc = GetOwningPlayer(damager)
    player pt
    integer i
    group units = CreateGroup()
    unit u
    IFDEBUG(units == null,false)
    IFDEBUG(radius==0.0 or damager==null, false)
    if( damage < 0.001 ) {
        return true
    }

    GroupEnumUnitsInRange(units,x,y,radius,function TRUEf)
    GroupRemoveUnit(units,damager)
    i = CountUnitsInGroup(units)
    whilenot( i <= 0 ) {
        u = FirstOfGroup(units)
        pt = GetOwningPlayer(u)
        if (!damage_ally) {
            if (IsPlayerEnemy(pt,pc)) {
                UnitDamageTarget(damager,u,damage,true,false,at,dt,WEAPON_TYPE_WHOKNOWS)
            }
        } else {
            UnitDamageTarget(damager,u,damage,true,false,at,dt,WEAPON_TYPE_WHOKNOWS)
        }
        if (damage_neutral and pt == Player(PLAYER_NEUTRAL_PASSIVE) ) {
            UnitDamageTarget(damager,u,damage,true,false,at,dt,WEAPON_TYPE_WHOKNOWS)
        }
        GroupRemoveUnit(units,u)
        i--
    }
    DestroyGroup(units)
    u = null
    return true
}
Старый 20.10.2013, 14:52
icefrost

offline
Опыт: 259
Активность:
ADOLF:
И да, была фишка с равкодами, где можно сразу зашифровать тип урона. Например 'A100' и 'A101' наносят тип урона 1, 'A204' - тип 2. Второй чар, который очень легко достать сдвигами.
Хмм... ты предлагаешь изменить равкоды спеллов на начинающиеся с "1" для заклинаний первой категории, "2" для второй и "3" для третьей, и потом математически узнавать какой цифрой начинается равкод ? Я правильно тебя понял ? Если да, то ...эмм... как можно равкод изменить ?)
ScorpioT1000:
UnitDamagePointLoc не работает на мак ос)
О_О что ?))
ADOLF:
Насколько я помню, ее лучше не использовать, а наносить урон каждому юниту отдельно.
учту, спс)
ADOLF:
Но БД через хеш - универсальнее.
да, но ведь через бд я потрачу гораздо больше времени настраивая все, поэтому и искал другой способ
ScorpioT1000:
требует IFDEBUG
Я так понимаю это код для нанесения урона каждому юниту по-отдельности, да ?
Старый 21.10.2013, 13:10
ScorpioT1000
Работаем
offline
Опыт: отключен
Смотри, у спеллов есть эффекты, они представляют собой массив строк, разделенный запятыми (в РО), а функция GetAbilityEffectById возвращает строку по ключу от 0 до ... Для любого спелла! это можно юзать.
ScorpioT1000 добавил:
Я так понимаю это код для нанесения урона каждому юниту по-отдельности, да ?
нет, для области. Ну, короче то о чем адольф говорил (хотя там не лучший код).
Убери директивы ifdebug и не будет ничего требовать...
cJass если что
Старый 21.10.2013, 13:24
icefrost

offline
Опыт: 259
Активность:
ScorpioT1000,
Я создаю событие на получение юнитом урона
потом проверку на юнита(если ли у него способность защиты)
дальше мне нужно узнать источник-способность нанесенного урона, как я это сделаю через спец-эффект ? если не сложно, приведи небольшой пример.
Старый 21.10.2013, 14:27
ScorpioT1000
Работаем
offline
Опыт: отключен
у тебя вопрос был в категоризации способностей, я предложил решение, причем тут узнать источник-способность? это надо в поиске искать как узнать спелл по дамагу
Старый 21.10.2013, 14:43
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,625
Активность:
icefrost, если тебе известна способность то можно получить с помощью функции GetAbilityEffectById строку с путем к спецэффекту, впрочем в поле спецэффекта можно написать любой текст и получить его с помощью этой функции....
Старый 21.10.2013, 14:43
icefrost

offline
Опыт: 259
Активность:
ScorpioT1000:
у тебя вопрос был в категоризации способностей, я предложил решение, причем тут узнать источник-способность?
А, ну тогда все понятно)
Старый 21.10.2013, 14:55
Карточка
Kicked by SSrunX
offline
Опыт: 2,017
Активность:
тебе надо не событие "юнит получил урон", а "кастуется спелл" в разных вариациях
каждая из которых будет защищать от определенных способностей
по юниту цепляй данные - что где как блокирует. соответственно в коде спелла вводить проверки - если есть защита - резать урон и т.п.
ты лучше объясни что ты хочешь толком, ибо походу тема крутится вовсе не возле того, что тебе нужно
Старый 21.10.2013, 15:11
icefrost

offline
Опыт: 259
Активность:
остается только понять как по урону определять способность... Может так ?
В РО создаю 3 юнита-пустышек, т.е. по одному для каждой категории и даю им способность москиты, чтобы по умолчанию они не получали урона, потом тригерно для юнитов получающих защиту от той или иной категории скиллов создаю соотв. юнита-дамми и каждые 0.05 сек передвигаю к месту юнита с защитой. Потом во всех AOE способностях при нанесении урона добавляю проверку есть ли в радиусе урона юнит-пустышка соответствующий категории способности, если есть то во время нанесения урон способность москиты убирается, а потом заного возврощается юниту. А в триггере способности-защиты создаю событие получения урона, проверку на то что юнит является этой самой пустышкой следящей за героем и(предварительно при создании юнита сохранив хп юнита в переменную) сравниваю текущее значение хп со старым и добавляю юниту со спеллом-защитой хп равное потерянному пустышкой.
Карточка, вот описание спелла.
Если юнит получает урон от одного из ........... спеллов, тогда например на 5 секунд включается защита и юнит в течении этих секунд восстанавливает хп, потерянное из за способности(если за это время его ударят или кто-то другой применит способность не из списка, то урон от удара или способности не из списка не восстанавливается) очищается от баффов и у способности защиты от спеллов начинается кд, по окончанию которого снова при первом же получении урона от способностей из того же списка все повторяется снова

Отредактировано icefrost, 21.10.2013 в 15:40.
Старый 21.10.2013, 15:21
ScorpioT1000
Работаем
offline
Опыт: отключен
надо событие spell effect нет ?
ScorpioT1000 добавил:
EVENT_PLAYER_UNIT_SPELL_EFFECT
Старый 21.10.2013, 15:33
icefrost

offline
Опыт: 259
Активность:
Карточка:
по юниту цепляй данные - что где как блокирует. соответственно в коде спелла вводить проверки - если есть защита - резать урон и т.п.
я бы так и сделал, но способность защиты не всегда должна срабатывать, например если у способности не прошел кд, или если игрок выключил использование защиты(у юнита будет предмет при помощи которого можно будет откл. использование способности, даже если кд прошел), и если первое еще можно отследить, то второе я не знаю как.
Старый 21.10.2013, 15:36
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
пишите свою функцию нанесения урона
Старый 21.10.2013, 18:24
Ответ

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

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

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

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



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