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

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


Halford

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

Здравствуйте.У меня есть вопрос:

Можно ли в игре по сюжету изменить иконку ГГ и визуал ГГ.Тоесть сначала одна иконка и визуал ГГ в диалогах, а после какого то события другая иконка и визуал.И как это реализовать??

 

 

Добавлено через 18 мин.:

Сталкер версии 1.0004

Можно поверх иконки "выведенной движком" выводить свою скриптово. По каким вздумается условиям, хотите такую же, хотите - другую.

В помощь - любой мод где производятся скриптовые манипуляции с текстурами на худе.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

CON

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

 

SWoBoDoWeTH

Можно. Поменять модель) Или ищи готовую которую уже кто-то сделал, или изучай 3д-моделирование и делай сам.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Plotnick

И что, лог-файл стерильно чист? странные дела, однако...

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

С новыми изменениями, в "Скриптовании" такой вопрос задавать опасаюсь... задам тут.

 

В многих модах есть такая штука - Элитный детектор аномалий, который ставит отметки аномалий на миникарте. Вопрос вот в чем: эти отметки ставятся движком, или есть скриптовая функция на их добавление/удаление? И если скриптовая то где искать...

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
Всем добрый вечер. Подскажите пожалуйста в сталкере ТЧ ( я играю с модом ) вернуть дальномер или как он правильно называется, когда показывает цифры сколько осталось до цели? За раннее благодарен.

 

Зайди в опции главного меню игры и поставь в <Игра> -> "Дистанция до цели" --/Artos

Ответ не полный, да и не совсем корректный)

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Вобщем, созрел вопрос, в той области с которой я раньше дела не имел, а пришлось.

С чем работаю: ТЧ 1,0004 + Пак локаций из "Сообщества мапперов", последняя из выложенных в их шапке версий, на чистую игру (т.е. не АМК)

В чем состоит цель: сделать на предбаннике стоянку новой группировки, Военных нато.

Группировку сделал, прописал как полагается, для теста зачислил в нее Волка - все нормально, Волк стал натовцем и пошел гулять из деревни т.к. в деревне работы для него такого нету.

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

 

[11625]
; cse_abstract properties
section_name = smart_terrain
name = predb_mnato_smart_terrain
position = -550.030944824219,14.6607055664063,286.763793945313
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 3881
distance = 9.09999942779541
level_vertex_id = 105016
custom_data = <<END
[smart_terrain]
type     = predb_mnato_smart_terrain
capacity = 8
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 20.5595703125

; cse_alife_space_restrictor properties
restrictor_type = 3

; se_smart_terrain properties


[11626]
; cse_abstract properties
section_name = respawn
name = predb_respawn_military_nato_post
position = -550.030944824219,14.6607055664063,286.763793945313
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 3881
distance = 10
level_vertex_id = 105016
object_flags = 0xffffff3e
custom_data = <<END
[respawn]
respawn_section = prb_milnato_respawn_1
max_count = 8
min_count = 4
max_spawn = 2
idle_spawn = medium
conditions = 100
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 1

; cse_alife_space_restrictor properties
restrictor_type = 0

; se_respawn properties

 

 

 

[predb_mnato_smart_terrain_kamp]
points = p0
p0:name = name00
p0:position = -559.256103515625,14.6880102157593,282.203582763672
p0:game_vertex_id = 3881
p0:level_vertex_id = 92380


[predb_mnato_smart_terrain_walker_1_walk]
points = p0,p1,p2
p0:name = name00
p0:position = -557.199768066406,14.3911476135254,284.340942382813
p0:game_vertex_id = 3881
p0:level_vertex_id = 94401
p0:links = p1(1)

p1:name = name01
p1:position = -538.838684082031,17.3168258666992,290.285552978516
p1:game_vertex_id = 3881
p1:level_vertex_id = 121121
p1:links = p2(1)

p2:name = name02
p2:position = -552.039306640625,14.2716541290283,307.063873291016
p2:game_vertex_id = 3881
p2:level_vertex_id = 101861
p2:links = p0(1)


