Чета облазил и не нашел чтобы менять потрет у данного героя... Я бы через морф делал с 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
насколько помню, это меняет на одно выделение, нужно постоянно заново вызывать,если хочешь на постоянку
`
ОЖИДАНИЕ РЕКЛАМЫ...
21
вообще можно динамически текстуру менять даже без мемхака были статьи
но это кривовато
а тут имхо проще искать способ сразу всю модель менять
22
ClotPh, не текстура у мя.. Как бы разные расы но 1 тот же герой если понял =)
1 герой прозрачный но каждый части руки ноги тело голов разные крепит на героя прозрачного
как меняю голову человек на волка то и потрет должен менять
33
Надо у наших гуру мемхака спросить, я знаю только
    function SetUnitPortrait takes integer uiobjectaddr, string s returns nothing
        call WriteNullTerminatedString( s, uiobjectaddr + 0x34 )
    endfunction
но не пойму что такое uiobjectaddr
22
Bergi_Bear, адрес на обьект видимо надо получить после юнита
Bergi_Bear, а где ты этот код нашел я в лазил не нашел... 0_о
33
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    
И в любом случае, эта функция работа, поидее меняет для ТИПА юнита, то бишь у всех портреты полетят =(
22
пробую так
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 мб встанет
16
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
насколько помню, это меняет на одно выделение, нужно постоянно заново вызывать,если хочешь на постоянку
Принятый ответ
33
DracoL1ch, должно сработать!
можно хранить где нить в хеш таблице текущий портрет и вызывать его по событию "юнит выбран"
pro100master, проверил работает?
22
8gabriel8, при создание юнита его вручаем потрет, после выбора юнита он сбрасывает данные и устанавливаем новый и не заметиш как потрет меняет...
33
8gabriel8, никогда не замечал этой задержки, знаю есть задержка если выбрать/снять выделение, на долю секунды можно увидеть кого выбрал, но мы же не будем снимать выделение..., ждём тестов pro100masterа
26
Вот оно как, тогда замечательно) предполагал вину за задержку на событии, а не действии
22
DracoL1ch, чет крашит. set address_GameBase = ReadRealMemory(bytecodeAddress) - 0x951060 адрес все верно и тот код выше но крашит.
21
В рефордже и 1.30 же тоже нет смены модели юниту на постоянку (портрета или вообще)?
Надо бы, как мемхаком это все будет долизано, тогда отдельный сабж создать, т. к. вещь-то нужная для всяких оборотней. Стандартные варкрафтовские морфы не очень
33
DracoL1ch, чет крашит. set address_GameBase = ReadRealMemory(bytecodeAddress) - 0x951060 адрес все верно и тот код выше но крашит.
Проверил, тоже крашит
16
нет, у меня только 1.26
ну раз не пашет, значит без вариантов) я её не использую
22
DracoL1ch, а если изменять потрет тип юнитов через локально пашет?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.