как сделать effect видимым для 1 игрока в тумане войны? Варианты с юнитом не предлагать. Я использую дамми в крайнем случае

спутал, эта фунция прячет хендл, а не рисовку обеспечивает
function IsFlagBitSet takes integer flags, integer bit returns boolean
	if bit!=0 then
		return flags/bit*0x80000000 != 0
	endif
	return false
endfunction

function RMem takes integer addr returns integer
	if addr<0 or addr>0x7FFFFFFF then
		return 0
	endif
	return Memory[addr/4]
endfunction

function AddAlwaysVisibleFlag takes unit u returns nothing
	local integer a=ConvertHandle(u)
	if a>0 and IsFlagBitSet(RMem(a+0x20),0x10)==false then
		call WMem(a+0x20,RMem(a+0x20)+0x10)
	endif
endfunction
вместо юнита можно вроде любой виджет, просто смени входящий тип и проверь
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
21
Lenivex, ну вот нет же такой функции WMem, ты сам писал! Может, у лича там в закромах она уже заменила функцию WriteMemory, ну так для людей можно было бы сразу WriteMemory и написать, как у него в либе написано... И/или либу обновленную кинуть.
16
function WMem takes integer addr, integer val returns nothing
	if addr<0x100 or addr>0x7FFFFFFF then
		return
	endif
	set Memory[addr/4]=val
endfunction
5
DracoL1ch:
function WMem takes integer addr, integer val returns nothing
	if addr<0x100 or addr>0x7FFFFFFF then
		return
	endif
	set Memory[addr/4]=val
endfunction
Ошибки нету, ничего особого не происходит, эффект виден вне тумана войны и не виден в тумане войны.
	function WMem takes integer addr, integer val returns nothing
		if addr<0x100 or addr>0x7FFFFFFF then
			return
		endif
		set Memory[addr/4]=val
	endfunction	

	function SetEffectVisibility takes effect fx, boolean visible returns nothing
		local integer a=ConvertHandle(fx)
		if a>0 then
			if visible then
				call WMem(a+0x20,0)
			else
				call WMem(a+0x20,1)
			endif
		endif
	endfunction
не знаю в чём дело
32
Lenivex, это немного не та функция, она способна спрятать эффект совсем, если поставить false... Подождите...
5
quq_CCCP:
Lenivex, это немного не та функция, она способна спрятать эффект совсем, если поставить false... Подождите...
мм, поставил false эффект и вправду пропал. Это работает, но немного не то
если поставить false - эффект точно невидим
true - эффект виден, если он не в тумане войны
а мне нужно абсолютное значение видимости, при любых условиях
P.S:
SetEffectVisibility(e1,false)
SetEffectVisibility(e1,true)
эффект виден, если не в тумане войны
32
Lenivex, нет терпение и ты умеешь колупать защищенные карты?
P.S по секрету, у лича это юзается для прыжка войда, смекаешь? Там все прекрасно работает!
5
quq_CCCP:
Lenivex, нет терпение и ты умеешь колупать защищенные карты?
P.S по секрету, у лича это юзается для прыжка войда, смекаешь? Там все прекрасно работает!
Я не тороплю, просто оперативно отвечаю. Колупать карты? Всмысле вскрывать? Если только модели достать какие нибудь. Насчёт кода хз, не знаю
16
спутал, эта фунция прячет хендл, а не рисовку обеспечивает
function IsFlagBitSet takes integer flags, integer bit returns boolean
	if bit!=0 then
		return flags/bit*0x80000000 != 0
	endif
	return false
endfunction

function RMem takes integer addr returns integer
	if addr<0 or addr>0x7FFFFFFF then
		return 0
	endif
	return Memory[addr/4]
endfunction

function AddAlwaysVisibleFlag takes unit u returns nothing
	local integer a=ConvertHandle(u)
	if a>0 and IsFlagBitSet(RMem(a+0x20),0x10)==false then
		call WMem(a+0x20,RMem(a+0x20)+0x10)
	endif
endfunction
вместо юнита можно вроде любой виджет, просто смени входящий тип и проверь
Принятый ответ
32
С эффектами не работает, с юнитами идеально, видно как стоят трясутся, но выделить низя, вокруг ничего не видно.
5
quq_CCCP:
С эффектами не работает, с юнитами идеально, видно как стоят трясутся, но выделить низя, вокруг ничего не видно.
печально, что с эффектами не работает. Так это бы очень много сэкономило ресурсов
32
Вот полностью рабочий вариант для копипаста, увы только для юнитов:
function SetAlwaysVisibleFlag takes unit u, boolean flag returns nothing
    local integer a = ConvertHandle( u )
    if a > 0 then
        if flag and IsFlagBitSet( RMem( a + 0x20 ), 0x10 ) == false then
            call WriteMemory( a + 0x20, ReadMemory( a + 0x20 ) + 0x10 )
        elseif IsFlagBitSet( RMem( a + 0x20 ), 0x10 ) then
            call WriteMemory( a + 0x20, ReadMemory( a + 0x20 ) - 0x10 )
        endif
    endif
endfunction
Скрин
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.