Канал
Может кто знает где в памяти искать параметры канала "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


Views: 762

XGM Bot #1 - 4 years ago 0
Голосов: +0 / -0
Похожие вопросы:

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

DracoL1ch #2 - 4 years ago 0
Голосов: +0 / -0
в GetAbilityDataDefAddrById
Nelloy #3 - 4 years ago (изм. ) 0
Голосов: +0 / -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 примерно)
Попробовал поискать по ссылкам, ничего дельного не нашел
DracoL1ch #4 - 4 years ago 0
Голосов: +0 / -0
уровни перелинкованы как показано на картинках. данные размечены
только там не orderexists а cd
Nelloy #5 - 4 years ago (изм. ) 2
Голосов: +2 / -0

Как проверю функции - залью сюда
У меня с многоуровневым каналом работает
» 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