[predb_mnato_smart_terrain_walker_2_walk]
points = p0,p1,p2
p0:name = name00
p0:position = -566.4130859375,14.8234539031982,262.069152832031
p0:game_vertex_id = 3880
p0:level_vertex_id = 80983
p0:links = p1(1)

p1:name = name01
p1:position = -554.135864257813,15.1366109848022,262.086944580078
p1:game_vertex_id = 3880
p1:level_vertex_id = 98577
p1:links = p2(1)

p2:name = name02
p2:position = -553.250915527344,14.7384147644043,272.294494628906
p2:game_vertex_id = 3881
p2:level_vertex_id = 100733
p2:links = p0(1)

 

 

    if type == "predb_mnato_smart_terrain" then

                    for i = 1, 6 do

                            t = { section = "logic@predb_mnato_smart_terrain_kamp",
                    idle = 0,
                    prior = 8-i, state = {0,1},
                    in_rest = "", out_rest = ""
                }
                table.insert(sj, t)
            end

                        for i = 1, 2 do

                    t = { section = "logic@predb_mnato_smart_terrain_walker_"..i,
                        idle = 0,
                        prior = 9-i, state = {0,1},
                        in_rest = "", out_rest = ""
                    }
                    table.insert(sj, t)
                        end        

    end

 

 

    if type == "predb_mnato_smart_terrain" then
        return function (gulag)
            return 0
        end
    end

 

 

--------------------------------------------------------------------------
-- Dynamic ltx
--------------------------------------------------------------------------
function load_ltx(gname, type)
if type == "predb_mnato_smart_terrain" then
    ltx = "[logic@predb_mnato_smart_terrain_kamp]\n"..
        "active = kamp@predb_mnato_smart_terrain\n"..

            "[kamp@predb_mnato_smart_terrain]\n"..
            "center_point = kamp\n"..




        "[logic@predb_mnato_smart_terrain_walker_1]\n"..
            "active = walker_1@predb_mnato_smart_terrain\n"..

        "[walker@predb_mnato_smart_terrain_1]\n"..
        "path_walk = walk_1\n"..



                "[logic@predb_mnato_smart_terrain_walker_2]\n"..
            "active = walker_2@predb_mnato_smart_terrain\n"..

        "[walker@predb_mnato_smart_terrain_2]\n"..
        "path_walk = walk_2\n"



    return ltx
    end


    return nil
end

 

    if gulag_type == "predb_mnato_smart_terrain" then
        return npc_community == "military_nato"
    end

 

 

 

Где тут искать ошибку - не могу взять в толк. Подскажите кто разбирается в данном вопросе.

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

Заранее спасибо.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Вынес гулаг в отдельный файл

local t = {}
local ltx = ""

function load_job(sj, gname, type, squad, groups)
    if type == "predb_mnato_smart_terrain" then

                    for i = 1, 6 do

                            t = { section = "logic@predb_mnato_smart_terrain_kamp",
                    idle = 0,
                    prior = 8-i, state = {0,1},
                    in_rest = "", out_rest = ""
                }
                table.insert(sj, t)
            end

                        for i = 1, 2 do

                    t = { section = "logic@predb_mnato_smart_terrain_walker_"..i,
                        idle = 0,
                        prior = 9-i, state = {0,1},
                        in_rest = "", out_rest = ""
                    }
                    table.insert(sj, t)
                        end        

    end
end

function load_states(gname, type)
return 0
end

--'------------------------------------------------------------------------
--' Dynamic ltx
--'------------------------------------------------------------------------
function load_ltx(gname, type)


