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

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

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'а, и то в качестве теста. Всем спасибо, противная недоработка наконец-то "подпернута" костылем.

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

Шпаргалка

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

Господа, подскажите добрым советом, как проиграть звук? Задумка такая: в определенные часы будут от лица ГГ (типа по рации) проигрываться рандомные звуки, обрывки чьих-то фраз и тд, и всё это дело НПС будут комментировать в чат текстом, типа: "Что это было?" или "Вы тоже это слышали?"

Так вот, помогите пожалуйста по возможности с построением ф-ции с проигрыванием рандомного ogg из папки? Нужно только проигрывание рандомного звука...

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

@_Sk8_AsTeR_

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

do
	local lastIdx
	function name ()
		local sndTblPath = ["", "", ""] -- список путей до файлов со свуками
		local idx = math.random(0, table.getn(sndTblName))
      	
      	if idx ~= lastIdx then
			local sndPath = sndTblName[)]
			local snd = xr_sound.get_safe_sound_object(sndPath) -- путь до звукового файла
			snd:play_no_feedback(db.actor, sound_object.s2d, 1, vector(), 1.0)
      	else
      		for i=1,100 do 2+2*5 end
      		return name ()
     	end
	end
end

 

 

Изменено пользователем Graff46
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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