Перейти к контенту

Рекомендуемые сообщения

Даже не знаю куда писать... Либо сюда, либо сразу в справочник, но суть в чём:

 

Есть код 1:

local s = get_hud():GetCustomStatic("static")
if not s then
    s = get_hud():AddCustomStatic("static")
end

s:wnd():SetText("text")
И код 2:

get_hud():AddCustomStatic("static", true):wnd():SetText("text")
Первый код вешает апдейт актора, а второй нет. Почему так? Исходники смотрел, там вроде всё нормально.

 

З.Ы. второй аргумент AddCustomStatic означает, что сначала будет произведен поиск статика с таким же именем и в случае успеха, он будет возвращен вместо создания нового (т.е. эквивалент функции GetCustomStatic).

Изменено пользователем Shadows
Ссылка на комментарий

2 7.9: однозначно, нет.

 

2 Shadows: а проверки с логом добавить ?

s = get_hud():AddCustomStatic("static") - вот здесь статик точно возвращается ?

Ссылка на комментарий

2 Shadows: а проверки с логом добавить ? s = get_hud():AddCustomStatic("static") - вот здесь статик точно возвращается ?

local s = get_hud():AddCustomStatic("static")
if s and s:wnd() then
	log1("yes")
else
	log1("no")
end
--> yes

Да и во втором варианте кода же работает.

 

SDrawStaticStruct* CUIGameCustom::AddCustomStatic			(LPCSTR id, bool bSingleInstance)
{
	if(bSingleInstance){
		st_vec::iterator it = std::find(m_custom_statics.begin(),m_custom_statics.end(), id);
		if(it!=m_custom_statics.end())
			return &(*it);
	}
	
	CUIXmlInit xml_init;
	m_custom_statics.push_back		(SDrawStaticStruct());
	SDrawStaticStruct& sss			= m_custom_statics.back();

	sss.m_static					= xr_new<CUIStatic>();
	sss.m_name						= id;
	xml_init.InitStatic				(*m_msgs_xml, id, 0, sss.m_static);
	float ttl						= m_msgs_xml->ReadAttribFlt(id, 0, "ttl", -1);
	if(ttl>0.0f)
		sss.m_endTime				= Device.fTimeGlobal + ttl;

	return &sss;
}

 

 

@7.9, нет, там метод.

Изменено пользователем Shadows
Ссылка на комментарий

Может у тебя в биндере дальше переменная s используется?

Не используется.

 

так на какой строчке биндер вешается?

s:wnd():SetText("text")

 

Причем именно на апдейте надо это делать. При единичном вызове все нормально работает почему-то.

 

Подскажите, как реализовать выстрел дуплетом в чн, спасибо

Задай zoom_enabled = off в конфиге. Хотя не уверен, что сработает в ЧН, но в ТЧ 100% пашет.
  • Спасибо 1
Ссылка на комментарий

Причем именно на апдейте надо это делать. При единичном вызове все нормально работает почему-то.

Проверь перед зависанием вызывался Add или Get.

 

И что будет, если вариант 2 переписать в виде:

local s = get_hud():AddCustomStatic("static", true)
s:wnd():SetText("text")
Ссылка на комментарий
,может глупый вариант, но всё же. В первом коде есть условие, а второй вызывается от какого-нибуть чего-нибудь там. Да хоть от булки хлеба.

svarog2741.gif

 

НС - шлак, солянки - шлак.

Ссылка на комментарий

Всем привет. Не знаю, может не  в тему пишу - как сделать (в ТЧ), что бы при получении ГГ нескольких определенных инфопоршней на экране появлялось опред. сообщение? Спасибо.

 

 

 

Ссылка на комментарий

local t_info, t_info_any, t_info_n = {}, {}, 0

function add_on_info( f, nfo )	-- ( функция, инфо ), либо f для любых инфо
	if nfo then
		local t = t_info[nfo]
		if t then table_insert( t, f )
		else t_info[nfo] = { f }
		end
	else t_info_n = t_info_n + 1; t_info_any[t_info_n] = f
	end
end

function actor_binder:info_callback( npc, nfo )
	for i = 1, t_info_n do t_info_any[i]( nfo, npc ) end
	local t = t_info[nfo]
	if t then
		for i = 1, #t do t[i]( nfo, npc ) end
	end

	ltasks_proceed()		-- Сюжет
	ltasks_process_info( nfo )	-- Отметки на карте
end

 

local sms_t = {	-- info, текст; todo	-- сделать проверку живости авторов
	["sms_pulya"]		= "sms_pulya_text",
	["sms_lukash"]		= "sms_lukash_text",
	["sms_serega"]		= "sms_serega_text",
	["sms_borov"]		= "sms_borov_text",
	["sms_volk"]		= "sms_volk_text",
	["sms_shurup"]		= "sms_shurup_text",
	["sms_dan"]		= "sms_dan_text",
	["sms_new_dan1"]	= "sms_new_dan1_text",
	["sms_new_dan2"]	= "sms_new_dan2_text",
	["mitya_dead_sms_sidor"] = "Здорово Меченый, это Сидор,зайди есть посылка любопытная" }

function send_sms( sms )
	if sms_t[sms] then
		actor:give_info_portion( sms )
		amk_tip( game.translate_string( sms_t[sms] ), nil, nil, 30 )
	end
end


-- was: wawka

