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

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

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

А если всё таки от позиции ГГ, может так?

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

   local lv,gv
    local a = vector()    
    local radius = math.random(0,3)
    a = db.actor:position()
    a.x = a.x + radius
    a.z = a.z + radius
    a.y = a.y + math.random(0,1)
    lv = db.actor:level_vertex_id()
    gv = db.actor:game_vertex_id()
    local h = hit()
    h.impulse = 100
    h.draftsman = db.actor
    h.direction = vector():set(0,0,0)
    h:bone("bip01_spine")
    h.power = 0.9 - (radius/10)
    h.type = hit.explosion 
    db.actor:hit(h)
    sound_object("weapons\\t_f1_explosion"):play_at_pos(db.actor,vector():set(0,0,1),0,sound_object.s2d)
    particles_object("explosions\\explosion_01"):play_at_pos(vector():set(a.x,a.y,a.z),lv,gv,65535)

 

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

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

есть простой метод спавна рестрикторов

Называется all.spawn, слышал о таком?

GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом.

JNCR — Coming Soon...

i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2

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

@HellRatz, Ну если спавнить в произвольном месте в произвольное время - спавна не хватит. Я имел в виду именно скриптовый спавн. Пусть с нет-пакетом, но сам рестриктор без логики, ну или вообще произвольный объект с невидимым визуалом. Или гранату с невидимым визуалом, тогда и париться со звуком, партиклом и хитом не надо. Нужно просто заспавнить ее в метре от ГГ и подорвать.

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

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

Нужно просто заспавнить ее в метре от ГГ и подорвать.

Я об этом и говорил выше, как по мне - наиболее стабильный и простой вариант.

 

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

Изменено пользователем AndreySol
  • Согласен 1
Ссылка на комментарий

@AndrewMor, в произвольном -- да. Но человек точно не написал ситуацию, я предположил, что взрыв должен быть по квесту в определенном месте. Если так, то это делается очень просто через рестриктор поставленный в СДК. Зависит от задачи, так или иначе.

  • Согласен 1

GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом.

JNCR — Coming Soon...

i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2

Ссылка на комментарий
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

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

@Houdini_one, а как показать? Я с радостью - очень хочется понять проблему. Файл приложить или еще как-то

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

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

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

Я нуб! Подскажите пж как правильно на поднятие любых тип патронов

function on_item_take(obj)
if obj:section() == "ammo_section" then
send_tip2(game.translate_string("name"))
end
end

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

@Libery

Если я правильно понял, то надо отслеживать любые патроны?

Тогда так:

if obj:clsid() == clsid.wpn_ammo then

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

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

Поставил смарт, в нем бандоса, указал в кастом дата принадлежность к этому СТ. Пока нет логики в файлах 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

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

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

@AndreySol,  Не получается пробую так вылетает

function on_item_take(obj)
if obj:clsid() == clsid.wpn_ammo then
new_test.send_tip2(game.translate_string(system_ini():r_string(sect,"inv_name_short"))
end
end

Ссылка на комментарий
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

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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