Скриптование - Страница 451 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

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

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/
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

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

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

 

8 часов назад, Metro_Rus сказал:

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

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

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

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

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

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

 

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

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

@Graff46 платформа «Зов Припяти»?

В custom_data персонажа пропиши секцию:

[dont_spawn_loot]

 

  • Согласен 1

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

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

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

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

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

Войти

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

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

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