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

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

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

Такой вопрос. Стоят у меня 2 мини-мода - отметки НПС в ПДА (подобие ЧН) и отметки важных персонажей из ЗП.
Суть в том, что отметки НПС в ПДА висят всегда. Если поставить отметку важных персонажей, то эти 2 метки накладываются один на другого.
Как это можно поправить?

Скрипт меток НПС в ПДА (код):

 

local step_time = 1500
local nps_spots = {}

function update()
    local time = time_global()
    if time > step_time then
        step_time = time + 1500
        for id,val in pairs(db.storage) do
            local obj = level.object_by_id(id)
            if obj and (IsStalker(obj) or obj:section() == "m_trader") and id~=0 then
                show_spot(obj,id)
            end
        end
    end
end

function show_spot(npc,id)
    local commun = npc:character_community()
    local spot = "naxac_"..commun
    if npc:best_enemy() then
        if nps_spots[id] then
            nps_spots[id] = nil
            level.map_remove_object_spot(id,spot)
        end
        return
    elseif npc.health > 0 and not nps_spots[id] then
        nps_spots[id] = true
        local hint = game.translate_string(commun)
        level.map_add_object_spot(id,spot,hint)
    elseif npc.health <= 0 and nps_spots[id] then
        nps_spots[id] = nil
        level.map_remove_object_spot(id,spot)
    end
end



Скрипт меток важных НПС (код):

 

 


-- Вызывается на переключении на новую секцию. Производит вычитывание настроек из текущей секции.
function reset_show_spot(npc, scheme, st, section)
local spot_section
if scheme == nil or scheme == "nil" then
spot_section = utils.cfg_get_string(st.ini, st.section_logic, "show_spot", npc, false, "")
else
spot_section = utils.cfg_get_string(st.ini, section, "show_spot", npc, false, "")
end
local map_spot = utils.cfg_get_string(st.ini, st.section_logic, "npc_map_spot", npc, false, "")
if map_spot == nil then
map_spot = utils.cfg_get_string(st.ini, section, "npc_map_spot", npc, false, "")
end
if map_spot ~= nil then
map_spot = xr_logic.parse_condlist(npc, section, "npc_map_spot", map_spot)
map_spot = xr_logic.pick_section_from_condlist(db.actor, npc, map_spot)
end
--' printf("STALKER SPOT SECTION [%s]", utils.to_str(spot_section))

if spot_section == nil then
spot_section = "true"
end

local spot = "false"
-- if character_community(npc) ~= "zombied" then
local spot_condlist = xr_logic.parse_condlist(npc, section, "show_spot", spot_section)
spot = xr_logic.pick_section_from_condlist(db.actor, npc, spot_condlist)
-- end

local sim = alife()
if not sim then
return
end

local obj = sim:object(npc:id())
if obj and obj.online then
local npc_id = npc:id()
if spot == "false" then
-- прячем
obj:visible_for_map(false)
else
-- ставим
obj:visible_for_map(true)
end
if map_spot ~= nil then
local map_location = ""
local hint = ""
if map_spot == "trader" then
map_location = "trader_npc_location"
hint = "st_ui_pda_trader"
elseif map_spot == "mechanic" then
map_location = "mechanic_npc_location"
hint = "st_ui_pda_mechanic"
elseif map_spot == "guider" then
map_location = "guider_npc_location"
hint = "st_ui_pda_guider"
elseif map_spot == "quest_npc" then
map_location = "quest_npc_location"
hint = "st_ui_pda_quest_npc"
elseif map_spot == "medic" then
map_location = "medic_location"
hint = "st_ui_pda_legend_medic"
end
if level.map_has_object_spot(npc_id, map_location) ~= 0 then
level.map_remove_object_spot(npc_id, map_location)
end
if db.actor and npc and npc:general_goodwill(db.actor) > -1000 then
level.map_add_object_spot(npc_id, map_location, hint)
end
else
if level.map_has_object_spot(npc_id, "trader_npc_location") ~= 0 then
level.map_remove_object_spot(npc_id, "trader_npc_location")
elseif level.map_has_object_spot(npc_id, "mechanic_npc_location") ~= 0 then
level.map_remove_object_spot(npc_id, "mechanic_npc_location")
elseif level.map_has_object_spot(npc_id, "guider_npc_location") ~= 0 then
level.map_remove_object_spot(npc_id, "guider_npc_location")
elseif level.map_has_object_spot(npc_id, "quest_npc_location") ~= 0 then
level.map_remove_object_spot(npc_id, "quest_npc_location")
elseif level.map_has_object_spot(npc_id, "trader_npc_location") ~= 0 then
level.map_remove_object_spot(npc_id, "trader_npc_location")
end
end
end
end

