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

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


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

@Куперстранно, я вроде же назначал эти состояния для работ..
Там суть в чем - при выполнении условия 3 - все нпс гулага идут на работы (karaul1, karaul2, тд), там идёт типа тревоги. 
А 4 состоянии надо чтобы нпс стоял на посту, и стоял до тех пор пока не получит инфу о старте задания игрока, тогда он уйдет на какую нибудь другую работу

Да нет, точно же прописал..  :dash2:

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


    table.insert(sj, t)
    t = { section = "logic@esc_blokpost_karaul1",
        idle = 0,
        prior = 99, state = {3},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "escape_blockpost_zone"
    }
    table.insert(sj, t)
    
        t = { section = "logic@esc_blokpost_karaul2",
        idle = 0,
        prior = 99, state = {3},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "escape_blockpost_zone"
    }
    table.insert(sj, t)
            t = { section = "logic@esc_blokpost_karaul3",
        idle = 0,
        prior = 99, state = {3},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "escape_blockpost_zone"
    }
    table.insert(sj, t)
                t = { section = "logic@esc_blokpost_karaul4",
        idle = 0,
        prior = 99, state = {3},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "escape_blockpost_zone"
    }
    table.insert(sj, t)
                    t = { section = "logic@esc_blokpost_karaul5",
        idle = 0,
        prior = 99, state = {3},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "escape_blockpost_zone"
    }
    table.insert(sj, t)
                        t = { section = "logic@esc_blokpost_karaul6",
        idle = 0,
        prior = 99, state = {3},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "escape_blockpost_zone"
    }
    table.insert(sj, t)
                            t = { section = "logic@esc_blokpost_karaul7",
        idle = 0,
        prior = 99, state = {3},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "escape_blockpost_zone"
    }
    table.insert(sj, t)
                            t = { section = "logic@esc_blokpost_karaul8",
        idle = 0,
        prior = 99, state = {3},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "escape_blockpost_zone"
    }
    table.insert(sj, t)
    t = { section = "logic@esc_blokpost_karaul9",
        idle = 0,
        prior = 99, state = {3},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "escape_blockpost_zone"
    }
end

 

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

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

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

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

Кто нибудь знает, как отследить попадание по актору? Идея в том чтобы при попадании, героя неслабо так штормило. Как сделать такую функцию я знаю, а как сделать так чтобы при попадании она активировалась, вот вопрос...

Была идея сделать через db.actor.health < 1.0, но ведь в таком случае, при здоровье меньше чем 1.0 актора всегда будет штормить, что не есть правильным.

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

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

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

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

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

 

function delete_conserva()
local se_obj = alife():object("conserva")
if se_obj then
    alife():release(se_obj, true)
