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

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

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

 

 

Подскажите, как выдать поршень при поднятии предмета?

Файл bind_stalker.script, в нем ф-ция on_item_take. Она срабатывает при появлении(взятии) предмета в инвентаре ГГ. В ней добавь проверку нужного предмета, к примеру по его конфиговой секции:

local section = obj:section()
if section and section == "секция_предмета" then
     -- что то делаем
end
Ссылка на комментарий

Только у меня диалог после открытия практически сразу исчезает.

Это потому, что настройки диалога у тебя неправильные. Дело в том, что необходимость выбора того или иного диалога рассчитывается последовательно, а вероятности при расчёте не складываются. Смотри:

meet_dialog = {~30} dialog1, {~60} dialog2, {~10} dialog3
Первый диалог будет выбран с вероятностью 30% (число сравнивается со случайным числом в диапазоне от 1 до 100, если больше - сработало). 70% - вероятность, что не будет выбран.

Второй диалог будет выбран с вероятностью 60%, но относительно 70% вероятности не выбора первого диалога. Общая вероятность выбора второго диалога 0.7*0.6*100% = 42%. Отсюда 30%+42% = 72% - вероятность выбора первого или второго диалога, 28% - вероятность не выбора.

Третий диалог будет выбран с вероятностью 10%, но уже от этих оставшихся 28%. Общая вероятность выбора третьего диалога составит 0.1*0.28*100% = 2.8%. Отсюда 72%+2.8% = 74.8% - общая вероятность выбора одного из трёх диалогов.

Получается, с вероятностью 100%-74.8% = 25.2% никакой диалог не будет выбран. И даже если у тебя получилось при начале разговора попасть в «правильные» 74.8% - на апдейте, тут ты прав, происходит выбор диалога заново, с некоей вероятностью он оказывается пуст, и в таком случае в скрипте логики происходит вызов функции restore_default_start_dialog(). Возможно, именно она и закрывает диалоговое окно - движкоправы могут сказать точнее.

Чтобы условие гарантированно приводило к какому-либо диалогу, необходимо, чтобы последний диалог в цепочке от вероятности не зависел:

meet_dialog = {~30} dialog1, {~60} dialog2, dialog3
Но и тогда диалоговое окно теоретически может сбрасываться, если во время апдейта новый выбранный диалог будет отличаться от старого - для смены диалога в таком случае вызывается функция set_start_dialog(dialog). Вызывает ли эта функция аналогичное закрытие диалогового окна, мне неизвестно. Надо проверять.

 

Update: Прошу считать данный пост недействительным - причина ниже.

Изменено пользователем Kirgudu
  • Нравится 1
Ссылка на комментарий

@Kirgudu, ну ты сообразил ^_^ А сумма вероятностей должна быть = 100?

Как передать в диалог текущее значение параметра (ну например состояние оружия)?

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

Прошерстил форум но подобного не нашел, так что рискну спросить (хотя скорее всего плохо искал, но не важно).

В общем такая проблема. Создаю новый смарт террейн на кордоне (через алл спавн разумеется), вот код:

 

[4848]

 

; cse_abstract properties

section_name = smart_terrain

name = esc_stalker_smart_terrain

position = 112.035, -7.627, -16.692

direction = 0.975047,0.000000,-0.221997

id = 65535

version = 118

script_version = 6

spawn_id = 101

 

; cse_alife_object properties

game_vertex_id = 115

distance = 9.09999942779541

level_vertex_id = 413857

object_flags = 0xffffffbe

custom_data = <<END

[smart_terrain]

type = esc_stalker_smart_terrain

capacity = 3

squad = 1

groups = 5

END

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0 :offset = 0,0,0

shape0:radius = 20.55957102775574

 

; cse_alife_space_restrictor properties

restrictor_type = 3

 

; se_smart_terrain properties

 

Далее прописываю логику в gulag_escape.ltx такого вида:

 

[logic@esc_stalker_smart_terrain_stalker1_guard]

active = guard@esc_stalker_smart_terrain_stalker1

 

[guard@esc_stalker_smart_terrain_stalker1]

path_walk = stalker1_walk

path_look = stalker1_look

 

[logic@esc_stalker_smart_terrain_stalker2_kamp]

active = kamp@esc_stalker_smart_terrain_stalker2

 

[kamp@esc_stalker_smart_terrain_stalker2]

center_point = stalker2_kamp

path_walk = stalker2_kamp_task

 

[logic@esc_stalker_smart_terrain_stalker3_guard]

active = guard@esc_stalker_smart_terrain_stalker3

 