function remove_level_spot(npc, st)
local map_spot = utils.cfg_get_string(st.ini, st.section_logic, "npc_map_spot", npc, false, "")
if map_spot == nil then
map_spot = utils.cfg_get_string(st.ini, st.active_section, "npc_map_spot", npc, false, "")
end
if map_spot ~= nil then
map_spot = xr_logic.parse_condlist(npc, st.active_section, "npc_map_spot", map_spot)
map_spot = xr_logic.pick_section_from_condlist(db.actor, npc, map_spot)
end
local sim = alife()
if not sim then
return
end

local obj = sim:object(npc:id())
if obj then
local npc_id = npc:id()
if map_spot ~= "" and map_spot ~= nil then
local map_location = ""
if map_spot == "trader" then
map_location = "ui_pda2_trader_location"
elseif map_spot == "mechanic" then
map_location = "ui_pda2_mechanic_location"
elseif map_spot == "guider" then
map_location = "ui_pda2_scout_location"
elseif map_spot == "quest_npc" then
map_location = "ui_pda2_quest_npc_location"
elseif map_spot == "medic" then
map_location = "ui_pda2_medic_location"
end
if level.map_has_object_spot(npc_id, map_location) ~= 0 then
level.map_remove_object_spot(npc_id, map_location)
end
end
end
end
 

 

 


Скриншот, как это дело выглядит:

 

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

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

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

Доброго времени суток всем! Просто праздник какой-то: найти живой форум по "Сталкеру" :)! А то десять лет спустя пробило на ностальгию - решил перепройти игру - и сразу вспомнил, что меня в ней бесило десять лет тому ;).

 

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

 

Задача - повысить выживаемость НПС-сталкеров-"одиночек" в жестоком мире Зоны. Проще - сделать так, чтоб они не дохли, как мухи, под каждым кустом.

 

