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

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

@WinCap То есть, я все понял наоборот: в кавычках "где", а после "что" искать. Достаточно было в указанную конструкцию дописать "_outfit" к каждому виду брони.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, я тут учу Lua ->

http://www.user.su/lua/index.php?id=46

смотри там string.find, очень хорошо расписано.

:drinks:

  • Полезно 1

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

Ссылка на комментарий
11 минут назад, Баба ЯГА сказал:

я тут учу Lua ->

Полезно. Но почему я на функции, модули, операторы (выше по списку) не могу перейти?

Сталкер - наше всё!

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

@AndrewMor, нажимай на иконку книжечку в меню слева, которая возле ссылки, я тоже сначала на ссылки нажимал, ссылки не работают там, а вот если на книжечку нажать - то меню открывается.

  • Спасибо 1

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

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

@Баба ЯГА, А ларчик просто открывался. Как всегда, все гениальное лежит на самом виду, спасибо.

  • Согласен 1

Сталкер - наше всё!

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

Здрасьте.

 

Возникла необходимость прочитать (сравнить) определенное значение из списка с записями вида ["k"]={v1, v2, v3}, то есть под каждым ключом список значений, но эти значения не "true", и не списки. Я пошел через размер таблицы-ключа и обращение по числовым индексам. Есть ли способ проще?

 

В поиске "rep_inc[k]["i"], но без кавычек переменная считается тегом "курсив".

Spoiler

local rep_inc = {
    [0.25] = { "bandit_", "killer_", "novice_",
        "_beretta", "_colt", "_eagle", "_fort", "_pb", "_pm", "_sig220", "_walther", "_usp",
        "_ak74u", "_bm16", "_mp5" },
    
    [0.1] = { "exo_", "military_",
        "_gauss", "_svu", "_svd", "_vintorez",
        "_rg", "_rpg7" }
                }


function rep_grade(slot)

    local sect = slot:section()
    local value = 0.15

    for k, v in pairs(rep_inc) do
        for i = 1, table.getn(rep_inc[k]) do
            if string.find(sect, rep_inc[k]) then
            value = k
            break
            end
        end
    end

    return value
end

 

Изменено пользователем Norman Eisenherz

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Всем привет! Делаю мод, в котором хочу восстановить гражданских зомби. С помощью скриптов добавил им радиационный фон и реакцию детектора при приближении к ним. Но я в скриптах - нуб, просто повезло, что под рукой оказались подходящие шаблоны. Ещё я хочу восстановить для зомби анимацию приема пищи. Просто вместо этого типа анимации проигрывается анимация "stand_idle_". На форуме по ковырянию в файлах "Теней Чернобыля" мне посоветовали вообще править движок, но этот вариант меня не устраивает, поскольку до доводки до ума зомби я вставил в мультиплеер дополнительное оружие, а игра с модифицированным движком не может при выборе сетевой игры распознать версии игр с немодифицированными движками. Остается только надежда восстановить не действующие анимации зомби через скрипт, но как я уже упоминал, в скриптах я - нуб. Кто-нибудь раньше пытался восстановить недействующие анимации монстров через скрипт? Был бы очень признателен за консультацию по этой теме.

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

Здрасьте.

 

Повесил в [bind_stalker.script] простую функцию с удалением предмета из инвентаря по имени секции. Взял для тестов пистолет ПБ и прицел ПСО-1: пистолет удаляется, прицел – нет. Оба предмета не квестовые, оба не находятся в слотах, конфиги предметов стандартные. В чем разница?

    local del = "wpn_pb"
--    local del = "wpn_addon_scope"
        if act:object(del) then
            alife():release(alife():object(del), true)
        end

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
7 часов назад, Norman Eisenherz сказал:

alife():object(del)

Ф-ция object с строковым аргументом ищет объект по имени. А ты в ф-цию подсовываешь конфиговую секцию. В случае с удалением "wpn_pb" - просто совпадение, что существует обект с таким именем. Сделай правильно, примерно так:

    local obj = db.actor:object("wpn_addon_scope")
    if obj then
        alife():release(alife():object(obj:id()), true)
    end

 

Изменено пользователем AndreySol
  • Согласен 2
Ссылка на комментарий

@AndreySol И вот тут я теряюсь: для ПБ есть название секции "wpn_pb" и инвентарное имя "wpn-pb". Какое имя используется в функции удаления, если она срабатывает с вариантом "wpn_pb"? Имя файла модели?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Имя файла модели?