[guard@esc_stalker_smart_terrain_stalker3]

path_walk = stalker3_walk

path_look = stalker3_look

 

После прописываю работу для нпс в gulag_escape.script

 

function load_job(sj, gname, type, squad, groups)

if type == "esc_stalker_smart_terrain" then

t = { section = "logic@esc_stalker_smart_terrain_stalker1_guard",

idle = 0,

prior = 4,

state = {0, 1},

online = true,

in_rest = "",

out_rest = "",

}

table.insert(sj, t)

t = { section = "logic@esc_stalker_smart_terrain_stalker2_kamp",

idle = 0,

prior = 3,

state = {0, 1},

online = true,

in_rest = "",

out_rest = "",

}

table.insert(sj, t)

t = { section = "logic@esc_stalker_smart_terrain_stalker3_guard",

idle = 0,

prior = 2,

state = {0, 1},

online = true,

in_rest = "",

out_rest = "",

}

table.insert(sj, t)

end

 

function load_states(gname, type)

 

if type == "esc_stalker_smart_terrain" then

return function(gulag)

return 0

end

end

 

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)

 

if gulag_type == "esc_stalker_smart_terrain" then

return npc_community == "stalker"

end

 

Ну и соответственно прописываю точки путей в way_l01_escape.ltx

 

[stalker2_kamp]

points = p0

p0:name = wp00

p0:position = 110.979, -6.744, -40.293

p0:game_vertex_id = 124

p0:level_vertex_id = 412974

 

[stalker2_kamp_task]

points = p0

p0:name = wp00

p0:position = 110.947, -7.415, -37.927

p0:game_vertex_id = 124

p0:level_vertex_id = 412131

 

[stalker1_walk]

points = p0

p0:name = wp00

p0:flags = 0x1

p0:position = 93.997, -7.186, -11.203

p0:game_vertex_id = 121

p0:level_vertex_id = 391697

 

[stalker1_look]

points = p0

p0:name = wp00

p0:flags = 0x1

p0:position = 86.658, -7.793, -11.119

p0:game_vertex_id = 114

p0:level_vertex_id = 382592

 

[stalker3_walk]

points = p0

p0:name = wp00

p0:flags = 0x2

p0:position = 94.466, -7.183, -23.725

p0:game_vertex_id = 121

p0:level_vertex_id = 392591

 

[stalker3_look]

points = p0

p0:name = wp00

p0:flags = 0x2

p0:position = 85.350, -7.911, -23.875

p0:game_vertex_id = 114

p0:level_vertex_id = 380758

 

И получаю вылет

 

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ...\s.t.a.l.k.e.r\gamedata\scripts\smart_terrain.script:836: attempt to index a function value

 

Кто в этом разбирается, буду признателен если глянете и объясните где ошибки и какие   :)

(чистый Сталкер ТЧ 1.0004)

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

Камрады, вот интересно стало. Количество инфопорций ведь не беспредельно, наверное? Есть какой-то определенный лимит на их количество или нет?

 

И еще вдогонку: инфа о выданных/отобранных инфо пишется в хранилище актора?

Сталкер - наше всё!

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

Подскажите господа как называется секция в all.spawn бочки красного цвета кот. при нанесении хита взрывается, типа с горючим???

И еще каким образом например на Радаре сделана сценка когда монолитовцы (в чистой игре) сбрасывают эти бочки на ГГ при приближении???

СПАСИБО!

Жизнь следует измерять поступками, а не временем...

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

 

 

бочки красного цвета кот. при нанесении хита взрывается, типа с горючим???

В weapons.ltx, ближе к концу файла, то что после строки ";; Explosive Inventory Items" - секции всяких взрывающихся бочек и баллонов.

 

 

 

И еще каким образом например на Радаре сделана сценка когда монолитовцы (в чистой игре) сбрасывают эти бочки на ГГ при приближении???
Хит с типом "импульс" наносится этим бочкам в нужном направлении...
  • Спасибо 1
Ссылка на комментарий

Сделал бочку все получилось, прописал логику в рестрикторе типа:

 

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = {-esc_propusk_done} sr_idle1 %=hit_obj(7018:barrel:0.02:1500)%

 

Бочка летит при заходе в рестриктор, но направление ее хаотично, как можно задать вектор полета (куда покатится)???

Нужно соот. в сторону ГГ.

Есть такая конструкция "hit_src=npc:position())" - правильно я понял что при прописывании сего хит будет производится из определенной точки???

Жизнь следует измерять поступками, а не временем...

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

