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

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


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

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

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

 

[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
Ссылка на комментарий

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

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

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

Ясно, спс, будем ждать выброса.

 

Вот в какую часть шкалы попадет случайное число, ту аномалию и генерируем.

А это шкала может быть больше 100? Просто я обратил внимание, что если сложить все соотношения в этом конкретном примере, то получается 100. Если я сделаю больше 100, к примеру 198:

 

l01_escape={180,240,1000,{mosquito_bald=68, gravi=40, mincer=40, sakbuzz=30, electra=20, teleport_esc=1}}

 

Так можно делать и на что это может повлиять?

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

 

 

А это шкала может быть больше 100?

 

Не только может, а и будет. В данном случае у тебя на шкале первые 68 отметин для mosquito_bald, следующие 40 для gravi и последняя одна для teleport_esc. Вот в какую отметину рандом попадет, такая аномалия и будет. Т.е. чем больше вес по отношению к сумме всех весов, тем больше вероятность этой аномалии.

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

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

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

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

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

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

Войти

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

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

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