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

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

Закрытая тема
 
SlenderMan

offline
Опыт: 177
Активность:
стеки в структурах и проверка на наличие способности
Не маялся мапмейкингом сто лет, решил вспомнить.
Попытался сделать проверку, есть ли у юнита абила, но, скорее всего, она должна быть другой (ибо не работает мой способ). Помогите плз
И как оптимальнее сделать проверку, не кастанули ли спел на цель второй раз, дабы не создавать отдельную структуру?
if (GetUnitAbilityLevel(this.u, 'A000')=<0) then __не помогает определить наличие абилы у юнита
((код jass
код тестовый, так что утечки памяти на данный момент меня не особо волнуют
library AbilityManipulate uses TimerUtils
struct AbilityManipulate
unit u
timer t
integer j
static integer array i
static method Start takes unit u, integer value, integer time returns nothing
local thistype this = thistype.create()
set this.t = NewTimer()
set this.u=u
set this.j=value
set i[this]= this.j+1
if (GetUnitAbilityLevel(this.u, 'A000')<0) then не пашет естественно
call UnitAddAbility(this.u, 'A000')
endif
call SetUnitAbilityLevel(this.u, 'A000', i[this])
call SetTimerData(this.t,this)
call TimerStart(this.t, time, false, function thistype.Proccess)
endmethod
private static method Proccess takes nothing returns nothing
local thistype this = GetTimerData(GetExpiredTimer())
call SetUnitAbilityLevel(this.u, 'A000', i[this]-this.j)
call ReleaseTimer(GetExpiredTimer())
call this.destroy()
endmethod
endstruct
function Debug takes unit u, integer o, integer p returns nothing
call BJDebugMsg("Action!")
endfunction
hook SetUnitAbilityLevel Debug
endlibrary
))
Старый 12.03.2013, 20:17
Hanabishi
COOL STATUS
offline
Опыт: отключен
Если абилы нет, её уровень = 0, должно работать.
if (GetUnitAbilityLevel(this.u, 'A000')<0) then
Офк, в минус она и не уходит, замени
if (GetUnitAbilityLevel(this.u, 'A000')==0) then
Старый 12.03.2013, 20:54
SlenderMan

offline
Опыт: 177
Активность:
Hanabishi,
Если абилы нет, её уровень = 0
то есть, если я буду понижать уровень абилы, как в:
((код jass
call SetUnitAbilityLevel(this.u, 'A000', i[this]-this.j)
))
допустим после вычитания лвл станет равен нулю
то она автоматом ремувится чтоли?
или все же что-то да останется?
Старый 12.03.2013, 21:23
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
SlenderMan, а проверить?
Старый 12.03.2013, 22:22
agentex

offline
Опыт: 34,834
Активность:
автоматом не ремувится, делаешь 0 возвратится на 1
условие <0 не имеет смысла
И как оптимальнее сделать проверку, не кастанули ли спел на цель второй раз, дабы не создавать отдельную структуру?
например давать юниту бафф или невидимую абилку. и проверять при касте имеется ли она у него.

Отредактировано agentex, 12.03.2013 в 23:11.
Старый 12.03.2013, 23:06
SlenderMan

offline
Опыт: 177
Активность:
agentex,
Отправка данных в триггер может быть постоянно, и причем на одного и того же юнита. Как можно избежать постоянного создания классов на ту же единицу, а именно делать изменения уже в первоначальной созданной для единицы структуре?
Сам бафф я отследить могу, но не получается реализовать доступ к первому созданному для него классу.

Вообще я могу расписать принцип действия моего кода:
1й сторонний триггер (нет в шапке темы) - юнит проводит действие, удовл-ее условию
я отправляю данные в этот класс (2й триггер), где сбсно и начинается манипуляция.
2й триггер добавляет юниту дамаг путем повышения уровня абилы.
Первый лвл у абилы ничего не дает, а со второго идет прибавка
По коду, очевидно, я положительного результата не получу, тк постоянно создаются разные классы. Жду ваших вариантов.

Отредактировано SlenderMan, 12.03.2013 в 23:53.
Старый 12.03.2013, 23:13
agentex

offline
Опыт: 34,834
Активность:
ну тогда глобальный массив твоих структур или хэш таблица + GetHandleId (на хендл юнита с ключом-равкодом абилки сторить id структуры)
Старый 12.03.2013, 23:32
SlenderMan

offline
Опыт: 177
Активность:
Всем спасибо.
Решение второго вопроса ниже

Отредактировано SlenderMan, 12.03.2013 в 23:55.
Старый 13.03.2013, 01:15
Закрытая тема

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

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

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

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



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