Кто ни будь нашел счетчик способности адреса в мемхаке, как предметов заряд количество... Просто не охото делать 1000 иконки разные.
Спасибо заранее,...
Спасибо заранее,...
Принятый ответ
по умолчанию отрисовывается только для пары способностей, я взял ракету и заблокировал её использование. это редактирование рид-онли памяти, поэтому крайне желательно иметь восстановление адресов через длл
function GetEvasionOrderIdFunctionData takes nothing returns nothing
local integer a
local integer oldprotection
call UnitAddAbility(SentFountain,'AEev')
set a=GetUnitAbility(SentFountain,'AEev')
if a>0 then
set pEvasionOrderIdFunction=RMem(RMem(a)+0x30C)
if pEvasionOrderIdFunction>GameDLL then
call UnitAddAbility(SentFountain,'A3HQ')
set a=GetUnitAbility(SentFountain,'A3HQ')
if a>0 then
set a=RMem(a)+0x30C
set oldprotection=ChangeOffsetProtection(a,4,0x40)
call WMem(a,pEvasionOrderIdFunction)
call ChangeOffsetProtection(a,4,oldprotection)
endif
call UnitRemoveAbility(SentFountain,'A3HQ')
endif
else
//port value from AEev to Afla to disable icons
endif
call UnitRemoveAbility(SentFountain,'AEev')
endfunction
где SentFountain - любой юнит, которому нужно вручить абилки для их подзагрузки; AEev - уклонение, чтобы взять адрес "нерабочей" кнопки, "A3HQ" - любая абилка на базе ракеты, тоже для получения адреса
Потом - если у ракеты 0 зарядов изначально, счетчик скрывается, поэтому
function FixChargesIndicator takes unit u, integer id returns nothing
//if 0 charges by default indicator is hidden by the flag, need to reset it
set LastConvertedHandle=GetUnitAbility(u,id)
if LastConvertedHandle>0 then
call WMem(LastConvertedHandle+0x20,0)
endif
endfunction
Ну и управление
function RedrawSkillAfterChargeModify takes integer a returns nothing
local integer b=RMem(RMem(a)+0x1C4)
call CallThisCallWith3Args(b,a,0,852290)
endfunction
function AddAbilityCharges takes unit u, integer id, integer c returns nothing
local integer a=GetUnitAbility(u,id)
if a>0 then
call WMem(a+0x124,RMem(a+0x124)+c)
call RedrawSkillAfterChargeModify(a)
endif
endfunction
function AddAbilityChargesByAddr takes integer a, integer d, unit u returns nothing
if a>0 then
call WMem(a+0x124,RMem(a+0x124)+d)
call RedrawSkillAfterChargeModify(a)
endif
endfunction
function SetAbilityChargesByAddr takes integer a, integer d returns nothing
if a>0 then
call WMem(a+0x124,d)
endif
endfunction
function GetAbilityCharges takes unit u, integer id returns integer
local integer a=GetUnitAbility(u,id)
if a>0 then
return RMem(a+0x124)
endif
return 0
endfunction
function GetAbilityChargesByAddr takes integer a returns integer
if a>0 then
return RMem(a+0x124)
endif
return 0
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован quq_CCCP