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

[SoC] Ковыряемся в файлах


Halford

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

Ошибка в олспавне/скрипте.

 

Назначается эксклюзив, не проходящий проверку по свойствам лагеря.

Такая же фигня, кстати, случается при переодевании неписей - перестают подходить под условия, и сбегают, либо удаляются "антизависом".

 

Либо править свойства непися (а потом переодевалка/amk_offline_alife их опять перекорежат), либо лагеря, либо smart_terrain.script - оторвать проверку нафиг.

Поделиться этим сообщением


Ссылка на сообщение

Есть там детекторы. items.ltx:
[detector_elite]:identity_immunities и дальше много страшных буковок про zone_class_что-то-там...
 

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

Поделиться этим сообщением


Ссылка на сообщение

Так полно ж примеров в оригинале. В логике непися что-то типа 10|что_делать, 20|что_делать и т.д.

Ну вот наверно нагляднее всего будет так, как я исправил для сцены с Юриком на свалке: если актор попадает в заданный интервал - он там разговоры разговаривают, если подходит или отходит - 3 нейтрала переквалифицируются в бандиты, и начинают, естественно, стрелять.

Но для более простого случая просто combat_ignore врагу прописываем, и тот или стреляет, или нет.

 

[walker10@gar_dram_novice]
path_walk = novice_walk
path_look = novice_look
on_info = %=gar_dm_bandit_demand% walker1@gar_dram_novice
meet = no_meet
;combat_ignore_cond = { -gar_dm_fight_start }

[walker1@gar_dram_novice]
path_walk = novice_walk
path_look = novice_look
on_actor_dist_le_nvis = 15 | remark1@gar_dram_novice
on_info = {+gar_dm_newbie_no_money} remark@no_money_gar_dram_novice %-gar_dm_newbie_no_money%
on_info2 = {+gar_dm_bandit1_dead +gar_dm_bandit2_dead +gar_dm_bandit3_dead} remark@after_fight_gar_dram_novice
on_info3 = {+gar_dm_end} %=gar_dm_bandits_fight%
;reactions = ignore
danger = danger_condition@gar_dram_novice
meet = no_meet
combat_ignore_cond = { -gar_dm_fight_start }

[remark@no_money_gar_dram_novice]
target = 102
snd = gar_dm_newbie_no_money
anim = refuse
on_signal = action_end | walker1@gar_dram_novice %=gar_dm_bandit_demand%
on_info2 = {+gar_dm_bandit1_dead +gar_dm_bandit2_dead +gar_dm_bandit3_dead} remark@after_fight_gar_dram_novice
on_info3 = {+gar_dm_end} %=gar_dm_bandits_fight%
on_actor_dist_le_nvis = 15 | remark1@gar_dram_novice
;reactions = ignore
danger = danger_condition@gar_dram_novice
meet = no_meet
combat_ignore_cond = { -gar_dm_fight_start }

[remark1@gar_dram_novice]
anim = hello
snd = gar_dm_newbie_help_me
target = actor
on_signal = sound_end | remark2@gar_dram_novice %+gar_dm_novice_asked_for_help =gar_dm_bandits_bandits%
on_info2 = {+gar_dm_bandit1_dead +gar_dm_bandit2_dead +gar_dm_bandit3_dead} remark@after_fight_gar_dram_novice
on_info3 = {+gar_dm_end} %=gar_dm_bandits_fight%
;reactions = ignore
danger = danger_condition@gar_dram_novice
meet = no_meet
combat_ignore_cond = { -gar_dm_fight_start }

[remark2@gar_dram_novice]
target = actor
anim = wait
on_actor_dist_le_nvis = 10 | remark3@gar_dram_novice
on_actor_dist_ge_nvis = 25 | %=gar_dm_bandits_fight%
on_info2 = {+gar_dm_bandit1_dead +gar_dm_bandit2_dead +gar_dm_bandit3_dead} remark@after_fight_gar_dram_novice
on_info3 = {+gar_dm_end} %=gar_dm_bandits_fight%
on_timer = 20000 | %=gar_dm_bandits_fight%
;reactions = ignore
danger = danger_condition@gar_dram_novice
meet = no_meet
combat_ignore_cond = { -gar_dm_fight_start }

[remark3@gar_dram_novice]
target = actor
anim = wait
snd = help
arrival_timeout = 1500
on_signal = move_end | remark@after_fight_gar_dram_novice %=gar_dm_bandits_fight%
on_info2 = {+gar_dm_bandit1_dead +gar_dm_bandit2_dead +gar_dm_bandit3_dead} remark@after_fight_gar_dram_novice
on_timer = 5000 | %=gar_dm_bandits_fight%
;reactions = ignore
danger = danger_condition@gar_dram_novice
meet = no_meet
combat_ignore_cond = { -gar_dm_fight_start }

[remark@after_fight_gar_dram_novice]
anim = guard
target = actor
snd = gar_dm_newbie_thank_you
on_timer = 30000 | walker2@gar_dram_novice %=actor_friend%
danger = danger_condition@gar_dram_novice
meet = meet@gar_dram_novice

[walker2@gar_dram_novice]
path_walk = gar_dm_novice_walk
meet = meet@gar_dram_novice
on_signal = new_gulag| %+gar_dm_novice_change_st%

[meet@gar_dram_novice]
meet_state = 3|guard@wait
meet_state_wpn = 3|guard@wait
victim = 3|actor
victim_wpn = 3|actor
use = true
use_wpn = true

[danger_condition@gar_dram_novice]
ignore_distance = 1

 

Поделиться этим сообщением


Ссылка на сообщение

Один уже освоил, блин. 8(

 

Вопрос несколько расплывчат.

ну вот например так:

 

function on_level_change()    -- Переход между локациями
    log("info", "on_level_change, current: %s, last: %s", lname, lv_last)
    if lname == "l04_darkvalley" then    -- изменить отношения с кем надо при входе
        if lv_last == "l02_garbage" then gulag_dark_valley.dolg_start = true    -- Монгол может появляться в Темной долине
        elseif lv_last == "l01_escape" then
            actor:set_actor_position( vector():set( -44.38, 0.43, -541.47 ) )
        end
        xl_relations.dark_valley_in( true )

    else ...

 

- где lv_last сохраняется хоть во все том же pstor, а dark_valley_in() что-то делает, например - спавнит.

Или можно через инфо, просто я их не захотел из-за количества.

Или рестриктор в определенном месте, а из него опять же info или свою функцию.

 

Как-то так.

 

P.S. Да, а вообще тут последнее время пошли какие-то явно вредительские вопросы, и, главное, на них ведь отвечают. Ох ужо придет к нам Роскомнадзор...

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

Поделиться этим сообщением


Ссылка на сообщение

"противогазы отдельно от брони" - вроде NLC, нет ?

Заготовка - вполне универсальная есть: amk- / солянко- / nlc- худ. amk_mod.script.

Так и искать: -- Dynamic HUD Gift from ATT, Arharа and Kolmogor --

 

Про мануалы и тотальную зачистку - надо бы. Вот как добровольцы найдутся - так и сразу.

Поделиться этим сообщением


Ссылка на сообщение

Как-то не совсем понятно, что в данном случае понимается под бесконечностью, и чем приведенный вариант "небесконечен".

 

Вроде бы должно раз в секунду переключаться с одной секции на другую, если их ни кто не прооверрайдил.

Поделиться этим сообщением


Ссылка на сообщение

Чтобы не извращаться - лучше все-таки добавить третью - полную копию первой, но уже без таймера. И переходить из второй на нее. В общем-то идея remark в этом и состоит изначально.

 

Варианты с info и сложнонавороченной проверкой лично мне нравятся гораздо меньше.

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

Поделиться этим сообщением


Ссылка на сообщение

[walker@...1]
...
on_timer = 1000| remark@...

[remark@...]
target	= ...
anim	= ...
snd	= ...
on_signal = sound_end| walker@...2

- вписать ненужное вместо ...

Это в обобщенном виде, на примере многострадальных Шустрого, Петрухи, Лиса и и.д.

 

Upd: _Val_, спасибо. Копипаста - это наше все. 8( Поправил.

 

Upd2:

Чтоб не пялились - это правка xr_meet.script - если в течение пары дней про нее не вспомню - пните меня, кто-нибудь.

 

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

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

Смотрите комментарии внимательно.

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

Поделиться этим сообщением


Ссылка на сообщение

Тем, что оно его не умеет. Просто в xr_remark таких словей вообще нет.

 

Оно-ж тупо работает: разворачивает непися на target, дергает проигрывание анимок/звуков, дергает за переключатель.

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

Поделиться этим сообщением


Ссылка на сообщение

Я здесь на шрифты тоже ругаюсь.

 

А если серьезно, то return db.actor:object("test1") ~= nil

Так, и только так. Из непися предметы надо другим способом вытаскивать. Довольно сложным.

 

2 AndreySol: путь из актива нужен xr_gulag'у. То есть, как бы льзя, и даже нужно, если ремарк идет первым, но схема - либо я смотрел невнимательно, либо таки игнорируется.

Поделиться этим сообщением


Ссылка на сообщение

2: Хемуль36рус, agro_naem_ohr_camp_center - у тебя просто ни где не используется, так что в нем может быть что угодно.

Ну, будем смотреть...

function log( s, ... )
	get_console():execute( string.format( "load ~log~ %s", ( ... and string.format( s, ... )) or s ) )
end


function list_tbl( v, name, t_level )
	local name = name or "item"
	if type(v) == "table" then
		if t_level then
			for i = 1, t_level do name = string.format( "__%s", name ) end
		else t_level = 0
		end
		local cnt = 0
		for kk,vv in pairs(v) do
			cnt = cnt + 1
			if vv and type(vv) == "table" then
				log( false, "info", "%s: %s, type: table", name, kk )
				list_tbl( vv, kk, t_level + 1 )
			else log( "%s: %s, type: %s, value: %s", name, kk, type(vv), tostring((type(vv)=="userdata" and "*") or vv) )
		end	end
		log( "------ %s records in table [%s] ------", cnt, name )
		return true
	end
	log( "list_tbl: %s, invalid argument type: %s", name, type(v) )
end


function list_gulag( list_info, list_g )
	local strn, gulag, npc_info, npc, npc_name, job_n, t, prior
	local g_list = list_g or { "esc_lager" }
	local sim = alife()
	for dummy, g_name in pairs( g_list ) do
		strn = sim:object( g_name )
		if strn then
			log( "list_gulag, %s", g_name )
			npc_info = strn.npc_info
			if npc_info then
				for k, v in pairs( npc_info ) do
					obj = v.se_obj
					if obj then
						npc_name = obj:name() or "nil"
						gulag = strn.gulag
						job_n = gulag.ObjectJob
						job_n = job_n and job_n[k]
						prior = job_n and gulag.Job[ job_n ]
						prior = ( prior and prior.prior ) or "invalid"
						log( "npc: %s (id: %s), exclusive: %s, prior: %s, info: %s", npc_name, k, ( v and v.exclusive and "true" ) or "false", prior, tostring( v ) )
						if list_info == "custom" then
							t = amk_netpk.read_stalker_params( obj )
							log( "custom: %s", string_sub( t.custom, 1, 200 ) )
						end
						if list_info == "info" then list_tbl( v, k ) end
						if list_info == "job" then
							job_n = gulag.ObjectJob
							job_n = job_n and job_n[k]
							if job_n then list_tbl( gulag.Job[job_n], "job" ) end
						end
				end	end
				log( "--- end of list ---" )
			else log( "list_gulag, gulag: %s is invalid !", g_name )
			end
		else log( "list_gulag, gulag: %s not found !", g_name )
end	end	end

-- вызвать откуда-нибудь из net_spawn() актора list_gulag( "info", { "agro_naem_ohr" } ), а потом list_gulag( "job", { "agro_naem_ohr" } )

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

А что в них не так ?

 

agro_naem_ohr_ и _task в начале и в конце прицепляются к camp_center из center_point.

Если не найдено - цепляется просто agro_naem_ohr_, если и это не найдено - в зависимости от того, что у него в скриптах, подставляется "nil", "default_simulation_path" или непись выбрасывается из смарта, и получает опять же "default_simulation_path". И начинает просто тыкаться в рэндомном направлении.

Поделиться этим сообщением


Ссылка на сообщение

Хемуль36рус, кстати, да - стоит проверить доступность смарта и собственно уровня для тех наймов. Впрочем, уже обсуждалось.

Поделиться этим сообщением


Ссылка на сообщение

use_wpn = true в [meet@что_там_у_него] ?

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

Поделиться этим сообщением


Ссылка на сообщение

Довольно сложно ответить. Надо эту самую LA под рукой иметь, либо найти актуальный файл логики этого самого торговца, в оригинале это был \config\scripts\esc_trader.ltx, узнается из allspawn.

Файл торговли, который указывается в этой самой логике,

внезапно, trade_manager.script, xr_logic.script и биндер торговца (кто он там в LA - непись или монстр ?)

 

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

  • Спасибо 2

Поделиться этим сообщением


Ссылка на сообщение

По вопросу об LA:

 

Ну, то есть, понятно, что либо config\scripts, либо config\scripts\escape, cordon_sidor.ltx, но вытаскивать конкретный вариант надо из allspawn.

 

сам конфиг торговли - скорее всего trade_trader.ltx - если выше я с логикой угадал. В файле вроде правильно все.

 

Скрипты они, конечно, тупо переписали "венгеркой", оставив все основные глюкобаги, но зато теперь кто попытается разобраться - конкретно затрахается. Добрые люди... А ведь могли и через обфускатор прогнать, чтоб невосстановимо было. И вообще db* банально триплдесом зашифровать, а в движке расшифровывать. Сеансовым ключом, получаемым по инету при запуске...

 

Однако, вопрос к залу: там логи совсем отключены, что-ли ? Было б что не так в конфигах - должен был бы сругаться.

Изменено пользователем Dennis_Chikin
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

amk_utils.script:

--Callback на взятия предмета в инвентарь гг из ящика
function actor_item_from_box(box, item)
	if item ~= nil then
		restriction_stock.restriction_of_stock(item)
	end
end
-- ограничение на количество предметов. Убрать if item ~= nil then restriction_stock.restriction_of_stock(item) end

 

аналогично - для function actor_item_take(obj)

 

amk_alcohol.script:

function alcohol_drink(game_time) ...

 

	--если превысили порог в макс. кол-во бутылок, то смерть
	if ap.a >= alc_max_drink_bottles_to_death then
		reset_dream()
		reset_sober()
		reset_lose_hp()
		ap.a = 0
		ap.b = 0
		ap.f0 = 1
		ap.f1 = game_time + 5 --minute
		amk.send_tip(game.translate_string("alc_too_much_die"),nil,nil,5)
	end

 

-- убрать.

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...