Ñêðèïòû - Ñòðàíèöà 157 - Ôîðóì HeroesWorld-à

Áûñòðàÿ íàâèãàöèÿ ïî îñíîâíûì ðàçäåëàì ôîðóìà:
Òóðíèðû
ÊÀÐÒÛ
Heroes 6
Heroes 5
Heroes 4
Heroes 3
Heroes 2
Heroes 1
Might&Magic

Ãåðîè Ìå÷à è Ìàãèè 5 - Êàðòîñòðîèòåëüñòâî (Ðåäàêòîð êàðò)  ýòîì ðàçäåëå ìîæíî îáñóæäàòü âñå ÷òî êàñàåòñÿ ðåäàêòîðà êàðò äëÿ Heroes of Might and Magic V. Òàê æå çäåñü îáñóæäàåì êàðòîñòðîèòåëüñòâî.

Îòâåò
Ñòðàíèöà 157 èç 263
 
Îïöèè òåìû
#2341
Ñòàðûé 26.07.2017, 13:38
  #2341
^
KioM
 
Àâàòàð äëÿ KioM
📖
Ðåãèñòðàöèÿ: 01.02.2012
Àäðåñ: Õåðñîí, Óêðàèíà
Ñîîáùåíèÿ: 351
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 01.02.2012
Àäðåñ: Õåðñîí, Óêðàèíà
Ñîîáùåíèÿ: 351
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

вопрос к опытным скриптерам:
как лучше всего (минимальным кол-вом кода) сделать обработчик посещенности строения по типу склепа например, мои идеи ограничиваются способом - через включение/выключение проверочной константы в триггере нового дня с нужными мне условиями. Но может есть способ по эффективнее?)
KioM âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2342
Ñòàðûé 26.07.2017, 20:03
  #2342
^
Jack_of_shadows
 
Àâàòàð äëÿ Jack_of_shadows
📖
Ðåãèñòðàöèÿ: 08.09.2013
Ñîîáùåíèÿ: 526
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 08.09.2013
Ñîîáùåíèÿ: 526
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

KioM, опишите лучше подробнее что нужно, а то я так понимаю, что "обработчик посещенности строения" это функция, которая срабатывает при посещении строения. В таком случае непонятно в чем загвоздка, если есть триггер касания объекта.
Jack_of_shadows âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2343
Ñòàðûé 26.07.2017, 21:24
  #2343
^
KioM
 
Àâàòàð äëÿ KioM
📖
Ðåãèñòðàöèÿ: 01.02.2012
Àäðåñ: Õåðñîí, Óêðàèíà
Ñîîáùåíèÿ: 351
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 01.02.2012
Àäðåñ: Õåðñîí, Óêðàèíà
Ñîîáùåíèÿ: 351
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Jack_of_shadowsKioM, опишите лучше подробнее что нужно, а то я так понимаю, что "обработчик посещенности строения" это функция, которая срабатывает при посещении строения. В таком случае непонятно в чем загвоздка, если есть триггер касания объекта.

почти) нужно: есть храм (свой собственный) при активации идет скрипт, бой и т.д. затем хочу сделать так, чтобы при посещении его скажем последующие несколько дней, до начала новой недели выдавало сообщение и отказ (это тоже все понятно) но проверку на то посещено оно уже каким-то игроком или несколькими или нет как лучше сделать? идея была через указатель состояния в функции нового дня через триггер, но может есть более простая и универсальная фича для подобных дел? для подобных строений, которая передавала бы информацию, что его уже разграбили
KioM âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2344
Ñòàðûé 26.07.2017, 21:48
  #2344
^
Jack_of_shadows
 
Àâàòàð äëÿ Jack_of_shadows
📖
Ðåãèñòðàöèÿ: 08.09.2013
Ñîîáùåíèÿ: 526
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 08.09.2013
Ñîîáùåíèÿ: 526
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Чуть проще во время активации сохранять в переменную текущую дату, и при касании объекта сверять дату с этой переменной. Если поведение одинаково для всех игроков, переменная одна, если разная для каждого игрока - таблица переменных.
Если же нужно как-то внешне показывать на объекте, разграблен он или уже обновился, тогда конечно только через триггер нового дня, иных способов нет.
Jack_of_shadows âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2345
Ñòàðûé 26.07.2017, 22:49
  #2345