if type == "predb_mnato_smart_terrain" then
    local ltx = "[logic@predb_mnato_smart_terrain_kamp]\n"..
        "active = kamp@predb_mnato_smart_terrain\n"..

            "[kamp@predb_mnato_smart_terrain]\n"..
            "center_point = kamp\n"..




        "[logic@predb_mnato_smart_terrain_walker_1]\n"..
            "active = walker_1@predb_mnato_smart_terrain\n"..

        "[walker@predb_mnato_smart_terrain_1]\n"..
        "path_walk = walk_1\n"..



                "[logic@predb_mnato_smart_terrain_walker_2]\n"..
            "active = walker_2@predb_mnato_smart_terrain\n"..

        "[walker@predb_mnato_smart_terrain_2]\n"..
        "path_walk = walk_2\n"



    return ltx
    end


    return nil
end

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)
    if gulag_type == "predb_mnato_smart_terrain" then
        return npc_community == "military_nato"
    end
    news_manager.send_tip(db.actor, "check_stalker", nil, nil, 12000) 
end

function checkMonster(npc_community, gulag_type)
return false
end

 

 

В gulag_escape.script соответственно все изменения закомментил, и вот

 

level_gulags = {gulag_general, gulag_escape, gulag_garbage, gulag_agroprom, gulag_agroprom_underground, gulag_dark_valley, gulag_labx18, gulag_bar,
                gulag_military, gulag_radar, gulag_radar_u, gulag_yantar, gulag_pripyat, gulag_kishka, gulag_sarcofag,
                gulag_deadcity, gulag_predbannik}

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, predbannik = 19}

local gulag_tasks_file_name  = "misc\\gulag_tasks.ltx"
local gulag_tasks_ltx        = ini_file( gulag_tasks_file_name )

local job_position_threshold = 120 --'50  -- расстояние до места работы при котором персонаж в онлайне считается достигшим места работы
local job_idle_after_death   = 600 -- в течении такого периода времени после смерти персонажа его работа будет недоступна

idle_nil  = nil
idle_once = -1
idle_none = -2

local path_fields = { "path_walk", "path_main", "path_home", "center_point" }

-----------------------------------------------------------------------
class "gulag"

-- конструктор
function gulag:__init(smrttrn, type, squad, groups, npc_info, capacity)
    self.smrttrn  = smrttrn
    self.name     = smrttrn:name()
    self.type     = type
    self.squad    = squad
    self.groups   = groups or {}
    self.npc_info = npc_info
    self.capacity = capacity     -- общая ёмкость гулага
--    self.capacity_non_exclusive  -  ёмкость гулага для неэксклюзивных персонажей
    
    self.population = 0                    -- Население гулага
    self.population_comed = 0            -- Уже пришедшее население гулага
    self.population_non_exclusive = 0    -- Неэксклюзивное население



    self.Object                 = {} -- объекты по id. Значения: nil-нету такого, true-есть в офлайне, game_object-есть в онлайн
    self.Object_begin_job       = {} -- по id. true/nil достиг ли объект места своей работы
    self.Object_didnt_begin_job = {} -- по id. начинал ли объект хотя бы раз любую работу с момента добавления под смарт
    self.ObjectJob              = {} -- по id. номер работы для каждого персонажа
    self.JobLoaded              = {} -- для каждой работы загруженные из save данные
    self.Job_avail_in_state     = nil

    self.state      = 0
    self.stateBegin = nil

    self.casualities = 0
end

-- загрузка работ
function gulag:load_jobs()
    self.Job                  = {} -- работы
    self.Job_avail_in_state_0 = {}

    gulag_tasks.loadJob( self.Job, self.name, self.type, self.squad, self.groups, self )
    self:init_ltx( self.name, self.type )

    table.sort( self.Job, function(a,b) return a.prior > b.prior end )

    self:prepare_jobs_for_new_state()

    local capacity = 0

    for i, job in ipairs( self.Job ) do
        if self:job_exists_in_state_0( job ) then
            table.insert( self.Job_avail_in_state_0, job )
            capacity = capacity + 1
        end

        if type( job.online ) == "string" then
            job.online_condlist = job.online
            job.online          = xr_logic.parse_condlist( self.smrttrn, "gulag:setup_job_online", "job_online", job.online_condlist )
        end
    end

    self.capacity               = math.min( capacity, self.capacity )
    self.capacity_non_exclusive = self.capacity

