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

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

Только что, Fenrir02 сказал:

Подайте идею.

Запоминай в пстор время (game.time()) когда батарея начала работать и проверяй сколько она работает, где проверять смотри сам, можно конечно биндером постоянно, можно еще на какое событие повесить, например дроп ГГ, ведь в игре достаточно часто патроны перезаряжаем, что то выкидываем, продаём\покупаем и тд...

Не забываем про level.add_call

Изменено пользователем Graff46
Ссылка на комментарий
2 часа назад, Fenrir02 сказал:

Не совсем понял что это

Хранилище данных, данные в псторе сохраняются в сейвах. В популярных скриптовых фрэймворках (amk.script и тд.) есть свои функции записи\чтения пстора, в ТЧ есть такие ф-ции в скрипте xr_logic.scripts

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


function pstor_store(obj, varname, val)
    local npc_id = obj:id()
    
    if db.storage[npc_id].pstor == nil then
        db.storage[npc_id].pstor = {}
    end
    local tv = type(val)
    if not pstor_is_registered_type(tv) then
        abort("xr_logic: pstor_store: not registered type '%s' encountered", tv)
		return
    end
    db.storage[npc_id].pstor[varname] = val
	return val
end

function pstor_retrieve(obj, varname, defval)
    local npc_id = obj:id()

    if db.storage[npc_id].pstor ~= nil then
        local val = db.storage[npc_id].pstor[varname]
        if val ~= nil then
            return val
        end
    end 
    if defval ~= nil then
        return defval
    end
    return nil
--'    abort("xr_logic: pstor_retrieve: variable '%s' does not exist", varname)
end

 

Рекомендую в качестве объекта использовать ГГ.

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

Хранилище данных

А возможно ли при этом ещё и запоминать состояние аккумулятора (condition), чтобы прямо из инвентаря видеть сколько осталось зарядки?

Важнейшая задача цивилизации - научить человека мыслить.

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

Рекомендую в качестве объекта использовать ГГ

Не рекомендую в качестве объекта бездумно использовать ГГ. Любой пстор пишется в net-пакет того объекта, к которому пстор относится. А net-пакет имеет, как мы знаем, ограниченный размер, при превышении которого можем запросто получить битое сохранение. Скриптёр по незнанию, неопытности или забывчивости здесь что-то сохранит в пстор ГГ, там запишет, ещё где-то - и опаньки!

15 часов назад, Fenrir02 сказал:

ещё и запоминать состояние аккумулятора

Почему нет? Записать и прочесть можно больше, чем одну переменную.

Ссылка на комментарий
2 часа назад, Kirgudu сказал:

А net-пакет имеет, как мы знаем, ограниченный размер

Когда то тут писали о том, что пстор ГГ не имеет ограничения... Если это не так, то есть скрипт для пстора, не помню автора, в Сборочном цехе должен быть.

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

Всем доброго времени суток! Есть скрипт критического ранения ГГ. Задумка вывести в лог файл, два лога при ранении ГГ. Первый лог "AAAAAAAAA" второй "BBBBBBBBB". Допустим лог "AAAAAAAAA" привязан к покраснению экрана , а лог "BBBBBBBBB" привязан к звуку.  Возможно ли воткнуть таймер на вывод второго лога после вывода первого? 

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

function printf(fmt,...)
local con = get_console() 
con:execute(string.gsub(string.format(fmt,...), " ", "_")) 
con:execute("flush") 
--	log(string.format(fmt,...))
end

lite_treshold = 0.001 -- насколько должно уменьшиться здоровье с предыдущего обновления чтоб экран окрасился в красный
crit_treshold = 0.001 -- насколько должно уменьшиться здоровье с предыдущего обновления чтоб ГГ начало шатать
drop_item_on_crit_prob = 0.001 -- вероятность того что ГГ выронит оружие
effector_power_coeff = 0.007
prev_health = -1
chk_h_t = 0

function wounded_pp_update()

  if (chk_h_t or 0) < time_global() then
    chk_h_t = time_global()+1000
    if prev_health > (db.actor.health + lite_treshold) then
      level.add_pp_effector("fire_hit.ppe", 2011, false)
      local effector_power = (prev_health - db.actor.health)*100*effector_power_coeff
      level.set_pp_effector_factor(2011, effector_power)
	  printf("AAAAAAAAA")
      if prev_health > db.actor.health + crit_treshold then
      printf("BBBBBBBBB")
        local snd_obj = xr_sound.get_safe_sound_object([[actor\pain_3]])
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        if math.random() < drop_item_on_crit_prob then
          local active_item = db.actor:active_item()
          if active_item and active_item:section() ~= "bolt" and active_item:section()~= "wpn_knife" then
            db.actor:drop_item(active_item)
          end
        end
      end
    end
    prev_health = db.actor.health
  end
