Случайная подборка модов
Prosectors Project
4.0
Пространственная Аномалия 4.1
4.5
Объединенный Пак 2.1
3.1
Первые Дни Зоны:Создание в тумане
2.8
Lost World: Origin
4.1
Winter of Death: Ultimatum
4.0
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
Модострой:Вопросница
Российская Федерация  А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
    Украина  BozKurt
    Среда, 16.04.2014, 23:33 | Сообщение # 2611
    Статус:
    Опытный:
    Сообщений: 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 | Сообщение # 2612
    Dark Reaper Souls
    Статус:
    Бывалый:
    Сообщений: 926
    Награды: 6
    Регистрация: 22.08.2012

      Злобная реклама
    Среда, 16.04.2014, 23:34
    Статус:
    Сообщений: 666
    Регистрация: 22.08.2012
    Российская Федерация  ins33
    Четверг, 17.04.2014, 00:01 | Сообщение # 2613
    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 | Сообщение # 2614
    Статус:
    Неопытный:
    Сообщений: 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 | Сообщение # 2615
    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 | Сообщение # 2616
    Статус:
    Неопытный:
    Сообщений: 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 | Сообщение # 2617
    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 | Сообщение # 2618
    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 | Сообщение # 2619
    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 | Сообщение # 2620
    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
    Российская Федерация  Arist
    Четверг, 17.04.2014, 01:33 | Сообщение # 2621
    Статус:
    Неопытный:
    Сообщений: 481
    Награды: 1
    Регистрация: 08.07.2012

    ins33, помутнение,насчёт диалога.Третья укоротка:
    тоже работает.
    Перевести в mob_walker,не вариант ?
      Злобная реклама
    Четверг, 17.04.2014, 01:33
    Статус:
    Сообщений: 666
    Регистрация: 08.07.2012
    Российская Федерация  ins33
    Четверг, 17.04.2014, 01:50 | Сообщение # 2622
    Dream Reader Mod
    Статус:
    Опытный:
    Сообщений: 2269
    Награды: 1
    Регистрация: 17.01.2012

    Arist, Не вариант! Хочется себе жизнь упростить. Сейчас в mob_camp.script попробую оверрайды прописать.
      Злобная реклама
    Четверг, 17.04.2014, 01:50
    Статус:
    Сообщений: 666
    Регистрация: 17.01.2012
    Украина  BozKurt
    Четверг, 17.04.2014, 01:52 | Сообщение # 2623
    Статус:
    Опытный:
    Сообщений: 1753
    Награды: 3
    Регистрация: 25.05.2012

    Цитата ins33 ()
    ни когда не задавался этим вопросом, думаю это не критично.
    Критично. Lua чувствителен к регистру и для него Value и value - разные переменные.

    Цитата ins33 ()
    Проверял все 4 оверрайда в разных вариантах\сочетаниях, и не один не сработал.

    При выставленном значении actor_friendly плоть нападала на ГГ? Попробуй подсунуть вместо mob_home - mob_walker, с тем же actor_friendly = true, если будет нападать, то причина в чём-то другом.
      Злобная реклама
    Четверг, 17.04.2014, 01:52
    Статус:
    Сообщений: 666
    Регистрация: 25.05.2012
    Российская Федерация  ins33
    Четверг, 17.04.2014, 02:37 | Сообщение # 2624
    Dream Reader Mod
    Статус:
    Опытный:
    Сообщений: 2269
    Награды: 1
    Регистрация: 17.01.2012

    BozKurt, В walker-e actor_friendly = true работает.
    В mob_camp.script тоже не срабатывает.
      Злобная реклама
    Четверг, 17.04.2014, 02:37
    Статус:
    Сообщений: 666
    Регистрация: 17.01.2012
    Российская Федерация  Sanjaaa
    Четверг, 17.04.2014, 08:52 | Сообщение # 2625
    Dark Reaper Souls
    Статус:
    Бывалый:
    Сообщений: 926
    Награды: 6
    Регистрация: 22.08.2012

    ins33, ну я вообще хз что такое. прописал в бинде апдейт без дельты, проверил на ошибки скрипт, ошибок нету! а вылетает серавно
    Код
    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)
    Сообщение отредактировал Sanjaaa - Четверг, 17.04.2014, 08:58
      Злобная реклама
    Четверг, 17.04.2014, 08:52
    Статус:
    Сообщений: 666
    Регистрация: 22.08.2012
    Поиск: