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

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


Halford

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

Roman82, только что проверил - всё работает!

Вот содержимое моего файла:

function have_n_items(section,number)
    if number == nil then
        number = 1
    end
    local actor = db.actor
    if actor then
        local cnt=0
        actor:iterate_inventory(function (dummy, item)
                                if item:section()==section then cnt=cnt+1 end
                                end, nil)
        return cnt>=number
    end
    return false
end

function have_1_medkit()
    if have_n_items("medkit_army",1) then
        log1("--Have medkit")
    else
        log1("!!Not have medkit")
    end
end

function have_2_tushenka()
    if have_n_items("conserva",2) then
        log1("--Have two conserva")
    else
        log1("!!Not have conserva")
    end
end

function have_2_bread()
    if have_n_items("bread",2) then
        log1("--Have two bread")
    else
        log1("!!Not have bread")
    end
end

function have_ammo()
    if have_n_items("ammo_5.45x39_ap",2) then
        log1("--Have two ammo")
    else
        log1("!!Not have ammo")
    end
end

function have_grenade()
    if have_n_items("grenade_rgd5",2) then
        log1("--Have two grenade")
    else
        log1("!!Not have grenade")
    end
end

function check_all ()
    have_1_medkit()
    have_2_tushenka()
    have_2_bread()
    have_ammo()
    have_grenade()
end

Функция log1 выводит в консоль текст в скобках и при вызове функции check_all из диалога, я в консоли увидел пять строк:

Have medkit
Have two conserva
Have two bread
Have two ammo
Have two grenade

Так что делай выводы.

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


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

Вампир35, использую для активной схемы твоего НПС параметр combat_ignore_cond и укажи его значение как always.

Вот готовый пример, но я бы рекомендовал тебе посмотреть его, чтобы сравнить, правильно ли сделал ты:

[logic]
active = walker@phlegmatic_person
[walker@phlegmatic_person]
path_walk = phlegmatic_person_walk
path_look = phlegmatic_person_look
combat_ignore_cond = always

Предполагается, что схема walker@phlegmatic_person является активной.

 

Изменено пользователем ColR_iT
Поправил...

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


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

xxx5, всё очень просто.

Мужик этот это НПС с именем в all.spawn bar_bar_visitors_2_1. У него своя логика, она не большая:

[smart_terrains]
none = true

[logic]
active = walker

[walker]
path_walk = bar_bar_square_2_place_1_walk
path_look = bar_bar_square_2_place_1_look
soundgroup = bar_visitors1
meet = meet
danger = danger_ignore

[danger_ignore]
ignore_distance = 0

[meet]
use = true
use_wpn = true
meet_talk_enabled = true

[spawner]
cond = {+bar_bar_square_2_state_1}

Так вот ключевым элементом для твоего вопроса является секция spawner. Как видишь в ней стоит условие на спавн, а именно наличие инфопорции bar_bar_square_2_state_1, выдаётся этот инфопоршень при входе в рестриктор с именем bar_bar_entry_zone по всей видимости с вероятностью 33% (логика этого рестриктора вынесена в файл bar_entry_zone.ltx).

Если НПС уже заспавнен, но условие спавна не не выполнилось, т.е. у игрока отсутствует данная инфопорциял, то НПС будет переведёт в оффлайн.

Собственно подобным образом можно делать с любым НПС.

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

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


Ссылка на сообщение
xxx5, а к чему вообще расстояние тут!? Где тебе удобно там и ставь. Дописываешь Сидору секцию. Если сделаешь всё правильно - получишь желаемый результат.

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


Ссылка на сообщение
Serafim666, в игре, гильзы - это партикл, собственно время жизни партикла и ограничивает время видимости гильзы. Если нужно изменить, то это в SDK, Particle Editor.

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


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

FANAT, тоже ничего сложного.

Ставишь НПС лицом к стойке, приблизительно на расстояние в 0.25 м от неё и используешь анимации из серии: bar_fas, bar_left, bar_head, bar_sleep, bar_right.

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


Ссылка на сообщение
Вампир35, кладёшь твой .ogg файл в папку sounds\characters_voice\dialogs и называешь его так же, как называется текст твоей фразы в диалоге (тег <text>). Т.е. если у тебя в диалоге есть фраза, вида:
<phrase id="1">
   <text>my_text_dialog</text>
   <next>2</next>
</phrase>

то твою озвучку нужно "обозвать" как my_text_dialog.ogg.

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

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


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

SkyLoader, это так, но за окном диалога этого всё равно практически не видно.

 

FANAT, главное, чтобы он лежал по этому пути и назывался также как текст фразы.

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


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

Starter, вряд ли возможно.

Диалог (тот который инициирует игрок, либо сам НПС, т.е. оконный) никак не связан с анимациями. Можно попытаться использовать схему remark и запускать анимацию и звук через неё, саму схему же можно активировать благодаря инфопорции, который можно выдать при начале разговора или конкретной фразы.

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

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


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

S@n

1. В лагере новичков, визуал могут повторяться, поскольку для НПС используется всего 10 профилей esc_stalker_novice_default<1-10>, но все находятся под одним классом esc_stalker_novice, а игра выбирает профиль как раз благодаря этому классу, и если профилей несколько выбор падёт случайным образом. Об этом подробно написано здесь: "Система профилей и алгоритм генерации имён".

2. Для того, чтобы добавить ещё НПС в лагерь необходимо либо править гулаг, либо добавлять "самостоятельных" НПС с их логикой сидения у костра. Об обоих случаях можно почитать здесь: "Настройки логики", там в четырёх частях, читать много, но расписано достаточно подробно.

 

Добавлено через 47 мин.:

Daemonion, покажи как ты добавлял новую звуковую тему в файл sound_theme.script.

Хотя на самом деле ничего не понятно из того, что ты спросил...

На сколько сильно перекрывают, и перекрывают ли вообще, друг друга зоны с именами esc_sr_a1, esc_sr_a9, esc_sr_a10 вместе с зоной в которой прописана указанная логика?

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

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


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

Zander_driver, так сложилось, что технически телепорты практически не относятся к аномалиям. :) Сейчас объясню...

Телепорт состоит из двух частей: это непосредственно zone_teleport и space_restrictor.

Так вот zone_teleport отвечает лишь за визуальную часть и только, а вот как раз таки рестриктор и телепортирует игрока в пределах уровня, используя схему sr_teleport. А для рестрикторов можно задавать не один шейп и как ты их поставишь, там и будет реакция на ГГ.

И кстати телепортацию можно сделать не в одно место. Схема поддерживает до десяти точек конечного направления.

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

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


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

FANAT

Немного с запаздыванием, но всё же...

В ТЧ есть схема zoneguard. Это схема как раз и реализует возможность "потыкать" оружием в актора, если тот зайдёт на определённую зону. Можешь почитать об этом здесь: "Настройки логики". Хотя по большому счёту, реализовать некий гоп-стоп можно и при помощи других схем.

 

Что касается появления Толика, то в онлайн он выводится, как только актор получит инфопорцию tutorial_wounded_start, по которой переключается его работа в гулаге esc_corps. Для данного гулага два состояния, и две одинаковые работы, с небольшой разницей - в первой, для параметра online, стоит значение false, во второй же true.

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


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

AndreySol, для метки, а именно функции map_add_object_spot_ser, которая ставит метку на серверный объект необходим не сюжетный идентификатор (story_id), а его id. Определить id заспавненого НПС можно как раз при его спавне:

--# Здесь будем хранить
local id_npc = nil
function spawn_npc_test()
     --# определяем серверный объект заспавненного НПС
     local s_obj = alife():create("agr_stalker_regular",vector():set(-125.603,-3.734,-87.740),127146,72)
     --# Для валидности
     if s_obj then
         --# Запоминаем
         id_npc = s_obj.id
     end
end

Ну а потом уже и используем её для того, чтобы поставить метку на этого НПС.

green_location и blue_location - это название метки зарегистрированное в файле config\ui\map_spots.xml.

 

 

Атаман, есть несколько способов. Вероятно, самым простым для тебя, будет отредактировать секцию актора в all.spawn, дописав ему в секцию [spawn] нужные предметы.

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

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


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

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

Теперь по существу...

Очень похоже, что менеджер заданий просто не может правильно связать story_id, зарегистрированный в game_story_ids.ltx, с конкретным НПСом.
А как по твоему они (story_id и конкретный НПС) должны "связаться"? Посредством ментальной связи? Естественно твоему НПС необходимо присвоить story_id со значением 93, в твоём случае.

 

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


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

Artos, позволь не согласится. по поводу "сорности" параметра path_walk.

Задание этого значения позволит НПС, после приёма на работу и первом её выполнении, придти именно в эту точку. Это очень полезно для этой схемы, поскольку позволяет избежать ситуации, когда НПС приходит на точку center_point установленной в центре костра.

Убедится в этом можно заглянув в файл xr_gulag.script в метод get_job_path_name (248-256 строки оригинального файла).

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


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

Artos, всё же прописанную логику непосредственно в custom_data, тоже можно считать работой. И, к примеру, если в логике есть переход на схему kamp, на которую НПС уйдёт и окажется в оффлайне, то он придёт как раз в точку center_point, а если это костёр, то исход очевиден. Поэтому указание параметра path_walk позволит избежать таковой ситуации. И кроме как в схеме kamp сочетание использования этих двух параметров является бесполезным.

 

gruber, это почему же схема kamp относится только к гулагам, да ещё и универсальным? Ничего подобного!

