independent 2 Опубликовано 17 Ноября 2012 (изменено) Приветствую! Сколько не ковырялся в файлах игры, сколько не читал тем и туторов на этом форуме и на других, но так и не смог найти ответ на свой вопрос... Как сделать так, чтобы оружие выпадающее с NPC или получаемое ГГ любым другим способом (т.е. всё оружие в игре без исключения) было на 100% исправно? Я уже убрал износ из файлов конфигурации оружия и апгрейдов оружия. Но эти параметры отвечают за износ оружия при использовании ГГ... Помогите, пожалуйста, ответить на этот вопрос или ткните носом, если ответ уже где-то дан. Спасибо! PS^ Речь идёт о СТАЛКЕР Зов Припяти... Изменено 17 Ноября 2012 пользователем independent Поделиться этим сообщением Ссылка на сообщение
independent 2 Опубликовано 17 Ноября 2012 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-х рожков. И раз уж у неписей оружие не клинит, то и износ им не к чему, а мне какой-никакой доход от лута... Поделиться этим сообщением Ссылка на сообщение
independent 2 Опубликовано 17 Ноября 2012 (изменено) 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)returnenditem_in_slot = npc:item_in_slot(3)if item_in_slot ~= nil and item_in_slot:id() == item_id then--' Тут надо уменьшить кондишн оружияitem:set_condition(100)returnend-- 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 thenreturnendif not npc:marked_dropped(item) then-- printf("releasing object ["..item:name().."]")alife():release(alife():object(item:id()), true)end]]endfunction set_weapon_drop_condition(item)local condition = 100--printf("condition [%s]", tostring(condition))item:set_condition(condition)end Задача решена. Artos спасибо вам огромное за помощь! Не знаю сколько бы ещё я тыкался по углам как слепой котёнок. Удачи вам! Изменено 17 Ноября 2012 пользователем independent 1 Поделиться этим сообщением Ссылка на сообщение
independent 2 Опубликовано 19 Ноября 2012 Предыдущее сообщение уже не возможно отредактировать (да простят меня модераторы за мультипост). Решил продолжить ковыряние в конфигах игры. На этот раз пытаюсь поиграться с балансом группировок на локации Юпитер. Решил дать одной из группировок глобальное преимущество, то есть сделать так, чтобы за неё спавнились только 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 2 Опубликовано 1 Декабря 2012 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. Как раз она и отвечает за бессмертие персонажа. В результате до вступления в группировку любой из отряда стал бессмертным, но после вступления они опять становились смертными.... Подскажите, пожалуйста, почему так произошло и как всё же сохранить бессмертие для этих персонажей на протяжении всей игры? Поделиться этим сообщением Ссылка на сообщение
independent 2 Опубликовано 5 Декабря 2012 Не уверен, но может быть так: 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 2 Опубликовано 7 Декабря 2012 independent, насколько я помню, invulnerable = true, работает только до переключения на другую схему. Посмотри в xr_logic, там должны быть методы для проверки и переключения invulnerability Посмотрел данный файл. Там ни слова про invulnerable нет... Комментарии написаны, но к чему они и как всё это работает не очень понятно... На форуме уже неоднократно поднимался вопрос бессмертия для персонажей в игре. Никто из вопрошающих так и не получил конкретного ответа... Сделать бессмертными уникальных персонажей достаточно просто, но здесь речь идёт о "статистах"... Может быть есть способ? Поделиться этим сообщением Ссылка на сообщение
independent 2 Опубликовано 8 Декабря 2012 invulnerable, нет и не может быть конкретного ответа на вопрос о бессмертии, тем более ты даже не удосужился сформулировать, что же ты под "бессмертием" понимаешь. Как минимум "бессмертие" подразделяется на онлайновое и оффлайновое. Artos, попробую более конкретно сформулировать задачу, которую я перед собой поставил. Нужно сделать группу "выжившего Монолита" бессмертными после втупления их в какую-либо из 2-х группировок (напимер в Свободу). После вступления они попадают под логику npc группировки. Утром уходят с Янова и вечером возвращаются. Так вот, я хочу сделать, чтобы все персонажи этой группы не зависимо от того где находится Actor и что он делает, не пропадали и можно было встретить их в любой точке локации Юпитер живыми и здоровыми. Как это называется у моддеров/скриптеров онлайн или оффлайн бессмертие - мне не известно. Поверьте, я задаю вопросы другим людям только в самых крайних случаях. На большинство ответы нашёл ни кого не спрашивая и успешно применил эти знания. Каждый хорош в своём деле, которому учился и достиг там определённых результатов. И я больше чем уверен, что в той сфере, где специалистом являюсь я, вы не смыслите ровным счётом ничего. Общение между людьми подразумевает обмен опытом и знаниями, взаимопомощь в сложных ситуациях. И да. Как бы погано это не звучало, я хочу получить конкретный ответ на свой вопрос, так как по жизни привык помогать другим по мере возможности. И мне не понятно, почему вместо помощи я получаю неприкрытую агрессию и отказ... Во истину правы те, кто написал вот это: Спроси о чём-нибудь на американском форуме, и тебе распишут ответ на 10 страниц. Спроси о чём-нибудь на немецком форуме, и тебе распишут ответ на 20 страниц. Спроси о чём-нибудь на русском форуме, и тебе на 40 страниц распишут, какой ты ****. Поделиться этим сообщением Ссылка на сообщение
independent 2 Опубликовано 31 Декабря 2013 Приветствую! Меняю стандартное оружие в ЗП. Использую для этого отдельные готовые пушки, а не оружейные паки. С добавлением первого проблем не возникло. При добавлении второго ствола заменился файл particles.xr., отвечающий за визуализацию частиц при стрельбе. Это ни есть хорошо. Практически для каждой новой пушки есть свой файл партиклов, лежащий в корне папки gamedata. Вопрос: Как поступить в данной ситуации? Надо ли рассовывать эти файлы по разным папкам или совмещать всё в одном? И вооще как сие можно реализовать? Заранее спасибо. Поделиться этим сообщением Ссылка на сообщение