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

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

без восстановления памяти ты скатишься к рандомным крашам после игры, ставь актуальную версию хака
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
4 года назад
0
Во второй версии вроде был код, посмотрю потом и скину.
0
16
4 года назад
0
без восстановления памяти ты скатишься к рандомным крашам после игры, ставь актуальную версию хака
Принятый ответ
0
19
4 года назад
0
DracoL1ch:
без восстановления памяти ты скатишься к рандомным крашам после игры, ставь актуальную версию хака
Мне кажется, или оставленные им адреса указывают на стек?
0
15
4 года назад
Отредактирован JackFastGame
0
DracoL1ch:
без восстановления памяти ты скатишься к рандомным крашам после игры, ставь актуальную версию хака
Я видел во второй версии хака функцию InitResoreMemoryOnExit, её надо юзать? У меня после попытки выйти из карты зависает Варкрафт с последующим бесконечным заполнением оперативки процессом War3.exe. Как правильно пользоваться восстановлением памяти?
Я правильно понимаю, что она должна выгружать все заинжекченные dll после выхода из карты?
1
16
4 года назад
Отредактирован DracoL1ch
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
0
19
4 года назад
0
DracoL1ch, мне кажется, этого кода ему будет мало, т.к я увидел в нём кастомные функции по типу GetModuleProcAddress. Оставьте хоть dll ему.
0
32
4 года назад
0
Чтобы оставить комментарий, пожалуйста, войдите на сайт.