Случайная подборка модов
Новое Время. Судьба наемника
2.3
Sins of the past. Пролог
3.3
История Борланда.Пролог
3.8
Зимний путь
3.4
Old Episodes. Epilogue
3.2
Sigerous Mod 2.2
4.1
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
Модострой:Вопросница
Российская Федерация  Аdmin
Воскресенье, 03.11.2013, 19:36 | Сообщение # 1
Статус:
Опытный:
Сообщений: 1538
Награды: 11
Регистрация: 28.03.2011

В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга.

  • Не флудить
  • Предварительно просматривайте раздел. Ответ на ваш вопрос может быть там.
  • В своем вопросе указывайте платформу моддинга - Тень Чернобыля, Чистое небо или Зов Припяти.





    У кого есть желание, создать FAQ по основным вопросам моддинга - обращаемся в ЛС.


    Архив

    Архив#2
  •   Злобная реклама
    Воскресенье, 03.11.2013, 19:36
    Статус:
    Сообщений: 666
    Регистрация: 28.03.2011
    Российская Федерация  Arist
    Среда, 16.04.2014, 22:48 | Сообщение # 2626
    Статус:
    Неопытный:
    Сообщений: 481
    Награды: 1
    Регистрация: 08.07.2012

    ins33, нарвался на этот скрипт ни инсайде "Выброс на Янтаре". Никакой update не нужен.
    level.add_call(on, off) -- add_call -- по русски похоже - создать колбек.
    Цитата
    при возврате on = true переключает ф-ию на off?

    Всё верно.Можно вызывать до бесконечности.Тот же самый "ВЫброс на Янтаре" с продолжением:

    Выброс
      Злобная реклама
    Среда, 16.04.2014, 22:48
    Статус:
    Сообщений: 666
    Регистрация: 08.07.2012
    Российская Федерация  ins33
    Среда, 16.04.2014, 22:57 | Сообщение # 2627
    Dream Reader Mod
    Статус:
    Опытный:
    Сообщений: 2269
    Награды: 1
    Регистрация: 17.01.2012

    function timer_start_bar() --вот -- УБЕРИ!!!
    local time = time_global() -- если было, оставь, если сам добавил удаляй.
    name_script.update() --вот
    Цитата ins33 ()
    Потом в bind_stalker добавь my_timer.update()

    Добавлено (16.04.2014, 22:57)
    ---------------------------------------------
    Arist, Открыл lua_help и стало понятней:

    Код
    function add_call(const function<boolean>&, const function<void>&);

    Интересный метод, надо потестить.
      Злобная реклама
    Среда, 16.04.2014, 22:57
    Статус:
    Сообщений: 666
    Регистрация: 17.01.2012
    Российская Федерация  Arist
    Среда, 16.04.2014, 23:05 | Сообщение # 2628
    Статус:
    Неопытный:
    Сообщений: 481
    Награды: 1
    Регистрация: 08.07.2012

    ins33, потести.Я тут на днях потестил из ЧН в Тени в xr_effects.script

    Теперь из логики рестриктора в Тенях можно:

    Может пригодится.
      Злобная реклама
    Среда, 16.04.2014, 23:05
    Статус:
    Сообщений: 666
    Регистрация: 08.07.2012
    Российская Федерация  Sanjaaa
    Среда, 16.04.2014, 23:12 | Сообщение # 2629
    Dark Reaper Souls
    Статус:
    Бывалый:
    Сообщений: 926
    Награды: 6
    Регистрация: 22.08.2012

    ins33, седня не мой день sad
    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: ...:\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:245: attempt to index global 'order' (a nil value)

    в бинде прописал
    order.update()
      Злобная реклама
    Среда, 16.04.2014, 23:12
    Статус:
    Сообщений: 666
    Регистрация: 22.08.2012
    Российская Федерация  ins33
    Среда, 16.04.2014, 23:30 | Сообщение # 2630
    Dream Reader Mod
    Статус:
    Опытный:
    Сообщений: 2269
    Награды: 1
    Регистрация: 17.01.2012

    Arist, Прикольно, и информативно. Хотя по идеи можно упростить до:
    Код
    function spawn_object_in(actor, obj, p)
        local spawn_sect = p[1]
        local target_name = p[2]
        local box = alife():object(target_name)
        if spawn_sect ~= nil then
        if target_name ~= nil then
        if box ~=nil then
        local obj = alife():create(spawn_sect,vector(),0,0,box.id)
    end  
    end  
    end  
    end
    Хотя не понятно, если будет вылет, что лог покажет.

    Sanjaaa, Покажи скрипт order.
      Злобная реклама
    Среда, 16.04.2014, 23:30
    Статус:
    Сообщений: 666
    Регистрация: 17.01.2012
    Украина  BozKurt
    Среда, 16.04.2014, 23:33 | Сообщение # 2631
    Статус:
    Опытный:
    Сообщений: 1753
    Награды: 3
    Регистрация: 25.05.2012

    Метод add_call создаёт два коллбека, функции для которых являются параметрами самого метода:
    Код
    level.add_call (condition, action)

    Функция condition будет вызываться до тех пор пока будет возвращать false/nil. Как только вернёт true - будет вызвана функция action.
    Самый тривиальный пример использования - таймер по истечению которого выполняется какое-либо действие:
    Код
    --# Взводим таймер на тридцать секунд.
    local timer = 30000
    local timeNow = time_global() + timer
    --# Проверяем время.
    local function ConditionCall ()
      if timeNow > time_global() then
       return true
      end
      return false
    end
    --# Действие по окончании таймера.
    local function ActionCall ()
      news_manager.send_tip(db.actor, "Time is out!")
    end
    --# Ставим коллбек.
    level.add_call(ConditionCall, ActionCall)

    Ничего естественно само не сохраняется, поэтому об этом нужно заботится самому.
      Злобная реклама
    Среда, 16.04.2014, 23:33
    Статус:
    Сообщений: 666
    Регистрация: 25.05.2012
    Российская Федерация  Sanjaaa
    Среда, 16.04.2014, 23:34 | Сообщение # 2632
    Dark Reaper Souls
    Статус:
    Бывалый:
    Сообщений: 926
    Награды: 6
    Регистрация: 22.08.2012

      Злобная реклама
    Среда, 16.04.2014, 23:34
    Статус:
    Сообщений: 666
    Регистрация: 22.08.2012
    Российская Федерация  ins33
    Четверг, 17.04.2014, 00:01 | Сообщение # 2633
    Dream Reader Mod
    Статус:
    Опытный:
    Сообщений: 2269
    Награды: 1
    Регистрация: 17.01.2012

    Sanjaaa, Точно, криво копирнул! Перед time_a добавь local, и в function torch_binder:load® дожна стоять буква R в скобках, вместо символа.

    Добавлено (17.04.2014, 00:01)
    ---------------------------------------------
    Sanjaaa, И замени "name_infoporticion" на "get_gun1"

      Злобная реклама
    Четверг, 17.04.2014, 00:01
    Статус:
    Сообщений: 666
    Регистрация: 17.01.2012
    Российская Федерация  Arist
    Четверг, 17.04.2014, 00:02 | Сообщение # 2634
    Статус:
    Неопытный:
    Сообщений: 481
    Награды: 1
    Регистрация: 08.07.2012

    ins33,
    вылета нет.А зачем тогда это:
    abort("Wrong target_name for 'spawn_object_in' function %s. For object %s", tostring(target_name), obj:name())

    Перестраховка?
      Злобная реклама
    Четверг, 17.04.2014, 00:02
    Статус:
    Сообщений: 666
    Регистрация: 08.07.2012
    Российская Федерация  ins33
    Четверг, 17.04.2014, 00:10 | Сообщение # 2635
    Dream Reader Mod
    Статус:
    Опытный:
    Сообщений: 2269
    Награды: 1
    Регистрация: 17.01.2012

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

    Добавлено (17.04.2014, 00:10)
    ---------------------------------------------
    Сейчас у себя проверю.

      Злобная реклама
    Четверг, 17.04.2014, 00:10
    Статус:
    Сообщений: 666
    Регистрация: 17.01.2012
    Российская Федерация  Arist
    Четверг, 17.04.2014, 00:13 | Сообщение # 2636
    Статус:
    Неопытный:
    Сообщений: 481
    Награды: 1
    Регистрация: 08.07.2012

    ins33, да и if тоже зачем.
    Код

    function spawn_object_in(actor, obj, p)
    local spawn_sect = p[1]
    local target_name = p[2]
    local box = alife():object(target_name)
    if spawn_sect ~= nil and target_name ~= nil and box ~=nil then
    local obj = alife():create(spawn_sect,vector(),0,0,box.id)
    end
    end


    В рестриктор тоже сработало(заспавнил сталкера и аптечку)
    [logic]
    active = sr_idle

    [sr_idle]
    on_info = {+test_info} nil %=spawn_obj_in_zone(agr_stalker_veteran:esc_test_restrictor) =spawn_obj_in_zone(medkit:esc_test_restrictor)%
    В xr_effects.script
    Код

    function spawn_obj_in_zone(actor, obj, p)
      local spawn_sect = p[1]
      local zone_name = p[2]
             local zone = db.zone_by_name[zone_name]
      if spawn_sect ~= nil and zone_name ~= nil and zone ~= nil then
      local spawned_obj = alife():create( spawn_sect,zone:position(),zone:level_vertex_id(),zone:game_vertex_id())
    end
    end

    Надо через диалог попробовать.
    Сообщение отредактировал Arist - Четверг, 17.04.2014, 00:38
      Злобная реклама
    Четверг, 17.04.2014, 00:13
    Статус:
    Сообщений: 666
    Регистрация: 08.07.2012
    Российская Федерация  Sanjaaa
    Четверг, 17.04.2014, 00:28 | Сообщение # 2637
    Dark Reaper Souls
    Статус:
    Бывалый:
    Сообщений: 926
    Награды: 6
    Регистрация: 22.08.2012

    ins33, а как правильно повесить timer_start?
    я повесил
    Код
    timer_start.update(delta)

    и получил
    Код
    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: ...:\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:246: attempt to index global 'timer_start' (a nil value)
      Злобная реклама
    Четверг, 17.04.2014, 00:28
    Статус:
    Сообщений: 666
    Регистрация: 22.08.2012
    Российская Федерация  ins33
    Четверг, 17.04.2014, 00:40 | Сообщение # 2638
    Dream Reader Mod
    Статус:
    Опытный:
    Сообщений: 2269
    Награды: 1
    Регистрация: 17.01.2012

    Arist, Это для точного вывода в лог! Прописав так:
    on_info = {-test} nil %+test =spawn_object_in(antirad:bla_bla)%
    Словил вылет:
    Код
    ! Cannot find saved game error: there is no such object bla_bla
    ! Cannot find saved game %s
       
    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: ... publishing\s.t.a.l.k.e.r\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)
    Но у меня правленый скрипт для вывода в лог инфы по логике. С стандартным этой строки
    Cannot find saved game error: there is no such object bla_bla
    не будет.

    Sanjaaa, В том скрипте было 2 опечатки, ты их исправил? Лог говорит, что в скрипте timer_start есть ошибка. Проверь его script Syntax Checker.exe
    П.С. ты исправил torch_binder:load® на torch_binder:load(_r_) только без _! Сайт р в скобках отображает, как ®

    Добавлено (17.04.2014, 00:40)
    ---------------------------------------------
    timer_start.update()

      Злобная реклама
    Четверг, 17.04.2014, 00:40
    Статус:
    Сообщений: 666
    Регистрация: 17.01.2012
    Российская Федерация  Sanjaaa
    Четверг, 17.04.2014, 00:54 | Сообщение # 2639
    Dark Reaper Souls
    Статус:
    Бывалый:
    Сообщений: 926
    Награды: 6
    Регистрация: 22.08.2012

    Ins33. Ну да ошибки испраавил. А "r" обязательно маленькую,а то я большую поставил

    Добавлено (17.04.2014, 00:54)
    ---------------------------------------------
    А еще в скрипте коментарий что timer_start надо вешать на update(delta)

      Злобная реклама
    Четверг, 17.04.2014, 00:54
    Статус:
    Сообщений: 666
    Регистрация: 22.08.2012
    Российская Федерация  ins33
    Четверг, 17.04.2014, 01:21 | Сообщение # 2640
    Dream Reader Mod
    Статус:
    Опытный:
    Сообщений: 2269
    Награды: 1
    Регистрация: 17.01.2012

    Arist,
    Цитата Arist ()
    Надо через диалог попробовать.
    А как ты в диалоге собираешься medkit:esc_test_restrictor передать?
    А для спавн в тайник или нпс, я использую эту ф-ию:
    Код
    -- =give_items_nps(item:sid)
    function give_items_nps(actor, npc, p)
    local item = p and p[1]
    local to_obj = level_object_by_sid(p[2])
    alife():create(item,
    to_obj:position(),
    to_obj:level_vertex_id(),
    to_obj:game_vertex_id(),
    to_obj:id())
    end
    Но тут передаётся sid, что не всегда удобно! Хотя можно использовать
    Код
    -- =name(name)
    function name(actor, npc, p)
    local obj = p[1]
    for a=10,65635,1 do
    local npc=level.object_by_id(a)
    if npc and string.find(npc:name(),obj) then
    *
    и передавать имя.

    Помогите разобраться с оверрайдами в секции [mob_home]
    mob_home.script:
    Логика:
    Проверял все 4 оверрайда в разных вариантах\сочетаниях, и не один не сработал. ХЕЛП!!!

    Добавлено (17.04.2014, 01:21)
    ---------------------------------------------
    Sanjaaa, На тот момент у меня был только один таймер, и писать доп ф-ию, которая будет запускать остальные, не было смысла. Если обратишь внимание, то ф-ия update запускает timer_start() и hud_timer(), а сама она висит на update(delta).

    Цитата Sanjaaa ()
    А "r" обязательно маленькую,а то я большую поставил

    ни когда не задавался этим вопросом, думаю это не критично. Сам всегда пишу маленькую.
    П.С. комментарии исправил.
      Злобная реклама
    Четверг, 17.04.2014, 01:21
    Статус:
    Сообщений: 666
    Регистрация: 17.01.2012
    Поиск: