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

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


Halford

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

Приветствую!

Сколько не ковырялся в файлах игры, сколько не читал тем и туторов на этом форуме и на других, но так и не смог найти ответ на свой вопрос...

Как сделать так, чтобы оружие выпадающее с NPC или получаемое ГГ любым другим способом (т.е. всё оружие в игре без исключения) было на 100% исправно? Я уже убрал износ из файлов конфигурации оружия и апгрейдов оружия. Но эти параметры отвечают за износ оружия при использовании ГГ...

Помогите, пожалуйста, ответить на этот вопрос или ткните носом, если ответ уже где-то дан.

Спасибо!

 

PS^ Речь идёт о СТАЛКЕР Зов Припяти...

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

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


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

Artos, Спасибо за попытку помочь.

 

independent, совершенно непонятно как и каким ты пользовался поиском, т.к. только на этом форуме ответ на основной вопрос (порча оружия выпадающего с NPC) давался десятки раз. Неужели тебе не попадались(?)

Я специально попытался ещё раз воспользоваться поиском по ключевым словам из вашего сообщения, но опять не нашёл в этой теме ничего полезного.

Файл death_manager.script отыскал, но отредактировать должным образом не смог, так как не являюсь ни скриптовиком, ни хотя бы программистом. Попробовал по наитию поменять пару значений, но в одном случае эффекта было 0, во всех остальных получил вылеты + 1 ресет компа. Правил вот эти строки:

item:set_condition((math.random(40)+40)/100) (их таких 2 шт.)

local condition = (math.random(40)+40)/100 (1 шт.)

Насколько я понял число после дроби означает максимальное здоровье вещи, поэтому пытался играться со значениями "40". Вообщем результат описал выше... Сохранёнка загрузилась всего один раз, да и то без эффекта...

 

- по оружию, которое "получает актор" - отслеживай коллбэк актора на получение предметов в свой инвентарь (on_item_take) и ... ремонтируй его "налету" своим скриптом, точнее простенькой строкою.

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

И, кстати, раз строка эта настолько проста, то не проще было бы её написать? Тогда и мне бы не пришлось писать столь пространное сообщение в ответ...

 

Желать же: "всё оружие в игре без исключения было на 100% исправно" - чистой воды читерство, ИМХО

Что же касается моральной стороны вопроса, то и у меня есть свои мотивы для выкорчёвывания из игры износа оружия... Начиная от личной неприязни к этому аспекту многих РПГ-игр и заканчивания недоумением по поводу заклинивания "калаша" после 3-4-х рожков. И раз уж у неписей оружие не клинит, то и износ им не к чему, а мне какой-никакой доход от лута...

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


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

Artos я вас понял.

Пока ждал ответа сам покумекал и перебрал ещё несколько вариантов правки файла death_manager.script и нашёл таки рецепт решения :

 


local item_id = item:id()
local item_in_slot = npc:item_in_slot(2)
if item_in_slot ~= nil and item_in_slot:id() == item_id then
--' Тут надо уменьшить кондишн оружия
item:set_condition(100)
return
end
item_in_slot = npc:item_in_slot(3)
if item_in_slot ~= nil and item_in_slot:id() == item_id then
--' Тут надо уменьшить кондишн оружия
item:set_condition(100)
return
end
-- npc:mark_item_dropped(item)
local item_in_slot = npc:item_in_slot(4)
if item_in_slot ~= nil and item_in_slot:id() == item_id then
return
end
if not npc:marked_dropped(item) then
-- printf("releasing object ["..item:name().."]")
alife():release(alife():object(item:id()), true)
end
]]
end
function set_weapon_drop_condition(item)
local condition = 100
--printf("condition [%s]", tostring(condition))
item:set_condition(condition)
end

 

 

Задача решена. Artos спасибо вам огромное за помощь! Не знаю сколько бы ещё я тыкался по углам как слепой котёнок. Удачи вам!

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

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


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

Предыдущее сообщение уже не возможно отредактировать (да простят меня модераторы за мультипост).

 

