SetUnitName мемхак
Нужна функция SetUnitName, которая установит имя для юнитов данного типа (не конкретного юнита, а его данных в кэше, чтобы имя менялось для всех юнитов этого типа), для мемхака первой версии.
При самостоятельной попытке просмотра памяти выявил такую цепочку указателей:
1838BD40 -> 09261FA0 -> 183A5160 -> имя юнита
18A77C4C -> кэшированная структура юнита (получено при помощи GetObjectDataCaching(pUnitData, u))
Собственно меня это ни к чему не привело, поскольку в структуре юнита я не нашёл хотя бы близкие к имени юнита указатели. По адресу 1838BD40, кстати, нашёл строки, указывающие на модель юнита, путь к портрету и т.д. Видимо, это какая-то UI структура.
На этом мои навыки заканчиваются. Прошу помощи у вас.




Просмотров: 202

quq_CCCP #1 - 2 месяца назад 0
Во второй версии вроде был код, посмотрю потом и скину.
DracoL1ch #2 - 2 месяца назад 0
без восстановления памяти ты скатишься к рандомным крашам после игры, ставь актуальную версию хака
Ev3nt #3 - 2 месяца назад 0
DracoL1ch:
без восстановления памяти ты скатишься к рандомным крашам после игры, ставь актуальную версию хака
Мне кажется, или оставленные им адреса указывают на стек?
JackFastGame #4 - 2 месяца назад (отредактировано ) 0
DracoL1ch:
без восстановления памяти ты скатишься к рандомным крашам после игры, ставь актуальную версию хака
Я видел во второй версии хака функцию InitResoreMemoryOnExit, её надо юзать? У меня после попытки выйти из карты зависает Варкрафт с последующим бесконечным заполнением оперативки процессом War3.exe. Как правильно пользоваться восстановлением памяти?
Я правильно понимаю, что она должна выгружать все заинжекченные dll после выхода из карты?
DracoL1ch #5 - 2 месяца назад (отредактировано ) 1   
стек намного выше в памяти
любую, хоть через dll, главное восстанавливать
имена юнитов лежат ссылками на строки, эти ссылки обязательно нужно восстановить при выходе с игры

function AddNewOffsetToRestoreFast takes integer offsetaddress returns nothing
	if pAddNewOffsetToRestore == 0 then
		set pAddNewOffsetToRestore =  GetModuleProcAddress(EXTRADLLNAME, "AddNewOffset" )
	endif
	if pAddNewOffsetToRestore != 0 then 
		call CallStdCallWith2Args(pAddNewOffsetToRestore,offsetaddress, RMem(offsetaddress) )
	endif
endfunction

function SetUnitName takes integer id, string path returns nothing
	local integer a=GetUnitUIDefByIdCaching(id)
	if a!=0 then
		set a=RMem(a+0x28)
		if a!=0 then
			call AddNewOffsetToRestoreFast(a)
			call WMem(a,GetStringAddress(path))
		endif
	endif
endfunction
Ev3nt #6 - 2 месяца назад 0
DracoL1ch, мне кажется, этого кода ему будет мало, т.к я увидел в нём кастомные функции по типу GetModuleProcAddress. Оставьте хоть dll ему.
quq_CCCP #7 - 2 месяца назад 0