Добавлен
Может кто знает где в памяти искать параметры канала "Area", "Range" и подобные?

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

Как проверю функции - залью сюда
У меня с многоуровневым каналом работает
Area
function GetAbilityArea takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*6))
endfunction
function SetAbilityArea takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*6, cleanInt(realToIndex(NewValue)))
endfunction
Range
function GetAbilityRange takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*7))
endfunction
function SetAbilityRange takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*7, cleanInt(realToIndex(NewValue)))
endfunction
PS: thx lich
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
7 лет назад
0
Похожие вопросы:

ответ
включай анимацию через триггеры, ченнел всегда stand запускает, если есть время каста
ответ
Стандартный ИИ никак, только если вы замените канал какими-то другим скиллом, который юзает ИИ в схожей ситуации ( если нужно чтобы ии юзал спелл в толпе то подойдет вызов волка или стомп в качестве пустышки). Ну или совсем радикальный вариант, писать свой ИИ.
ответ
JackFastGame, старый знакомый баг с каналом из доты, лекарство только одно применять для канала ID приказа которых больше не будет ни у 1 юнита, или все способности ID приказа которых ты копируешь для канала, должны появится у юнитов и быть применены до того как твои герои выучат способность на основе канала.
Движок вара кеширует приказ и тип цели для этого приказа, поэтому триггерно невозможно отдать приказ, у него по мнению движка другой тип цели.
Нельзя применить высасывание жизни на юнита, потому что записано что для этого приказа не требуется цель...
Подробности можно спросить у DracoL1ch.
ответ
Altf40160:
Steal nerves:
Спасибо, но меня интересует как рас "событие - юнит применяет способность" как же заставить героя компьютера использовать скилл!?
ставишь айди приказа и в условиях проверяешь его, например если у канала стоит айди thunderbolt, то в триггерах это будет молот бурь

0
16
7 лет назад
0
в GetAbilityDataDefAddrById
0
13
7 лет назад
Отредактирован Nelloy
0
до 0x700 не нашел, кроме первого десятка адресов - одни нули
искал так
set j = GetAbilityDataDefById('A006')
set i = 0
loop
exitwhen i>=400
call BJDebugMsg(R2S(cleanReal(mI2R(RMem(j+4*i))))+" "+I2S(i))
set i = i+1
endloop
function GetAbilityDataDefById takes integer id returns integer
local integer a=CallThisCallWith1Args(pGetAbilityDataDefAddr,id)
if a>0 then
return a
endif
return 0
endfunction
может имеет значение кол-во лвлов?
Складывается впечатление что там нужна многоуровневая ссылка, если у канала отличная от осальных абилок структура
Да, однозначно идет перемещение данных. При 1 уровне все нормально работало (0x6c - 0x88 примерно)
Попробовал поискать по ссылкам, ничего дельного не нашел
0
16
7 лет назад
0
уровни перелинкованы как показано на картинках. данные размечены
только там не orderexists а cd
2
13
7 лет назад
Отредактирован Nelloy
2
Как проверю функции - залью сюда
У меня с многоуровневым каналом работает
Area
function GetAbilityArea takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*6))
endfunction
function SetAbilityArea takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*6, cleanInt(realToIndex(NewValue)))
endfunction
Range
function GetAbilityRange takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*7))
endfunction
function SetAbilityRange takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*7, cleanInt(realToIndex(NewValue)))
endfunction
PS: thx lich
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.