--    printf("LOAD JOBS %s", tostring(self.name))
    -- DEBUG
--    self:validate_jobs()
end

-- проверки правильности набора работ.
-- а) в любом состоянии кол-во 100-но доступных работ должно быть >= ёмкости смарта
function gulag:validate_jobs()
    local jobs_avail_in_states = {}

    -- а)
    for i, job in ipairs( self.Job ) do
        if job.predicate == nil and
           job.idle == 0 and
           job.timeout == nil and
           job.fill_idle == nil
        then
            for j, state in ipairs( job.state ) do
                jobs_avail_in_states[state] = (jobs_avail_in_states[state] or 0) + 1
            end
        end
    end

    for i, v in ipairs( jobs_avail_in_states ) do
        if v < self.capacity then
            print_table( self.Job )
            abort( "[smart_terrain %s] type=%s state=%d capacity=%d: too few absolutely available jobs", self.name, self.type, i, self.capacity )
        end
    end
end

-- подготовка гулага к работе
function gulag:initialize()
    self.ObjectJobPathName = {} --' по id. имя патрульного пути места работы персонажа
    self.restrictors       = {} --' по id. назначенные гулагом рестрикторы для каждого персонажа

    self:prepare_jobs()

    self.calculateStates = gulag_tasks.loadStates( self.name, self.type )

    local ini = self.smrttrn:spawn_ini()
    local sect = "smart_terrain"
    if not ini:section_exist( sect ) then
        sect = "gulag1"
    end

    self.state_switch_0 = xr_logic.parse_condlist( self.smrttrn, "gulag1", "switch_0", utils.cfg_get_string(ini, sect, "switch_0", self.smrttrn, false, "", "") )
    self.state_switch_1 = xr_logic.parse_condlist( self.smrttrn, "gulag1", "switch_1", utils.cfg_get_string(ini, sect, "switch_1", self.smrttrn, false, "", "") )

    self.JobLoaded = nil
end

-- подготовить работы.
-- подготовить данные о местоположении каждой работы; о объекте, который на ней занят.
-- подсчитать ёмкость = min(кол-во работ в 0 состоянии, поле capacity в custom data)
function gulag:prepare_jobs()
    local ptrl, path_name
    local job_loaded
    local empty_table = {}

    for i, job in ipairs( self.Job ) do
        job.num              = i

        path_name            = self:get_job_path_name( job )
        ptrl                 = patrol( path_name )

        job.path_name        = path_name
        job.game_vertex_id   = ptrl:game_vertex_id( 0 )
        job.level_id         = game_graph():vertex(job.game_vertex_id):level_id()
        job.position         = ptrl:point( 0 )

        job_loaded           = self.JobLoaded[i] or empty_table

        job.begin            = job_loaded.begin
        job.fill_idle        = job_loaded.fill_idle
        job.idle_after_death_end = job_loaded.idle_after_death_end
    end

    local job

    for obj_id, jobN in pairs( self.ObjectJob ) do
        job        = self.Job[jobN]
        job.object = obj_id
        self.ObjectJobPathName[obj_id] = job.path_name
    end
end

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

 

В итоге этих действий - при начале новой игры (точнее при попытке) вылет

FATAL ERROR

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: error in error handling


stack trace:

 

Поставь вывод в лог строки при создании этим респавнером неписей
А кстати как это сделать? Разве, используя данные респавнера, сам спавн производит скрипт? Я думал что раз в алл-спавне прописано, то этим движок занимается...

 

Пара уточнений...

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

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

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

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

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

 

 

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Вобщем такая беда:

Использую - чистая ТЧ 1.0004 + пак локаций из шапки сообщества мапперов, с патчем на расположение локаций на карте.

Играя-тестируя, замечаю такую вещь, и чем дольше длится игра, тем чаще

