Чета облазил и не нашел чтобы менять потрет у данного героя... Я бы через морф делал с 6 таких моделей но с разными потретами но это же бред.. есть ли проше?
PS Суть у мя модель прозрачный который крепляет атачи к героя разными скинами чтоб и потрел выглядел.

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

function ChangeUnitPortraitTo takes unit u, string modelpath returns nothing
	set LastConvertedHandle=ConvertHandle(u)
	if LastConvertedHandle>0 then
		call CallThisCallWith3Args(GameDLL+0x33ADC0,LastConvertedHandle,GetStringAddress(modelpath),1)
	endif
endfunction
насколько помню, это меняет на одно выделение, нужно постоянно заново вызывать,если хочешь на постоянку
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
5 лет назад
0
вообще можно динамически текстуру менять даже без мемхака были статьи
но это кривовато
а тут имхо проще искать способ сразу всю модель менять
0
23
5 лет назад
0
ClotPh, не текстура у мя.. Как бы разные расы но 1 тот же герой если понял =)
1 герой прозрачный но каждый части руки ноги тело голов разные крепит на героя прозрачного
как меняю голову человек на волка то и потрет должен менять
0
21
5 лет назад
0
pro100master, а, понятно, тогда да, по-твоему надо
0
32
5 лет назад
0
Надо у наших гуру мемхака спросить, я знаю только
    function SetUnitPortrait takes integer uiobjectaddr, string s returns nothing
        call WriteNullTerminatedString( s, uiobjectaddr + 0x34 )
    endfunction
но не пойму что такое uiobjectaddr
0
23
5 лет назад
0
Bergi_Bear, адрес на обьект видимо надо получить после юнита
Bergi_Bear, а где ты этот код нашел я в лазил не нашел... 0_о
0
32
5 лет назад
0
pro100master, дык и как получить, что туда написать? мне просто тоже нужна нормальная функция для смены портрета
pro100master, он есть в мемхаке второй версии
Вспомнил мне отвечали недавно, но я так и не проверил:
//Модель портрета
    //----Узнать путь портрета указанного типа юнита (id - rawcode юнита)
    //Изменение распространяется на тип, это значит, распространяется на всех юнитов двнного типа
    function GetUnitModelPortrait takes integer id returns string
        local integer k=GetUnitUIDefByIdCaching(id)
        if k < 1 then
            return null
        endif
        set k=k+0x34
        if RMem(k)>0 then
			return ConvertNullTerminatedStringToString(RMem(k))
        endif
        return null
    endfunction
    //----Изменить путь портрета указанного типа юнита (uiobjectaddr - адрес указанного типа юнита)
    function SetUnitPortrait takes integer uiobjectaddr, string s returns nothing
        call AddNewOffsetToRestoreFast(uiobjectaddr+0x34)
        call WMem(uiobjectaddr+0x34, GetStringAddress(s))
    endfunction
    //----Изменить путь портрета указанного типа юнита (id - rawcode юнита)
    function SetUnitPortraitById takes integer id, string s returns nothing
        call SetUnitPortrait(GetUnitUIDefByIdCaching(id),s)
    endfunction    
И в любом случае, эта функция работа, поидее меняет для ТИПА юнита, то бишь у всех портреты полетят =(
0
23
5 лет назад
0
пробую так
function SetUnitPortrait takes unit u, string s returns nothing
        local integer pConvertedHandle = ConvertHandle(u)
        if pConvertedHandle > 0 then
            call WriteRealMemory(pConvertedHandle + 0x34, GetStringAddress(s))
        endif
    endfunction
крашит =) Но мне надо отдельный потрет каждого юнита. Но видимо придеться морфить просто иметь 6 моделей одинаковых это уже лишный вес 500 кб итог 3 мб встанет
0
32
5 лет назад
0
pro100master, да погоди, я уверен есть способ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.