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

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


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

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

AMD Ryzen 5 2600 \ ASRock B450 PRO 4 \ RTX 2070 Super \ RAM DDR4 16Gb (3400MHz) \ 2 SSD Crucial MX500 (250Gb и 500Gb) \ Windows 10 (2004) x64-bit

%DF%20-%20%C2%F1%EF%FB%F8%EA%E0%20%21.gi

 

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

Как сделать так, чтобы детектор показывал артефакты на мини-карте?

Опишу, как бы я сделал. Для артефактов добавляешь биндер. На апдейте проверяешь расстояние до актора и наличие у него в слоте детектора, если расстояние меньше, допустим, 30 метров - ставим метку на артефакт.

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

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

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

@Вспышка, посмотри файл env_ambient.ltx.

Для амбиентных звуков там прописан параметр sound_dist.

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

Допустим если стоит sound_dist            = 30, 60, можно поставить = 20, 20, да хоть единицу.

Естественно лучший вариант, это использование редакторов звука и СДК.

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

Люди, посоветуйте грамотный туторов по респавну. А то одну статейку читал, вроде делал, как написано, а респавн все равно не происходит...

 

RESPAWN NPC-----------------------------------------------------------------------------

Для создания респавна, понадобится два файла, all.spawn и spawn_section.ltx.
Это минимальный набор. Для полной настройки респавнера, нужны ещё character_desc_simulation.xml и npc_profile.xml.
--------------------------------------------------------------------------------
1. В gamedata\spawns\all.spawn создаём секцию респавнера
 

[10000]
 

; cse_abstract properties
section_name = respawn
name = имя респавнера, например, pred_respawn_military_blockpost
position = координаты (x,y,z)
direction = 0,0,0
id = 65535
version = 118
script_version = 6

; cse_alife_object properties
game_vertex_id = гейм-вертекс
distance = 10
level_vertex_id = левел-вертекс
object_flags = 0xffffff3e
custom_data = <
[respawn]
respawn_section = esc_urody_respawn_1,12, esc_urody_respawn_2,9 (pred_military_respawn_1)
;max_count = 8
;min_count = 4
max_spawn = 2 (5)
idle_spawn = medium
conditions = 100
END

; cse_shape properties
shapes = 1
shape_0:type = sphere
shape_0:offset = 0,0,0
shape_0:radius = 1

; cse_alife_space_restrictor properties
restrictor_type = 0

; se_respawn properties Если используется программа XrSpawner,
; то копируем любую секцию respawn; меняем имя объекта,
; координаты, и в окошке скрипт прописываем
spawned_obj =

[respawn]
respawn_section = esc_urody_respawn_1,12, esc_urody_respawn_2,9
max_count = 8
min_count = 4
max_spawn = 2
idle_spawn = medium
conditions = 100

;Где respawn_section = id респавн-секций из файла spawn_section.ltx.
;Цифры после запятой, означают отношение одной секции к другой.
;Если планируется одинаковое количество респавна из каждой секции,
;то цифры ставить не требуется. max_count = количество респавн-запросов
;за период времени, пока ГГ находится на уровне. При переходе на другой уровень
;счётчик max_count сбрасывается. (ставить не обязательно)
;min_count = минимальное количество нпс, для экстренного респавна.
;(ставить не обязательно)
;max_spawn = количество нпс за один цикл респавна.
;idle_spawn = тип спавна. Известно три типа: medium, often, seldom.
;Обычно используется тип medium.
;conditions = Условие респавна. Можно установить проверку условий (инфопоршень),
;где респавн будет происходить только при выполнении условия. Номер означает
;общий процент выполнения респавна. Например так conditions = {+инфо} 100, 0
;где респавн будет происходить со стопроцентной вероятностью, только при наличии
;установленного инфопоршна.

--------------------------------------------------------------------------------
2. В файле gamedata\config\creatures\spawn_section.ltx создаём респавн-секции

[esc_urody_respawn_1]:stalker
$spawn = "respawn\esc_urody_respawn_1"
character_profile = sim_urody_novice (sim_military_regular)
spec_rank = novice (regular)
community = bandit (military)

[esc_urody_respawn_2]:stalker
$spawn = "respawn\esc_urody_respawn_2"
character_profile = sim_urody_regular
spec_rank = regular
community = bandit

;Где esc_urody_respawn_1 - id респавн-секции.
;sim_urody_novice и sim_urody_regular - классы профайлов нпс.
;novice и regular - ранги нпс.
;bandit - группировка нпс.

--------------------------------------------------------------------------------
3. В файле gamedata\config\gameplay\npc_profile.xml регистрируем классы sim_urody_regular и sim_urody_novice


 

