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

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


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

16.09.2020 в 19:17, Houdini_one сказал:

файлы gulag_xxx.scripts регистрируются в xr_gulag.scripts в level_gulags

Зарегистрировал - получил вылет с руганью на g.script. Посмотрел повнимательней, увидел ниже ссылку на gulag.tasks. Добавил туда инклюд - получил вылет без лога.

Знаю, что безлоговые вылеты обычно из-за ошибок в путях нпс или диалогах. Диалоги отпадают - я их не трогал. Пути проверил - там всего 3 человека для теста.

В связи с чем вопрос: может я еще где-то что-то не прописал?

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

@Muzafir, показал бы, как зарегистрировал.

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

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

Доброго времени суток, можно ли с помощью какого либо скрипта более подробней узнать причину вылета. К примеру на чистом ТЧ стал ловить вылет:

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

* loading script sr_danger.script
* loading script mob_camp.script
* loading script mob_state_mgr.script
[16-9] get_xml_name for[ui_mm_main.xml] returns [ui_mm_main.xml]
[16-9] get_xml_name for[scroll_bar.xml] returns [scroll_bar.xml]
stack trace:

0023:00464970 XR_3DA.exe, CKinematicsAnimated::LL_GetMotionDef()
0023:044617D3 xrGame.dll
0023:0445B4DE xrGame.dll
0023:1001A0F6 xrCore.dll, CInifile::r_string()
0023:0445B3F5 xrGame.dll
0023:00436144 XR_3DA.exe, CObjectList::Create()
0023:0450DD52 xrGame.dll
0023:76ED53BE ntdll.dll, RtlAllocateHeap()
0023:76ED50E8 ntdll.dll, RtlDosSearchPath_Ustr()
0023:66757F65 MSVCR80.dll, mbsnbcpy_s_l()
0023:68096C10 atiumdag.dll, XdxInitXopAdapterServices()
0023:6806755F atiumdag.dll, OpenAdapter()
0023:68068DE4 atiumdag.dll, OpenAdapter()

Я так понял причина в какой-то модели, но все модели стандартные родные.

NL-Vincenz.gif

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

Я в ТЧ в х16 поменял всех зомби на военных, сменил им пути до звуков в xml, но военные иногда издают звуки характерные зомби, в чем может быть причина?

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

Попробовал снова переделать гулаг. 

Поставил смарт, в нем бандоса, указал в кастом дата принадлежность к этому СТ. Пока нет логики в файлах gulag.ltx и gulag.script, игра грузится нормально, нпс гуляет поблизости.

Как только добавляю логику, спустя сек 15-20  происходит вылет:

 Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: C stack overflow 

 

Прочитал, что переполнение вызывается какой-либо функцией, которая вызывается бесконечное кол-во раз. Получается винить можно только мой gulag.script. Гляньте, кто разбирается, что там может так падлить:

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

local t = {}

function load_job(sj, gname, type, squad, groups)

 

--' Simeiz gsk lager
    if type == "simeiz_gsk_lager" then

        t = { section = "logic@simeiz_gsk_lager_kamp",
            idle = 0,
            prior = 6, state = {0,1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)
    end


end

 

function load_states(gname, type)

    if type == "simeiz_gsk_lager" then
        return function(gulag)
            local actor = db.actor
            if not actor then
                return gulag.state
            end
            if level.get_time_hours() >= 5 and level.get_time_hours() <= 22 then
                return 0  -- день
            else
                return 1  -- ночь
            end
        end
    end


end

--------------------------------------------------------------------------
-- Dynamic ltx
--------------------------------------------------------------------------
function load_ltx(gname, type)
    return nil
end

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)

    if gulag_type == "simeiz_gsk_lager" then
        return npc_community == "bandit"
    end

        
    return false
end

 

Кажется нашел: лишний end в функции function load_states. Так?

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

Вопрос для расширения кругозора, так сказать... Имеется НПС, который спавнится через all.spawn по выдаче инфопоршня. В ходе тестов он мне понадобился и я заспавнил его скриптом,  не вызывая нужный поршень. Всё нормально, НПС появился. В стартовом диалоге последняя фраза повлекла за собой выдачу инфопоршня на доступ к циклическим заданиям и ... СМС об ошибке из _g.script (код из ОПы, вроде):

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

