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

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


Halford

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

alex5773

 

На толике не проверяй, у него логика валяться раненым. Для проверки лучше сделай так: выстави в game_relations отношение сталкеров к себе 5000, чтобы они на тебя никогда не обижались, и сам с ПМ делай их ранеными и уже смотри что работает, а что нет.

 

Uyman358

 

Скинь 848 строку скрипта smart_terrain.script

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


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

ColR_iT

 

Ах, да ты прав, я сейчас посмотрел в all.spawn у него просто 0,31 здоровья стоит, логики у него нет(кроме смарт терраина). Я просто недавно столкнулся с такой логикой раненого, что он даже при 100 хп будет раненым, но у него стоит также параметр not_for_help = true. И все же ну зачем на толике проверять? Вот примечание:

Схема раненного. Определяет поведение NPC в состоянии "раненный".

Примечание: не рекомендуется задавать схему в качестве активной.

А у нас получается, как раз что для Толика активной схемой будет [wounded] - но это всего лишь мое предположение :)

 

Uyman358

 

Если у тебя вылетает именно из заголовка функции, значит чего-то начудили с самим классом смарта.

P.S. У меня была похожая проблема на ЧН: я прописал работу на смарте на Янтаре, однако как только сквад регистрировался в смарте происходил безлоговый выелет - как вылечил? Да никак. В твоем случае незнаю, переполнение смарта по идее невозможно - просто выкинет из смарта лишних НПС, может быть ты что-то изменил в настройке смарта, из-за чего вообще происходит вылет, какие твои действия?

*Сейчас, посмотрел скрипт оригинала, функция вызывается один раз - при раздаче работы, и выталкивание НПС из ГУЛАГа

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


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

А ты какой функцией спавнишь? Из АИ вертолетов или нет? Если нет, попробуй такую функцию:

function heli(section,posx,posy,posz,lvid,gvid,logic)
local obj = alife():create(section,vector():set(posx,posy,posz),lvid,gvid)
local packet = net_packet()
obj:STATE_Write(packet)

-- свойства cse_alife_object
local game_vertex_id = packet:r_u16()
local cse_alife_object__unk1_f32 = packet:r_float()
local cse_alife_object__unk2_s32 = packet:r_s32()
local level_vertex_id = packet:r_s32()
local object_flags = packet:r_s32()
local custom_data = packet:r_stringZ()
local story_id = packet:r_s32()
local cse_alife_object__unk3_s32 = packet:r_s32()

-- свойства cse_visual
local model_visual = packet:r_stringZ()
local cse_visual__unk1_u8 = packet:r_u8()
-- свойства cse_motion
local motion_name = packet:r_stringZ()

-- свойства cse_ph_skeleton
local skeleton_name = packet:r_stringZ()
local cse_ph_skeleton__unk1_u8 = packet:r_u8()
local cse_ph_skeleton__unk2_u16 = packet:r_u16()

-- свойства cse_alife_helicopter
local cse_alife_helicopter__unk1_sz = packet:r_stringZ()
local engine_sound = packet:r_stringZ()

--устанавливаем логику
custom_data = "[logic]\ncfg = scripts\\heli\\"..logic..".ltx"

-- теперь заполняем нужные параметры
-- свойства cse_alife_object
packet:w_begin(game_vertex_id)
packet:w_float(cse_alife_object__unk1_f32)
packet:w_s32(cse_alife_object__unk2_s32)
packet:w_s32(level_vertex_id)
object_flags = bit_not(5) -- ~5 = 0xfffffffa
packet:w_s32(object_flags)
packet:w_stringZ(custom_data)
packet:w_s32(-1)
packet:w_s32(cse_alife_object__unk3_s32)

-- свойства cse_visual
packet:w_stringZ(model_visual)
packet:w_u8(cse_visual__unk1_u8)

-- свойства cse_motion
packet:w_stringZ(motion_name)

-- свойства cse_ph_skeleton
skeleton_name = "idle"
packet:w_stringZ(skeleton_name)
packet:w_u8(cse_ph_skeleton__unk1_u8)
packet:w_u16(cse_ph_skeleton__unk2_u16)

-- свойства cse_alife_helicopter
cse_alife_helicopter__unk1_sz = "idle"
engine_sound = "alexmx\\helicopter"
packet:w_stringZ(cse_alife_helicopter__unk1_sz)
packet:w_stringZ(engine_sound)

-- считываем скорректированные параметры
packet:r_seek(0)
obj:STATE_Read(packet, packet:w_tell())


return obj
end

Здесь и логика формируется.

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


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

 antreg

Тогда вообще без понятия, в ACDC файлах и скриптах сталкера вообще ничего про collide или Ignore_static, только в файле lua_help.script есть два параметра:

const object_collide = 512;
    const world_object_collide = 134218240;
 Это все что нашел, может не там искал...

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


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

Много я делал НПСов, и механиков и торгашей, и обычных, и ни разу не использовал секцию [danger_condition]. Вот зачем она тебе нужна, если у тебя стоит combat_ignore_cond = always, то есть у тебя НПС и так игнорирует опасность, а ты еще и это прописываешь. Это уже солянка. Лично я использую [danger_condition] либо для скриптовых сцен, либо для точечной подгонки логики непися. Так что просто удали эту секцию.

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


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

Боягуз

попробуй так:

[walker]
path_walk = stoyu
path_look = smotryu
def_state_standing = hide
danger = danger_condition
 
[danger_condition]
ignore_distance = 100
ignore_distance_sound = 100

То есть свыше 100 метров, НПС будет пофигу на врагов и звуки стрельбы.

 

Теги никто не отменял!

ColR_iT

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

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


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

Боягуз

Да, при загрузке сейва много чего происходит... Тогда попробуй сделать рестриктор на АТП(к примеру параллелепипед внутри которого всё АТП), и пропиши им вдобавок в схеме walker:

out_restr = имя_рестриктора
P.S. Если danger не помог, может быть у тебя есть какие-нибудь A-Life моды? И поэтому они срываются к своим товарищам. Хотя может все дело и в перезагрузке. По идее out_restr должен помочь.

 

Интересно, и чем же поможет наличие данной строки в схеме walker? Тем, что будет просто присутствовать?

Воздержись от комментария, если не знаешь ответа.

ColR_iT

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

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


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

2ColR_iT,

Может я и правда не то сказал :) , но на stalkerin'е я про out_restr вот что нашел:

out_restr = sr_poimali_1 — при боевой схеме держится за этим рестриктором.

И если, как я уже писал dander не помогает, тут 2 варианта:

1. НПС все-равно оказывается в комбате.

2. Что-то еще его заставляет идти за тридевять земель - например A-Life мод какой-нибудь.

Если 2 пункт, я вообще без понятия что делать, а вот на 1 как раз либо danger, либо out_restr.

 

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


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

PostScriptum

В файле dialogs.xml Вот он:

 

 

<dialog id="dm_help_wounded_medkit_dialog" priority="10">
<init_func>dialog_manager.init_help_wounded_medkit_dialog</init_func>
        <precondition>dialogs.allow_wounded_dialog</precondition>
        <precondition>dialogs.is_opp_wounded</precondition>
        <precondition>dialogs.actor_have_medkit</precondition>
</dialog>

 

Думаю у тебя вызовет вопрос init_func, поэтому настоятельно рекомендую прочесть статью от malandrinus'a про диалоги, и эту про скриптовые диалоги.

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


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

 Лучше всего поставить AI-вертолетов, еще как вариант можно попробовать нанести хит вертолету от нпс в xr_effects.script есть функция:

function hit_obj(actor, npc, p)
local h = hit()
local obj = level_object_by_sid(p[1])
local sid = nil
 
if not obj then
--    abort("HIT_OBJ [%s]. Target object does not exist", npc:name())
return
end
 
h:bone(p[2])
h.power = p[3]
h.impulse = p[4]
 
if p[5] then
sid = tonumber(p[5])
if sid then
sid = level_object_by_sid(sid)
if sid then
h.direction = vector():sub(sid:position(), obj:position())
end
end
if not sid then
h.direction = vector():sub(patrol(p[5]):point(0), obj:position())
end
else
h.direction = vector():sub(npc:position(), obj:position())
end
 
h.draftsman = sid or npc
h.type = hit.wound
obj:hit(h)
end

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

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


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

BrokenEarth, я встречал этот вылет, когда делал летающую аномалию, ведь в СДК указывается анимация для камеры - файл gamedata\anims\. И при создание катсцены было подобное, вообщем проверь нет ли в папке anims файлов с русскими именами, вдруг из-за этого.
P.S. у меня в логе было "Can't find motion file file.anm", а у тебя даже формата нет :wacko:

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


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

Подскажите название анимации Круглова на Янтаре, когда он делает замеры и у него в руках детектор.(P.S. Или киньте файл его логики)

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


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

В профиле сталкера допиши:

<hit_probability_factor>1</hit_probability_factor>

hit_probability_factor - фактор "меткости" сталкера. При нуле будет мазать стопроцентно.

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


Ссылка на сообщение
Хемуль36рус

 Если тебя интересует как сделать это из функции, то да:

-- Функции для работы с отношениями

function actor_friend(actor, npc)
	npc:set_relation(game_object.friend, actor)
end

function actor_neutral(actor, npc)
	npc:set_relation(game_object.neutral, actor)
end

function actor_enemy(actor, npc)
	npc:set_relation(game_object.enemy, actor)
end

Как видишь здесь точно так же, как ты и написал. Это функции из xr_effects.script, так что можешь вызвать их из логики, если надо.

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


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

А при чем тут проверка на инфу? Если ее нет, то функция должна выполняться по идее каждый раз при заходе на уровень.

 

VVV32768_Val_

А вы попробуйте в конец _g.script добавить это:

 

prefetch("rrr_spawn")

Под rrr_spawn подразумевается имя которые вы указали в level_script'e.

 

  • Нравится 1

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


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

 Движок запускает не сам ролик, а так называемый tutorial, во время которого игра ставится на "Паузу" и запускается видео. То есть, чтобы отключить показ ролика, нужно удалить его из туториала. Как? ColR_iT тебе уже ответил.

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


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

 Не знаю откуда ты это взял, я не теоретик, но вот что тебе скажу. Передо мной была задача изменить начало игры в моем моде. Вот видео, начал записывать сразу после "Начать новую игру", смотри с 4 минуты. Так вот как я это сделал:

 1. Подменим стандартную секцию intro_game в файле ui_movies.xml на эту:

 

 

<intro_game>
<global_wnd x="0" y="0" width="1024" height="768">
<auto_static x="0" y="0" width="1024" height="768" stretch="1">
<texture>intro\intro_back</texture>
</auto_static>
</global_wnd>
 
<item type="video">
<sound>$no_sound.ogg</sound>
<delay>0</delay>
<pause_state>off</pause_state>
       <function_on_stop>xr_effects.darkness</function_on_stop>
<video_wnd x="0" y="0" width="1024" height="768" stretch="1">
<texture x="0" y="1" width="1280" height="954">intro\intro_back</texture>
</video_wnd>
</item>
 
 
</intro_game>
 

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

 

P.S. А это наверное для красоты:

чет я сильно сомневаюсь ....

 

      <pause_state>on</pause_state>

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


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

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