<character id="sim_urody_regular>"
<class>sim_urody_regular</class>
</character>

 

<character id="sim_urody_novice">
<class>sim_urody_novice</class>
</character>

--------------------------------------------------------------------------------
4. Создаём профили, в файле character_desc_simulation.xml, с классами sim_urody_regular и sim_urody_novice и группировкой bandit.

--------------------------------------------------------------------------------

RESPAWN MUTANTOV-------------------------------------------------------------------------------
В принципе, респавн мутантов идентичен респавну нпс. Но с одним лишь отличием, которое его
значительно упрощает. Вся настройка респавна мутантов, ограничивается секцией в файле all.spawn.
Вписываем секцию респавнера, как указано в -RESPAWN NPC-. Все настройки идентичны, кроме строки
respawn_section = . В ней прописываем типы мутантов, из файла se_respawn.script.
Такие как flesh_weak, flesh_normal, dog_weak, boar_strong, и т.д..

--------------------------------------------------------------------------------

ОБЩИЕ НАСТРОЙКИ--------------------------------------------------------------------------------
Обязательные условия респавна
 

1. На уровне обязательно должен быть хоть один гулаг для респавнящихся нпс и мутантов.
Так как количество неписей для респавна ориентируется по доступным местам в гулагах.

2. Респавн производится, только если под гулагами есть доступные работы.

3. На каждом уровне респавн ограничен определёнными типами неписей. Данные ограничения
установлены в файле miscsmart_terrain_presets.ltx. Чтобы сделать возможным респавн
неписей, не предусмотренных на данном уровне, надо в секции нужного уровня дописать требуемые типы неписей.

--------------------------------------------------------------------------------
Для проверки созданного респавнера можно не ждать когда сработает системный респавн,
а вызвать принудительно респавн в нужной секции. Для этого прописываем в любой логике
вызов функции %=respawner_spawn(имя респавнера)%. Где имя респавнера - имя секции,
созданой в файле all.spawn. Скобки обязательны.

Например, можно создать рядом с зоной респавнера, временный рестриктор. И в кастом дате
рестриктора прописать вызов функции принудительного вызова респавна в нужном респавнере
при входе ГГ в зону рестриктора

[logic]
active = sr_idle@in

[sr_idle@in]
on_actor_inside = %=respawner_spawn(имя респавнера)% sr_idle@out

[sr_idle@out]
on_actor_outside = sr_idle@in Функция принудительного вызова респавна, находится в файле xr_effects.script.

--------------------------------------------------------------------------------

RESPAWN ITEMS-------------------------------------------------------------------------------
Респавн инвентаря в инвентарных ящиках, несколько отличается от способа респавна неписей.

--------------------------------------------------------------------------------

1. Первое, что нам нужно сделать, это создать инвентарный ящик в файле all.spawn

[10000]
; cse_abstract properties
section_name = inventory_box
name = имя ящика
position = координаты x,y,z
direction = 0,0,0
id = 65535
version = 118
script_version = 6

; cse_alife_object properties
game_vertex_id = гейм-вертекс
distance = 0
level_vertex_id = левел-вертекс
object_flags = 0xffffffba

story_id = ай-ди ящика

; cse_visual properties
visual_name = equipmentsitem_box_01
--------------------------------------------------------------------------------

2. Затем, в файле game_story_id.ltx регистрируем id ящика. (выбираем любое свободное число).

--------------------------------------------------------------------------------
3. Создаём респавнер в файле all.spawn. Координаты и размеры зоны респавнера должны
быть такими, чтоб инвентарный ящик поместился внутри зоны респавнера

[10001]
; cse_abstract properties
section_name = respawn
name = имя респавнера
position = координаты x,y,z
direction = 0,0,0
id = 65535
version = 118
script_version = 6

; cse_alife_object properties
game_vertex_id = гейм-вертекс
distance = 2
level_vertex_id = левел-вертекс
object_flags = 0xffffff3e
custom_data = END
[respawn]
respawn_section = список вещей респавна
idle_spawn = -1
parent = ай-ди ящика
item_spawn = true
max_count = 7
END

; cse_shape properties
shapes = 1
shape_0:type = box
shape_0:axis_x = 0.5,0,0 (ширина зоны респавнера по X)
shape_0:axis_y = 0,0.5,0 (высота зоны респавнера по Y)
shape_0:axis_z = 0,0,1 (ширина зоны респавнера по Z)
shape_0:offset = 0,0,0

; cse_alife_space_restrictor properties
restrictor_type = 3

