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

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


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

11 часов назад, Hind сказал:

Как сделать так, чтобы он стрелял в случае когда мы ему хоть чуть чуть показываемся?

Можно подкорректировать другими параметрами.

always_visible_distance = 0.1 - коэффициент зрения, при котором NPC видит при любых условиях, независимо от освещённости и прочих параметров. В данном случае значение составляет 0.1, что говорит о том, что NPC имеет абсолютное зрение в радиусе одного метра.

Поставь к примеру 10.0 и в радиусе 100 метров НПС будут стрелять по тебе так, что мало не покажется.

velocity_factor - фактор ускорения. Чем выше значение, тем быстрее нас обнаружит NPC при нашем движении. При высоком значении достаточно чуть шелохнуться, что бы быть обнаруженным, соответственно при наименьшем значении, мы останемся незамеченными даже если будем бегать.

Ссылка на пояснения - https://modfaq.ru/Изменение_зрения_NPC

Там только пару параметров выставили неправильно.

luminocity_factor и transparency_threshold должны быть меньше единицы. Поставь 0.75, это оптимальное значение.

 

p.s.

Менять параметры нужно:

По отношению к игроку (главному герою) в actor.ltx

По отношению НПС друг к другу в m_stalker.ltx

и так далее.

Изменено пользователем shahvkit
  • Спасибо 1
  • Полезно 3
Ссылка на комментарий

@Hind дальность видимости и угол обзора в конфиге нпс:

 

160 / 110 

 

Нпс будут стрелять всегда и везде и даже через стены

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

@Капрал Хикс тут только в 3DMax-се нужно делать правку - ибо кривая развёртка текстуры.

  • Сочувствую 1

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

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

Народ, подскажите пожалуйста по такой теме...
Помните, в билдах были "сейфзоны"? Есть у меня такое желание, чтобы сохраняться можно было только в них... Подскажите, какие файлы отвечают за то, чтобы отслеживалось нахождение игрока в этой сейфзоне, и выведение на ХУД иконки домика
 

Ещё вопросы:
Какое обозначение имеет "сытость" главного героя в скриптах?
Какое обозначение имеет вес главного героя в скриптах?

Как можно отследить "открытие" пда? И как его "закрывать" через скрипт?
 

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

Какое обозначение имеет вес главного героя в скриптах?

В ТЧ никак. Это в ОГСР (возвращает суммарный вес инвентарных предметов)

db.actor:get_inventory_weight()

1 час назад, Hind сказал:

"сытость" главного героя в скриптах

db.actor.satiety

1 час назад, Hind сказал:

в билдах были "сейфзоны"

Я, видимо, о них ничего не знаю. Но знаю о рестрикторах (видимо, там именно они). При входе ГГ в него, либо при выходе, может что то происходит (а также разрешаться/запрещаться). Если говорить о сохранениях, тут нужно резать возможности сохраняться штатными способами. Это лучше в движок.

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

ГГ вошёл в зону, кнопка "Сохранить игру" доступна, сохранились, идём дальше. Это, вроде как, простой вариант. Но если нет базовых навыков, просто не будет. Ну и спавн этих самых рестрикторов, конечно.

Изменено пользователем mole venomous
  • Спасибо 1
  • Полезно 1

Здесь могла быть ваша реклама.

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

Подскажите, что не так с кодом, вылетает:
 

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

 

function overdose()
 news_manager.send_tip(db.actor, "%c[0,255,0,0]Передозировка медикаментом!", nil, nil, 30000)
 level.add_cam_effector("camera_effects\\earthquake.anm", 999, false, "")
 level.add_pp_effector("total_recall.ppe", 2008, false)
 end

function medkit_use(tip)
local checker = 1 amk.load_variable(medkit_uses, 0) 
 if tip = medkit and has_alife_info("medkit_use") and db.actor.health < 1.0 then
 if checker <= 10 then
 db.actor.health = 0.004
 use_medkit_timer()
amk.save_variable(medkit_uses, +1)
 elseif checker >= 11 then 
  db.actor.health = 0.002
   use_medkit_timer()
amk.save_variable(medkit_uses, +2)
  elseif checker >= 21 then 
   use_medkit_timer()
db.actor.health = 0.001
amk.save_variable(medkit_uses, +3)
 end
 elseif type = medkit and has_alife_info("medkit_use") and db.actor.health = 1.0 then 
overdose()
 end
 end


function medkit_infoportion()
db.actor:disable_info_portion("medkit_use")
end

   function use_medkit_timer()
      local iTimer = time_global() + 7000
 
      local function check_timer()
         return time_global() > iTimer
      end
 
      level.add_call(check_timer, medkit_infoportion)
   end

 

 