При переходе на другую локацию (не обязательно на новую, и на совершенно старых переходах тоже) - происходит безлоговый вылет. Но при этом user_avtosave создается, и запустив игру снова, его можно грузить и играть дальше.

А также если гг погиб, при загрузке через "Последнее сохранение" тоже происходит вылет, но на этот раз не просто без лога - лог-файл вообще остается пуст. И при этом так же, можно запустить игру снова, загрузить то самое сохранение которое было последним, и все пойдет как по маслу.

Может кто-то сталкивался, подскажите как эту проблему решить.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Вопрос такой:

у некого НПС имеем actor_dialog, генерируемый скриптом с использованием тега init_func.

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

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

Речь идет о ТЧ.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

P.S.E.V.D.O.G.I.G.A.N.T. Ну вроде как это говорит о том что игра не нашла бампы для соответствующих стволов, и дорисовала их самостоятельно.

Причиной может быть - забыли дописать в textures.ltx, или нерадивость моделлера который эти стволы делал.

Последствия - будет ствол (возможно), выглядеть чуть не так как задумывалось создателем, но различия только косметические.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
Верес, Вурдалак в большинстве случаев нельзя разнообразные скрипты совмещать, просто вставляя файлы и ни о чем не думая. Для устранения возникших у вас проблем - надо открывать коды скриптов, вникать и думать. Пока вопросы ваши - для Кашпировских.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

AndreySol

1. В way-файлах разобранного all.spawn параметр "name" для точек пути - что он означает ? И почему у многих точек одинаковые "name", к примеру wp00, name00 и т.п.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

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

плащ

обычный код
--закомментированный код

вот так.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

AutoGnom, Тебе надо избавиться от использования файла ui_custom_msgs.xml.

Для вывода на экран лучше пользоваться функцией

get_hud():AddDialogToRender(статик)

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Scarabay

Тут надо будет делать две вещи.

1. На апдейте проверять дистанцию между НПС и тем кого он ждет. (Ведь если "дождался" - значит цель достаточно близко?)

2. Сложнее... настраиваем нашего НПС против цели, если изначально не враждебен, а в хит- и деад-колбек цели ставим переключение логики нашего НПС, чтобы прекратил стрелять. Как то так.

Но недостатков хватает... схема не сработает если дистанция до цели сократилась, а НПС не видит цель по каким то причинам

Схема не сработает если НПС не попал в цель

 

Да еще в колбеках цели надо будет проверять виновника - кто стрелял. А то ведь может и кто-то другой в это время по цели стрелять.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Столкнулся с такой проблемой.

Создал гулаг на предбаннике. тип - general_lager

в нем несколько патрульных путей patrol и несколько "стоячих" позиций.

Стоячих сначала назвал guard, но столкнулся с вылетом. Переименовал в walker - вылет остался.

 

Вот собственно вылет:

ВНИМАНИЕ! Ошибка! Информация по ошибке в строках ниже!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ERROR! Reason: object 'random_military_nato_veteran27649': path_walk 'predbannik_nato1_gulag_walker_2_walk', index <NOT_arg!>: cannot find corresponding point(s) on path_look '0'
stack traceback:
    ...shing\s.t.a.l.k.e.r\gamedata\scripts\move_mgr.script:599: in function <...shing\s.t.a.l.k.e.r\gamedata\scripts\move_mgr.script:461>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FATAL ERROR

 

Как на guard, так и на walker происходил одинаково - нпс идет на точку стояния, и на подходе, где то в полуметре от нее вылетает.

В принципе понятно что проблема в путях, но что в них не так?

Вот сами пути:

 

[predbannik_nato1_gulag_walker_1_walk]
points = p0
p0:name = name00
p0:position = -455.21432495117,2.1224491596222,-113.96678161621
p0:flags = 0x400
p0:game_vertex_id = 3903
p0:level_vertex_id = 245656