end

 

 

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

Приветствую.

Вопрос такой : возможно ли скриптом воспроизвести звук из определённой точки локации со стандартными координатами (x,y,z),lv,gv

Спасибо.

"Кругом зомби.....у меня кончаются патроны...."

Ссылка на комментарий
57 минут назад, BFG сказал:

возможно ли скриптом воспроизвести звук из определённой точки локации

https://xray-engine.org/index.php?title=Класс_sound_object#play_at_pos

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

Господа, подскажите пожалуйста по поводу таймера. Сделал простенький таймер, корни которого тянутся из bind_stalker ( ф-ция: actor_binder:update(delta)). По истечению таймера вызывается функция.

Простенький таймер исправно работает, но отчет начинается всегда только с загрузки сейва, или загрузки локации. А мне нужно, чтобы отчет начинался от предыдущего вызова функции. То есть что я имею в виду (объясню пошагово):
 

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

 

1) Загрузились, начался таймер (пусть будет 10 игровых минут). По истечению таймера (условно 10 игровых минут) вызвалась функция. 

2) Далее в игре проходит 8 минут, я сохраняюсь и перезагружаю сейв (или вообще перезапускаю игру).

3) После загрузки сейва нужно чтобы таймер продолжал с 8-ой минуты отчет и на 10-ой снова вызвал функцию

 

Подскажите, в какую сторону копать? Не подобный ли таймер реализован АМК? Имею в виду динамические новости. Там вроде именно так они работают...

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

@_Val_ Угу. Уже несусь. Прям ветер задувает (((

===================================

@Graff46 Я не скриптер ни разу. И никогда им не стану. Мне б хоть мод с куском кода оттуда, тогда ещё ладно. Но по каким -то гипотетическим описаниям функций -  это увы. Из прочитанного я не понял вообще ничего. Т.е. абсолютно.

 

"Кругом зомби.....у меня кончаются патроны...."

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

@BFG, Петрович, если правильно помню, звук можно запустить с привязкой к актору, но по нужным тебе координатам - от них он и будет звучать. Пример:

local snd = sound_object([[helicopter\death_1]])
snd:play_at_pos(db.actor, vector():set(x, y, z))

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

if not snd:playing() then
...
end

 

  • Спасибо 1
Ссылка на комментарий
13 часов назад, BFG сказал:

Мне б хоть мод с куском кода

Atmosfear - surge_manager.script - там функция проигрывания звука по координатам...

  • Спасибо 1
  • Полезно 1
Ссылка на комментарий

И снова здравствуйте!

Подскажите, можно ли реализовать запрет на обыск трупов\рюкзаков\ящиков, когда у ГГ заняты руки?

В NLC 7 есть такая фишка.

P.S.: условие "занятых рук" задать могу - if weapon_hide == false then

А дальше...

Заранее спасибо.

  • Полезно 1

Важнейшая задача цивилизации - научить человека мыслить.

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

Привет народ!

Кто-нибудь знает какая функция в скриптах проигрывает звук смерти НПС(как в ТЧ или в ЧН... Типа: "Ай мля...", "Ты что?!", "Мамаа...") или это в движке?

 

"Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов

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

OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ

 

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

какая функция

Это движком вызывается. Можно переопределить звуки, а можно написать функцию которая будет звуки воспроизводить

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

Здравствуйте, камрады!

Появилась одна задумка у меня, не знаю как подступиться к реализации.

Существует ли способ заставить НПС стрелять в актора, не делая его им врагом?

---------------------------------

www.amk-zone.de

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

@Wlad777 да вроде прямо через логику можно. Не помню точно, в схеме camper если поставить anim = threat_fire, как раз должен стрелять. Можно и совсем скриптово. Через set_sight() устанавливаешь направление взгляда, через set_item() устанавливаешь для оружия режим стрельбы object.fire1 и параметры стрельбы. Это если грубо, в общих чертах.

 

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

Мне нужно, чтобы у некоторых НПС после смерти был пустой инвентарь. Я создал для них новую родительскую секцию (вместо stalker из m_stalker.ltx), переопределил script_binding на свой аналог xr_motivator.scripts, в нём я отключил спавн "посмертного лута", но при смерти у НПС остаются некоторые вещи (ПДА, патроны и тд...)... Как мне лучше удалять объекты из мёртвых НПС? Крутить циклы не хотелось бы...

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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