функции
	function SetUnitModel takes integer uiobjectaddr, string s returns nothing
		call WriteNullTerminatedString(s, uiobjectaddr+0x30 )
	endfunction
	function SetUnitModelUF takes unit u, string s returns nothing//user-friendly
		call SetUnitModel(GetUnitUIDefAddr(GetUnitTypeId(u)),s)
	endfunction
	function SetUnitModelUFAddress takes integer address, string s returns nothing
		call SetUnitModel(address,s)
	endfunction
должны как я понял присваивать анимацию юниту. Но у меня они не работают. При создании эффекта, по тем же путям всё было нормально. SetUnitModelUF - сбрасывает модель юнита (модель просто пропадает)
Мне нужно реализовать эти функции, чтобы не готовить для каждого "эффекта" (юниты в роли эффектов) в РО, а использовать 1 Dammi и по ситуации присваивать ему модель

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

странно, но в любом случае, я снова дал не ту, эта именно обновляет скин - мороз, оживление, вот это всё пересчитывает. Вот функция смены модели:

function ChangeUnitModelTo takes unit u, string modelpath returns nothing
	local integer a
	local integer s
	set LastConvertedHandle=ConvertHandle(u)
	if LastConvertedHandle>0 then
		set a=RMem(LastConvertedHandle)+0x88
		if a>0 then
			set a=RMem(a)
			if a>0 then
				set s=GetStringAddress(modelpath)
				call CallThisCallWith3Args(a,LastConvertedHandle,s,1)
			endif
		endif
	endif
endfunction
0
32
7 лет назад
0
Нужно вызвать функцию перерисовки Юнита, в теме про мемхак вроде это было...
0
5
7 лет назад
0
quq_CCCP:
Нужно вызвать функцию перерисовки Юнита, в теме про мемхак вроде это было...
блин, точно! там написано (в google переводе):
Игра не будет перерисовывать модель до тех пор, пока она не будет принудительной, и мы не знаем, как ее заставить. Пока лучший подход - это изменить модель до создания единицы, тогда у него будет новая модель
и как же мне перерисовать модель?
0
16
7 лет назад
Отредактирован DracoL1ch
0

set pRedrawUnitFunction=GameDLL+0x284830//26

function RedrawUnit takes unit u returns nothing
	set LastConvertedHandle=ConvertHandle(u)
	if LastConvertedHandle>0 then
		call CallThisCallWith1Args(pRedrawUnitFunction,LastConvertedHandle)
	endif
endfunction
0
5
7 лет назад
0
DracoL1ch:

set pRedrawUnitFunction=GameDLL+0x284830//26

function RedrawUnit takes unit u returns nothing
	set LastConvertedHandle=ConvertHandle(u)
	if LastConvertedHandle>0 then
		call CallThisCallWith1Args(pRedrawUnitFunction,LastConvertedHandle)
	endif
endfunction
Если использую функцию
	function RedrawUnit takes unit u returns nothing
		local integer LastConvertedHandle=ConvertHandle(u)
		if LastConvertedHandle>0 then
			call CallThisCallWith1Args(pRedrawUnitFunction,LastConvertedHandle)
		endif
	endfunction
то выдаёт фатал, к слову CallThisCallWith1Args() у меня такой:
	function CallFastCallWith2Args takes integer pFuncFastcallAddr, integer arg1, integer arg2 returns integer 
		local integer pOffset1
		call WriteRealMemory(pReservedExecutableMemory2, 0xBAF68B56) 
		call WriteRealMemory(pReservedExecutableMemory2+4, arg2)
		call WriteRealMemory(pReservedExecutableMemory2+8, 0xB9F68B90) 
		call WriteRealMemory(pReservedExecutableMemory2+12, arg1)
		call WriteRealMemory(pReservedExecutableMemory2+16, 0xBEF68B90)
		call WriteRealMemory(pReservedExecutableMemory2+20, pFuncFastcallAddr)
		call WriteRealMemory(pReservedExecutableMemory2+24, 0xC35ED6FF)
		
		
		if pIgnoredUnitsOffset == 0 then 
			set pIgnoredUnitsOffset = CreateJassNativeHook(pIgnoredUnits, pReservedExecutableMemory2 )
		else
			call WriteRealMemory(pIgnoredUnitsOffset,pReservedExecutableMemory2)
		endif
		
		set pOffset1 = IgnoredUnits(0)
		call WriteRealMemory(pIgnoredUnitsOffset, pIgnoredUnits)
		return pOffset1
	endfunction
	
	function CallThisCallWith1Args takes integer pFuncThiscallAddr, integer arg1 returns integer 
		return CallFastCallWith2Args(pFuncThiscallAddr,arg1,0)
	endfunction
