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

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

47 минут назад, Капрал Хикс сказал:

человек мою сборку уже удалил, пройдя

Надо же, какая неожиданность.

Забей на этот вылет. От слова вообще.

Я почитал ту тему на ап-про. Если чел вчера писал "проблемы с ремонтом после Бара", а сегодня пишет "я прошел и удалил мод", то в 99 случаях из 100 это означает, что он не хочет давать сейв.

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

Это просто мой тебе совет, ни к чему не обязывающий. :)

  • Согласен 5

Mehr sein, als scheinen. (c) Alfred von Schlieffen

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

есть разница, ставить:
            ammo_9x19_fmj = 1 \n

или же:
            ammo_9x19_fmj \n
?

 

Разницы нет.

Число после знака равенства обозначает количество, в котором нужно заспавнить данный предмет в инвентарь NPC. Если указать только секцию, спавн произойдёт в количестве одной единицы (по умолчанию). То есть, что в первом, что во втором варианте получаем одну пачку патронов.

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

Всем привет, хотел спросить по скрипту ogsm_respawn.script, если добавить новые точки спавна животных и зомби на карту то они одноразовые или нет и что дает "fake" в конце строки proceed_spawn("zombie_weak", vector():set(95, 1, -67), 1, 813, 1, "l04_darkvalley_zombie_portion_2", "fake")? Зарание благодарен.

Ссылка на комментарий
25 минут назад, INNOCENT KILLAZ сказал:

они одноразовые или нет

Нет, конечно. :) Это точки постоянного (на протяжении игры) периодического (раз в какое-то время) спавна в указанной точке указанной группы монстров с контролем максимальной численности.

25 минут назад, INNOCENT KILLAZ сказал:

что дает "fake"

См. в функции ogsm_packet.spawn_monster. В зависимости от значения в этом параметре ("fake"/"random_fake"/прочее) монстру назначается та или иная кастомная логика поведения.

 

На будущее, подобные вопросы больше подходят для одной из тем "Ковыряемся в файлах" (в данном случае, я так подозреваю, вариация для ЧН).

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

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

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

Ребята, а есть ли возможность из скрипта узнать расстояние до цели в направлении взгляда?

Направление взгляда ГГ - это легко: db.actor:direction() или screen.cam_dir, а вот расстояние до точки, куда этот взгляд "упирается"?

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

из скрипта узнать расстояние до цели в направлении взгляда?

В OGSR есть функция level.get_target_dist https://github.com/OGSR/OGSR-Engine/blob/f940dc5f5b1e4fe72f268fec636e16133f47ef51/ogsr_engine/xrGame/level_script.cpp#L1107

А в ванильном движке насколько помню, нет такой возможности.

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

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

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

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

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

Создал ремкомплект и возникла такая проблема. При появление 2-х одинаковых(сломаных) оружия у ГГ в списке появляеться вот это https://disk.yandex.ru/i/yPsc0Q9N-FsBBQ 

 

Можно это как то решить? Вот сам лист

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

function UIrepair:FillList()
    item_table = 0
    item_table = {}
    item_table_index = 0

        local function fill_list(actor,item)
        local main_section = system_ini():r_string_ex(item:section(),"repair_type") or item:section()
        if main_section then

        if (self.repair_type == "weapon" and IsWeapon(item))
        or (self.repair_type == "knife" and IsKnife(item))
        or (self.repair_type == "pistol" and IsPistol(item))
        or (self.repair_type == "shotgun" and IsShotgun(item))
        or (self.repair_type == "riflight" and IsRlight(item))
        or (self.repair_type == "rifheavy" and IsRheavy(item))
        or (self.repair_type == "outfit" and IsOutfit(item))
        or (self.repair_type == "outlight" and IsOutlight(item))
        or (self.repair_type == "outheavy" and IsOutheavy(item))
        or (self.repair_type == "outexo" and IsOutexo(item))

        or (self.repair_type == "all" and (IsWeapon(item) or IsOutfit(item) or IsKnife(item) or IsPistol(item) or IsShotgun(item)
        or IsRlight(item) or IsRheavy(item) or IsOutfit(item) or IsOutlight(item) or IsOutheavy(item) or IsOutexo(item))) then

        local con = item:condition()
        if con < self.max_condition and con >= self.min_condition then
        item_table_index = item_table_index + 1
        item_table[item_table_index] = item

        local item_in_slot_1 = db.actor:item_in_slot(1) and db.actor:item_in_slot(1):id() or false
        local item_in_slot_2 = db.actor:item_in_slot(2) and db.actor:item_in_slot(2):id() or false
        local item_in_slot_4 = db.actor:item_in_slot(4) and db.actor:item_in_slot(4):id() or false
        local item_in_slot_6 = db.actor:item_in_slot(6) and db.actor:item_in_slot(6):id() or false

        local i = 1
        while (item_table) do
        local s_item = item_table
        local s_item_section = s_item:section()
        local _item_num = "" .. i .. ""
        local _item_name = gts(axr_base.get_inv_name_short(s_item_section))
            if string.len(_item_name)>25 then _item_name = string.sub(_item_name,1,23).."..." end

            if s_item:id() == item_in_slot_1
            or s_item:id() == item_in_slot_2
            or s_item:id() == item_in_slot_4 then
            _item_name = _item_name.." (в руках)"

                elseif s_item:id() == item_in_slot_6 then
                _item_name = _item_name.." (одет)"
            end
                local _item_cond = s_item:condition()
                if _item_cond then
                    _item_cond = math.floor((_item_cond)*100)
            end
                _item_cond = "[" .. _item_cond .. "%]"
                    self:AddItemToList(_item_num, _item_name, _item_cond)
                        i = i+1
                end
            end
        end
    end
end
    db.actor:iterate_inventory(fill_list,db.actor)
end

 

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

@Colder попробуй заменить 

  if s_item:id() == item_in_slot_1
  or s_item:id() == item_in_slot_2
  or s_item:id() == item_in_slot_4 then
    _item_name = _item_name.." (в руках)"
  elseif s_item:id() == item_in_slot_6 then
    _item_name = _item_name.." (одет)"
  end

 на

  local iis = item_in_slot_1 or item_in_slot_2 or item_in_slot_4
  if s_item:id() == iis then
    _item_name = _item_name.." (в руках)"
  elseif s_item:id() == item_in_slot_6 then
    _item_name = _item_name.." (одет)"
  end

 

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

Проверял на работоспособность ремнабор и при тесте увидел что если у гг есть 2 одинаковых сломанных оружия, то в листе появляется дублированый итем. Но когда в инвентаре одно оружие все нормально. Значит дело в Fillist()  т.к кроме открыть ремнабор я ни каких действий не делал. 

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

возникла такая проблема

Дело в том, что таблица item_table не очищается после добавления оружия в List.

Скрипт вообще написан не правильно. Внутри db.actor:iterate_inventory() нужно только заполнять таблицу item_table, а выводить её содержимое в List нужно после неё.

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

S.T.A.L.K.E.R. CoP Objects (upd 11.03.24)

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

Возможно ли с помощью этой функции парсить не 1 строчку а несколько?

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

function parse_list()
    local ini = ini_file("items\\settings\\items_list.ltx")
        if not ini then
            ini = system_ini()
    end
        if ini:section_exist("generic_list") then
        local n = ini:line_count("generic_list")
        local key = math.random(0,n-1)
        local result, item, num = ini:r_line("generic_list",key,"","")
            alife():create(item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
                return item, num
        end
end

 

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

@Colder конечно, если вместо случайной выборки одной строки воспользоваться, например, циклом и вернуть по итогу таблицу (не забыть обработать её на выходе отличным от пары значений образом):

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

 

--local key = math.random(0,n-1)
--local result, item, num = ini:r_line("generic_list",key,"","")
--alife():create(item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
--return item, num

local t = {}
for key = 0,n-1 do
  local result, item, num = ini:r_line("generic_list",key,"","")
  alife():create(item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
  table.insert(t, { item = item, num = num })
end
return t

 

Так будут обработаны все строки из generic_list.

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

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

Что-то заклинило у меня. Лыжи не едут или у костра перебрал...

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

Начинается ругань на xr_logic.pick_section_from_condlist, потом на sr_idle, bind_restrictor... Приводить все коды не стал, т.к. всё равно никто не станет распутывать (да и лучше самому, только бы пинок в нужном направлении был задан). Есть подозрение, что всё из-за попытки рандомного спауна при вызове ф-ии, когда ГГ входит в рестрикт. Но...

Но рандомный спаун без проблем работает, когда указываю координаты, исходя из координат ГГ:

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

    local lv,gv
    local a=vector()    
    a=db.actor:position()
    a.x=a.x+pX
    a.z=a.z+pZ
    a.y=a.y+pY
    lv=db.actor:level_vertex_id()
    gv=db.actor:game_vertex_id() 
    alife():create(item,vector():set(a.x,a.y,a.z),lv,gv,65535)

Движок ОГСР.

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

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

как выглядит?

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

Ну конечно же!

Список итемов есть, а "зарандомить" я его забыл.

    local rnd = {"af_medusa","af_vyvert","af_blood"} 
    local art = rnd[math.random(#rnd)]

Причём для работающего спавна я этого сделать не забыл, а для "неработающего" - забыл.

Добрая половина моих ошибок это невнимательность...

Несколько часов голову ломал :dash2:

 

  • Сочувствую 1

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

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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