; se_respawn properties

Где respawn_section = список вещей респавна. Как и в респавнерах неписей, возможна прописка соотношений между вещами. Например

respawn_section = wpn_pm,2, vodka,2, medkit,1, energy_drink,2, ammo_9x18_fmj,3
idle_spawn = тип спавна. Инвентарь не имеет типов спавна, поэтому ставится (-1).
parent = ай-ди инвентарного ящика, в котором производить респавн вещей.
item_spawn = (true/false) - возможность включения и отключения респавна.
 

Можно задавать условия.

max_count = количество респав-циклов за определённый период времени.
(Пока ГГ находится на уровне. После перехода ГГ на другой уровень счётчик сбрасывается).

--------------------------------------------------------------------------------
4. Создаём вызов респавна. Обычно вызов производится из smart_terrain. В custom_data
любого подходящего smart_terrain, под секцией [smart_terrain], вписываем вызов респавна

[smart_terrain]
respawn = имя респавнера И респавн будет производиться при каждом пополнении нпс под данным смартом.

 


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

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

Отличная статья, если не ошибаюсь singapur22 писал, прекрасно работает, что тебе не нравится???

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

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

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

@AndrewMor, не нужно путать: ты не видишь в игре новых неписей, которые должен заспавнить тобою создаваемый респавнер, с тем, что он их вообще не спавнит. Один и тот же результат может иметь разные причины. Главным условием, чтобы ты в игре увидел своих заспавненных неписей является или независимость твоих неписей от гулагов ("smart_terrains = none") или наличие доступной для них работы в каком-либо гулаге. В противном случае, они просто после спавна будут сразу же удалены из игры.

Понять, спавнит ли респавнер или нет, или спавнит, но объекты сразу же удаляются, можно только по логам, для чего требуется, например, в файле se_respawn.script в методе se_respawn:create(prob)  реанимировать строки вывода в лог, начинающиеся с "printf("SPAWNING"...

Нужно еще иметь ввиду, что респавнерам находящимся на текущей локации в оригинале игры запрещено спавнить, т.е. актор должен уйти на др.локацию. Так что, если ты создап респавнер на Кордоне и ждешь, не уходя с локации, когда кто-нибудь из него появится - бессмысленно.

 

Примечание: Статья хорошая и правильная, но в комментах ("Обязательные условия респавна") пункты 1 и 3 излишни. Уточнения:

п.1. Наличие "хоть одного гулага" на локации, где создается респавнер, не обязательно. Респавнер будет пытаться (периодически или одноразово) спавнить объект(ы) в соответствии с заданными ему параметрами. Однако, главным условием появления в игре заспавненного объекта является наличие свободной работы в каком-либо гулаге и не важно на какой локации, или его независимость от гулагов (о чем написано выше). Иной вопрос, дойдет ли непись до другой локации, если нет связей, но это уже вопрос к game.graph.

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

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Всем добрый день. неполучается удалить нпс,  пробовал с помощью

 

function dell_kluk_final()

    local se_obj = alife():object("esc_wolf")
    if se_obj then
        alife():release(se_obj, true)
    end
end

 

 

не получилось может я что-то не так делаю? какие еще есть способы удаления нпс из игры? подскажите пожалуйста.

может где нибудь есть описание как это сделать.



пробовал вот так

код

function remove_freaks()   
     remove_obj("grom11_spawn")   
end
 
получаем вылет,  где что прописать нужно?

 

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: ...од-Секрет\gamedata\scripts\werto_dialog.script:81: attempt to call global 'remove_obj' (a nil value)
 
 
stack trace:

 

 

 

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

@_Val_, 1-ая функция, указанная 'ом,  полностью рабочая. Если alife() был бы недоступен, то это не неработало бы, а давало бы вылет.

 

Ну а удалять (получать объект для удаления) в ТЧ можно и по имени (а не секции!), и по игровому идентификатору (id) и по стори-ид'у (story_id)... нужно просто не гадать и не тупо  копипастить, а понимать то, что пишешь в коде. Ну и читать(!) почаще топики: "Справочник по функциям и классам" и "Скриптование", а не ждать подсказки по банальным вопросам, поминавшимся и разъясненным тысячи раз в сотнях ФАКов...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Неоднократное нарушение п.2.1. 50 баллов и 7 дней ридонли.

Cyclone

  • Не нравится 4

Tetris 9in1, 2 кб ОЗУ, 1kHz(одноядерный),2х цветовой широкоформатный дисплей.%C1%EE%FF%E3%F3%E7.gif

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

неполучается удалить нпс

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