0
32
7 лет назад
0
Lenivex, версия игры какая? 1.26?
0
16
7 лет назад
0
странно, но в любом случае, я снова дал не ту, эта именно обновляет скин - мороз, оживление, вот это всё пересчитывает. Вот функция смены модели:

function ChangeUnitModelTo takes unit u, string modelpath returns nothing
	local integer a
	local integer s
	set LastConvertedHandle=ConvertHandle(u)
	if LastConvertedHandle>0 then
		set a=RMem(LastConvertedHandle)+0x88
		if a>0 then
			set a=RMem(a)
			if a>0 then
				set s=GetStringAddress(modelpath)
				call CallThisCallWith3Args(a,LastConvertedHandle,s,1)
			endif
		endif
	endif
endfunction
Принятый ответ
0
21
7 лет назад
0
Напишите уже, если не трудно, эти функции RMem и WMem в шапке с темой мемхака - xgm.guru/p/wc3/179535 и/или вообще прямо на гитхаб поместите. Рациональнее будет...
0
32
7 лет назад
0
ClotPh:
Напишите уже, если не трудно, эти функции RMem и WMem в шапке с темой мемхака - xgm.guru/p/wc3/179535 и/или вообще прямо на гитхаб поместите. Рациональнее будет...
Ну надо будет наверное собратся да составить базу данных функций основных.
0
5
7 лет назад
Отредактирован Lenivex
0
quq_CCCP:
Lenivex, версия игры какая? 1.26?
да, точно
ClotPh:
Напишите уже, если не трудно, эти функции RMem и WMem в шапке с темой мемхака - xgm.guru/p/wc3/179535 и/или вообще прямо на гитхаб поместите. Рациональнее будет...
лучше всего сразу скинуть хотя бы все обновлённые функции без Utils'ов, там ведь не так много. RMem, WMem у меня есть.
0
21
7 лет назад
0
Lenivex, у тебя есть, а каждому, у кого нет, их потом у тебя или у драколича просить или по темам искать бегать?
0
5
7 лет назад
0
ClotPh:
Lenivex, у тебя есть, а каждому, у кого нет, их потом у тебя или у драколича просить или по темам искать бегать?
так давайте так. Я постоянно достаю Dracol1ch'a, постоянно достаёт всё новые и новые функции. Я могу создать на Google диске архив, с готовым, максимально информативным и функциональным Memory Hack'ом, который смог собрать, если хотите
DracoL1ch:
странно, но в любом случае, я снова дал не ту, эта именно обновляет скин - мороз, оживление, вот это всё пересчитывает. Вот функция смены модели:

function ChangeUnitModelTo takes unit u, string modelpath returns nothing
	local integer a
	local integer s
	set LastConvertedHandle=ConvertHandle(u)
	if LastConvertedHandle>0 then
		set a=RMem(LastConvertedHandle)+0x88
		if a>0 then
			set a=RMem(a)
			if a>0 then
				set s=GetStringAddress(modelpath)
				call CallThisCallWith3Args(a,LastConvertedHandle,s,1)
			endif
		endif
	endif
endfunction
Выдаёт фатал при использовании
		ChangeUnitModelTo(u,GraphWay)
		RedrawUnit(u)
в частности из за RedrawUnit() выдаёт фатал
0
16
7 лет назад
0
не надо редроу
0
5
7 лет назад
0
DracoL1ch:
не надо редроу
и без него пробовал, модели не видно. Но при выделении видна морда предыдущей модели
0
21
7 лет назад
Отредактирован ClotPh
0
Lenivex, ну давай.
Лучше вот сразу в сабж мемхака по ссылке, для удобства. Или там ссылку туда.
0
5
7 лет назад
Отредактирован Lenivex
0
ClotPh:
Lenivex, ну давай.
Лучше вот сразу в сабж мемхака по ссылке, для удобства. Или там ссылку туда.
хорошо, но не сразу
ClotPh:
Lenivex, ну давай.
Лучше вот сразу в сабж мемхака по ссылке, для удобства. Или там ссылку туда.
архив на Google Диске. Можете писать в личку что не так, поправлю.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.