Ппц, была твёрдая уверенность, что если уровень применяемой способности у юнита >=1 = да, то способность однозначно не предметная (логикой допускалось, что типа способность предмета в имеющихся у юнита не считается и ее лвл должен бы быть 0 или вообще отсутствовать).
Оказалось, нет, ни фига это не работает. Ошибка была в том, что чекалось на предмете, который переключается (типа базилки в доте), а после переключения он подменялся и логично, что абилы уже не было. После проверки на других предметных абилах фейл был выявлен.
Собственно, вопрос: как проверить, является применяемая юнитом способность предметной или нет? Т. е. она у него фактически есть (в геройских ли или обычных - не важно) или это абила одного из его предметов?
Пока на скорую руку был слеплен костыль: в начале задается локальная переменная 0, циклом выбрасываются поочередно предметы и после выброса каждого проверяется, есть ли применяемая способность. Если хоть раз "нет" - локалка меняется с 0 на 1. Ну а после завершения цикла смотрим значение локалки и дальше от этого и пляшем.
Он действует, но нет ли проще решения?

получение текущего приказа не требует от тебя нихера, тебе нужно, чтобы там не было "useitem", и всё
`
ОЖИДАНИЕ РЕКЛАМЫ...
16
У абилок с предметов есть как минимум флаг в офсете 0x20 - 0x2000
Проверяй на него. Не знаю, может ли он появиться в других ситуациях. Вот и узнаешь :)
А еще GetUnitCurrentOrder, точно.
21
DracoL1ch, спасибо, по первому понятно, ордер хз, поможет ли, я ведь не ордер ловлю, а событие каста.
PS Если кому интересно - мой способ уже баг выявил: сами посмотрите, чо будет, если во время применения стандартного чаннелинг свитка портала дропнуть его и вернуть применившему... будет очень интересно =) ну на него я фильтр поставлю, а других предметов с чаннелинг абилками у меня вроде нет, не планируется и создаваться не может
Свиток портала вообще стоит реворкать, да, но это др. вопрос
28
ClotPh, что за костыли ты лепишь?
это ведь простейшая бд
если лень пилить бд то рассортируй их по равкодам
например у предметных абилок равкод больше или равен 'IA00' а у не предметных меньше
хотя как по мне то бд проще
кроме того тебе не нужно добавлять все абилки в бд
а только предметные (или не предметные, смотря каких меньше)
22
для предмета есть 2 события при нажатие предмета или при исполз. способности, так что можеш проверять при нажатие способность заносиш массив равкод способность после чего при нажатие предмета сверять у способность предмет сравниваем у последный поток массива и узнаем что это предмет
Если не подводит идет порядок:
1 поток способность
2 поток предмет
21
nvc123, бд простой выход по сути, но удобство сомнительно, ведь каждый новый объект придется добавлять в бд, хз... а так-то понятно, что из бд можно вообще любую систему сделать и хоть 100500 новых параметров и их проверок
я вот лучше уже в свой костыль свиток тп добавлю и все ок будет, и не придется каждый новый предмет в бд добавлять
pro100master, а пример кода можно? ща не доходит, хотя уже понимаю, что вроде должно действовать
22
ClotPh, заноси temp id способность а потом лови события нажатия предмета и определиш что было нажат способность от предмета
28
ClotPh, добавление в бд это от 1 до 5 секунд (в зависимости от того как быстро печатаешь)
хз почему многие их так боятся
ты на свой костыль потратил больше времени чем на заполнение бд
22
nvc123, у меня бд почти 2к предметы и проблем нет даже через runtextmacro для ро предметов быстро создает
21
Зачем тогда все параметры РО, проще все через бд определять и считать =)
28
ClotPh, а ничего что РО это тоже бд?
только данные из РО использует движок вара
и у нас нету к ним прямого доступа (только если мемхак)
а пользовательские бд используются пользовательскими скриптами т.е. jass
32
ClotPh, эмм были же авто генераторы бд, так что это не проблема. Юзай бд как все люди, это будет и быстрее и стабильнее.
16
получение текущего приказа не требует от тебя нихера, тебе нужно, чтобы там не было "useitem", и всё
Принятый ответ
21
Всем спасибо, достаточно
852008
UPD: не, ни фига
id в цифрах приказа при применении предмета 852008, в буквах, похоже, не существует
но совершенно непонятно, почему, но проверка на текущий приказ при применении любого предмета иногда то выдает 852008, то, видимо, что-то другое, т. к. проверка проходит неправильно и способность считается непредметной
снова выводить отладку в строку и узнавать, че там почему не так, дико уже бесит
крч бесполезная пока эта проверка
ладно, верну, как было, ибо ппц уже достало
27
Потому что там приказ от слота итема в инвентаре зависит
852008 to 852013 (useslot): Заставляют героя, отдавшего приказ, использовать предмет, находящийся в соответствующем слоте инвентаря. Идентификатор 852008 использует предмет в первом слоте, идентификатор 852009 – во втором и т.д.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.