function abort(fmt, ...)
    local reason = (...==nil and fmt) or string.format(fmt, ...)
    if db and db.actor then
        local msg = "!!!АХТУНГ!!!".."\\n%c[255,255,0,0]"..reason
        db.actor:give_game_news(msg, "ui\\ui_iconsTotal", Frect():set(913,752,83,47), 0, 80000) 
    end
    get_console():execute("load ~~~ "..reason)
    get_console():execute("flush")    
end

А при попытке вновь заговорить (должен появиться диалог на первый из циклических квестов) вылет с ссылкой на строку "for k,v in pairs(self.task_id_by_parent[parent]) do" в функции CRandomTask:parent_can_task(actor, npc, p1, p2, p3) из task_manager.script.

Там вроде всё нормально, но на всякий...

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

function CRandomTask:parent_can_task(actor, npc, p1, p2, p3)
    local parent = self:get_parent(npc)
    local avail = false
    self:task_avail(actor, npc, nil, nil, nil, "reset")
    for k,v in pairs(self.task_id_by_parent[parent]) do  
        if self:task_avail(actor, npc, nil, nil, self.task_info[v].init_phrase_id, true) then
            avail = true
        end
    end
    return avail
end

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

Собственно вопрос, неужели вылеты были из-за попытки завести диалог за цикл. квест в то время, когда НПС уже заспаунен до выдачи нужного инфо?

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

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

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

@Muzafir, если не ошибаюсь, то нужно ещё обязательно поставить проверку check_monster.
Попробуй такое:


 

local t = {}
function load_job(sj, gname, type, squad, groups)

--' Simeiz gsk lager
    if type == "simeiz_gsk_lager" then
        t = { section = "logic@simeiz_gsk_lager_kamp",
            idle = 0,
            prior = 6, state = {0,1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)
    end
end

 

function load_states(gname, type)
        if type == "simeiz_gsk_lager" then
        return function(gulag)
            if db.actor ~= nil then
                if ( level.get_time_hours() >= 5 and level.get_time_hours() <= 22 ) then
                    return 0  -- день
                else
                    return 1  -- ночь
                end
            else
                return gulag.state
            end
        end
    end
end

--------------------------------------------------------------------------
-- Dynamic ltx
--------------------------------------------------------------------------
function load_ltx(gname, type)
    return nil
end

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)
    if gulag_type == "simeiz_gsk_lager" then
        return npc_community == "bandit"
    end
    return false
end

function checkMonster(npc_community, gulag_type)
    return false
end

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

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

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

и привязать её в скриптах к гулагу?

Пардон,это у тебя есть...

  • Спасибо 1

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

Ссылка на комментарий
7 минут назад, Libery сказал:

new_test.send_tip2(game.translate_string(system_ini():r_string(sect,"inv_name_short"))

в самом конце этого кода явно не хватает круглой скобки )

  • Согласен 1

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

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

не помогает

вот так тоже не работает

function on_item_take(obj)
if obj:clsid() == clsid.wpn_ammo then
local name = tostring(system_ini():r_string(sect,"inv_name_short"))
local text = "\\n%c[white]"..game.translate_string(tostring(name))
db.actor:give_game_news(text,"ui\\ui_iconstotal_new",Frect():set(664,329,83,47),50,5000)
end
end

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

function on_item_take(obj)
     if obj:clsid() == clsid.wpn_ammo then
     local name = tostring(system_ini():r_string(sect, "inv_name_short"))

     .....

Выделенный параметр ф-ции - необъявленная выше и не инициализированная правильным значением переменная. Исправить можно двумя способами:

 local sect = obj:section() - если эта переменная будет нужна далее по коду

 local name = tostring(system_ini():r_string(obj:section(),"inv_name_short")) - чтоб не плодить не нужные переменные

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

Expression    : fatal error
Function      : CInifile::r_string
File          : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp
Line          : 352
Description   : <no expression>
Arguments     : Can't find variable MaxHealthValue in [m_trader]

 

Я новичек на сайте, может не туда и пишу. Подскажите где найти значение этой ошибки и как ее исправить? Пытаюсь модернизировать Stalker ТЧ v1.4. Уже много поправил себе, но вот с этой ошибкой стою в тупике.

Добавлено  HellRatz,

Перемещено.

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

@LAKIRO, Не найдена переменная с именем MaxHealthValue в конфиге m_trader, соответственно нужно ее прописать.

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

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

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

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

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

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

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

Войти

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

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

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