Второй вариант, бывает, что онлайновые сталкеры не хотят удаляться. Я не знаю точной причины, но это как правило коррелирует с тем, что сталкеры квестовые и у них есть всякая разная логика и т.п. Может помочь удаление из оффлайна. Также можно не удалять, а просто перевести в оффлайн навечно. Визуально с удалением разницы не будет никакой. Сейчас подробно не скажу, но там есть параметр в логике, в котором можно прописать условие нахождения в оффлайне/онлайне. Так в общем то делается в оригинальной игре, никого не удаляют, а только уводят в оффлайн.

  • Нравится 1
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

можно прописать условие нахождения в оффлайне/онлайне.

Очень хотелось бы реализовать вот это.

Мне намекнули в каком направлении двигаться.  Выглядит  так -  гг говорит с нпс,  диалог заканчивается срабатывает бреак,  затем акцион и непись удаляется!  Как думаешь сработает?  Или что-то с офлайном  мудрить придется)))  Говорят что нужно время, задержка в несколько секунд, иначе вылет.

 

Реализовывай, кто тебе не даёт? Здесь тема не для похотелок - предложи свой вариант решения, дабы можно было тебе что-то поправить/дополнить/подсказать.

А если отвечать на вопрос, то да - можно.

 

Если все будут сюда писать свои предположения (без поддержки своих слов кодом, ну или хотя бы размышлениями), то никакой темы не хватит. Итак её (тему) захламили вопросами, на которые ответ находится через пять минут после пользования поиском.

Но ты же опять пытаешься выставить себя так, как будто тебя нашли "крайним". А ведь всё сводится к тому, что тебе чего-то лень: либо поискать, либо описать свои домыслы... хотя мне кажется, что ты всё же ищешь не совета, а готового решения.

Как удалить НПС тебе сказали. Как запустить функцию по окончанию диалога, ты, по всей видимости, и сам знаешь - посему, ты даже и пробовать не хочешь.

ColR_iT

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

Люди, пожалуйста, помогите! Я отправил сообщение Меченому через скрипт, но текст в игре стал какими-то каракулями. Что делать?

 

Вот функция:

function sms_ot_sidora()    news_manager.send_tip(db.actor, "%c[255,0,255,0]".."Сидорович:".."\\n".."%c[255,255,128,128]Меченый, ты у Хруста? Надеюсь, что вы там еще не забухали? Иди ко мне дело, етсь.".."".."\n", nil, nil, 20000)end

Вот ссылка на скрин:

http://yadi.sk/d/V304Bo0S9xscH

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

Главным условием, чтобы ты в игре увидел своих заспавненных неписей является или независимость твоих неписей от гулагов ("smart_terrains = none")

Что-то я не совсем понял.

У меня заспавнены неписи через all.spawn, приписаны к своему смарту. Вот и надо мне, чтобы при их смерти происходил респавн. А как понять - smart_terrains = none?

 

Попробую объяснить, что я сдедал:

1. заспавнил НПС через all.spawn.

2. приписал их к смарту.

3. прописал им логику.

4. вписал их в character_desc_имя локи и сделал свой профиль.

 

И вот чтобы при их смерти спавнились новые (другие), сделать-то нужно что?

1. респавнер.

2. прописать их в character_desc_simulation.

3. вписать в spawn_section.

4. создать профиль.

 

Это все или я не совсем правильно понимаю и нужно сделать что-то еще?

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

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

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

WERTOix,

диалог заканчивается срабатывает бреак, затем акцион и непись удаляется! Как думаешь сработает? Или что-то с офлайном мудрить придется

Лучше не пытаться удалять непися прямо из диалога. Попробовать конечно никто не мешает.

Вот нашёл. Требовалось обеспечить появление предмета по условию. Предмет исходно был в аллспавне. Я прописывал в кастомдату объекта вот такое условие:

custom_data = <<END
[spawner]
cond = {+<инфопорция для выхода в онлайн>}
END

Вроде как работало. Для неписей под смартом условие прописывается в поле online соответствующей работы.

Тогда в диалоге надо просто выдать/забрать во фразе нужную инфопорцию и непись уйдёт своим ходом в оффлайн.

С точным рецептом здесь могу и ошибаться, поскольку давно делал да и тогда глубоко не вникал.

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

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Ребята! Как сделать новую модель артефакта (с уже существующего) с новой текстурой?


Заранее извините за глупый вопрос

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

@Fireball.Stalker, как вариант прописать новую текстуру прямо в модели, открыв её Нотепадом++.

Название должно содержать такое же количество знаков, как и старое.

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

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

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

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

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

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

Войти

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

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

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