^
KioM
 
Àâàòàð äëÿ KioM
📖
Ðåãèñòðàöèÿ: 01.02.2012
Àäðåñ: Õåðñîí, Óêðàèíà
Ñîîáùåíèÿ: 351
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 01.02.2012
Àäðåñ: Õåðñîí, Óêðàèíà
Ñîîáùåíèÿ: 351
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Jack_of_shadowsЧуть проще во время активации сохранять в переменную текущую дату, и при касании объекта сверять дату с этой переменной.
Спасибо, то что нужно
KioM âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2346
Ñòàðûé 28.07.2017, 22:00
  #2346
^
Dyrman
 
Àâàòàð äëÿ Dyrman
📖
Ðåãèñòðàöèÿ: 24.06.2008
Àäðåñ: Òàì, ãäå íåáà êîí÷àåòñÿ êðàé
Ñîîáùåíèÿ: 3479
Îòïðàâèòü ñîîáùåíèå äëÿ  Dyrman ñ ïîìîùüþ ICQ
Ðåãèñòðàöèÿ: 24.06.2008
Àäðåñ: Òàì, ãäå íåáà êîí÷àåòñÿ êðàé
Ñîîáùåíèÿ: 3479
Îòïðàâèòü ñîîáùåíèå äëÿ  Dyrman ñ ïîìîùüþ ICQ
Ïî óìîë÷àíèþ
Re: Ìîäîñòðîèòåëüñòâî

Имеется код:
	local NHF_Trigger_env = {trig = {}}
print("T1:");
NHF_Trigger_env.Trigger = Trigger
function NHF_Trigger_env.tostring(a)
	return a and (a.."" ~= a and a or '"'..a..'"') or "nil"
end;
function NHF_Trigger_env.emptytable(t)
	print("T2:");
	for k,v in t do
		if v then return nil end
	end
	return 1
end;
function NHF_Trigger_env.hasparam(i)
	print("T3:");
	return i ~= 0 and i ~= 10 and i ~= 11
end;
function __HANDLER(trigtype, param)
	print("T4:");
	print("T5:");
	local h = %NHF_Trigger_env.trig[trigtype]
	if not h then return end
	local NHF_Trigger_env = %NHF_Trigger_env
	return function(a, b, c, d)
		a = %NHF_Trigger_env.tostring(a)
		b = %NHF_Trigger_env.tostring(b)
		c = %NHF_Trigger_env.tostring(c)
		d = %NHF_Trigger_env.tostring(d)
		local args = "(" .. a .. "," .. b .. "," .. c .. "," .. d .. ")"
		print("T6:");
		for sender, tab in %h do
			if sender ~= 0 then
				local handler = %NHF_Trigger_env.hasparam(%trigtype) and tab and tab[%param] or tab
				if handler then
					startThread(parse(handler .. args))
				end
			end
		end		
		local tab = %h[0]
		print("T7:");
		if tab then
			local handler = %NHF_Trigger_env.hasparam(%trigtype) and tab and tab[%param] or tab
			if handler then
				print("T8:");
				startThread(parse(handler .. args))
			end
		end
	end