end
alife():create("bad_conserva", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end

function delete_bread()
local se_obj = alife():object("bread")
if se_obj then
    alife():release(se_obj, true)
end
alife():create("bad_bread", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end

function delete_mre()
local se_obj = alife():object("mre")
if se_obj then
    alife():release(se_obj, true)
end
alife():create("bad_mre", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end

function delete_oreshki()
local se_obj = alife():object("oreshki")
if se_obj then
    alife():release(se_obj, true)
end
alife():create("bad_oreshki", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end

function delete_olives()
local se_obj = alife():object("olives")
if se_obj then
    alife():release(se_obj, true)
end
end

function delete_kolbasa()
local se_obj = alife():object("kolbasa")
if se_obj then
    alife():release(se_obj, true)
end
alife():create("bad_kolbasa", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end

function delete_syrok()
local se_obj = alife():object("syrok")
if se_obj then
    alife():release(se_obj, true)
end
alife():create("bad_syrok", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end


function bad_food()
if db.actor.radiation > 0.2 then
HUM.delete_syrok()
HUM.delete_bread()
hum.delete_kolbasa()
end
if db.actor.radiation > 0.6 then 
HUM.delete_conserva()
HUM.delete_olives()
HUM.delete_oreshki()
end
if db.actor.radiation > 0.9 then
HUM.delete_mre()
end
end

 

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

Функции delete_вещь предназначены для удаления нормальной еды и добавления испорченной. 

И, это, может кто знает функцию на убирание (отключение)/ доставание оружия?

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

• Для удаления требуется не секция предмета, а его имя, то есть "секция + id" (номер спавна), например "medkit12531". Можно просто id.

• Удалять можно и даже нужно одной функцией, в которой имя или id будут аргументом. Обязательно надо убедиться, что этот же объект не удаляется какой-то другой штатной или новой функцией – причина вылетов может быть именно в этом.

• Спавнить тоже можно через одну функцию с аргументом в виде секции (про нули вместо координат уже писал – будь ленивым).

• Можно совместить переспавн в одну функцию: проверить секцию, получить id объекта, добавить "_bad", отспавнить новый объект, удалить старый. Примерно так:

Spoiler
(перебор инвентаря или какой-то еще способ получить ссылку на объект)
if obj then
	local sect = obj:section()

	if sect == "medkit" then
		local id = obj:id()
		alife():create(sect .. "_army", vector(), 0, 0, 0)
		alife():release( alife():object(id) )
	end
end

 

 

Оружие: db.actor:hide_weapon() и restore_weapon(). Ориентир для поиска: [xr_effects.script], самое начало. Там же отключение интерфейса и управления.

  • Спасибо 1
  • Согласен 1

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

Шпаргалка

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

Вопрос по OGSR. Коллбэк level_changer_action обрабатывается, когда ГГ в зоне ЛЧ, если правильно понимаю. Есть вариант "задержки" вывода окна с выбором перехода на другую локацию? Возможно ли организовать это скриптово, использовав, например:

Скрытый текст
level.add_call(
  function()
    log3( "condition" )
    return true
  end,
  function() log3( "action" ) end
):set_pause( 3000 )

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

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

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

Ссылка на комментарий
1 hour ago, mole venomous said:

Коллбэк level_changer_action обрабатывается, когда ГГ в зоне ЛЧ, если правильно понимаю.

Да. И каждые пять секунд, когда он остается в внутри ЛЧ, насколько я вижу.

 

1 hour ago, mole venomous said:

Есть вариант "задержки" вывода окна с выбором перехода на другую локацию?

Нет, насколько я вижу. Есть возможность получить доступ к этому окну до того, как оно будет показано и что-то с ним сделать. Я, к примеру, меняю текст этого окна, что бы там было название локации, куда ведёт этот переход.

 

1 hour ago, mole venomous said:

Возможно ли организовать это скриптово, использовав, например:

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

 

1 hour ago, mole venomous said:

Нужно для автосейвов.

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

  • Спасибо 1
Ссылка на комментарий
27 минут назад, dsh сказал:

Как это связано с автосейвами?

Я сделал сейвы типа "Покидаю уровень ...level_name", однако предположил, что сейв - нажатие кнопки "Да" - загрузка и всё это за короткое время - не есть хорошо для сейва.

 

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

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

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

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

xr_gulag.script:

 

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

level_groups = {l01_escape = 1, l02_garbage = 2, l03_agroprom = 3, l03u_agr_underground = 4,
                l04_darkvalley = 5, l04u_labx18 = 6, l05_bar = 7, l06_rostok = 8,
                l07_military = 9, l08_yantar = 10, l08u_brainlab = 11, l10_radar = 12,
                l10u_bunker = 13, l11_pripyat = 14, l12_stancia = 15, l12u_sarcofag = 16, 
                l12u_control_monolith = 17, l12_stancia_2 = 18}


Кто знает, за что это отвечает?

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

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

Накидал такое, в оригинале в принципе так же было:
 

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

function go_arena(npc, actor)  
    local point = patrol("zavros_gg_arena_walk")
    local look = patrol("zavros_gg_arena_look")
    
    db.actor:set_actor_position(point:point(0))
    local dir = look:point(0):sub(point:point(0))
    db.actor:set_actor_direction(-dir:getH())

    inv_box_2 = level_object_by_sid (5629)

    out_object = actor
    in_object  = inv_box_2
        actor:inventory_for_each(transfer_object_item)     
        
    local spawn_items = {}    

    if    has_alife_info("bar_flash_start") then
        table.insert(spawn_items, "novice_outfit")
        table.insert(spawn_items, "wpn_bm16")
        table.insert(spawn_items, "ammo_12x70_buck")
        table.insert(spawn_items, "ammo_12x70_buck")
        table.insert(spawn_items, "wpn_pm")
        table.insert(spawn_items, "ammo_9x18_pmm")
        table.insert(spawn_items, "ammo_9x18_pmm")
        table.insert(spawn_items, "ammo_9x18_pmm")
        table.insert(spawn_items, "wpn_knife")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        db.actor:activate_slot(2)
    elseif    has_alife_info("bar_boar_start") then
        table.insert(spawn_items, "novice_outfit")
        table.insert(spawn_items, "wpn_toz34")
        table.insert(spawn_items, "ammo_12x70_buck")
        table.insert(spawn_items, "ammo_12x70_buck")
        table.insert(spawn_items, "wpn_fort")
        table.insert(spawn_items, "ammo_9x18_pmm")
        table.insert(spawn_items, "ammo_9x18_pmm")
        table.insert(spawn_items, "ammo_9x18_pmm")
        table.insert(spawn_items, "wpn_knife")        
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        db.actor:activate_slot(2)
    elseif    has_alife_info("bar_zombied_start") then
        table.insert(spawn_items, "bandit_outfit")
        table.insert(spawn_items, "wpn_wincheaster1300")
        table.insert(spawn_items, "ammo_12x70_buck")
        table.insert(spawn_items, "ammo_12x70_buck")
        table.insert(spawn_items, "ammo_12x70_buck")
        table.insert(spawn_items, "wpn_beretta")
        table.insert(spawn_items, "ammo_9x19_pbp")
        table.insert(spawn_items, "ammo_9x19_pbp")
        table.insert(spawn_items, "ammo_9x19_pbp")
        table.insert(spawn_items, "wpn_knife")        
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        db.actor:activate_slot(2)
    elseif    has_alife_info("bar_psy_start") then    
        table.insert(spawn_items, "stalker_outfit")    
        table.insert(spawn_items, "wpn_ak74u")
        table.insert(spawn_items, "ammo_5.45x39_ap")
        table.insert(spawn_items, "ammo_5.45x39_ap")
        table.insert(spawn_items, "ammo_5.45x39_ap")
        table.insert(spawn_items, "wpn_knife")
        table.insert(spawn_items, "wpn_glock")
        table.insert(spawn_items, "ammo_9x19_pbp")
        table.insert(spawn_items, "ammo_9x19_pbp")
        table.insert(spawn_items, "ammo_9x19_pbp")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        db.actor:activate_slot(2)
    elseif    has_alife_info("bar_snork_start") then    
        table.insert(spawn_items, "stalker_outfit")    
        table.insert(spawn_items, "wpn_spas12")
        table.insert(spawn_items, "ammo_12x70_buck")
        table.insert(spawn_items, "ammo_12x70_buck")
        table.insert(spawn_items, "ammo_12x70_buck")
        table.insert(spawn_items, "wpn_knife")
        table.insert(spawn_items, "wpn_grach")
        table.insert(spawn_items, "ammo_9x19_pbp")
        table.insert(spawn_items, "ammo_9x19_pbp")
        table.insert(spawn_items, "ammo_9x19_pbp")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        db.actor:activate_slot(2)
    elseif    has_alife_info("bar_krovo_start") then
        table.insert(spawn_items, "specors_outfit")    
        table.insert(spawn_items, "wpn_ak74")
        table.insert(spawn_items, "ammo_5.45x39_ap")
        table.insert(spawn_items, "ammo_5.45x39_ap")
        table.insert(spawn_items, "ammo_5.45x39_ap")
        table.insert(spawn_items, "wpn_knife")
        table.insert(spawn_items, "wpn_fiveseven")
        table.insert(spawn_items, "ammo_5.7x28")
        table.insert(spawn_items, "ammo_5.7x28")
        table.insert(spawn_items, "ammo_5.7x28")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        db.actor:activate_slot(2)
    elseif    has_alife_info("bar_psevd_start") then
        table.insert(spawn_items, "specors_outfit")    
        table.insert(spawn_items, "wpn_groza")
        table.insert(spawn_items, "ammo_9x39_pab9")
        table.insert(spawn_items, "ammo_9x39_pab9")
        table.insert(spawn_items, "ammo_9x39_pab9")
        table.insert(spawn_items, "ammo_9x39_pab9")
        table.insert(spawn_items, "ammo_9x39_pab9")
        table.insert(spawn_items, "wpn_knife")
        table.insert(spawn_items, "wpn_colt1911")
        table.insert(spawn_items, "ammo_11.43x23_hydro")
        table.insert(spawn_items, "ammo_11.43x23_hydro")
        table.insert(spawn_items, "ammo_11.43x23_hydro")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "medkit")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        table.insert(spawn_items, "bandage")
        db.actor:activate_slot(2)
    end
    
    local k,v = 0,0
    
    for k,v in pairs(spawn_items) do
        alife():create(v,    
                        db.actor:position(),
                        db.actor:level_vertex_id(),    
                        db.actor:game_vertex_id(), 
                        db.actor:id())
    end    
    
end

Что должно быть?
ГГ перемещается, его вещи переносятся в ящик, у него в инвентаре появляется лут.

Что имеем?
ГГ перемещается, его вещи НЕ переносятся в ящик, у него в инвентаре появляется лут, но постоянно один и тот же (самый первый из списка)

Вопрос - как править?

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

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

Ссылка на комментарий
1 hour ago, dsh said:

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

Возможно ли такое повторить на чистом движке и как именно?

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

Шпаргалка

Ссылка на комментарий
4 hours ago, mole venomous said:

не есть хорошо для сейва.

Почему?

@Купер ну-у-у.., мягко говоря, все не так однозначно. Начнем с того, что нет никакой проблемы, что кто-там ходит через Бар. У меня в моде почти все, кроме Свободовцев, ходят через Бар. И никому это не мешает, а даже наоборот, наполняет эту локацию жизнью и событиями.

 

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

 

А группы - это по большей части костыль. Вот вспомним X-18, к примеру. Там псевдогигант есть и гулаг для него, насколько я помню. Так вот, без выноса X-18 в отдельную группу, туда будут приходить новые псевдогиганты, по мере убывания предыдущих. Вот и сделали отдельную группу, что бы никто в X-18 прийти не мог. Но это костыль. А не костыль, это поместить там псевдогиганта с персональной логикой, без всякого смарта. Нет смарта - никто никуда не пойдет - нет проблем.

 

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

3 hours ago, Norman Eisenherz said:

Возможно ли такое повторить на чистом движке и как именно?

Рассказываю один раз. Можно даже в какой-нибудь FAQ добавить. Берешь исходники оригинального движка. Поверх копируешь исходники OGSR, соглашаясь на замену. Собираешь. Вуаля. Не благодари.

  • Полезно 3
Ссылка на комментарий

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

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

Пытаюсь сделать ограничение на удаление каких-либо секций на арене.
 

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

local obj = {
    ["stalker"]     = true,  
    ["destroyable_object"]    = true,
    ["object"]    = true,
}
 

function purge_arena_items(name)
    local arena_zone = arena_zones[name]
    if (obj:section()~="stalker" or obj:section()~="object" or obj:section()~="destroyable_object") and arena_zone then
        arena_zone:purge_items()
    end
end


Вылетает:
 

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

[error]Expression    : FATAL ERROR
[error]Function      : CScriptEngine::lua_pcall_failed
[error]File          : D:\a\OGSR-Engine\OGSR-Engine\ogsr_engine\COMMON_AI\script_engine.cpp
[error]Line          : 46
[error]Description   : [CScriptEngine::lua_pcall_failed]: .... shadow of chernobymod\gamedata\scripts\xr_zones.script:103: attempt to call method 'section' (a nil value)


В таком случае - как написать правильно функцию?

 

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

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

function purge_arena_items(name)
    local arena_zone = arena_zones[name]
    if (obj:section()~="stalker" or obj:section()~="object" or obj:section()~="destroyable_object") and arena_zone then
        arena_zone:purge_items()
    end
end

if obj[name] ~= true and arena_zone then

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

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

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

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

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

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

Войти

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

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

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