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

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

Господа Скриптоведы .Кто знает, какой файл в Lost Alpha управляет патронами на поясе? Хочу отключить. В интернате ни черта не могу найти(((

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


Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, Dennis_Chikin сказал:

А что, вообще, хотели этим сказать ?

Если ты имел в виду синтаксическую ошибку, то её там нет. Условие является независимым, а предыдущую строку надо читать целиком, как самостоятельное присвоение:

local section = active_slot ~= 3 and active_item:section() or "grenade"

 

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


Ссылка на сообщение
Поделиться на других сайтах

if who:active_slot() == 3 then ...

else

  local item = who:active_item()

  if item and t[item:section()] then ...

  end

end

 

Может, все-таки так ?

 

Или сразу:

if who and who.active_slot and ( ( who:active_slot() == 3 ) or ( who:active_item() and t[who:active_item():section()] ) ) then ... end

 

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


Ссылка на сообщение
Поделиться на других сайтах

А вот кстати еще один животрепещущий вопрос. Что за гадская схема kamp

Какой раз уже сталкиваюсь - если непись идет с пути патрулирования к костру...уже находится под схемой kamp...то если его в момент передвижения(до того - как он уселся) - дернуть в другую схему, то сразу срабатывает Scheduler

Я конечно это дело обошел, методом дописывания неписю еще одного пути прямо к костерку по схеме walker, но что-то меня это начало утомлять.

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


Ссылка на сообщение
Поделиться на других сайтах

Изрядно гадская, да. Пришлось шаманствовать с removeNpc():

    local kamp_end = xr_evaluators_id.stohe_kamp_base + 1
    local on_pos = xr_evaluators_id.stohe_kamp_base + 2

    local mgr = npc:motivation_action_manager()

-- todo: слишком сложно. ПРОСТО оторвать лишние эвалюаторы СОВСЕМ. Оставить все в одном.
    local a = mgr and mgr:action( xr_actions_id.alife )
    if a then a:remove_precondition( kamp_end )
    else log( "warning", "(%s):removeNpc, no action (alife) (%s)", self.center_point, npc:name() )
    end

    a = mgr:action( xr_actions_id.stohe_kamp_base + 3 )
    if a then
        xr_logic.unsubscribe_action_from_events( npc, st, a )
        mgr:remove_action( xr_actions_id.stohe_kamp_base + 3 )
        -- log( "info", "(%s):removeNpc, %s, 2", self.center_point, npc:name() )
    else log( "warning", "(%s):removeNpc, no action (action_kamp_wait) (%s)", self.center_point, npc:name() )
    end

    mgr:remove_action( xr_actions_id.stohe_kamp_base + 1 )
    -- log( "info", "(%s):removeNpc, %s, 3", self.center_point, npc:name() )

    mgr:remove_evaluator( kamp_end )
    -- mgr:add_evaluator( kamp_end, property_evaluator_const( true ) )
    mgr:remove_evaluator( on_pos )
    -- mgr:add_evaluator( on_pos, property_evaluator_const( true ) )

    -- if npc:name() == "bar_dolg_ivancov" then
    --    log( "info", "(%s):removeNpc, %s, remove_evaluators, ok", self.center_point, npc:name() )
    -- end

    st.on_position = false    -- поскольку строжейж грохнуть не дают, сделаем вид, что он новый.
    st.count = 0
    st.pos_lvid = nil
    st.dest_lvid = nil

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


Ссылка на сообщение
Поделиться на других сайтах

Я тут поэкспериментировал и вроде как получается, что в спавне (скриптом) можно не указывать точно гейм-вертекс, главное что бы он был с данной локации (на которой спавним)...

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

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


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени!

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

Пример: экзоскелет работает только с аккумулятором (это я сделал), но через некоторое время аккумулятор разряжается и удаляется из рюкзака.

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
Только что, Fenrir02 сказал:

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

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, 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

 

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


Ссылка на сообщение
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

AMK-Team.ru

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