Решил продолжить ковыряние в конфигах игры. На этот раз пытаюсь поиграться с балансом группировок на локации Юпитер. Решил дать одной из группировок глобальное преимущество, то есть сделать так, чтобы за неё спавнились только NPC с рангом Master с "характерами" из файла /gamedata/configs/gameplay/character_desc_general.xml Первое ,что я попытался сделать это тупо скопировать профили NPC из раздела "Master" во все остальные, но при таком раскладе игра даже не запустила начальное меню. Можно менять rank, оружие, деньги как угодно, но нельзя трогать названия объектов (это я выяснил опытным путём). Вооружил всех NPC группировки начиная от новичков и кончая ветеранами крутыми стволами, повысив всем rank до 100. Но искомого результата это не дало. Всё равно спавнится весь зоопарк, только теперь разьве что у новичков можно встретить крутые стволы. Задачу спавнить за группировку только NPC одетых в тяжёлую броню (в идеале только в экзу) никак не получается решить. Смотрел и редактировал файлы spawn_sections_general, spawn_sections_jupiter - результата не дало. Помнится мне в ТЧ был файлик se_respawn.script, который отвечал за процентное соотношение спавна членов группировки... в ЗП не нашёл даже похожего...

Прочитал много туторов по созданиям группировок, но не нашёл ни одного по редактированию и ребалансированию уже существующей...

Прошу помощи у коммьюнити. Какой файл ковырять?

Спасибо

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


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

independent, неплохо было бы изучить механизм спавна в ЗП, он отличается от ТЧ и сделан довольно просто - об этом куча статей везде уже есть.

В файлах gamedata\configs\scripts\jupiter\smart ищи конфиги смартов, в которых прописан респавн (respawn_params ) с соответствующими секциями спавна отрядов. Ну и меняй все отряды на duty_sim_squad_veteran. В т.ч. смотри файл gamedata\configs\misc\simulation.ltx - там прописаны отряды, спавнящиеся в начале игры.

Спасибо. Ваш совет помог, но только частично. Решил проблему немного другим способом, а именно редактированием файла character_desc_general.xml Нашёл там профили членов группировки и поправил параметр <visual>...<visual> у каждого на <visual>actors\stalker_группировка\stalker_группировка_4<visual> Именно этот визуал одевает в экзу. Хотя игра всё равно продолжает откуда-то брать отдельных членов группировки в броне и с оружием, которых уже нет в профилях npc. Но это уже лирика... В большинстве своём спавнятся именно те кто нужно.

@independent поставь ранг в 900

По сути в ЗП, насколько я успел понять, ранг ни за что не отвечает... Может и ошибаюсь конечно...

 

Ладно, с этим кое как разобрались... Решил немного поковырять бессмертие для некоторых персонажей, а именно для отряда монолита на Юпитере. Почитав туторы и некоторые сообщения из этой ветки форума, стал ковырять файлы из директории gamedata\configs\scripts\jupiter\, в частности которые начинаются на jup_b4_monolith_squad_ В каждом из 5-ти прописана логика каждого члена группы до вступления в какую-либо группировку и ещё 5+5 после вступления. Отредактировал следующим образом:

 

[logic@jup_b4_monolith_squad_soldier_1_monolith_skin]

suitable = {=check_npc_name(jup_b4_monolith_squad_soldier_1_monolith_skin)}

active = animpoint@begin

prior = 100

on_hit = hit

on_death = death

 

[animpoint@begin]

invulnerable = true

cover_name = jup_b4_animpoint_1

use_camp = false

reach_distance = 1.5

combat_ignore_cond = {-jup_b4_monolith_squad_hit} true, false

on_info = {-task_jup_b4_monolith_squad_help +jup_b4_monolith_talking_1} %=play_sound(jup_b4_monolith_talking_1)%

on_info2 = {+jup_b4_duty_go_to_monolit_squad} walker@begin_2

on_info3 = {+jup_b4_freedom_squad_leader_lets_talk_sound} animpoint@freedom_1

on_info4 = {+jup_b4_monolith_squad_hit -jup_b4_ms1_stop_sound} %=stop_sound +jup_b4_ms1_stop_sound%