Это такая эе самостоятельная схема, как и walker, и camper, и другие. Она и в modules.script прописана. А то, что она в игре не используется в качестве самостоятельной (в не гулага), так это ничего и не значит. К тому же это оказывается не так. Вот пример со Складов, где схема kamp используется в custom_data НПС:

[4972]
; cse_abstract properties
section_name = stalker
name = mil_freedom_member0001
position = -178.503997802734,-16.9659557342529,352.31005859375
direction = 0,0,0

; cse_alife_trader_abstract properties
money = 5000
character_profile = mil_Svoboda_stukach

; cse_alife_object properties
game_vertex_id = 1828
distance = 24.5
level_vertex_id = 144846
object_flags = 0xfffff7ff
custom_data = <<END
[logic]
active = walker0
on_death = death
combat_ignore = combat_ignore

[walker0]
path_walk = mil_freedom_courier_wait_path
path_look = mil_freedom_courier_wait_look
on_actor_dist_le = 12 | %=killactor%
on_info = {+mil_actor_in_khutor_zone} walker1

[walker1]
path_walk = mil_freedom_stukach_walk4
path_look = mil_freedom_stukach_look4
on_actor_dist_le_nvis = 12 | %=killactor%
on_signal = arrive | remark1
combat_ignore_cond = {=check_fighting(712:713:714:719)} false

[remark1]
no_rotate = true
no_move = true
anim = wait_rac
snd = mil_pavlik_to_ara
on_signal = sound_end | %+mil_courier_call% remark2
on_actor_dist_le_nvis = 12 | %=killactor%
target = mil_courier_look_point, 0
combat_ignore_cond = {=check_fighting(712:713:714:719)} false

[remark2]
anim = guard
on_info = {+mil_ara_end} kamp1
on_actor_dist_le_nvis = 12 | %=killactor%
target = mil_courier_look_point, 0
combat_ignore_cond = {=check_fighting(712:713:714:719)} false

[kamp1]
center_point = mil_freedom_khutor_center
meet_enable = true
meet_dialog = mil_dolg_relax_dialog
danger = danger
path_walk = mil_freedom_khutor_center_task
radius = 3
on_actor_dist_le_nvis = 12 | %=killactor%
combat_ignore_cond = {=check_fighting(712:713:714:719)} false


[death]
on_info = %+mil_courier_dead =mil_paul_frost_dead +sar2_death_33%

[danger]
ignore_distance = 0


[smart_terrains]
none = true

[spawn]
conserva = 2
medkit = 2
hand_radio


[spawner]
cond = {+mil_leader_quest2_start}
END
story_id = 710

; cse_visual properties
visual_name = actors\svoboda\stalker_sv_rukzak_1

; cse_alife_creature_abstract properties
g_team = 11
g_squad = 9
g_group = 0
health = 2
dynamic_out_restrictions = 
dynamic_in_restrictions = 

upd:health = 2
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -178.503997802734,-16.9659557342529,352.31005859375
upd:o_model = 0
upd:o_torso = 0,0,0
upd:g_team = 11
upd:g_squad = 9
upd:g_group = 0

; cse_alife_monster_abstract properties
base_out_restrictors = mil_bandit_restrictor
base_in_restrictors = mil_mines_restrictor,mil_freedom_wall_restrictor

upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_alife_human_abstract properties
predicate5 = 2,0,2,2,0
predicate4 = 1,0,1,2

; cse_ph_skeleton properties

upd:start_dialog = 

; se_stalker properties

 

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

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


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

AndreySol

Я пробовал все "точки", которые есть в описании гулагов для локации Кордон
А не надо "все", предостаточно одной, причём эту точку необходимо самому поставить на локации, прописав её в файле путей, распакованного all.spawn, а не брать из какого-то файла.

 

P.S. И с чего ты взял, что написанное на "инсайде" применимо только для гулагов. Там описан общий механизм работы, а где он будет применён, в качестве работы в гулаге или же в custom_data твоего НПС, это уже решать тебе.

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

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


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

Sync, а часто ты видишь ГГ в оффлайне? :) Речь то идёт о изменении местоположения ГГ.

Если же отнести эти параметры к НПС, то вероятно так и есть, по правде говоря, я недопонимаю назначение параметров upd:***, было бы не плохо, если бы кто разъяснил...

 

Street-you, а что тебя смутило в этом и что ты понимаешь под словом "приемлемо"?

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


Ссылка на сообщение
Wookie, вот секция этого рестриктора:

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


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

AndreySol

1. Благодаря параметру name весь путь парсится (разбивается) на точки. То, что для разных путей название точек повторяется это не критично, главное, чтобы в одном пути имена разных точек не совпали. Если есть желание, имена для точек можешь давать более информативные.

2. Во всех домах в деревне, за исключение разрушенного, отсутствует АИ сетка, а как известно, НПС ходят исключительно по ней.

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


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

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