Ну при чем тут файл модели ? Вот несколько фрагментов из распакованного спавна:

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

 

; cse_abstract properties
section_name = wpn_bm16 <-- это конфиговая секция
name = esc_wpn_bm16 <-- это уникальное имя объекта
position = 338.799987792969, 15.3627433776855, 242.199981689453
direction = -3.42261046171188e-008, -0.838799953460693, -1.56779897212982
......

 

; cse_abstract properties
section_name = bandage
name = esc_bandage_0005
position = 340.254608154297, 18.6207141876221, 239.889846801758
......

 

Имя предмета может быть задано несколькими способами: разработчиком, при размещении объекта через СДК(или ACDC) или автогенерацией в движке или в СДК.. И ф-ция удаления не использует имен - она принимает аргументом указатель на серверный класс предмета...

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

В all.spawn прописаны объекты, которые заранее рождаются на карте локации, но не те, которые по ходу игры создаются через рандомный лут? Имена последних должны иметь какие-то случайные приставки к имени секции, так?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Хочу создать коробку и сложить в нее определенные предметы. Для ссылки на коробки из списка story_ids есть функция level.object_by_sid(#). Как вычислить id коробки в инвентаре? Обращение через db.actor:object("box"):id() или alife():object(все то же самое) приводит к вылету с ошибкой "attempt to index a nil value".

 

Коробка не обнаруживается даже через проверку if act:object("box"), хотя успешно спавнится в инвентарь по этому же имени.

Изменено пользователем Norman Eisenherz

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
1 час назад, Norman Eisenherz сказал:

Хочу создать коробку и сложить в нее определенные предметы

Это ты инвентарный ящик хочешь ГГ в рюкзак запихнуть ?

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

@AndreySol Идея в том, чтобы временно скидывать вещи из слотов в ящик на время торговли и обыска. Пока привязался к коробке около арены (story_id = 573), но я не могу таскать ее за собой на другие карты. Можно спавнить ящик под ноги и обращаться к нему через level.object_by_id (почему-то он ловится только при повторном вызове функции), но хочется все-таки спавнить ящик прямо в инвентарь и отправлять предметы в него. Так можно вообще?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
23 минуты назад, Norman Eisenherz сказал:

но хочется все-таки спавнить ящик прямо в инвентарь и отправлять предметы в него. Так можно вообще?

Нет, реализация подобного функционала для инвентарных предметов не предусмотрена.

26 минут назад, Norman Eisenherz сказал:

Идея в том, чтобы временно скидывать вещи из слотов в ящик на время торговли и обыска.

Идея - не фонтан... Тут однозначно лучше будет движковая правка.

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

@AndreySol Лучше это будет для тех, кто знает ассемблер и структуру движка. В X-Ray Extensions какое-то обозначение для экипированных предметов есть, но у меня с пропатченым файлом движка (правки версии 230.15) игра начинает вылетать при каждом обращении к инвентарю, поэтому пытаюсь сделать костыль. Меня вполне устроит, если временный ящик будет рождаться за спиной и после торговли удаляться из игры.

 

Все, последний вопрос: id коробки невозможно поймать сразу после ее создания (на секунду позже – пожалуйста, но два раза открывать диалог торговли не торт). Такое впечатление, что функция перебора id запускается слишком быстро – до того, как новая коробка успевает получить свой id. Как можно отложить выполнение перебора id, скажем, на 0,5 секунды?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, тебе нужно получить онлайновый (клиентский) объект ящика? Иcпользуй каллбэк на выход в онлайн:

function spawn_box()
	  local se_obj = alife():create("box", position, lv, gv)
	  level.client_spawn_manager():add(se_obj.id, -1, this.spawn_callback)
	end
	 
	function spawn_callback(id, obj)
	  -- тут делаешь что хочешь со своим ящиком: это obj
	end
Изменено пользователем naxac
  • Полезно 3

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

Иcпользуй каллбэк на выход в онлайн:

@Norman Eisenherz, чтоб понятнее было - практически все в движке завязано на апдейте, соответственно, от момента создания объекта, до его выхода в он-лайн, проходит определенный промежуток времени(некое кол-во апдейтов (тиков системного таймера)). Именно для этой ситуации, разрабами был введен кэллбэк на выход объекта в он-лайн...

Изменено пользователем W.A.S.P.
Ссылка на комментарий

Какое сильное колдунство… В оригинальном коде всего одно упоминание такого callback'а, и то в качестве теста. Всем спасибо, противная недоработка наконец-то "подпернута" костылем.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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