end;
function Trigger(sender, trig, par, handler)
	print("T9:");
	if sender .. "" ~= sender then
		print("T10:");
		sender, trig, par, handler = 0, sender, trig, par
	end
	if not %NHF_Trigger_env.hasparam(trig) then
		print("T11:");
		par, handler = nil, par
	end
	local need_disable = handler ~= nil
	if handler then
		print("T12:");
		%NHF_Trigger_env.trig[trig] = %NHF_Trigger_env.trig[trig] or {}
		if par then
			print("T13:");
			%NHF_Trigger_env.trig[trig][sender] = %NHF_Trigger_env.trig[trig][sender] or {}
			%NHF_Trigger_env.trig[trig][sender][par] = handler
		else
			print("T14:");
			%NHF_Trigger_env.trig[trig][sender] = handler
		end
	else
		print("T15:");
		if %NHF_Trigger_env.trig[trig] then
			if %NHF_Trigger_env.trig[trig][sender] then
				if par then
				print("T16:");
					%NHF_Trigger_env.trig[trig][sender][par] = nil
					need_disable = %NHF_Trigger_env.emptytable(%NHF_Trigger_env.trig[trig][sender])
					if need_disable then %NHF_Trigger_env.trig[trig][sender] = nil end
				else
					%NHF_Trigger_env.trig[trig][sender] = nil
				end
				need_disable = %NHF_Trigger_env.emptytable(%NHF_Trigger_env.trig[trig])
				if need_disable then %NHF_Trigger_env.trig[trig] = nil end
			end
		end
	end
	if not need_disable then return end
	if par then
		print("T17:");
		%NHF_Trigger_env.Trigger(trig, par, handler and "__HANDLER(" .. trig .. "," .. %NHF_Trigger_env.tostring(par) .. ")")
	else
		%NHF_Trigger_env.Trigger(trig, handler and "__HANDLER(" .. trig .. ")")
	end
	print("T18:end");
end;


Выдаёт ошибку:
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 20
Размер:	33.8 Кбайт
ID:	50081

Есть ли предположения, что тут не так?
Dyrman âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2347
Ñòàðûé 28.07.2017, 22:33
  #2347
^
AstralLein
 
Àâàòàð äëÿ AstralLein
📖
Ðåãèñòðàöèÿ: 02.06.2017
Àäðåñ: Â Èìïåðèè Íåçàíõåëüì.
Ñîîáùåíèÿ: 4428
Ðåãèñòðàöèÿ: 02.06.2017
Àäðåñ: Â Èìïåðèè Íåçàíõåëüì.
Ñîîáùåíèÿ: 4428
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Нифига себе скрипт... мне бы так уметь. Извиняюсь не в тему.
AstralLein ñåé÷àñ íà ôîðóìå
Îòâåòèòü ñ öèòèðîâàíèåì
#2348
Ñòàðûé 28.07.2017, 22:46
  #2348
^
RedHeavenHero
 
Àâàòàð äëÿ RedHeavenHero
📖
Ðåãèñòðàöèÿ: 10.02.2012
Ñîîáùåíèÿ: 2378
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 10.02.2012
Ñîîáùåíèÿ: 2378
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ìîäîñòðîèòåëüñòâî

DyrmanИмеется код:
	local NHF_Trigger_env = {trig = {}}
print("T1:");
NHF_Trigger_env.Trigger = Trigger
function NHF_Trigger_env.tostring(a)
	return a and (a.."" ~= a and a or '"'..a..'"') or "nil"
end;
function NHF_Trigger_env.emptytable(t)
	print("T2:");
	for k,v in t do
		if v then return nil end
	end
	return 1
end;
function NHF_Trigger_env.hasparam(i)
	print("T3:");
	return i ~= 0 and i ~= 10 and i ~= 11
end;
function __HANDLER(trigtype, param)
	print("T4:");
	print("T5:");
	local h = %NHF_Trigger_env.trig[trigtype]
	if not h then return end
	local NHF_Trigger_env = %NHF_Trigger_env
	return function(a, b, c, d)
		a = %NHF_Trigger_env.tostring(a)
		b = %NHF_Trigger_env.tostring(b)
		c = %NHF_Trigger_env.tostring(c)
		d = %NHF_Trigger_env.tostring(d)
		local args = "(" .. a .. "," .. b .. "," .. c .. "," .. d .. ")"
		print("T6:");
		for sender, tab in %h do
			if sender ~= 0 then
				local handler = %NHF_Trigger_env.hasparam(%trigtype) and tab and tab[%param] or tab
				if handler then
					startThread(parse(handler .. args))
				end
			end
		end		
		local tab = %h[0]
		print("T7:");
		if tab then
			local handler = %NHF_Trigger_env.hasparam(%trigtype) and tab and tab[%param] or tab
			if handler then
				print("T8:");
				startThread(parse(handler .. args))
			end
		end
	end
end;
function Trigger(sender, trig, par, handler)
	print("T9:");
	if sender .. "" ~= sender then
		print("T10:");
		sender, trig, par, handler = 0, sender, trig, par
	end
	if not %NHF_Trigger_env.hasparam(trig) then
		print("T11:");
		par, handler = nil, par
	end
	local need_disable = handler ~= nil
	if handler then
		print("T12:");
		%NHF_Trigger_env.trig[trig] = %NHF_Trigger_env.trig[trig] or {}
		if par then
			print("T13:");
			%NHF_Trigger_env.trig[trig][sender] = %NHF_Trigger_env.trig[trig][sender] or {}
			%NHF_Trigger_env.trig[trig][sender][par] = handler
		else
			print("T14:");
			%NHF_Trigger_env.trig[trig][sender] = handler
		end
	else
		print("T15:");
		if %NHF_Trigger_env.trig[trig] then
			if %NHF_Trigger_env.trig[trig][sender] then
				if par then
				print("T16:");
					%NHF_Trigger_env.trig[trig][sender][par] = nil
					need_disable = %NHF_Trigger_env.emptytable(%NHF_Trigger_env.trig[trig][sender])
					if need_disable then %NHF_Trigger_env.trig[trig][sender] = nil end
				else
					%NHF_Trigger_env.trig[trig][sender] = nil
				end
				need_disable = %NHF_Trigger_env.emptytable(%NHF_Trigger_env.trig[trig])
				if need_disable then %NHF_Trigger_env.trig[trig] = nil end
			end
		end
	end
	if not need_disable then return end
	if par then
		print("T17:");
		%NHF_Trigger_env.Trigger(trig, par, handler and "__HANDLER(" .. trig .. "," .. %NHF_Trigger_env.tostring(par) .. ")")
	else
		%NHF_Trigger_env.Trigger(trig, handler and "__HANDLER(" .. trig .. ")")
	end
	print("T18:end");
end;


Выдаёт ошибку:
Вложение 50081

Есть ли предположения, что тут не так?
С какими параметрами был вызван переопределенный Trigger?
__________________
Êàðòû äëÿ Ãåðîåâ Ìå÷à è Ìàãèè 5
Îäèíî÷íûå: Çàâåñà ñðûâàåòñÿ, Ïîñîë, Ïîñëåäíèé ðûâîê, Ýõî Ïóñòîòû
Êàìïàíèÿ: Èìïåðèÿ Åäèíîðîãà

Ñóùåñòâà NCF
Îðäåí Ïîðÿäêà: 1
Íåéòðàëû: 1 2 3 4
Êàðòû äëÿ Ãåðîåâ Ìå÷à è Ìàãèè 5
Îäèíî÷íûå: Çàâåñà ñðûâàåòñÿ, Ïîñîë, Ïîñëåäíèé ðûâîê, Ýõî Ïóñòîòû
Êàìïàíèÿ: Èìïåðèÿ Åäèíîðîãà

Ñóùåñòâà NCF
Îðäåí Ïîðÿäêà: 1
Íåéòðàëû: 1 2 3 4
RedHeavenHero âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2349
Ñòàðûé 28.07.2017, 23:33
  #2349
^
Dyrman
 
Àâàòàð äëÿ Dyrman
📖
Ðåãèñòðàöèÿ: 24.06.2008
Àäðåñ: Òàì, ãäå íåáà êîí÷àåòñÿ êðàé
Ñîîáùåíèÿ: 3479
Îòïðàâèòü ñîîáùåíèå äëÿ  Dyrman ñ ïîìîùüþ ICQ
Ðåãèñòðàöèÿ: 24.06.2008
Àäðåñ: Òàì, ãäå íåáà êîí÷àåòñÿ êðàé
Ñîîáùåíèÿ: 3479
Îòïðàâèòü ñîîáùåíèå äëÿ  Dyrman ñ ïîìîùüþ ICQ
Ïî óìîë÷àíèþ
Re: Ìîäîñòðîèòåëüñòâî

RedHeavenHeroС какими параметрами был вызван переопределенный Trigger?

Тип: OBJECT_TOUCH_TRIGGER
Проверка на существование героя и монстра стоит.

	function __HANDLER(trigtype, param)
	print("T4:"..trigtype);
	print("T5:"..param);
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 22
Размер:	254.0 Кбайт
ID:	50083

С вызовами каждого триггера в отдельном потоке и нужными слипами в зависимости, мультиплеер карта или нет, можно заставить работать и в мульте. По крайней мере, часть триггеров хоть как-то работает.
Dyrman âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2350
Ñòàðûé 29.07.2017, 00:08
  #2350
^
RedHeavenHero
 
Àâàòàð äëÿ RedHeavenHero
📖
Ðåãèñòðàöèÿ: 10.02.2012
Ñîîáùåíèÿ: 2378
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 10.02.2012
Ñîîáùåíèÿ: 2378
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ìîäîñòðîèòåëüñòâî

DyrmanТип: OBJECT_TOUCH_TRIGGER
Проверка на существование героя и монстра стоит.

	function __HANDLER(trigtype, param)
	print("T4:"..trigtype);
	print("T5:"..param);
Вложение 50083

С вызовами каждого триггера в отдельном потоке и нужными слипами в зависимости, мультиплеер карта или нет, можно заставить работать и в мульте. По крайней мере, часть триггеров хоть как-то работает.
Прямо сейчас не могу проверить, но на первый взгляд можно попробовать заменить

	
local handler = %NHF_Trigger_env.hasparam(%trigtype) and tab and tab[%param] or tab


на

	
local handler
if %NHF_Trigger_env.hasparam(%trigtype) then
	handler = tab and tab[%param]
else
	handler = tab
end


в обоих случаях.
__________________
Êàðòû äëÿ Ãåðîåâ Ìå÷à è Ìàãèè 5
Îäèíî÷íûå: Çàâåñà ñðûâàåòñÿ, Ïîñîë, Ïîñëåäíèé ðûâîê, Ýõî Ïóñòîòû
Êàìïàíèÿ: Èìïåðèÿ Åäèíîðîãà

Ñóùåñòâà NCF
Îðäåí Ïîðÿäêà: 1
Íåéòðàëû: 1 2 3 4
Êàðòû äëÿ Ãåðîåâ Ìå÷à è Ìàãèè 5
Îäèíî÷íûå: Çàâåñà ñðûâàåòñÿ, Ïîñîë, Ïîñëåäíèé ðûâîê, Ýõî Ïóñòîòû
Êàìïàíèÿ: Èìïåðèÿ Åäèíîðîãà

Ñóùåñòâà NCF
Îðäåí Ïîðÿäêà: 1
Íåéòðàëû: 1 2 3 4
RedHeavenHero âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2351
Ñòàðûé 29.07.2017, 00:14
  #2351
^
Dyrman
 
Àâàòàð äëÿ Dyrman
📖
Ðåãèñòðàöèÿ: 24.06.2008
Àäðåñ: Òàì, ãäå íåáà êîí÷àåòñÿ êðàé
Ñîîáùåíèÿ: 3479
Îòïðàâèòü ñîîáùåíèå äëÿ  Dyrman ñ ïîìîùüþ ICQ
Ðåãèñòðàöèÿ: 24.06.2008
Àäðåñ: Òàì, ãäå íåáà êîí÷àåòñÿ êðàé
Ñîîáùåíèÿ: 3479
Îòïðàâèòü ñîîáùåíèå äëÿ  Dyrman ñ ïîìîùüþ ICQ
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Ошибка исчезла.
Надо проверять на карте, где несколько триггеров теперь.
Dyrman âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2352
Ñòàðûé 29.07.2017, 01:07
  #2352
^
Dyrman
 
Àâàòàð äëÿ Dyrman
📖
Ðåãèñòðàöèÿ: 24.06.2008
Àäðåñ: Òàì, ãäå íåáà êîí÷àåòñÿ êðàé
Ñîîáùåíèÿ: 3479
Îòïðàâèòü ñîîáùåíèå äëÿ  Dyrman ñ ïîìîùüþ ICQ
Ðåãèñòðàöèÿ: 24.06.2008
Àäðåñ: Òàì, ãäå íåáà êîí÷àåòñÿ êðàé
Ñîîáùåíèÿ: 3479
Îòïðàâèòü ñîîáùåíèå äëÿ  Dyrman ñ ïîìîùüþ ICQ
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

К сожалению, триггер из карты не отрабатывается при наличии более позднего триггера.
Dyrman âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2353
Ñòàðûé 29.07.2017, 01:25
  #2353
^
RedHeavenHero
 
Àâàòàð äëÿ RedHeavenHero
📖
Ðåãèñòðàöèÿ: 10.02.2012
Ñîîáùåíèÿ: 2378
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 10.02.2012
Ñîîáùåíèÿ: 2378
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Обозначен ли отправитель триггера, как другой?
То есть в моде все триггеры должны иметь дополнительный первый параметр - отправителя.
Например,
Trigger("NHF", OBJECT_TOUCH_TRIGGER, "mob", "handler_function")

Добавлено через 2 минуты
Каждый уникальный отправитель может иметь свой триггер на данный тип события и параметр (объект, игрока, ...)
__________________
Êàðòû äëÿ Ãåðîåâ Ìå÷à è Ìàãèè 5
Îäèíî÷íûå: Çàâåñà ñðûâàåòñÿ, Ïîñîë, Ïîñëåäíèé ðûâîê, Ýõî Ïóñòîòû
Êàìïàíèÿ: Èìïåðèÿ Åäèíîðîãà

Ñóùåñòâà NCF
Îðäåí Ïîðÿäêà: 1
Íåéòðàëû: 1 2 3 4
Êàðòû äëÿ Ãåðîåâ Ìå÷à è Ìàãèè 5
Îäèíî÷íûå: Çàâåñà ñðûâàåòñÿ, Ïîñîë, Ïîñëåäíèé ðûâîê, Ýõî Ïóñòîòû
Êàìïàíèÿ: Èìïåðèÿ Åäèíîðîãà

Ñóùåñòâà NCF
Îðäåí Ïîðÿäêà: 1
Íåéòðàëû: 1 2 3 4
RedHeavenHero âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2354
Ñòàðûé 29.07.2017, 11:41
  #2354
^
Dyrman
 
Àâàòàð äëÿ Dyrman
📖
Ðåãèñòðàöèÿ: 24.06.2008
Àäðåñ: Òàì, ãäå íåáà êîí÷àåòñÿ êðàé
Ñîîáùåíèÿ: 3479
Îòïðàâèòü ñîîáùåíèå äëÿ  Dyrman ñ ïîìîùüþ ICQ
Ðåãèñòðàöèÿ: 24.06.2008
Àäðåñ: Òàì, ãäå íåáà êîí÷àåòñÿ êðàé
Ñîîáùåíèÿ: 3479
Îòïðàâèòü ñîîáùåíèå äëÿ  Dyrman ñ ïîìîùüþ ICQ
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

RedHeavenHeroОбозначен ли отправитель триггера, как другой?
То есть в моде все триггеры должны иметь дополнительный первый параметр - отправителя.
Например,
Trigger("NHF", OBJECT_TOUCH_TRIGGER, "mob", "handler_function")

Добавлено через 2 минуты
Каждый уникальный отправитель может иметь свой триггер на данный тип события и параметр (объект, игрока, ...)
Да, и так, и так пробовал. Результат - одинаков.
Если в самой карте переопределяешь триггер - то всё работает. С другим параметром отправителя. Но скрипты же готовых карт не будешь переделывать...


Ещё вопрос стоит обнуления триггера, чтобы обнулялся только нужный, так будет правильно:
Trigger("NHF", OBJECT_TOUCH_TRIGGER, mob, nil);?
А если в самой карте обнуляется Trigger( OBJECT_TOUCH_TRIGGER, mob, nil); , то не на все ли подействует?

Как понимаю, если первый параметр = nil, это тоже является уникальным параметром отправителя.


Выясняю задержки и потоки, может, они влияют, потому что в коде все правильно.
Dyrman âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#2355
Ñòàðûé 29.07.2017, 20:09
  #2355
^
RedHeavenHero
 
Àâàòàð äëÿ RedHeavenHero
📖
Ðåãèñòðàöèÿ: 10.02.2012
Ñîîáùåíèÿ: 2378
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 10.02.2012
Ñîîáùåíèÿ: 2378
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

DyrmanДа, и так, и так пробовал. Результат - одинаков.
Если в самой карте переопределяешь триггер - то всё работает. С другим параметром отправителя. Но скрипты же готовых карт не будешь переделывать...
Важно, чтобы переопределение Trigger происходило до выполнения скрипта карты и скрипта мода.
Также желательно добавить стандартный алиас функции Trigger:
	SetTrigger = Trigger
в конец того большого куска кода переопределения.
Он, скорее всего, используется редко или вообще не используется, однако его тоже надо учитывать.
Ещё вопрос стоит обнуления триггера, чтобы обнулялся только нужный, так будет правильно:
Trigger("NHF", OBJECT_TOUCH_TRIGGER, mob, nil);?
Да, так верно.
А если в самой карте обнуляется Trigger( OBJECT_TOUCH_TRIGGER, mob, nil); , то не на все ли подействует?
Нет, по-умолчанию вызов триггера со стандартными параметрами (из руководства) будет интерпретирован как вызов от отправителя 0 (как число, не строка). То есть в данном случае обнулится только триггер, поставленный обычным способом, а все "специальные" останутся. Тем не менее, имитация через Trigger(0, ...) невозможна, т. к. это равносильно Trigger(NEW_DAY_TRIGGER, ...).
Как понимаю, если первый параметр = nil, это тоже является уникальным параметром отправителя.
Нет, первый параметр должен быть или числом (стандартный вызов), тогда оно будет принято как тип события, или строкой, тогда она будет принята как отправитель. Передача первым параметром nil вызовет ошибку attempt to concat a nil value.
При желании параметр отправителя можно поместить в конец как необязательный, тогда в качестве отправителя можно будет посылать любое значение, кроме nil (будет равнозначен незадаче параметра) и NaN (не индексируется в таблицах, так как не равен самому себе). Это потребует небольшой переделки кода.
__________________
Êàðòû äëÿ Ãåðîåâ Ìå÷à è Ìàãèè 5
Îäèíî÷íûå: Çàâåñà ñðûâàåòñÿ, Ïîñîë, Ïîñëåäíèé ðûâîê, Ýõî Ïóñòîòû
Êàìïàíèÿ: Èìïåðèÿ Åäèíîðîãà

Ñóùåñòâà NCF
Îðäåí Ïîðÿäêà: 1
Íåéòðàëû: 1 2 3 4
Êàðòû äëÿ Ãåðîåâ Ìå÷à è Ìàãèè 5
Îäèíî÷íûå: Çàâåñà ñðûâàåòñÿ, Ïîñîë, Ïîñëåäíèé ðûâîê, Ýõî Ïóñòîòû
Êàìïàíèÿ: Èìïåðèÿ Åäèíîðîãà

Ñóùåñòâà NCF
Îðäåí Ïîðÿäêà: 1
Íåéòðàëû: 1 2 3 4
RedHeavenHero âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
Îòâåò
Ñòðàíèöà 157 èç 263


Îïöèè òåìû



×àñîâîé ïîÿñ GMT +4, âðåìÿ: 14:16.


vBulletin v3.5.0, Copyright ©2000-2024, Jelsoft Enterprises Ltd. (Ðóññêèé)

ßíäåêñ öèòèðîâàíèå    Top.Mail.Ru