Казалось бы - простая задача. Открываем m_stalker.ltx и правим, что хотим. Не тут-то было :(.

 

Увеличивать Health оказалось бесполезным. Сталкер-новичок с Health = 1000 точно так же умирает от двух пуль глав-героя в корпус, как и с исходным Health = 100. Ну, и "в мире" они мрут одинаково. Почему - не понимаю.

 

Кстати, если кто разъяснит, что такое Health, а что такое MaxHealthValue - отдельный респект.

 

Редактирование stalker_immunities тоже не помогло: коэффициенты довел до 0.0 - сталкеры точно так же убиваются. Опять же, непонятно - почему.

 

Единственные параметры, которые реально влияют, - в блоке stalker_condition. В частности, health_hit_part ("процент хита, уходящий на отнимание здоровья") при установке в 0 делает НПС практически неуязвимым.

 

Но тут начинается самое интересное. Неуязвимыми при health_hit_part = 0.0 стали и солдаты, и бандиты, и т.д. В общем, все люди-НПС. Ну, опять же - залез в соответствующие m_*****.ltx - там везде прописаны отсылки к immunities и condition сталкеров:

 

immunities_sect                = stalker_immunities
condition_sect                = stalker_condition

 

Я нашел в m_person.ltx соответствующие блоки для торговцев: trader_immunities (там все по 0.0) и trader_condition (в нем прописал health_hit_part = 0.0 ). В m_stalker.ltx прописал:

 

immunities_sect                = trader_immunities
condition_sect                = trader_condition

 

Результат - все то же самое: неуязвимы и "одиночки", и солдаты, и бандиты, и т.д. :(

 

Зашел с другой стороны. В "армейском" файлике m_army.ltx создал блоки army_immunities и army_condition со стандартными значениями. Прописал в этом файле везде:

 

immunities_sect                = army_immunities
condition_sect                = army_condition

 

а в m_stalker.ltx поставил health_hit_part = 0.0. И опять получил все то же самое: неуязвимы и сталкеры, и военные.

 

Кто может объяснить, что я не так делаю, или, что скорее, что еще нужно сделать, ПЛИЗ ХЕЛП. Пятый день ковыряюсь в этих файлах - мозг кипит, результата ноль. Проверял по три раза, игру начинал с начала - все без толку.

 

У меня "Тени Чернобыля" версии 1.0006, со "Steam-а". Стоит мод STALKER Complete 2009 (v.1.4.4). Мод в основном косметический, плюс - правящий некоторые косяки типа умирания в кострах и добавляющий всякие мелкие приятности, сюжет и геймплей он не затрагивает. Я сравнивал файлы m_*****.ltx с оригинальными - в моде в них менялись только некоторые числовые значения, касающиеся обзора/обнаружения НПС, больше ничего. Хотя с "чистой" игрой я тоже экспериментировал - с тем же результатом :(

 

 

 

Ссылка на комментарий
1 час назад, F.Constantine сказал:

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

Найди тему тут на форуме "Расчёт повреждений при стрельбе по НПС"

https://www.amk-team.ru/forum/topic/4188-soc-raschet-povrezhdeniy-pri-strelbe-po-nepisyam/

Всё подробно, что к чему.

  • Нравится 1
  • Полезно 1
Ссылка на комментарий
20 минут назад, Капрал Хикс сказал:

Найди тему тут на форуме "Расчёт повреждений при стрельбе по НПС"

https://www.amk-team.ru/forum/topic/4188-soc-raschet-povrezhdeniy-pri-strelbe-po-nepisyam/

Всё подробно, что к чему.

 

Привет. Спасибо, что отозвался. Прочитал.

Только не совсем понял: ты имеешь ввиду, что урон, получаемый НПС, можно править через bip-пы в блоке stalker_damage? Это я уже сам допер. Не в том суть проблемы. Меня пока вполне устраивает изменение одного-единственного параметра, health_hit_part, оно дает нужный мне эффект. НО - эффект этот распространяется на ВСЕ фракции НПС в игре: и на сталкеров-одиночек, и на военных, и на бандитов! А мне нужно изменять его только для одной определенной фракции, одиночек, например. И я не догоняю, как это сделать.

 

Или ты имел ввиду кусок:

Цитата

Зачем так мучаться? Можно просто при создании НПС в файле spawn_sections.ltx сделать следующее:

 

[Имя вашего НПС]:stalker_sakharov

$spawn = "respawn\Имя вашего НПС"

character_profile = Имя вашего НПС

spec_rank = regular

community = stalker

 

И все. Ваш НПС бессмертный.

 

Т.е. нужно создать новый "вид" НПС с нужными мне параметрами (ну, или добавить в профиль Сахарова еще condition с нужными величинами и использовать его) и в файле spawn_sections.ltx заменить для ВСЕХ нужных НПС прописанное там stalker на новый профиль, типа как stalker_sakharov в примере? 

 

Как-то вроде этого:

 

;--------Escape--------------
;--------neutrals------------
[esc_stalker_respawn_1]:stalker_sakharov
$spawn                =  "respawn\esc_stalker_respawn_1"
character_profile    = sim_stalker_novice
spec_rank = novice
community = stalker

[esc_stalker_respawn_2]:stalker_sakharov
$spawn                =  "respawn\esc_stalker_respawn_2"
character_profile    = sim_stalker_general
spec_rank = regular
community = stalker

 

и т.д.?

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

Ну, в принципе, можно попробовать и так. Учти, что иммунитеты ещё и зашиты у большинства НПС в модели (прямо либо в виде .ltx инклуда), если их там нет, значения берутся из m_stalker. Ну и так далее...

  • Нравится 1
  • Согласен 1
  • Полезно 1
Ссылка на комментарий
В ‎16‎.‎01‎.‎2019 в 09:36, Houdini_one сказал:

да там всё скриптово - и удар прикладом, и разговоры через ПДА

Я к тому, что может в X-Ray Extensions сие поправлено, а там уже в дело скрипты вступают. Вопрос изначально был в том, чтобы биографию восстановить скриптово без использования X-Ray Extensions, на стандартном движке.

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

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

@AndrewMor, а, ну да. Скриптово без этого проекта ты уж вряд ли сделаешь...

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

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

@Капрал Хикс Ок, я поковыряюсь еще вечером. Метод, конечно, странный (когда есть готовые файлы для каждой фракции), и он если и будет работать, то только для спавнящихся НПС, а как быть с уникальными, типа Волка, Крота, Серого и т.п.? Ну, даже по spawn_sections.ltx видно, что разработчики сделали это через большую "Ж": сами создали под каждую фракцию отдельный профиль, а потом запутали все в какую-то безумную паутину перекрестных ссылок и #include-сов и свели все к одному.

Что касается моделей, то там иммунитеты и сопротивления, как я понимаю, напрямую завязаны с внешним видом, т.е. костюмом на персонаже. Т.е., если я начну наращивать защиту сталкерского комбеза - я точно так же сделаю суперменом бандита в таком комбезе (в игре есть подобные персонажи), а это не то, что мне нужно :)… Я прав?

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

@Капрал Хикс P.S. Ну, собственно, я угадал. Метод с созданием "неуязвимого" профиля типа stalker_sakharov и прописывание его сталкерам в spawn_sections.ltx работает на половину: отспавнившиеся после начала игры сталкеры действительно стали неуязвимыми, а вот присутствовавшие на локациях изначально - остались прежними. Например, в ангаре на Свалке Серый и два его друга убиваются, как и прежде, а пришедшие к ним позже сталкеры - "бессмерны". Попробовал новую игру начать - точно так же все новички и Волк в лагере Кордона убиваются.

 

Не годится :( .

 

Есть мысль попробовать реализовать задумку через скрипт. Типа "если НПС принадлежит к фракции "одиночки", то установить ему health_hit_part равным 0.0". Должно вроде быть не сложно - если б я умел их, скрипты эти, писать... 

Добавлено  Опричник,

Изучите "Правила цитирования". https://www.amk-team.ru/forum/topic/13514-obyavleniya/

Ссылка на комментарий
6 часов назад, F.Constantine сказал:

Ну, собственно, я угадал.

Методом угадываний и "с наскоку" тут плохо и долго дело будет решаться. Нужно вникать в деталях, что и как работает в модели повреждений. Я для своей сборки заморочился и перелопатил вообще ВСЕ модели NPC, прописав каждому .ltx инклуд в соответствии со своей системой повреждений по костюмам. Времени заняло порядочно, но оно того стоило. :)

По поводу био сталкеров - ЕМНИП, их отображение в КПК восстанавливается без возни с движком, правкой одной xml-ки. Проблема в том, что там жёстко задан движком размер окна для текста и нет выравнивания. Давно уже рыл, не помню, на форуме стоит поискать.

Изменено пользователем Капрал Хикс
  • Нравится 1
  • Согласен 1
  • Полезно 1
Ссылка на комментарий

@Капрал Хикс, Да я понимаю :) . Просто задача казалась тривиальной, а превратилась в геморрой.

 

Если не жалко  - можешь как-то доходчиво пояснить (если можно - на примере из файла какого-то), что именно ты делал с моделями? Я что-то не могу въехать в принципе, куда ты там инклуды прописывал. 

Я на твои авторские права не посягаю, честное пионерское :) . Я исключительно для себя пытаюсь маленькую сборочку слепить.

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

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

  • Согласен 2
  • Полезно 1
