Возможно ли такое сделать?

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

Забавно.
function ShowUnitHide takes unit whichUnit returns nothing
    call ShowUnit(whichUnit, false)
endfunction

//===========================================================================
function ShowUnitShow takes unit whichUnit returns nothing
    // Prevent dead heroes from being unhidden.
    if (IsUnitType(whichUnit, UNIT_TYPE_HERO) and IsUnitDeadBJ(whichUnit)) then
        return
    endif

    call ShowUnit(whichUnit, true)
endfunction
Оказывается, мёртвые герои скрываются.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
29
5 лет назад
0
Что вы подразумеваете под физ размером? Ибо у предмета нет коллизий с юнитами.
0
27
5 лет назад
Отредактирован MpW
0
NazarPunk, вроде есть коллизион. на мемхаке драколич нашел одну нативку, там можно сделать чтобы через предметы нельзя было ходить (в настоящее время коллизиона с итемами нет)
вот
//Установить тип движения юнита
//movetp - тип движения
//selfcollision - могут ли другие юниты пройти через unit u
//outhercollision -может ли unit u пройти через других
function SetUnitMovementType takes unit u, integer movetp, integer selfcollision, integer outhercollision returns nothing
	local integer data= GetUnitDataDefByIdCaching(GetUnitTypeId(u)) + 0x1A8
	local integer p1=RMem(data)
	local integer p2=RMem(data + 4)
	local integer p3=RMem(data + 8)
	if movetp!=-1 then
		call WMem(data,movetp)
	endif
	//0 = "none", 1 = "foot", 2 = "fly", 4 = "horse", 8 = "hover", 16 = "water"?, 32 = "amph"
    //-1 = оставить без изменений
    //0 = нет (отсутствует ограничения)
    //1 = пеший, 4 = конный, 8 = парящий (ограничение: вода, всякие преграды: здания, деревья, ландшафт, юниты)
    //2 = летающий (отсутствуют ограничения, кроме блокираторов воздуха (здания и декор). На воздух влияет с нужным цветом текстура пути, которая, собственно, и крепится к зданию или декору)
    //16 = плавающий (ограничение: суша, ландшафт, юниты) 
    //32 = земноводный (ограничивает только деревья и здания, ландшафт, юниты)
    //Примечание: ограничение в смысле что-то блокирует, препятствует движению. И юнит может обойти эту преграду
	if selfcollision!=-1 then
		call WMem(data + 4,selfcollision)
	endif
	//0xCA by default
	//seems to be TexturePlacement analogue (кажется является аналогом TexturePlacement. наверное аналогия https://xgm.guru/p/wc3/pathing-alternate ?? Не совсем понятно, что имел в виду автор)
	//0 = pathable for others
    //only 2+8 (A) makes unit non-pathable 
    //-1 - оставляет без изменений
    //0 - если ввожу ноль или любую другую цифру, то через этого юнита "u" проходят
    //10 - если десять, то через юнита "u" не могут проходить, обходят стороной
    //0xCA - по умолчанию. возвращает к исходному значению, которое было задано.
    //пробовал ввести 0xFF летун не мог через здание пролетать, облетает. Как-то влияет значит текстура. Ну вообще большинство чисел (0xFFF) не дают такое сделать. Не все числа, конечно. 
    //Конечно пытался попробовал изменить текстуру на стройку и ходьбу наземных = не получается.
    
	if outhercollision!=-1 then
		call WMem(data + 8,outhercollision)
	endif
    //-1 = оставить без изменений
    //0 = pass through anything (unit u проходит через что-либо. Короче не имеет преград)
    //1 = cannot move (unit u не может двигаться, неподвижен. Может только совершать повороты на месте)
	//2 = default, 2 by default for ground (настройка по умолчанию для наземных)
	//4 = flying default (настройка по умолчанию для летающих)
	//8 = stuck at items, can't go thtough units/buildings, pathable for others (unit u не может проходить через предметы. Остальное почти тоже самое, преграды: юниты/здания/декор. Если у здания/декора убрать текстуру пути, то проходит без преград)
	    
    //0x10 = can go through units but not items/buildings (Юнит проходит через юнитов. Через итемы/здания/декор не может. Если у здания/декора убрать текстуру пути, то проходит без преград)
	//0x20 = free (свободен. без ограничении)
    //0x40 = cant move (не может двигаться. почти тоже самое что и "1") 
    //0x80 == 2 ? , above == 0
	call SetUnitPathing(u, true)
	call WMem(data,p1)
	call WMem(data + 4,p2)
	call WMem(data + 8,p3)
    
endfunction
//===========

а вот про физ размер я не знаю
0
28
5 лет назад
0
NazarPunk:
Что вы подразумеваете под физ размером? Ибо у предмета нет коллизий с юнитами.
Попробую объяснить (В карте юниты - здания (у них путь как у зданий) - по определенному времени они скрываются а в начале раунда я их опять показываю, но если на их месте отказывается какой либо предмет то они сдвигаются .
0
29
5 лет назад
0
Roy Mustang, и тогда предметы окажутся внутри зданий? Не проще перед отображением здания сдвигать/удалять предметы/юниты и прочее, что на их месте может оказаться. Или вообще блокировань место расположения зданий.
0
28
5 лет назад
Отредактирован Roy Mustang
0
NazarPunk:
Roy Mustang, и тогда предметы окажутся внутри зданий?
Это не проблема (здания это как юниты в легионе тд и подобрать предмет таким образом не составит труда)
Или вообще блокировань место расположения зданий.
Не вариант , предметы дропаются на протяжении всей игры в разных местах (и бывает что падают и там где стоят здания)
не проще перед отображением здания сдвигать/удалять предметы/юниты и прочее,
Пока что я таким способом решаю проблему (сдвигаю предметы) но вот интересуюсь есть ли способ сделать предметы без физ размера (думаю если сделать им тип передвижения летающий то они не будут мешать зданиям но опять же в РО - опций очень мало)
0
29
5 лет назад
0
Roy Mustang, вы здания скрываете через ShowUnitHide(unit) или пресоздаёте заново?
Попробуйте зданиям SetUnitXY на их законное место. Если не будет глючить, то здание станет поверх предмета.
0
28
5 лет назад
0
NazarPunk:
Сейчас через ShowUnitHide(unit)
Попробуйте зданиям SetUnitXY на их законное место.
Хорошо, попробую
1
28
5 лет назад
1
Забавно.
function ShowUnitHide takes unit whichUnit returns nothing
    call ShowUnit(whichUnit, false)
endfunction

//===========================================================================
function ShowUnitShow takes unit whichUnit returns nothing
    // Prevent dead heroes from being unhidden.
    if (IsUnitType(whichUnit, UNIT_TYPE_HERO) and IsUnitDeadBJ(whichUnit)) then
        return
    endif

    call ShowUnit(whichUnit, true)
endfunction
Оказывается, мёртвые герои скрываются.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.