Помимо этого, подскажите, как называется в скриптах параметр, который отвечает за "затягивание ран" (устранения кровотечения) ?

 

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

db.actor:get_inventory_weight()

"Старичок" X-ray Ext.

1 час назад, mole venomous сказал:

db.actor.satiety

Он же.
Откуда и позаимствовано.

 

2 часа назад, Hind сказал:

Есть у меня такое желание, чтобы сохраняться можно было только в них

В принципе, здесь всё верно озвучено. Только, естественно, никаких "специфических средств OGSR" при этом не требуется.
Достаточно наглядно и несложно реализовано, например, здесь. Правда, платформа другая и потребуется осмысленная адаптация.

 

По коду: откуда позаимствовано :biggrin:? Поставь какой-нибудь lua-чекер для проверки синтаксиса скриптов. Например, от @Charsi (есть в профиле). Очень сильно поможет, особенно, на первых порах.
 

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

"Старичок" X-ray Ext

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

Если причины иные, не думаю, что этим стоит забивать юзеру голову.

  • Согласен 2

Здесь могла быть ваша реклама.

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

ибо кривая развёртка текстуры.

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

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

Если игра виснет намертво без вылета (в диспетчере "Не отвечает"), но вылета при этом нет, как найти в чем проблема?

 

Происходит в одном и том же участке локации, если приблизится ближе чем на 50 метров

 

До определенного момента игры эта часть локации отлично работает, но позже происходит зависание

Изменено пользователем Modz
Ссылка на комментарий
17 часов назад, Modz сказал:

Нпс будут стрелять всегда и везде и даже через стены

задача то была не сделать ботов-читеров, а сделать быстрее скорость реакции и чтоб попадали по быстро бегущему игроку, а для этого только править движок или использовать движок ЗП)

Добавлено  Купер,

Опять "замечательный" движок ЗП в теме про ТЧ? Заканчиваем флуд. Здесь описаны параметры, с помощью которых это делается. И они вполне себе адекватно настраиваются.

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

 

function health_values()
if has_alife_info("medkit_use") then
if amk.load_variable("medkit_uses",0) < 10 then -- первые 10 использований
db.actor.health = 0.0005
elseif amk.load_variable("medkit_uses",0) > 10 then -- с 10 использования эффективность теряется
db.actor.health = 0.0003
elseif amk.load_variable("medkit_uses",0) > 20 then -- с 20 и выше использования эффективность минимальная
db.actor.health = 0.0001
end
end

if has_alife_info("medkit_army_use") then
if amk.load_variable("medkit_uses",0) < 10 then -- первые 10 использований
db.actor.health = 0.0006
elseif amk.load_variable("medkit_uses",0) > 10 then -- с 10 использования эффективность теряется
db.actor.health = 0.0005
elseif amk.load_variable("medkit_uses",0) > 20 then -- с 20 и выше использования эффективность минимальная
db.actor.health = 0.0002
end
end

if has_alife_info("medkit_science_use") then
if amk.load_variable("medkit_uses",0) < 10 then -- первые 10 использований
db.actor.health = 0.0009
db.actor.radiation = - 0.00004
elseif amk.load_variable("medkit_uses",0) > 10 then -- с 10 использования эффективность теряется
db.actor.health = 0.0007
db.actor.radiation = - 0.00002

elseif amk.load_variable("medkit_uses",0) > 20 then -- с 20 и выше использования эффективность минимальная
db.actor.health = 0.0004
db.actor.radiation = - 0.0001
end
end
end


function overdose()
news_manager.send_tip(db.actor, "%c[255,255,128,128]Передозировка медикаментом!", nil, nil, 30000)
level.add_cam_effector("camera_effects\\earthquake.anm", 999, false, "")
level.add_pp_effector("total_recall.ppe", 2008, false)
end

function medkit_use(tip)
if tip == medkit and db.actor.health < 1.0 then
use_medkit_timer()
db.actor:give_info_portion("medkit_use")
amk.save_variable("medkit_uses", amk.load_variable("medkit_uses",0)+3)
end
if tip == medkit_army and db.actor.health < 1.0 then
use_medkit_timer()
db.actor:give_info_portion("medkit_army_use")
amk.save_variable("medkit_uses", amk.load_variable("medkit_uses",0)+2)
end
if tip == medkit_science and db.actor.health < 1.0 then
use_medkit_timer()
db.actor:give_info_portion("medkit_science_use")
amk.save_variable("medkit_uses", amk.load_variable("medkit_uses",0)+1)
end
if db.actor.health >= 1.0 then 
overdose()
end
end


function medkit_infoportion()
if has_alife_info("medkit_use") then
db.actor:disable_info_portion("medkit_use")
elseif has_alife_info("medkit_army_use") then
db.actor:disable_info_portion("medkit_army_use")
elseif has_alife_info("medkit_science_use") then
db.actor:disable_info_portion("medkit_science_use")
end
end

   function use_medkit_timer()
      local iTimer = time_global() + 3000
 
      local function check_timer()
         return time_global() > iTimer
      end
 
      level.add_call(check_timer, medkit_infoportion)
   end
   
function infection_visual_effect()
local hud = get_hud()
if has_alife_info("infection") then
hud:AddCustomStatic("morphin_need", true)
elseif db.actor:dont_has_info("infection") then
hud:RemoveCustomStatic("morphin_need", true)
end
end


-- amk.load_variable("medkit_uses",0)
 function infection_start()
 amk.save_variable("infection", amk.load_variable("infection",0)+0.00001)
 news_manager.send_tip(db.actor, "%c[255,255,128,128]Заражение инфекцией!", nil, nil, 30000)
-- soundtrack.infection()
 db.actor:give_info_portion("infection")
end

function infection_update()
if has_alife_info("infection") then
amk.save_variable("infection", amk.load_variable("infection",0)+0.00002)
infection_visual_effect()
end
if amk.load_variable("infection",0) < 1 then 
   news_manager.send_tip(db.actor, "%c[255,255,128,128]Заражение инфекцией!", nil, nil, 30000)
-- soundtrack.infection()
end

if amk.load_variable("infection",0) > 1 then 
-- soundtrack.infection()
   news_manager.send_tip(db.actor, "%c[255,255,128,128]Заражение инфекцией!", nil, nil, 30000)
end

if amk.load_variable("infection",0) > 10 then 
   news_manager.send_tip(db.actor, "%c[255,255,128,128]Заражение инфекцией!", nil, nil, 30000)
-- soundtrack.infection()
end

if amk.load_variable("infection",0) > 20 then 
   news_manager.send_tip(db.actor, "%c[255,255,128,128]Заражение инфекцией!", nil, nil, 30000)
-- soundtrack.infection()
end
end

 


Подскажите, что здесь может вызывать вылет? Ума не приложу... Чекер говорит что всё ок

Скрипт починил (дело оказалось вообще в bind_Stalker, 2 буковки местами перепутал, а столько гемора :facepalm:)

Теперь ещё вопрос: в немодифицированном движке как нибудь можно оформить "ограничение" здоровья ГГ через скрипт? 
Разобрался, пошёл таким путём:


if db.actor.health > 0.5 then
db.actor.health = - 0.1 
end

Расшифруйте, мне, пожалуйста эту строчку кода: function actor_binder:hit_callback(obj, amount, local_direction, who, bone_index)
(Что есть obj, и who - больше всего интересует).
Хочу сделать так, чтобы при хите от монстра (то есть hit.wound) в организм ГГ заносилась инфекция... Сам скрипт с инфекцией и её влиянием сделан - теперь осталось доделать "доставщик" инфекции до гг

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

Аргументы: пострадавший, значение урона, направление (вектор), нападающий, номер задетой кости на модели. Тип внешнего урона определить невозможно, но для описанного случай достаточно проверки if IsMonster(who) then (инфекция) – по крайней мере, при базовых значениях clsid мутантов.

Проблема в том, что в оригинале событие hit для ГГ не обсчитывается. Можно через callback.sound + snd_type == monster_injure в [bind_monster.script], но там придется как-то разбирать, кто слышит свою атаку по ГГ, а кто просто мимокрокодил.

  • Спасибо 1
  • Нравится 2

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Решил я значит, сделать такую систему, что через каждую минуту, при наличии инфопоршня "infection" (т.е. при наличии заразы у гг), будет происходить какое то действие. Пока в файлах я оставил плейсхолдер: каждую минуту гг кашляет и экран раздваивается.

по итогу: ничего не происходит, вообще ничего, и так ждал, и эдак, пихал этот таймер в использование аптечки, всё равно никак.. Помогите!)
Затронутые файлы: HUM_realsim.script, amk.script

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

 

function infection_update()
infection_visual_effect()
if has_alife_info("infection") then
amk.save_variable("infection", amk.load_variable("infection",0)+0.6)
if db.actor:dont_has_info("infection_cycle_started") then
db.actor:give_info_portion("infection_cycle_started")
amk.start_timer(infection_timer,60,inf)
end

if amk.load_variable("infection",0) >= 100 and amk.load_variable("infection",0) < 100000 then 
if db.actor.health > 0.8 then
db.actor.health = - 0.1  
elseif db.actor.power > 0.8 then
db.actor.power = - 0.1 
end
end

if amk.load_variable("infection",0) >= 100000 and amk.load_variable("infection",0) < 200000 then 
if db.actor.health > 0.5 then
db.actor.health = - 0.1  
elseif db.actor.power > 0.5 then
db.actor.power = - 0.1 
end
end

if amk.load_variable("infection",0) >= 200000 then 
level.add_pp_effector("snd_shock.ppe", 100, false)  
if db.actor.health > 0.3 then
db.actor.health = - 0.1  
elseif db.actor.power > 0.3 then
db.actor.power = - 0.1 
end
end
elseif db.actor:dont_has_info("infection") then
db.actor:disable_info_portion("infection_cycle_started")
end
end

-- Ниже зацикленный таймер кашля
function cycle_cough()
if has_alife_info("infection")
soundtrack.infection()
level.add_pp_effector("total_recall.ppe", 2008, false)
amk.start_timer(infection_timer,60,inf)
end
end

 

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

 

function __do_timer_action(select_string,params_string)

    local a

    if select_string=="slp" then
        sleep_manager.test_for_need_sleep()
    end
    if select_string=="inf" then
        HUM_realism.cycle_cough()
    end
    if select_string=="nrg" then
        sleep_manager.test_for_need_sleep_nrg(params_string)
    end
    if select_string=="mtr" then
        sleep_manager.test_for_need_sleep_matras(params_string)
    end
    if select_string=="men" then
        del_variable("smn")
    end
    
    if select_string=="rfx" then
        ogsm_debug.radar_fix()
    end

    if select_string=="otf" then
        a = level.object_by_id(tonumber(params_string))
        if a ~= nil then a:set_condition((math.random(25)+40)/100) end
    end

    if select_string=="rsp" then
        local spawn_period
        ogsm_respawn.level_spawn()
        if ogsm_options.t_spawn < 2 then spawn_period = 2 else spawn_period = ogsm_options.t_spawn end
        g_start_timer("rsp", 0, spawn_period + math.random(-1,1), 0)
    end

 

 

======
Хотел сделать противогаз, но технически он будет артефактом (для секции с защитными свойствами арта). Код следующий:
 

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

 

[gp5]:af_base
class               = ARTEFACT
$prefetch = 64
$spawn = "artifacts\gp5"
artefact_activation_seq = af_activation_gravi
bleeding_restore_speed = 0
cform = skeleton
cost = 30000
description = enc_zone_artifact_gp5
GroupControlSection = spawn_group
health_restore_speed = 0.0
hit_absorbation_sect = gp5_absorbation
inv_grid_x = 13
inv_grid_y = 27
inv_name = gp5
inv_name_short = gp5
inv_weight = 0.5
jump_height = .0
lights_enabled = false
power_restore_speed = 0.0
radiation_restore_speed = 0.0
satiety_restore_speed = 0.0
visual = equipments\item_gasmask1.ogf

[gp5_absorbation]
burn_immunity = 1.0                 
strike_immunity = 1.0
shock_immunity = 1.0
wound_immunity = 1.0        
radiation_immunity = 0.7
telepatic_immunity = 1.0
chemical_burn_immunity = 1.0
explosion_immunity = 1.0
fire_wound_immunity  = 1.0

 

Написал спавн при начале новой игры - и игра вылетает. Лог:

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

[error]Expression    : no_assert
[error]Function      : CXML_IdToIndex<class CInfoPortion>::GetById
[error]File          : e:\stalker\sources\trunk\xr_3da\xrgame\xml_str_id_loader.h
[error]Line          : 112
[error]Description   : item not found, id
[error]Arguments     : gp5_info


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

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

Разробрался, просто сделав инфопоршн... И добавив артикль на описание 

 

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

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

Ни как не могу найти ответ на вылеты

 

ERROR:_try_switch_to_another_section():_error_in_implementation_of_scheme_'mob_trader':_actor_is_nil

***__%s_--_State:_%d_--_Total_population:_%d/%d_--_Non_exclusive_population:_%d/%d

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

Всем ку. Подскажите можно ли в таск добавлять еду, медикаменты? Пробывал добавить волку квест на поиски бинта задания нет. Как только поменял бинт на пм, задание появилось. Есть ли какие правки и где можно посмотреть? 

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

@Colder имеется ввиду циклический квест?

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

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

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

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

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

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

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

Войти

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

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

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