как сделать 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
вместо юнита можно вроде любой виджет, просто смени входящий тип и проверь
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
18
7 лет назад
0
Тогда можно просто создать модификатор видимости в точке, где находится эффект.
0
5
7 лет назад
0
Maniac_91:
Тогда можно просто создать модификатор видимости в точке, где находится эффект.
опять же, я просто увижу лишнее. У меня effect появляется каждый раз при клике. Таким образом можно раскрывать туман войны. А это очень тупо, можно просто всю карту так прокликать и узнать где находится противник
0
16
7 лет назад
0
''
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
''
адреса целые, без деления на 4
0
5
7 лет назад
0
DracoL1ch:
''
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
''
адреса целые, без деления на 4
Не известна функция WMem - подставил WriteMemory - не работает
адреса такие подставлял:
a+0x20
(a+0x20) * 4
a*4 + 0x20
Либо не работает либо выдаёт фатал
2
21
7 лет назад
2
Лич хитрый, как лисица, мемхак дал, а прямо точно написанных новых функций - никогда не даст
Типа ну он же с мемхаком мучился, пусть и другие помучаются, а уж потом результат поимеют
0
5
7 лет назад
Отредактирован Lenivex
0
ClotPh:
Лич хитрый, как лисица, мемхак дал, а прямо точно написанных новых функций - никогда не даст
Типа ну он же с мемхаком мучился, пусть и другие помучаются, а уж потом результат поимеют
он сейчас даёт самый упрощённый вариант. Хотя новые функции безо всяких /4 были бы точно удобнее
0
21
7 лет назад
0
Lenivex, ну вот нет же такой функции WMem, ты сам писал! Может, у лича там в закромах она уже заменила функцию WriteMemory, ну так для людей можно было бы сразу WriteMemory и написать, как у него в либе написано... И/или либу обновленную кинуть.
2
16
7 лет назад
2
function WMem takes integer addr, integer val returns nothing
	if addr<0x100 or addr>0x7FFFFFFF then
		return
	endif
	set Memory[addr/4]=val
endfunction
0
5
7 лет назад
Отредактирован Lenivex
0
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
не знаю в чём дело
0
32
7 лет назад
0
Lenivex, это немного не та функция, она способна спрятать эффект совсем, если поставить false... Подождите...
0
5
7 лет назад
0
quq_CCCP:
Lenivex, это немного не та функция, она способна спрятать эффект совсем, если поставить false... Подождите...
мм, поставил false эффект и вправду пропал. Это работает, но немного не то
если поставить false - эффект точно невидим
true - эффект виден, если он не в тумане войны
а мне нужно абсолютное значение видимости, при любых условиях
P.S:
SetEffectVisibility(e1,false)
SetEffectVisibility(e1,true)
эффект виден, если не в тумане войны
0
32
7 лет назад
0
Lenivex, нет терпение и ты умеешь колупать защищенные карты?
P.S по секрету, у лича это юзается для прыжка войда, смекаешь? Там все прекрасно работает!
0
5
7 лет назад
0
quq_CCCP:
Lenivex, нет терпение и ты умеешь колупать защищенные карты?
P.S по секрету, у лича это юзается для прыжка войда, смекаешь? Там все прекрасно работает!
Я не тороплю, просто оперативно отвечаю. Колупать карты? Всмысле вскрывать? Если только модели достать какие нибудь. Насчёт кода хз, не знаю
3
16
7 лет назад
3
спутал, эта фунция прячет хендл, а не рисовку обеспечивает
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
вместо юнита можно вроде любой виджет, просто смени входящий тип и проверь
Принятый ответ
0
32
7 лет назад
0
С эффектами не работает, с юнитами идеально, видно как стоят трясутся, но выделить низя, вокруг ничего не видно.
0
5
7 лет назад
0
quq_CCCP:
С эффектами не работает, с юнитами идеально, видно как стоят трясутся, но выделить низя, вокруг ничего не видно.
печально, что с эффектами не работает. Так это бы очень много сэкономило ресурсов
1
32
7 лет назад
Отредактирован quq_CCCP
1
Вот полностью рабочий вариант для копипаста, увы только для юнитов:
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
Скрин
Загруженные файлы
0
5
7 лет назад
0
ладно, спасибо, буду использовать unit для анимации...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.