Кто ни будь нашел счетчик способности адреса в мемхаке, как предметов заряд количество... Просто не охото делать 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
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
6 лет назад
0
Нашли только адресс у осветительной ракеты, для других это не будет работать.
0
23
6 лет назад
0
quq_CCCP, можешь поделить?
0
32
6 лет назад
0
pro100master, под рукой нету, лича теребите, там функция позволяет счетчик изменять у осветительной ракеты только ( 'Amfl' ), на прочие абилки не работает.
0
21
6 лет назад
0
quq_CCCP, а только цифра меняется или фактическое число зарядов тоже?
0
32
6 лет назад
Отредактирован quq_CCCP
0
ClotPh, уже не помню, кароче лич запилил на мемхаке функцию чтобы лепить любое число в счетчик зарядов и юзает его для дебаг целей ( абилка заблокированна сайленсом от орба слоу, у нее тикают заряды, юзается как счетчик агилы у сларка к примеру) . Я поковырял и бросил, мне не пригодилось.
12
16
6 лет назад
12
по умолчанию отрисовывается только для пары способностей, я взял ракету и заблокировал её использование. это редактирование рид-онли памяти, поэтому крайне желательно иметь восстановление адресов через длл
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
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.