function add_krysyk_pomer_treasure()
	treasure_manager.get_treasure_manager():give_treasure( "esc_secret_village_rucksack" )
end


function check_bes_dead()
	if actor:has_info( "val_pula_ammo_start" ) and actor:dont_has_info( "val_pula_ammo_done" ) then
		timer_start( "send_sms", math_random( 20, 30 ), "sms_pulya" )
		timer_start( "send_sms", math_random( 50, 60 ), "sms_lukash" )
		timer_start( "send_sms", math_random( 70, 80 ), "sms_serega" )
	end
end

...

info_f = {
	["gar_hellcar_umer"]		= check_bes_dead,	-- по-моему, это info ни кто не генерит
	["bandit_krisyk_umer"]		= check_krysyk_dead,
	["esc_vagon_wounded_umer"]	= check_tolik_dead,
	["mil_freedom_member0018_umer"]	= check_maks_dead,
	["gar_dm_novice_umer"]		= check_yurik_dead,
	["marsh_dan_umer"]		= marsh_dan_umer,
	["ucen_talk_est"]		= marsh_dan_umer2,
	["mil_dolg_phase1"]		= mil_dolg_attack1,
	["mil_dolg_after_explode"]	= mil_dolg_attack2,
	["mitya_dead"]			= check_mitya_dead,
	["shadowman_zver_have"]		= check_shadowman_zver,
	["shadowman_zver_fail"]		= check_shadowman_zver,
	["grab_stal1_dead"]		= on_death_info,
	["grab_stal2_dead"]		= on_death_info,
	["grab_stal3_dead"]		= on_death_info,
	["grab_stal4_dead"]		= on_death_info,
	["grab_stal5_dead"]		= on_death_info,
	["tutorial_wounded_give_info"]	= esc_shustryi,
	["tutorial_wounded_start"] 	= esc_shustryi,
	["esc_blocpost_pust"]		= esc_desant_heli_1,
	["esc_btr_killed"]		= esc_desant_heli_2
} -- /info_f

info_f_invcl = {}


function on_inv_close()
	for k, f in pairs( info_f_invcl ) do
		if f and actor:has_info( k ) then f() end
	end
end


function on_info( nfo, something )
	log( "info", "on_info: %s, %s", nfo, to_str( something ) )
	if something and something.name then
		log( "info", "on_info, name: %s", something:name() )
	end
	local f = info_f[nfo]
	if f then f( nfo, something ) end
end

...
bind_stalker.add_on_info( on_info )

 

https://dl.dropboxusercontent.com/u/27871782/storyline.script

 

P.S. Таймеры - не нужны !

На самом деле тот же actor:give_game_news() задержку сам умеет, без всяких таймеров. Так что здесь осталось только по тому, что переносилось когда-то незадумываясь над смыслом переносимого.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

@Outfater,

local porsh = {

1 поршень, второй поршень}

 

Function hhy() -- на апдейт

if has_info("porsh") then

Дальше сам.

 

P.S. мог ошибиться, так как писал с телефона.

Изменено пользователем svarog2741
  • Спасибо 1

svarog2741.gif

 

НС - шлак, солянки - шлак.

Ссылка на комментарий

@k01jan, тем что один поршень - одна функция.

@svarog2741, а куда прописать local porsh и дальше ? Function hhy() -- на апдейт - тоже не совсем понял - hhy произвольно, или именно так? И что значит на апдейтif has_info("porsh") then - тут всё понятно с условием, а куда его писать, в конец биндера под функцию, или в любую скрипт-папку?

Изменено пользователем Outfater

 

 

 

Ссылка на комментарий

а куда прописать local porsh

в тот же скрипт, где функция проверки.

И что значит на апдейт

Функция update в bind_stalker.script

hhy произвольно, или именно так?

 

да, произвольно.
  • Спасибо 1

svarog2741.gif

 

НС - шлак, солянки - шлак.

Ссылка на комментарий

@svarog2741, в разделе function actor_binder:update(delta) перед последним эндом сделал так:

repack_ammo.on_update()
if xrs_ai then xrs_ai.actor_update(delta)
end
if rx_ai then rx_ai.actor_update()
end

function test_prosto()
local testporsh = {"test1","test1","test3"}
if has_info("testporsh") then smski.poluchil_porsh
end

end

---------------------------------------------------------------------------
function actor_binder:save(packet)
if rx_ai then rx_ai.actor_save(packet) end
art_hit.save()

то что выделено жирным - это моё, остальное уже было.  "test1" - инфопоршень. Правильно?
 
p.s. Нет, не правильно. Сделал так:
function test_prosto
local porsh = {"test1","test1","test3"}
if has_info("porsh") then smski.poluchil_porsh
end
Получаю вылет:
[error]Arguments     : LUA error: ...r\stalker Тени Чернобыля\gamedata\scripts\sak.script:8: attempt to index local 'actor' (a nil value)
Потом закоммент. строку с функцией, все равно тот же вылет. Что не так?
Изменено пользователем Outfater

 

 

 

Ссылка на комментарий

@Outfater, так правильно, ты вшил одну функцию в другую. Вынеси в отдельный скрипт и всё.


Товарищ, Struck, если я где-то накосячил или обидел тебя извини, но не надо под каждым моим постом ставить "Не нравится". Если не согласен с моим вариантом, напиши свой. 

  • Не нравится 1

svarog2741.gif

 

НС - шлак, солянки - шлак.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
×
×
  • Создать...