[predbannik_nato1_gulag_walker_1_look]
points = p0
p0:name = name00
p0:position = -454.49639892578,2.2049999237061,-110.40372467041
p0:game_vertex_id = 3903
p0:level_vertex_id = 246671

[predbannik_nato1_gulag_walker_2_walk]
points = p0
p0:name = name00
p0:position = -466.14318847656,-0.8776068687439,-182.89027404785
p0:flags = 0x400
p0:level_vertex_id = 229449
p0:game_vertex_id = 3905

[predbannik_nato1_gulag_walker_2_look]
points = p0
p0:name = name00
p0:position = -448.76034545898,1.8457752466202,-114.0114440918
p0:game_vertex_id = 3901
p0:level_vertex_id = 255297

[predbannik_nato1_gulag_walker_3_walk]
points = p0
p0:name = name00
p0:position = -443.42132568359,1.8096746206284,-115.85597229004
p0:flags = 0x400
p0:game_vertex_id = 3903
p0:level_vertex_id = 264114

[predbannik_nato1_gulag_walker_3_look]
points = p0
p0:name = name00
p0:position = -442.78961181641,1.8587421178818,-110.92756652832
p0:game_vertex_id = 3903
p0:level_vertex_id = 264122

[predbannik_nato1_gulag_walker_4_walk]
points = p0
p0:name = name00
p0:position = -442.12307739258,1.7648767232895,-128.28350830078
p0:flags = 0x400
p0:game_vertex_id = 3901
p0:level_vertex_id = 265204

[predbannik_nato1_gulag_walker_4_look]
points = p0
p0:name = name00
p0:position = -449.15179443359,1.6720188856125,-127.63687133789
p0:game_vertex_id = 3901
p0:level_vertex_id = 254180

[predbannik_nato1_gulag_patrol_1_walk]
points = p0,p1,p2,p3
p0:name = name00
p0:position = -452.33880615234,-0.91330599784851,-164.05223083496
p0:flags = 0x400
p0:level_vertex_id = 249711
p0:game_vertex_id = 3905
p0:links = p1(1)

p1:name = name01
p1:position = -449.31735229492,1.4491782188416,-133.51445007324
p1:flags = 0x400
p1:level_vertex_id = 254171
p1:game_vertex_id = 3901
p1:links = p2(1)

p2:name = name02
p2:position = -475.05606079102,1.5122009515762,-129.56201171875
p2:flags = 0x400
p2:level_vertex_id = 216251
p2:game_vertex_id = 3901
p2:links = p3(1)

p3:name = name03
p3:position = -475.51699829102,-0.77906394004822,-164.97314453125
p3:flags = 0x400
p3:level_vertex_id = 216200
p3:game_vertex_id = 3905
p3:links = p0(1)

 

Причем если неписи идут по патрульным путям patrol то все нормально. Но как только один из ново-заспавненных подходит к стоячей точке - вылет. В чем причина?

Версия игры - ТЧ 1.0004

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Starter

local all_pstor_keeper = {
    ["l01_escape"] = {
. . .
    },
    ["predbannik"] = {
        [1] = {
            section_key = "hanging_lamp",
            pos_x = 91.98,
            pos_y = 3.53,
            pos_z = -64.79,
            id = nil
        },
. . .
}}

function find_keeper(position, key_find)
for b = 0, 65534 do
    local obj = level.object_by_id(b)
    if obj and (db.storage[b] ~= nil) then
    local sec = obj:section()
    if sec then
    if string.find(sec, key_find) then
        local v = obj:position()
        if v:distance_to(position) < 1 then
            return b
        end
    end
    end
    end
end
return nil
--- возвращает ID хранителя
end

 

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

Но ведь нередки и случаи (особенно с актором) - когда аномалия сработала, но хита никому не нанесла.

К примеру карусель/мясорубку можно активировать и вырваться до завершения "закрутки" - аномалия сработает как полагается но никому вреда не нанесет.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Поделиться этим сообщением


Ссылка на сообщение

AMK-Team.ru

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