on_info5 = {+jup_b4_monolith_squad_out} walker@out

meet = meet_speak_boos

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

[walker@out]

invulnerable = true

use_camp = false

path_walk = monolith_squad_soldier_1_monolith_skin_begin_2_walk

path+look = monolith_squad_soldier_1_monolith_skin_begin_2_look

meet = no_meet

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

[walker@begin_2]

invulnerable = true

use_camp = false

path_walk = monolith_squad_soldier_1_monolith_skin_begin_2_walk

path+look = monolith_squad_soldier_1_monolith_skin_begin_2_look

combat_ignore_cond = {-jup_b4_monolith_squad_hit} true, false

on_info = {+jup_b4_aling} walker@1

meet = meet_speak_boos

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

[walker@1]

invulnerable = true

use_camp = false

path_walk = monolith_squad_soldier_1_monolith_skin_2_walk

path_look = monolith_squad_soldier_1_monolith_skin_2_look

combat_ignore_cond = {-jup_b4_monolith_squad_hit} true, false

on_signal = align1 | %+jup_b4_duty_aling1%

on_info = {+jup_b4_aling_line} walker@dolg_aling_line

meet = meet_speak_boos

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

[walker@dolg_aling_line]

invulnerable = true

use_camp = false

path_walk = monolith_squad_soldier_1_monolith_skin_1_walk

path_look = monolith_squad_soldier_1_monolith_skin_1_look

combat_ignore_cond = {-jup_b4_monolith_squad_hit} true, false

on_info = {+jup_b4_duty_prisiaga} walker@3

meet = meet_speak_boos

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

[walker@3]

invulnerable = true

use_camp = false

path_walk = monolith_squad_soldier_1_monolith_skin_1_walk

path_look = monolith_squad_soldier_1_monolith_skin_1_look

combat_ignore_cond = {-jup_b4_monolith_squad_hit} true, false

on_timer = 500 | walker@4

meet = meet_speak_boos

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

[walker@4]

invulnerable = true

use_camp = false

path_walk = monolith_squad_soldier_1_monolith_skin_1_walk

path_look = monolith_squad_soldier_1_monolith_skin_1_look

combat_ignore_cond = {-jup_b4_monolith_squad_hit} true, false

on_info = {+jup_b4_duty_prisiaga -jup_b4_recruit_1_serve_duty_sound} %=play_sound(jup_b4_recruit_1_serve_duty) +jup_b4_recruit_1_serve_duty_sound%

on_info2 = {+jup_b4_monolith_squad_out -jup_b4_ms1_stop_sound} %=stop_sound +jup_b4_ms1_stop_sound%

meet = meet_speak_boos

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

;--------------------------------------------------------------------------------

;--------------------------------------------------------------------------------

 

[animpoint@freedom_1]

invulnerable = true

cover_name = jup_b4_animpoint_1

use_camp = false

reach_distance = 1.5

combat_ignore_cond = {-jup_b4_monolith_squad_hit} true, false

on_info = {+jup_b4_freedom_squad_leader_speech_sound -jup_b4_monolith_1_ask_to_freedom_sound} %=play_sound(jup_b4_monolith_1_ask_to_freedom)%

on_info2 = {+jup_b4_monolith_squad_out -jup_b4_ms1_stop_sound} %=stop_sound +jup_b4_ms1_stop_sound%

on_signal = sound_end | animpoint@freedom_2 %+jup_b4_monolith_1_ask_to_freedom_sound%

meet = meet_speak_boos

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

[animpoint@freedom_2]

invulnerable = true

cover_name = jup_b4_animpoint_1

use_camp = false

reach_distance = 1.5

combat_ignore_cond = {-jup_b4_monolith_squad_hit} true, false

on_info = {+jup_b4_freedom_squad_leader_welcome_to_freedom_sound} %=play_sound(jup_b4_recruit_1_cool_freedom)%

on_info2 = {+jup_b4_monolith_squad_out -jup_b4_ms1_stop_sound} %=stop_sound +jup_b4_ms1_stop_sound%

on_signal = sound_end | %+jup_b4_recruit_1_cool_freedom_sound%

