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

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


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

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

 

Происходит в одном и том же участке локации, если приблизится ближе чем на 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.
кто может помочь - пишите в ЛС.

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

как их найти?

Если погуглить на просторах, то обязательно что-нибудь найдётся. И найдётся, скорее всего, что то типа такого. 

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

Только вместо надписей на экране, как в примере из источника, куда практичнее запись в лог или в какой-нибудь специально созданный для этого файл.

Лично я использую другой код, куда более удобный.

Когда то я использовал это (скачать здесь) и это.

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

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

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

Я посмотрел, попробовал способом с кнопкой титров, вот так. Всё сработало на отлично! Пользоваться, лично я советую именно им.

  • Нравится 1

"Do you like what you see?" © Billy Herrington

Boneset-HQ.gif

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

Ребята, как заспавнить НПС мертвым? Желательно через скрипт. В интернете пишут про строку npc.kill(npc), или как-то так, но нужно чтобы он был заспавнен в оффлайне, и уже мертвый.

Например: Ты на кордоне в деревне, и тут бац после диалога на АТП появился труп с квестовым предметом. 

 

P.s. Про ACDC я знаю но это не то что мне нужно. 

"Do you like what you see?" © Billy Herrington

Boneset-HQ.gif

Ссылка на комментарий
2 часа назад, boneset-hq сказал:

.s. Про ACDC я знаю но это не то что мне нужно.

Почему?

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

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

Как прописать новых монстров в статистику? 

 

Секция в конфиге - bloodsucker_stronglaw

В stable_statistic_caption

        <string id="bloodsucker_stronglaw">
        <text>стронглав</text>
        </string>

В xr_statistic - 

local killCountProps = {

bloodsucker_weak = 1,     bloodsucker_normal = 2, bloodsucker_strong = 3, bloodsucker_stronglaw = 10

 

Итог: игра считает стронглава черным кровосом и начисляет за него 3 очка (не работает ничего)

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

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

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

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

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

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

Войти

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

Войти
×
×
  • Создать...