Впервые столкнулся с задачей записать способность в переменную. Но в редакторе можно записать только что используемую способность, а мне нужно полученную НЕ ИЗУЧЕННУЮ которая уже есть у героя, а именно ту которой у него нет. То есть ту, которую я только что дал через триггер и опять же это пассивка, которую нельзя только что использовать. Как записать в переменную только что полученную для героя пособность?

Принятый ответ

Нативок возвращающих способность - 2, подходят тебе - 0.
Тебе и не нужно записывать способность в переменную, запиши айди способности и сравнивай их.

И придется наплодить булевых переменных или сделать массив, как-то сам додумаешь, как отслеживать выданные способности
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
3 года назад
0
Поясню. Способки даются герою рандомно и мне нужно их систематизировать, то есть игрок будет получать способности в рандомном порядке и мне нужно понять какая из них получена только что чтобы управлять ими в дальнейшем
1
22
3 года назад
1
Нативок возвращающих способность - 2, подходят тебе - 0.
Тебе и не нужно записывать способность в переменную, запиши айди способности и сравнивай их.

И придется наплодить булевых переменных или сделать массив, как-то сам додумаешь, как отслеживать выданные способности
Загруженные файлы
Принятый ответ
0
19
3 года назад
0
ofeerist:
Нативок возвращающих способность - 2, подходят тебе - 0.
Тебе и не нужно записывать способность в переменную, запиши айди способности и сравнивай их.

И придется наплодить булевых переменных или сделать массив, как-то сам додумаешь, как отслеживать выданные способности
Хэшем не умею пользоваться. Сидеть и просчитывать все варианты это гемморой страшный, при этом некоторые способки пропадают, другие убираются и добавляются в список. Короче гемморой страшый!
0
22
3 года назад
0
SсRealm:
мне нужно понять какая из них получена только что чтобы управлять ими в дальнейшем
Ты можешь проверять наличие способности и отталкиваться от этого, тогда это решит все твои проблемы
0
17
3 года назад
0
SсRealm, когда ты выдаешь способность ее и нужно сохранять
0
19
3 года назад
0
Вижу только два варианта, так как герой с подобной способкой только один.
  1. Сделать даммика невидимого и давать ему предмет, как только появится у даммика предмет, так удалять все другие и под каждый предмет отдельно подписать способность. Даммик получает когти, герой получает способность
  2. Просто сделать целочисленную:
Когда равно один - дать ауру
Когда равно два - дать еще что то
1
27
3 года назад
1
SсRealm, хэш очень быстро разбирается, могу в лс объяснить, если интересно будет, с ним намного проще
0
17
3 года назад
0
Я так и не понял, что требуется.
0
19
3 года назад
0
GetLocalPlayer:
Я так и не понял, что требуется.
Герой стрелок получает способности, они же оружие, они переключаются. А так же можно отдавать способки ( оружие пистолеты) другому игроку и покупать для себя дополнительное.
Как переключать я разобрался, но проданное оружие как то нужно исключать из переключения и добавлять в переключение купленное. Вот и вся проблемма.
0
22
3 года назад
Отредактирован ofeerist
0
SсRealm:
Как переключать я разобрался, но проданное оружие как то нужно исключать из переключения и добавлять в переключение купленное. Вот и вся проблемма.
Как переключаешься? Через способности - забери способность у юнита при продаже, купил - добавь
0
19
3 года назад
0
ofeerist:
Как бы записать еще не полученную. Если только давать другому герою. В общем кое что придумал, дальше не знаю, что получится
0
22
3 года назад
0
SсRealm:
ofeerist:
Как бы записать еще не полученную. Если только давать другому герою. В общем кое что придумал, дальше не знаю, что получится
Вообще не понятно. Зачем ее записывать? Сделай массив айди способностей, если купил определенный предмет - выдай, продал - забери
0
26
3 года назад
0
Т.е. тебе надо выдавать юнита абилку с возможностью получить "последнюю выданную способность", так что ли?
0
19
3 года назад
0
Extremator:
Т.е. тебе надо выдавать юнита абилку с возможностью получить "последнюю выданную способность", так что ли?
ДА! Именно так. Для этого героя я уже сделал кучу костылей и через четрые логические обошел эту проблему, нона будущее мне бы очень пригодилось возможность записывать последнюю полученную абилку через триггер в переменную!
0
22
3 года назад
0
SсRealm:
Extremator:
Т.е. тебе надо выдавать юнита абилку с возможностью получить "последнюю выданную способность", так что ли?
ДА! Именно так. Для этого героя я уже сделал кучу костылей и через четрые логические обошел эту проблему, нона будущее мне бы очень пригодилось возможность записывать последнюю полученную абилку через триггер в переменную!
Я уже кидал скрин выше, получить вот так абилку невозможно.
Только если хранить айди способности:
Установить AbilID = 'Айди способности'
Выдать юниту способность AbilID
И вот у тебя айди последней выданной абилки
0
19
3 года назад
0
ofeerist:
SсRealm:
Extremator:
Т.е. тебе надо выдавать юнита абилку с возможностью получить "последнюю выданную способность", так что ли?
ДА! Именно так. Для этого героя я уже сделал кучу костылей и через четрые логические обошел эту проблему, нона будущее мне бы очень пригодилось возможность записывать последнюю полученную абилку через триггер в переменную!
Я уже кидал скрин выше, получить вот так абилку невозможно.
Только если хранить айди способности:
Установить AbilID = 'Айди способности'
Выдать юниту способность AbilID
И вот у тебя айди последней выданной абилки
Короче я нашел ужасное упущение варика. Странно, что все на свете можно записать в переменную, но только не только что приобретенную способность. Ладно все. Если это не возможно закрываем вопрос
0
22
3 года назад
0
SсRealm:
ofeerist:
SсRealm:
Extremator:
Т.е. тебе надо выдавать юнита абилку с возможностью получить "последнюю выданную способность", так что ли?
ДА! Именно так. Для этого героя я уже сделал кучу костылей и через четрые логические обошел эту проблему, нона будущее мне бы очень пригодилось возможность записывать последнюю полученную абилку через триггер в переменную!
Я уже кидал скрин выше, получить вот так абилку невозможно.
Только если хранить айди способности:
Установить AbilID = 'Айди способности'
Выдать юниту способность AbilID
И вот у тебя айди последней выданной абилки
Короче я нашел ужасное упущение варика. Странно, что все на свете можно записать в переменную, но только не только что приобретенную способность. Ладно все. Если это не возможно закрываем вопрос
Ну можно, я же показал как... только айди, вместо абилки сохраняется
Абилка в переменной вообще не нужна... все тот же скрин выше, абилку можно использовать только для сохранения в hashtable
3
26
3 года назад
3
SсRealm:
Поясню. Способки даются герою рандомно и мне нужно их систематизировать, то есть игрок будет получать способности в рандомном порядке и мне нужно понять какая из них получена только что чтобы управлять ими в дальнейшем
Звучит так, как-будто у тебя там имеется массив из абилок и ты выбираешь одну конкретную по номеру. Например
set passAbility[1] = Доспехи Веры
set passAbility[2] = Аура Смерти
set passAbility[3] = Змеиная Ловкость
а дальше ты получаешь число N, например - 2, и с ним работаешь
Действие - Выдать юниту абилку passAbility[N]
Т.е. ты тут можешь сразу работать с числом N что б получить саму абилку
Либо отдельно сделать запись "последняя выданная абилка" (отдельная переменная)
Действие - Выдать юниту абилку passAbility[N]
set lastAddAbility = passAbility[N]
Я бы тогда вообще сделал отдельную функцию выдачи абилки, если она часто используется в таком виде и/или где-то ещё.
function UnitAddAbilityToLast takes unit u, integer i returns
	call UnitAddAbility(u,i) // native func.
	set bj_LastAddAbility = i // global val.
endfunction
Действие - call UnitAddAbilityToLast( твой_юнит, passAbility[N] )

SсRealm:
Короче я нашел ужасное упущение варика. Странно, что все на свете можно записать в переменную, но только не только что приобретенную способность.
Есть такой объект как Абилка, но действий с ним либо нет, либо их всего несколько, т.к. все действия с абилками происходят через обращение к её равкоду. Работает это примерно как с предметами в инвентаре героя:
Ты ссылаешься на удаление предмета определённого типа (число) у юнита, при это запускается цикл который проверяет все слоты инвентаря у указанного юнита, и каждый предмет (объект) в каждом слоте проверяет по его ID (как число), и как только он совпадает с искомым - тебе возвращается ссылка на этот предмет (как объект). После чего происходит удаление конкретного предмета, если ты его пытался получить по ID (число). А вот если ты будешь ссылаться на "предмет которым манипулировали", тогда ты получишь конкретно сам предмет (объект).

Вот с абилками, примерно, так же и получается.
Ты посылаешь в функцию ID абилки, и дальше игра сама ищет эту абилку у юнита (какой там механизм - хз, но результат схожий). Функция "использованная абилка" для события каста, так же возвращает тебе всего лишь ID абилки (число), а не её саму как объект.
Мб это и правильнее, т.к. для удаления конкретной абилки (объекта) у юнита тогда бы пришлось иметь в записи саму абилку (объект). А это довольно сильно усложнило бы на первых этапах понимание сути вещей в среде редактора (повышение уровня вхождения).

constant native GetSpellAbilityId takes nothing returns integer
constant native GetSpellAbility takes nothing returns ability
Вот обычно когда идёт триггерная проверка на то какой скилл был использован - проверяется его ID (число), т.е. используется первая фунция и возвращается номер, с которым ты сравниваешь свой номер (эти номера имеют вид 'A002').
Нативки
native GetUnitAbilityLevel takes unit whichUnit, integer abilcode returns integer
native DecUnitAbilityLevel takes unit whichUnit, integer abilcode returns integer
native IncUnitAbilityLevel takes unit whichUnit, integer abilcode returns integer
native SetUnitAbilityLevel takes unit whichUnit, integer abilcode, integer level returns integer
native UnitAddAbility takes unit whichUnit, integer abilityId returns boolean
native UnitRemoveAbility takes unit whichUnit, integer abilityId returns boolean
native UnitMakeAbilityPermanent takes unit whichUnit, boolean permanent, integer abilityId returns boolean
native SetPlayerAbilityAvailable takes player whichPlayer, integer abilid, boolean avail returns nothing
Каждая из этих функций использует, как сам видишь, именно ID абилок (число).
Хотя для записи/выгрузки абилки из хэш таблицы используется ссылка как раз на саму абилку (объект)
native SaveAbilityHandle takes hashtable table, integer parentKey, integer childKey, ability whichAbility returns boolean
native LoadAbilityHandle takes hashtable table, integer parentKey, integer childKey returns ability
Чтобы оставить комментарий, пожалуйста, войдите на сайт.