Все посты %s в %S - AMK Team
Перейти к контенту

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


Halford

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

@Houdini_one , попробуй так - посели НПСа в какой то смарт, где он отыграет нужное. А после выселяй оттуда и заселяй уже в нужный смарт. 

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

[smart_terrains]

unknown_smart = {-mar_polter_start_delete}
mar_military = {+mar_polter_start_delete}

 

Изменено пользователем mole venomous

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

Поделиться этим сообщением


Ссылка на сообщение

Повесить на биндер actor_binder:use_object(obj) функцию, где будет всё это обрабатываться.

Вот пример функции:

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

function use_item(obj) 
    local obj = obj:section()
    if obj then  
        if obj == "medkit" then 
            -- юзанули аптечку - торкнуло (к вопросу о головокружении)
            level.add_pp_effector("alcohol.ppe", 100, false)  

            level.add_pp_effector("duality_circle.ppe", 100, false)
            -- и спавним "пустую" аптечку, например (к вопросу о выдаче нового айтема взамен использованого)
            alife():create("medkit_empty", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) 
        end
    end
end

 

Изменено пользователем mole venomous
  • Спасибо 1

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

Поделиться этим сообщением


Ссылка на сообщение
14 минут назад, Hind сказал:

bind_stalker.script

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

В bind_stalker:

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

function actor_binder:net_destroy()

    ...

    self.object:set_callback(callback.use_object,           nil)  -- коллбэк на использование предмета

    ....

end

 

function actor_binder:reinit()

    ...

    self.object:set_callback(callback.use_object, self.use_object, self)

    ...

end

 

--// Использование предмета
function actor_binder:use_object(obj) 
     use_item(obj)    
end

 

function use_item(obj) 
    local obj = obj:section()
    if obj then  
        if obj == "medkit" then 
            -- юзанули аптечку - торкнуло (к вопросу о головокружении)
            level.add_pp_effector("alcohol.ppe", 100, false)  

            level.add_pp_effector("duality_circle.ppe", 100, false)
            -- и спавним "пустую" аптечку, например (к вопросу о выдаче нового айтема взамен использованого)
            alife():create("medkit_empty", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) 
        end
    end
end

 

  • Согласен 2

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

Поделиться этим сообщением


Ссылка на сообщение
2 минуты назад, Hind сказал:

attempt to call global 'use_item' (a nil value)

Создай новый скрипт, куда запихаешь ф-ию 'use_item'. И в бинд_сталкер вызывай эту ф-ию из этого скрипта (думаю, тут объяснять не надо?)

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

Поделиться этим сообщением


Ссылка на сообщение
1 минуту назад, Colder сказал:

В каких файлах нужно ковырять

treasure_manager.script

Что бы всё не "ломать", думаю, править только осмотр трупа CTreasure:use(npc)

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

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

Поделиться этим сообщением


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

Можно в treasure_manager.ltx

Для классических тайников. Для случайных и редких, по типу АМК-шных, генерация содержимого, вроде, не зависит от этого кондлиста (если ручками не добавлять). :unknw: А вообще, если нужно полностью исключить возможность получать тайники с трупов, думаю, стоит сразу обрубить это в самом начале, при обыске жмурика, что бы ничего не обрабатывать зря.

Изменено пользователем mole venomous
  • Полезно 1

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

Поделиться этим сообщением


Ссылка на сообщение
4 часа назад, Houdini_one сказал:

каким образом реализовывается дневные-ночные монстры

Задать условия по времени для состояний, например.

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

function load_job(sj, gname, type, squad, groups)
    --" Кровосос, хоум недалеко на восток от грузовика смерти
    if type == "esc_smart_bloodsucker" then
        -- днём оффлай
        t = { section = "logic@esc_smart_bloodsucker_day",
        idle = 0,
        prior = 5, state = {0},
        online = false,
        in_rest = "", out_rest = ""
        }
        table.insert(sj, t)
        -- ночью резвится
        t = { section = "logic@esc_smart_bloodsucker_night",
        idle = 0,
        prior = 5, state = {1},
        online = true,
        in_rest = "", out_rest = ""
        }
        table.insert(sj, t)
    end

    ...

end

...

function load_states(gname, type)
    if type == "esc_smart_bloodsucker" then
        return function(gulag)
            if db.actor ~= nil then
                if ( level.get_time_hours() >= 3 and level.get_time_hours() <= 21 ) then
                    return 0  -- день
                else
                    return 1  -- ночь
                end
            else
                return gulag.state
            end
        end
    end

    ...

end

 

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

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

Поделиться этим сообщением


Ссылка на сообщение

@Houdini_one , думаю нет.

Изменено пользователем mole venomous

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

