Перейти к содержанию

РСФСР

Разработчики
  • Публикаций

    115
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные РСФСР


  1. Такая проблема - декомпилировал локацию из билда 1475(со статичным небом) в формат сдк, однако некоторые источники света очень кривые. Цвет их не тот который должен быть. Если кликнуть на палитру где выбирается цвет - он обнуляется. Попытался вручную перетащить из 1537 билда распаковав файл левел локации в текстовый формат и вручную выписывая настройки цвета из файла FSL_LIGHT_DYNAMIC.ltx (в тексте это параметр diffuse, в палитре в сдк - это правая нижняя колонка на первом скриншоте, где мышка). Некоторые подходят, однако в тексте встречаются источники где цвет идет с параметром больше единицы:

    [2]
    controller_id = 2
    type = point
    diffuse = 1.992157, 1.545098, 1.058824, 0.000000
    specular = 0.000000, 0.000000, 0.000000, 0.000000
    ambient = 0.000000, 0.000000, 0.000000, 0.000000
    position = -4.673412, 2.701215, 1.565526
    direction = -0.000000, 0.000000, 1.000000
    range = 7.000000
    falloff = 0.000000
    attenuation0 = 1.000000
    attenuation1 = 1.000000
    attenuation2 = 0.015625
    theta = 0.000000
    phi = 0.392699

    как конвертировать такой из текстового в цвет на палитре в сдк? Подозреваю, что тут как-то связано с яркостью источника. Однако у декомпилированных источников у всех яркость 1.00
    Еще добавлю что декомпилируются источники света у которых выставлена галочка dynamic и соответственно они записаны в файл левел  FSL_LIGHT_DYNAMIC.ltx локации.
    Как быть?1121500230_.thumb.png.89b62290710b0f147146ca6d35d47f00.png


    Дополнено 2 минуты спустя

    Тут на скриншотах видно этот баг - кликаю на палитру - и цвет обнуляется.
    Пробовал также открывать сдк 2002 года и смотреть как там палитра выглядит - тоже самое

    Безымянный.jpg

    Безымянный1.jpg


  2. 7 часов назад, imcrazyhoudini сказал:

    StrawFlux интересно доковырять эту ситуацию) первое слишком просто)

    тогда смотри как волк реализован, пуля


    Дополнено 38 минуты спустя

    Поясните про двустворчатые ворота. Как сделать чтобы они были настежь открыты? С вики непонятно как прописывать параметры open closed и none
     

    [ph_gate]
    state - <параметр> - состояние, в котором дверь находится при инициализации (по умолчанию none). Возможны следующие значения:
    
            open - в открытом состоянии;
            closed - в закрытом состоянии;
            none - в текущем (дефолтном или оставшемся от предыдущей схемы).
    
    locking - <параметр> - блокировка дверей (по умолчанию none). Возможны следующие значения:
    
            stick - прилипание дверей к крайним состояниям.
            soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной. Состояния в этом положении:
    
                open - блокировать в открытом состоянии;
                closed - в закрытом;
                none - не используется (мягкая блокировка возможна только в крайних положениях);
    
            hard - блокировка двери с помощью границ. Ворота можно только сломать. Состояния в этом положении:
    
                open - блокировать в открытом состоянии;
                closed - в закрытом;
                none - в текущем.
    
            none - дверь не заблокирована

    например в эту секцию:
     

    [ph_gate@unlocked_truck]
    state = open
    locking = stick

    И еще, можно ли прописать в логику ворот таймер, чтобы они закрывались через пару минут например?


  3. 14 часов назад, imcrazyhoudini сказал:

    Доковырял этих чёртовых экологов.

    Итак, сообразил им логику, в которой они не умирают (буквально убрал проверку).

    Потом после получения инфопоршня они уходят на Янтарь в другой смарт (создал новый).

    Доходят до граф поинта, переходят на Янтарь и на том же граф поинте остаются.
    При чём оффлайн.

    Отслеживал путешествие одного из НПС (назначил ему стори_ид):

      Показать контент

    local obj = alife():story_object(5481)
                    if obj and IsStalker(obj) then
                        level.map_add_object_spot_ser(obj.id, "treasure", "Vovka")
                    end

    Пытался принудительно вывести в онлайн:

      Показать контент

    local npc = alife():story_object(5481)
     
    if npc then
     
    alife():set_switch_offline (npc.id, false)
    alife():set_switch_online (npc.id, true)
    alife():set_interactive (npc.id, true)
     
    end

    Всё без толку.

    В чём же причина?

    Промотал время тайм фактором - он пришёл в лагерь, но по прежнему в оффлайне всё время.

      Показать контент

    ss-imcrazyhoudini-08-26-23-23-25-57-l08-

    ss-imcrazyhoudini-08-26-23-23-43-12-l08-

    Внимание на мини-карту, значок тайника - сам НПС.


    Дополнено 24 минуты спустя

    Запретил уходить в оффлайн в СДК - доходят до Янтаря, идут в лагерь, после первого сейв-лоада опять исчезают.


    В чём же загадка этого озера Янтарь...

    а логика и скрипты\состояния смарта какие?


  4. 5 часов назад, Stalkervernite сказал:

    РСФСР Попробуй зарегистрировать файл) Я когда мертвый город возращал, я просто создал файл gulag_deadcity.ltx помойму как-то так, суть не меняет, просто зарегистрируй файл.

    и где его регистрировать?


  5. а вообще, как для локации сделать еще один отдельный файл с гулагами?
    Есть вот gulag_dark_valley.script и gulag_dark_valley.ltx(пустой)

    Хочу чтобы часть гулагов была в другом файле, например gulag_dark_valley2.script
    Как это сделать? Просто создать файл и все или прописывать надо ссылку на файл куда-то? Обязательно ли создавать gulag_dark_valley2.ltx или можно вписать в пустой gulag_dark_valley.ltx?


  6. 35 минут назад, N42 сказал:

     

    А еще, будет ли подгружаться лтх в секции

    Цитата

        if type == "val_rob" then
                         -- главный из грабителей, с которым разговариваем
                            t = { section = "logic@val_rob_leader",
                            idle = 0,
                            prior = 3, state = {0},
                            in_rest = "", out_rest = ""
                      }
                      table.insert(sj, t)
                            ltx = ltx.."#include \"scripts\\val_rob_leader.ltx\"\n"

    если в файле гулагов уровня
    function load_ltx(gname, type)
        return nil
    end


  7.     -- охранники на входах в здание фермы
        for i = 1, 2 do
            t = { section = "logic@" .. gname .. "_guard" .. i,
                idle = 0,
                prior = 2, state = {0},
                squad = squad, group = groups[1],
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
    
            ltx = ltx.."[logic@" .. gname .. "_guard" .. i .. "]\n" ..
                       "active = walker@" .. gname .. "_guard" .. i .. "\n" ..
    
                       "[walker@" .. gname .. "_guard" .. i .. "]\n" ..
                       "path_walk = guard" .. i .. "_walk\n" ..
                       "path_look = guard" .. i .. "_look\n" ..
                       "meet      = meet@" .. gname .. "_warn\n"
        end
    
        -- простые сталкеры внутри фермы вокруг костра
        for i = 1, 5 do
            t = { section = "logic@" .. gname .. "_kamp",
                idle = 0,
                prior = 1, state = {0},
                squad = squad, group = groups[1],
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
        end
        ltx = ltx.."[logic@" .. gname .. "_kamp]\n" ..
                   "active = kamp@" .. gname .. "_kamp\n"


    Что означает i и цифры тут? Из gulag_dark_valley.script


  8. Подскажите как в gulag_dark_valley.script  в тамошнее месиво из динамических .лтх вписать обычные скрипты смарт-террейнов что в gulag_escape, garbage и прочих.

    Например это в function load_job(sj, gname, type, squad, groups)

        if type == "esc_ambush" then
            t = { section = "logic@esc_ambush1",
                idle = 0,
                prior = 8, state = {0},
                in_rest = "", out_rest = "esc_ambush_out_restrictor"
            }
            table.insert(sj, t)
            t = { section = "logic@esc_ambush2",
                idle = 0,
                prior = 8, state = {0},
                in_rest = "", out_rest = "esc_ambush_out_restrictor"
            }
            table.insert(sj, t)
        end

    Это - в  function load_states(gname, type)
        if type == "esc_ambush" then
            return function(gulag)
                return 0
            end
        end

    Вот так же выглядит начало этого злополучного скрипта куда надо вставить:

    local mob_spring_count = 20
    
    --------------------------------------------------------------------------
    -- States
    --------------------------------------------------------------------------
    local state_normal = 0
    local state_alarm = 1
    local state_alarm_actor_inside = 2
    local state_fight = 1
    
    --------------------------------------------------------------------------
    -- General
    --------------------------------------------------------------------------
    local t = {}
    local gulags = {val_escort = {comm = {"bandit", "dolg"}},
                    val_sacrifice = {comm = {"bandit", "dolg"}},
                    val_prisoner = {comm = {"dolg"}},
                    val_sos = {},
                    val_rob = {comm = true},
                    val_lager_bandits = {comm = {"bandit"}},
                    val_watchtower = {comm = true},
                    val_soldiers_raid = {comm = {"military"}},
                    offline_group = {}}
    
    -- Job -------------------------------------------------------------------
    function load_job(sj, gname, type, squad, groups)
        local g = gulags[type]
        if g then
            g.job(sj, gname, type, squad, groups)
        end
    end
    
    -- State -----------------------------------------------------------------
    function check_state_stub(gulag)
        return 0
    end
    
    function load_states(gname, type)
        local g = gulags[type]
    
        if g then
            return g.state or check_state_stub
        end
    
        return nil
    end


     


  9. В 11.08.2023 в 11:38, ian98 сказал:

    РСФСР 

    Тебе надо типо после удара переместить игрока на пути какие-то?

    Я нашел такую строчку в оригинале. Это телепортация.

    
    db.actor:set_actor_position(patrol("val_ambush_dest_walk"):point(0))

    Выдача инфы

    
    db.actor:give_infoportion("") -- или give_info_portion("") - забыл

    Управление выключается уже в скрипте, который я выше дал.

    
    set_inactivate_input_time(1000) -- вроде 1000 это 1 секунда 

     

    работает, кроме выкидывания барахла


  10. 2 часа назад, ian98 сказал:

    РСФСР 

    Тебе надо типо после удара переместить игрока на пути какие-то?

    Я нашел такую строчку в оригинале. Это телепортация.

    
    db.actor:set_actor_position(patrol("val_ambush_dest_walk"):point(0))

    Выдача инфы

    
    db.actor:give_infoportion("") -- или give_info_portion("") - забыл

     

    да,


  11. 20 минут назад, ian98 сказал:

    РСФСР 

      Скрыть контент
    
    
    function punch_and_rob_actor(first_speaker, second_speaker) -- нас бьют во время диалога или вообще не будут с нами разговаривать, а наши предметы летят в указанный ящик
    local npc
    if first_speaker:id()==0 then npc = second_speaker
    elseif second_speaker:id()==0 then npc = first_speaker
    end
    
    -- Сначала бъем в морду
    npc:clear_animations()
    npc:add_animation("udar_0")
    
    local iTimer = time_global() + 700
    	
    local function check_timer()
    return time_global() > iTimer
    end
    
    local function action_timer()
    set_inactivate_input_time(30)
    local snd_obj = xr_sound.get_safe_sound_object([[affects\hit_fist]])
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
    
    level.add_cam_effector("camera_effects\\dis_consciousness.anm", 999, false, "") -- найти бы прикольных эффектов. это самый эпичный как по мне)
    
    -- Перемещаем инвентарь игрока в ящик
    inv_robbers_chest = level_object_by_sid(2000)
    local function transfer_object_item(item)
    db.actor:transfer_item(item, inv_robbers_chest)
    end
    db.actor:inventory_for_each(transfer_object_item)
    end
    
    level.add_call(check_timer, action_timer)
    dialogs.break_dialog(first_speaker, second_speaker)
    
    end

     

    Выглядит так себе. Ну делает, что делает, что тебе и нужно. Если что-то еще нужно, то можно доделать.

     

    а вот эту часть не подскажешь как вписать в функцию чтоб работало? телепортация после удара в вейпоинт, выдача некоторых инфо и выключение управления на некоторое время:
     

    	st.dest_walk = patrol("val_ambush_dest_walk"):point(0)
    	st.dest_look = utils.vector_copy_by_val(
    		patrol("val_ambush_dest_look"):point(0)):sub(st.dest_walk)
    	st.info = { "val_prisoner_plr_captured", "val_prisoner_door_unlocked",
    		"val_prisoner_door_unlocked_demo" }
             --	"val_prisoner_door_unlocked_demo", "val_sacrifice_start" }
    	st.disable_input_tm = 15000

     


  12. 3 часа назад, ian98 сказал:

    РСФСР могу написать новый. По-своему:) Попроще. работать будет также - не боись. А по этому скрипту, то вылетает может от того, что ты или кто-то закомментил пару строчек xr_punch.punch... ? Из лога понятно, что ошибка где-то в xr_punch

    было бы классно! Может и ошибка там, ведь разница между билдовым и финальным файлом в несколько лет


  13. подскажите как подправить скрипт из 2205 билда для финалки с ударом игроку в морду и последующей телепортацией и изыманием вещей.
     

    function val_punch_ambush(first_speaker, second_speaker)
    abort("KICK ASS !!!!")
    xr_punch.punch[first_speaker:id()] = second_speaker
    db.storage[db.actor:id()].punch = {}
    local st = db.storage[db.actor:id()].punch
    st.dest_walk = patrol("val_ambush_dest_walk"):point(0)
    st.dest_look = utils.vector_copy_by_val(
    patrol("val_ambush_dest_look"):point(0)):sub(st.dest_walk)
    st.info = { "val_prisoner_plr_captured", "val_prisoner_door_unlocked",
    "val_prisoner_door_unlocked_demo" }
     "val_prisoner_door_unlocked_demo", "val_sacrifice_start" }
    st.dump_inventory_pos = patrol("val_ambush_inventory_dump_place"):point(0)
    st.disable_input_tm = 15000
    
    db.storage[second_speaker:id()].punch.enabled = true
     xr_punch.put_actor_to_sleep_instantly()
    end

    При этом часть где барахло актора вываливается в точке заменить на эту функцию где барахло убирается в ящик или как-то добавить отдельно вызов этой функции(она рабочая):
     

    function val_ambush_rob_actor(actor, npc, p)
    inv_box_1 = level_object_by_sid(440)
    local function transfer_object_item(item)
    —# Секции, которые не перемещать
    if item:section() ~= "detector_fake"
     and item:section() ~= "wpn_knife"
    and item:section() ~= "device_torch"
    and item:section() ~= "device_pda" then
    db.actor:transfer_item(item, inv_box_1)
    end
    end
    actor:inventory_for_each(transfer_object_item)
    end

    Сейчас вылет:

     

    FATAL ERROR
    
    [error]Expression : fatal error
    [error]Function : CScriptEngine::lua_error
    [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
    [error]Line : 73
    [error]Description : <no expression>
    [error]Arguments : LUA error: ...a.l.k.e.r\gamedata\scripts\dialogs_darkvalley.script:51: attempt to index field 'punch' (a nil value)
    
    
    stack trace:

    Вылет ссылается на эту строчку:

     

    db.storage[second_speaker:id()].punch.enabled = true

     


  14. 45 минут назад, Paracetamol сказал:

    А оно же в любом случаи будет на нулевых коорд. (Рабою в сдк YARA)

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

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


    Дополнено 20 минуты спустя

    аа все понял. После создания группы надо в поле что внизу справа нажать align to object и выбрать объект который будет центром координат. Выбираем объект с нулевыми координатами и вауля

    • Лайк 1

  15. Такой вопрос - как сделать в сдк тч группу чтобы она имела нулевые координаты? Сейчас пытаюсь объединить несколько объектов для переноса с одной локации на другую но получается хрень с ненулевыми координатами. Нормально с ними перенести не получается. Вроде работал способ включения в группу объекта с нулевыми координатами и поворотами, но что-то никак.


  16. 3 часа назад, Paracetamol сказал:

    А какой примерно рестриктор по величине?

    Движок оригинальный?

    круглый, метров 10
    Движок да, оригинальный. Возможно есть некоторые изменения из xray_extentions кажется


  17. 10 часов назад, РСФСР сказал:

    с чем связан такой вылет:

    stack trace:

    0023:007AEDE0 xrCore.dll, str_container::dock()
     
    [error][     183]    : Невозможно создать файл, так как он уже существует.

     

    ошибка оказалась в том что вписал в задание инфопоршион_фэйл и функшион_фэйл использующий туже инфопорцию

    • Хабар 1

  18. Подскажите как реализовать следующее:
    Есть квестовый предмет, который нужно подобрать в инвентарь, затем пойти и выбросить в определенном рестрикторе и далее постреляв по нему он должен разрушиться(соответственно подменяется модель на разрушенную) и выдать инфо.

    Не знаю, можно ли разрушать квестовые предметы. Скорее всего объект должен быть destroyble_object
     


  19. В 22.07.2023 в 20:57, Mass сказал:

    capacity должно <= чем работ в смарте!

     

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