@losiara, пятым аргументом в функции xr_effects.hit_obj задается вейпонит или story_id объекта, из позиции которого наносится хит. По умолчанию хит наносится с позиции объекта, из логики которого вызывается hit_obj. Чтобы хит был в сторону актора, можно в xr_effects.hit_obj 

   if not sid then
       h.direction = vector():sub(patrol(p[5]):point(0), obj:position())
   end 

заменить на

	    if p[5]=="actor" then
	        h.direction = vector():sub(obj:position(), actor:position())
	    elseif not sid then
	        h.direction = vector():sub(patrol(p[5]):point(0), obj:position())
	    end

и вызывать %=hit_obj(7018:barrel:0.02:1500:actor)%

Изменено пользователем Charsi
  • Спасибо 1
Ссылка на комментарий

@AndrewMor, тут говорили, что большое кол-во поршней может привести к тормозам.

@Charsi, но ведь тогда перестанут работать другие ситуации, использующие xr_effects.hit_obj?

А что, ф-ия хr_effects.alien_control работает?

-- переключает камеру на монстра или на актёра
function alien_control( actor, npc, p )
	printf( "alien_control(%s)", p[1] )
	npc:set_alien_control( p[1] == "true" )
end
Изменено пользователем dPlayer
Ссылка на комментарий

 

 

тут говорили, что большое кол-во поршней может привести к тормозам.

Тормоза - это полбеды. Есть мысль. что в конце концов увеличение кол-ва выданных поршней сверх определенного предела начинает бить сейвы. Потому и спрашивал, сколько инфо можно безопасно выдать, не краша игру?

Сталкер - наше всё!

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

 

 

сколько инфо можно безопасно выдать, не краша игру?

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


 

 

но ведь тогда перестанут работать другие ситуации, использующие xr_effects.hit_obj?

Ну так создай в xr_effects другую ф-цию, к примеру hit_obj2 и вызывай ее из своей логики.

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

Здравствуйте. Как изменить тип урона, наносимого монстром? На изменение параметра hit_type не реагирует.

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

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

Вопрос к знающим. Трабла такая: вытащил из ЗП двери, поднимающиеся вверх. Но они не желают подниматься ни в какую (пытался ввести в ТЧ). Это как-то можно поправить? Если нужно копаться в модели, то тут я, скорее всего,  пас. Может, кто уже делал такое?

Сталкер - наше всё!

Ссылка на комментарий
@AndrewMor, двери из ЗП не подходят для ТЧ, надо править модель. Изменено пользователем naxac

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

Добрые люди подскажите, я правильно понял - в скрипте amk_anoms.script есть строки отвечающие за количество аномалий на локации. Если я хочу увеличить их количество на Кордоне, то это привиться здесь?

 

l01_escape={90,120,1000,{mosquito_bald=34, gravi=20, mincer=20, sakbuzz=15, electra=10, teleport_esc=1}}

 

И если да, то есть 3 вопроса:

1 - gravi=20 это именно количество таких аномалий или их процентное отношение к общему числу всех аномалий на локации?

2 -  90,120,1000 - это что? Минимум и максимум всех аномалий на Кордоне? Тогда что означает 1000?

3 - после всех изменений нужна ли НИ или достаточно пережить Выброс?

ЗЫ: заранее спасибо за помощь...

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

 

 

gravi=20 это именно количество таких аномалий или их процентное отношение

 

Соотношение. Это веса. Все веса складываются, берется случайное число от 1 до этой суммы. Далее в цикле, из этого числа вычитается вес первой аномалии, если стало == 0, значит генерируем ее, иначе повторяем. Грубо - это шкала. Вот в какую часть шкалы попадет случайное число, ту аномалию и генерируем.

 

 

 

2 -  90,120,1000 - это что?

 

Минимум и максимум. Третье число не используется.

 

 

 

после всех изменений нужна ли НИ или достаточно пережить Выброс?

 

Достаточно загрузить сейв, если реализация именно AMK-шная. А если это из NLC7, то там, вероятно, нужно Выброса ждать.

  • Нравится 1
Ссылка на комментарий

Оооо, народ тут объясняет как раз по моей теме! Если тут еще и расскажут, что в каком скрипте отвечает в АМК за способность контролёра зомбировать сталкеров(в буквальном смысле, сталкер переходит в группировку "Зомбированные"), то я вообще на седьмом небе буду.

Все зовут меня Пришедший из Ниоткуда...Почему?Потому что я пришел из ниоткуда и иду в никуда...

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

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

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

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

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

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

Войти

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

Войти
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

×
×
  • Создать...