Поделиться этим сообщением


Ссылка на сообщение
3 часа назад, Фёдор2016re2 сказал:

disable

Если искал в total cmd, то без квадратных скобок. 

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

Поделиться этим сообщением


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

    for i = 0, db.actor:belt_count() - 1 do    
        local item = db.actor:item_on_belt(i)
        if item and ( item:clsid() == clsid.artefact or item:clsid() == clsid.artefact_s ) then
        --  log3("artefact on belt")
        end
    end

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

Вот не помню, в чистом ТЧ есть такой метод или нет, но в OGSR точно есть...

    local obj = db.actor:object("af_medusa")
    if obj and db.actor:is_on_belt(obj) then
    --    log3("af_medusa on belt")
    end 

PS Эти методы применимы к ОГСР

Изменено пользователем mole venomous
  • Спасибо 1
  • Полезно 2

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

Поделиться этим сообщением


Ссылка на сообщение
2 часа назад, Orсhello сказал:

и item_on_belt - это уже не чистый ТЧ

Верно. На чистом не работают предложенные мной варианты. Нужно городить скриптовые костыли, помнится, до ОГСР я так и делал. Или переходить на ОГСР двигатель.

Изменено пользователем mole venomous
  • Согласен 1
  • Полезно 1

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

Поделиться этим сообщением


Ссылка на сообщение
8 часов назад, Orсhello сказал:

вот такой вариант

Это и есть те самые

 

9 часов назад, mole venomous сказал:

скриптовые костыли

Есть во многих модах. Похоже, единственно существующий способ "отделить мух от котлет".

Изменено пользователем mole venomous
  • Согласен 1
  • Полезно 1

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

Поделиться этим сообщением


Ссылка на сообщение

При обыске трупа либо в момент смерти НПС можно спавнить всякое в этот самый труп, если предустановить какие-либо условия (по группировке, рангу, имени, секции объекта) для спавна определённых предметов. Но это требует создания множества секций того же ПДА, отличающимися только своим названием. Получать игровое название ПДА от имени его хозяина не выйдет, только если добавить ограниченное кол-во ПДА для уникальных НПС. И спавнить им ПДА сразу в конфигах либо скриптом по ходу игры.

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

Поделиться этим сообщением


Ссылка на сообщение
2 минуты назад, ted.80 сказал:

Воу воу палехчи, зачем такие выкрутасы

Я понял вопрос юзера, как "сделать каждый пда уникальным, по имени его хозяина"

Может не так понял... 

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

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, ted.80 сказал:

они и есть каждый унникальный

О как. Даже не знал, что ПЫСовые ПДА имеют привязку к имени владельца... 

9 часов назад, Houdini_one сказал:

главное функцию найти

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

-- в пределах локации (иначе - скриптом левел чейнджер с последующим удалением...)

function actor_displacement(position,rotation)
    if not rotation then rotation = 0 end
    db.actor:set_actor_position(position)
    db.actor:set_actor_direction(rotation)
end

 

Пример:

actor_displacement(vector():set(-196.908,-37.402,-268.777),3)

 

Изменено пользователем mole venomous
  • Смешно 1

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

Поделиться этим сообщением


Ссылка на сообщение
9 минут назад, Houdini_one сказал:

А что значит 3

 

9 минут назад, Houdini_one сказал:

где вычисляется разворот?

db.actor:set_actor_direction(3)

  • Спасибо 1

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

Поделиться этим сообщением


Ссылка на сообщение
8 часов назад, Houdini_one сказал:

actor_displacement(vector():set(159,23,0,10,76,14),0)

С количеством запятых нужно быть скромнее :biggrin:

actor_displacement(vector():set(159.23,0.10,76.14),0)

  • Полезно 1

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

Поделиться этим сообщением


Ссылка на сообщение
27 минут назад, Houdini_one сказал:

Через диалог игнорирует точку разворота

Видимо, так и есть. По сути, все представленные варианты работают через один метод set_actor_direction. Может быть, спецы подскажут, самому интересно... :)

  • Полезно 1

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

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, Orсhello сказал:

Игра жутко тормозить стала

Тормозит, т.к. производится подробная запись в лог. Это нужно использовать только для выявления возможной причины вылета.

Нужно "довести дело" до вылета и изучать лог (будет многобукаф..). Потом отключить. 

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

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

Поделиться этим сообщением


Ссылка на сообщение
24 минуты назад, Orсhello сказал:

Хоть удаляй вкладку Контакты и разбиндивай кнопку Х

Возможно, по этой причине в НЛС-6 (если не ошибаюсь...) так и сделано.

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...
{advertisement="yandex_floor_dark_theme"}