Ссылка на комментарий
В 17.01.2019 в 21:28, Капрал Хикс сказал:

По поводу био сталкеров - ЕМНИП, их отображение в КПК восстанавливается без возни с движком, правкой одной xml-ки.

А в какой конкретно?

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

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

Народ, нужна помощь в активации "уборщика трупов и бесхозного оружия от Сяка"

Скрытый текст

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

Скачал отсюда:(http://kish.ucoz.org/load/uborshhik_trupov_iz_nlc_5/1-1-0-24) и там сказано, мол

Цитирую

"Данный скриптовый файл прописывается в бинд_сталкер.скрипт
Вот сюда:
local corspoff = true
function actor_binder:update(delta)
if corspoff then
sak_off_corpses.off_corpses()
corspoff = false
end"

 

Но я смотрю - ведь тут явно ошибка(да и не совсем понятно - куда сюда?

Может кто знает (или кто подключал его уже) - как правильно вписать уборщик в bind_stalker, чтобы он нормально работал?

Буду дико благодарен прост:)

Если что - вот мой bind_stalker:https://yadi.sk/d/ydMgJx565sfkRA

 

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

Лучше сделать мод с 0, чем пытаться залатать багованный.

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

Ну, ошибка здесь собственно в том, что каждые 20ms зачем-то вызывается проверка того, что требуется один раз при загрузке.

 

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

Возможно, предполагается еще наличие функции, которая вызывается через некоторое время после зомбоспавна, и снова делает corspoff = true (а заодно вызывает мегалаг, пока тот сякоуборщик перебирает все объекты в игре, чтоб было нелегко и нерадостно).

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

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

@Dennis_Chikin, Ну кое что конечно становиться ясным - вот ток как правильно вписать эту функцию в bind_stalker я так и не понял.

function actor_binder:update(delta) все таки постоянная и одна из главных и она не должна находиться посередине подфункций, как было показано в примере. Или я что-то не понимаю?

Лучше сделать мод с 0, чем пытаться залатать багованный.

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

Где там кто "посередине подфункций"?

 

Хотя, конечно, если в игре нет табунов в 1000 зомбей, я бы вставил куда-нибудь в net_spawn()

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

Ребят, а как можно полностью отключить смарт террейн?

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

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

Если руки шаловливые не поковырялись - remove_gulag( true ), и добавить сохранение/загрузку флага.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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