meet = meet_speak_boos

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

[hit]

on_info = %+jup_b4_monolith_squad_hit%

 

[death]

on_info = %+jup_b4_soldier_1_death +jup_b4_duty_aling1 +jup_b4_recruit_1_serve_duty_sound +jup_b4_monolith_1_ask_to_freedom_sound +jup_b4_recruit_1_cool_freedom_sound%

 

[meet_speak_boos]

use = false

snd_on_use = jup_b4_monolith_talk_to_commander

 

 

 

[logic@jup_b4_monolith_squad_soldier_1_freedom_skin]

suitable = {=check_npc_name(jup_b4_monolith_squad_soldier_1_freedom_skin)}

active = walker@go_home

prior = 100

 

[walker@go_home]

path_walk = go_home_1_walk

path_look = go_home_1_look

meet = meet

invulnerable = true

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

[meet]

meet_dialog = jup_b4_freedom_start_dialog

 

 

В каждый абзац добавил строку invulnerable = true. Как раз она и отвечает за бессмертие персонажа. В результате до вступления в группировку любой из отряда стал бессмертным, но после вступления они опять становились смертными....

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

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


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

Не уверен, но может быть так:

anm_show = rpg7_draw - доставание

anm_hide = rpg7_holster - убирание

anm_reload = rpg7_reload - перезарядка

anm_shots = rpg7_shoot - выстрел

anm_idle = rpg7_idle - на месте

anm_idle_aim = rpg7_idle_aim - прицеливание

anm_idle_moving = rpg7_idle_moving - перемещение

anm_bore = rpg7_idle_bore - долгое стояние на месте (actor играется с оружием)

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


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

independent, насколько я помню, invulnerable = true, работает только до переключения на другую схему. Посмотри в xr_logic, там должны быть методы для проверки и переключения invulnerability

Посмотрел данный файл. Там ни слова про invulnerable нет... Комментарии написаны, но к чему они и как всё это работает не очень понятно...

На форуме уже неоднократно поднимался вопрос бессмертия для персонажей в игре. Никто из вопрошающих так и не получил конкретного ответа... Сделать бессмертными уникальных персонажей достаточно просто, но здесь речь идёт о "статистах"... Может быть есть способ?

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


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

invulnerable, нет и не может быть конкретного ответа на вопрос о бессмертии, тем более ты даже не удосужился сформулировать, что же ты под "бессмертием" понимаешь. Как минимум "бессмертие" подразделяется на онлайновое и оффлайновое.

Artos, попробую более конкретно сформулировать задачу, которую я перед собой поставил. Нужно сделать группу "выжившего Монолита" бессмертными после втупления их в какую-либо из 2-х группировок (напимер в Свободу). После вступления они попадают под логику npc группировки. Утром уходят с Янова и вечером возвращаются. Так вот, я хочу сделать, чтобы все персонажи этой группы не зависимо от того где находится Actor и что он делает, не пропадали и можно было встретить их в любой точке локации Юпитер живыми и здоровыми. Как это называется у моддеров/скриптеров онлайн или оффлайн бессмертие - мне не известно.

 

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

 

Во истину правы те, кто написал вот это:

 

Спроси о чём-нибудь на американском форуме, и тебе распишут ответ на 10 страниц.

Спроси о чём-нибудь на немецком форуме, и тебе распишут ответ на 20 страниц.

Спроси о чём-нибудь на русском форуме, и тебе на 40 страниц распишут, какой ты ****.

 

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


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

Приветствую!

Меняю стандартное оружие в ЗП. Использую для этого отдельные готовые пушки, а не оружейные паки. С добавлением первого проблем не возникло. При добавлении второго ствола заменился файл particles.xr., отвечающий за визуализацию частиц при стрельбе. Это ни есть хорошо. Практически для каждой новой пушки есть свой файл партиклов, лежащий в корне папки gamedata.

Вопрос: Как поступить в данной ситуации? Надо ли рассовывать эти файлы по разным папкам или совмещать всё в одном? И вооще как сие можно реализовать?

Заранее спасибо.

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


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

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