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

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


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

Просьба наставить на путь истинный. С чего начать, нужно написать скрипт, проверяющий наличие на локации конкретных видов мобов и конкретного количества НПС по группировкам. Нужно для написания скриптового респавна. Или может уже кто-то что-то такое придумал? Если так, где можно сие посмотреть?

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

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

Для начала - уточнить: на локации, или в онлайне ?

 

Если на локации - изучать amk_offline_alife из amk-мода. Или task_manager.

Если в онлайне - они отсортированы в db.script, и дальше добавить проверку по clsid() для монстров/community() для неписей.

 

Upd: Тогда лучше для начала se_respawn.script изучить тщательно. Правда там принцип совершенно обратный: если ГГ близко - ничего не спавнится. И это правильно: если монстры/неписи появляются из воздуха прямо перед игроком - это странно выглядит.

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

http://ap-pro.ru/_fr/104/2539828.jpg

 

Народ, вопрос конечно нубский, но я что-то не пойму проблему. На скрине, новая группировка не прописана как ей должно. В профиле она отражается  как "Избранный" , а в ПДА нет. В текстовом файле она естественно прописана.

Изменено пользователем Хемуль36рус

Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g.

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

Хемуль36рус, а в stable_statistic_caption.xml прописано?

  • Полезно 1

Неважно – сколько у тебя друзей. Важно - сколько из них помогут тебе в трудную минуту и сколько вспомнят о тебе когда им хорошо.

"Худ" и "Умное выпадание частей монстров" для Народной солянки

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

Сталкеры, а какой звуковой файл отвечает за звук шагов ГГ? Как называется и где лежит? Хотелось бы потише его сделать, в СДК это возможно?

 

Путь вроде нашел: sounds\material\actor\step. Но как можно уменьшить громкость всех файлов, что там лежат? Через СДК? Или есть какой другой способ?

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

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

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

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

Неважно – сколько у тебя друзей. Важно - сколько из них помогут тебе в трудную минуту и сколько вспомнят о тебе когда им хорошо.

"Худ" и "Умное выпадание частей монстров" для Народной солянки

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

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

stack trace:

001B:7C812FD3 kernel32.dll
001B:78158E89 MSVCR80.dll, EH_prolog()
001B:02BC6DA8 xrGame.dll
001B:02DE79DD xrGame.dll

[error][ 183] : Невозможно создать файл, так как он уже существует.

 

 

 

Так вот, у меня причиной такого вылета служило большое количество точек радиации, заспавненных на локации, больше 100. Я так понял, что именно сотня является критической массой, при 99 точках вылет пропадал.

 

Может кому пригодится.


@Comador, Спасибо, я уже нужные файлы через Audacity прогнал.

  • Полезно 1

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

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

@AndrewMor

Правкой соответствующих данных нет-пакета объекта при спавне. Подробнее, к примеру в ридми к модулю нет-пакетов от Artos

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

Ну а если написать так:
local obj = alife():create("имя_секции1",vector():set(x,y,z),lvid,gvid)
obj.direction = vector():set(0, 1.57, 0)

set_desired_direction() тогда уж. Но это, вроде, только для "живых". Остальное - пакетом. dc

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

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

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

Ну тогда не знаю как его развернуть через скрипт, сколько пробовал безполезно...

Так товарищи,подскажите,проблема нарисовалась такая, при прописи Сидоровичу предметов в продажу,получилось около 250 новых предметов для продажи,все нормально,продает все что прописал.

Вот собственно проблема: когда прописал все тоже самое бармену возникло непредвиденное, половина предметов спавнятся у него по ногами а не в продажу...Как так сказать, расширить вместительность асортимента для продажи??срочно нужна помощь...

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

Нет, если написать вот так

local obj = alife():create("имя_секции1",vector():set(x,y,z),lvid,gvid)


obj.direction = vector():set(0, 1.57, 0)

 

 

ничего не выходит.


@AndreySol, а где его взять?

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

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

Кузнецов, ну вот оффтопик же... 8(

Текст замечательный, и тем не менее - оффтопик.

 

Лучший совет здесь дал Murarius: изложить в указанной им теме, что именно и как именно хотелось бы, и ждать, кто заинтересуется. По сути - это глобальная переделка игры, хотя ковырять собственно движок и не требуется.

А почему посты о глобальной переделке игры считаются оффтопиком для данной темы?

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

 

 

Здесь про потроха. И, кстати, "общие рассуждения", а тем более юморески про горнопроходческий комбайн и способы изведения тушканов здесь вряд-ли кто найдет. В литтворчестве и разговорах о модах шансов больше.

Вообще тема про неприличное слово в разделе была бы уместна, но ее здесь не захотели. 8( И, пожалуй, какой-то общей готовности к конструктиву по ней нет. Увы, опять же. dc

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Wolkodav, увеличить переносимый вес Бармена в bar_barman.ltx?

Нет,не помогло...

Да есть тут живые?мне поможет кто нибудь??

 

Не помогло после новой игры ?

Вообще, с таким эффектом вряд-ли кто встречался. 250 предметов в продажу - это довольно нетривиальная идея. dc

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

Dennis_Chikin, пробовал по всякому:
alife():create("conserva",vector(),0,0,54549)
alife():create("conserva",vector():set(0, 0, 0),0,0,54549)
alife():create("conserva",vector(),1152755,4019,54549)
alife():create("conserva",vector():set(132.84954833984, 8.5610275268555, -19.224378585815),1152755,4019,54549)
alife():create("conserva",vector():set(132.84954833984, 8.5610275268555, -19.224378585815),0,0,54549)
и ничего в рюкзак не спавнится.
 
Секция рюкзака:

; cse_abstract properties
section_name = inventory_box
name = pred_inventory_box
position = 132.84954833984, 8.5610275268555, -19.224378585815
direction = 0, 0, 0
id = 65535
version = 118
script_version = 6

; cse_alife_object properties
game_vertex_id = 4019
distance = 0
level_vertex_id = 1152755
object_flags = 0xffffff3b


story_id = 54549

; cse_visual properties
visual_name = equipments\item_rukzak

 
alife():create("conserva",vector(),0,0,54549)
 
Пробовал вместо 54549 ставить 0 - предмет спавнится в инвентарь ГГ.

А при чем здесь sid ?
local obj = alife():object( "pred_inventory_box" )
if obj then alife():create( "conserva", vector(), 0, 0, obj.id ) end

Рюкзак в это время должен быть в офлайне. dc


Dennis_Chikin, "Рюкзак в это время должен быть в офлайне. dc"

А вот и нет. Предмет прекрасно заспавнился в рюкзак, который был от ГГ в 10 метрах, значит, в онлайне.

 

У некоторых почему-то не работает. dc

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

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

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

Нужна помощь. Столкнулся с проблемой когда сделал для свох нужд конфиг снайпера (под спойлером ниже) - он невидит монстров даже в упор! В чем дело не могу понять. Помогите решить эту проблему плиз.

[stalker_antisniper2_condition]
satiety_v = 0.00001 ;скорость уменьшения сытости со временем
radiation_v = 0.0001 ;скорость уменьшения радиации
satiety_power_v = 0.0005 ;увеличение силы при уменьшении сытости
satiety_health_v = 0.0 ;0.0001 ;увеличение здоровья при уменьшении сытости
satiety_critical = 0.0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться
radiation_health_v = 0.000 ;уменьшение здоровья при воздействии радиации
morale_v = 0.0001 ;скорость восстановления морали
health_hit_part = 0.8 ;процент хита, уходящий на отнимание здоровья
power_hit_part = 0.2 ;процент хита, уходящий на отнимание силы
psy_health_v = 0.01 ; скорость восстановления psy-здоровья
health_restore_v = 0.002 ;скорость восстановления здоровья

sleep_health = 1.0 ;коэффициенты скоростей изменения параметров во время сна
sleep_power = 1.0
sleep_satiety = 1.0
sleep_radiation = 1.0
sleep_psy_health = 1.0

;---LIMPING STATE-----------------------------------------------------
use_limping_state = off
limping_threshold = 0.5

;открытые раны
bleeding_v = 0.0 ;потеря крови при номинальной ране в секунду
wound_incarnation_v = 0.001 ;крутизна кривой заживления (какой процент раны останется после заживления в игровую секунду)
min_wound_size = 0.01

[stalker_antisniper2_immunities]:stalker_immunities
burn_immunity = 1.0 ;коэффициенты иммунитета
strike_immunity = 1.0
shock_immunity = 1.0
wound_immunity = 1.0
radiation_immunity = 0.0
telepatic_immunity = 1.0
chemical_burn_immunity = 1.0
explosion_immunity = 1.0
fire_wound_immunity = 1.0
wound_2_immunity = 1.0

[stalker_antisniper2]:stalker

;---LEVEL EDITOR------------------------------------------------------
$spawn = "stalkers\stalker_antisniper2" ; option for Level Editor

;---CRITICAL WOUND------------------------------------------------------------------
critical_wound_threshold = 5000.1
critical_wound_decrease_quant = 1
body_parts_section_id = critical_wound_body_parts_section
critical_wound_weights = 1,1,1

species = zombie


condition_sect = stalker_antisniper2_condition
;---IMMUNITIES -------------------------------------------------------
immunities_sect = stalker_antisniper2_immunities

;---VISIBILITY--------------------------------------------------------
vision_danger_section = stalker_antisniper2_vision_danger
vision_free_section = stalker_antisniper2_vision_free
eye_fov = 110
eye_range = 1000
far_plane_factor = 1.0 ; фактор дальности тумана
fog_density_factor = 0.05 ; фактор плотности тумана

[stalker_antisniper2_vision_free]
min_view_distance = 0.01 ; коэффициент, который множится на eye_range, в зависимости от угла
max_view_distance = 1 ; коэффициент, который множится на eye_range, в зависимости от угла
visibility_threshold = 10.0 ; значение, при достижении суммой которого объект считается видимым
always_visible_distance = 0.8
time_quant = 0.001
decrease_value = 0.01 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам
velocity_factor = 2.5
luminocity_factor = 0.5 ; фактор освещения (только для Актёра)
transparency_threshold = 0.1 ; 0.25

[stalker_antisniper2_vision_danger]
min_view_distance = 0.01 ; коэффициент, который множится на eye_range, в зависимости от угла
max_view_distance = 1 ; коэффициент, который множится на eye_range, в зависимости от угла
visibility_threshold = 10.0 ; значение, при достижении суммой которого объект считается видимым
always_visible_distance = 0.8
time_quant = 0.001
decrease_value = 0.01 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам
velocity_factor = 2.5
luminocity_factor = 0.5 ; фактор освещения (только для Актёра)
transparency_threshold = 0.1 ; 0.25

disp_walk_stand = 0.1 ;6
disp_walk_crouch = 0.1 ;3
disp_run_stand = 0.1 ;12;8
disp_run_crouch = 0.1 ;4
disp_stand_stand = 0.1
disp_stand_crouch = 0.1
disp_stand_stand_zoom = 0.1 ;1
disp_stand_crouch_zoom = 0.1;1

ignore_monster_threshold = 0.0 ;0.6 ;0.8
max_ignore_distance = 15.0
panic_threshold = 0.02



;---SOUND PLAYER------------------------------------------------------
sound_death = fight\death\death_
sound_anomaly_death = fight\death\death_
sound_hit = fight\hit\hit_
sound_humming = states\idle\idle_
sound_alarm = fight\enemy\enemy_
sound_backup = fight\backup\backup_,fight\threat\threat_close_
sound_detour = fight\detour\detour_,fight\fire\fire_,fight\threat\threat_close_
sound_friendly_fire =
sound_panic_human =
sound_panic_monster =
sound_tolls = fight\tolls\tolls_
sound_grenade_alarm = fight\grenade\grenade_
sound_friendly_grenade_alarm =
sound_need_backup = fight\cover_fire\cover_fire_
sound_running_in_danger =
sound_walking_in_danger =
sound_kill_wounded = help\wounded\kill_wounded_
sound_enemy_critically_wounded = fight\enemy_hit\enemy_hit_
sound_enemy_killed_or_wounded = fight\enemy_down\enemy_down_
; obsolete after next update
sound_attack = fight\attack\attack_
sound_search = fight\searching_enemy\search_
; new after next update
sound_attack_no_allies = fight\fire\fire_,fight\threat\threat_distant_
sound_attack_allies_single_enemy = fight\attack\attack_,fight\attack\attack_one_,fight\fire\fire_
sound_attack_allies_several_enemies = fight\attack\attack_,fight\attack\attack_many_,fight\fire\fire_
sound_search1_no_allies = fight\threat\threat_distant_
sound_search1_with_allies = fight\searching_enemy\search_,fight\searching_enemy\enemy_lost_


 
species = zombie, далее смотрим game_relations.ltx
dc

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

@NHOK, В таких случаях каких советов вы ждете? Перечитать еще раз, как-то по другому может быть.

 

Вопрос к знающим людям, я вот оказался не знающий, и пытаться разобраться в происходящем, включив вывод в лог всего на свете, это немного тяжко.
Так вот собственно вопрос. Разъясните кто знает, принципы функционирования смарттеррейнов и гулагов. В плане того, что в какой последовательности активируется и вызывается.
класс smart_terrain, описанный в файле smart_terrain.script - это собственно объект смарта, тот объект который спавнится через алл.спавн к примеру.
в файле bind_smart_terrain.script лежит его биндер, который отслеживает нет_спавн и нет_дестрой, а так же занимается апдейтом.
А класс gulag из файла xr_gulag.script - это что? вообще хотелось бы понять разделение целей и задач gulag и smart_terrain, четко разграничить для чего один и для чего другой.
Это все риторика, мотивированная тем что мне хочется наконец таки понять как это все работает.
А в частности есть еще практический вопрос - как извне, принудительно переключить состояние гулага/смарта. И как этими состояниями правильно пользоваться.
Неудачный пример:

в gulag_general.script в load_job часть видов работ переделал таким образом

    t = { section = "logic@"..way_name,
                    idle = 0,
                    prior = 8-i, state = {0,1,2}, squad = squad, group = groups[1],
                    position_threshold = 50,
                    in_rest = "", out_rest = ""
                }

я думал что "state" - это в каких состояниях эта работа будет считаться доступной.

В порядке эксперимента сделал так:

function load_states(gname, type)
    if type == "general_lager" then
        return function(gulag)
            return 2
        end
    end

Но в результате неписи просто разбрелись со всех работ, гулаги прекратили работу. А из логов я узнал, что load_Job в таком случае даже не вызывалась. т.е. состояние 2 это какое то невозможное для гулага, и он может находиться только в состояниях 0 или 1, так чтоли?

 

 

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Zander_driver, а это:

return function(gulag)

return 2

- вообще как ???

 

Оно даже запускаться не должно.

 

А большую статью - ну вот как только руки дойдут - так и сразу.

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

- вообще как ???

Каком. Надо знать, что функции - такие же переменные в Lua, ну или не писать на эту тему, выбирать тебе. Вполне стандартная практика - вернуть функцию, да еще с замыканием.

Ты о каллбеках что-нибудь слышал?

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

ТЧ 1.0004. SAP и Trans mod

github

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

@Dennis_Chikin

"У некоторых почему-то не работает. dc" Интересно, почему, в чем причина? Принцип-то один.
 

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

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

@Dennis_Chikin,
Окей, вот функция полностью в оригинале, мои правки закомментированы.

function load_states(gname, type)
    if type == "general_lager" then
        return function(gulag)
            if gulag.state == 0 then
            --    return 1 -- add by zander
                
                if gulag.population_comed == 0 then
                    return 0
                end
                if xr_logic.pick_section_from_condlist(db.actor, gulag.smrttrn, gulag.state_switch_1) ~= nil then

                    --level.map_add_object_spot(gulag.smrttrn.id, "alife_presentation_smart_ready", "Ready")    
        
                    return 1
                end
                return 0
            elseif gulag.state == 1 then
            --    return 2 --- add by zander
                
                if gulag.population_comed == 0 then
                    return 0
                end
                if xr_logic.pick_section_from_condlist(db.actor, gulag.smrttrn, gulag.state_switch_0) ~= nil then
                    
                    --level.map_remove_object_spot(gulag.smrttrn.id, "alife_presentation_smart_ready")
                    return 0
                end
                return 1
            end
        end
    end

    if type == "general_lair" then
        return function(gulag)
            if gulag.state == 0 then
                if gulag.population_comed == 0 then
                    return 0
                end

                if xr_logic.pick_section_from_condlist(db.actor, gulag.object, gulag.state_switch_1) ~= nil then
                    
                    --level.map_add_object_spot(gulag.smrttrn.id, "alife_presentation_smart_ready", "Ready")    
                    return 1
                end
                return 0
            elseif gulag.state == 1 then
                if gulag.population_comed == 0 then
                    return 0
                end
                if xr_logic.pick_section_from_condlist(db.actor, gulag.object, gulag.state_switch_0) ~= nil then

                    --level.map_remove_object_spot(gulag.smrttrn.id, "alife_presentation_smart_ready")
                    return 0
                end
                return 1
            end
        end
    end
end

 

 

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

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

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

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

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

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

Войти

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

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

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