Скриптование - Страница 524 - Скрипты / конфиги / движок - 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/

Здравстуйте. Пытаюсь привязать объектам, чьи визуалы box_wood_01, box_paper и box_metall_01 хоть какие-нибудь метки на ПДА и миникарте.

Вот последний код, который я пытался использовать:

local is_box = { 
    ["dynamics\\box\\box_wood_01"] = true,
    ["dynamics\\box\\box_metall_01"] = true,
    ["dynamics\\box\\box_paper"] = true,
}

function show_boxes()
    local sim = alife()
    for i=1,65534 do
        local obj = id and db.storage[id] and db.storage[id].object
        if (obj and is_box[obj:get_visual_name()]) then
            level.map_add_object_spot_ser(obj.id, "название_метки")
        end
    end
end

До этого были ещё и другие. Сейчас и не вспомню. Второй день сижу, пытаюсь.

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

 local obj = id and db.storage[id] and db.storage[id].object

И чему тут будет равен obj ?

Сдается мне, тип будет boolean, а значение false, потому что в этой цепочке and-условий первым идет неопределенное id, если верить коду, равное nil.

Поэтому следующая проверка if (obj and... - по факту проверяет if (false and... - и далее уже ничего не выполняется. И до попытки найти поле id у объекта "false", код не добирается. А то вылетел бы.

 

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

Второй день сижу, пытаюсь.

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

Изменено пользователем Zander_driver
  • Спасибо 1
  • Нравится 1
  • Согласен 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

14.08.2020 в 00:52, Zander_driver сказал:

И чему тут будет равен obj ?

Вот ещё вариант:
 

local is_box = { 
    ["dynamics\\box\\box_wood_01"] = true,
    ["dynamics\\box\\box_metall_01"] = true,
    ["dynamics\\box\\box_paper"] = true,
}

function show_boxes()
    local sim = alife()
    for i=1,65534 do
        local se_obj = sim:object(i)
        if (se_obj and is_box[se_obj:get_visual_name()]) then
            level.map_add_object_spot_ser(se_obj.id, "название_метки")
        end
    end
end

 

Лог вылета:
 

FATAL ERROR
 
[error]Expression    : <no expression>
[error]Function      : CScriptEngine::lua_error
[error]File          : ..\xrServerEntities\script_engine.cpp
[error]Line          : 189
[error]Description   : fatal error
[error]Arguments     : LUA error: d:\stalker\gamedata\scripts\xr_show_box.script:11: attempt to call method 'get_visual_name' (a nil value)
 

stack trace:

0023:00773DCC xrCore.dll, xrDebug::fatal()
0023:054CEC1F xrGame.dll, CDialogHolder::UseIndicators()
0023:00453F6E xrEngine.exe, CInput::OnFrame()
0023:0040F2DA xrEngine.exe, CRenderDevice::message_loop()

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

get_visual_name

Такой метод есть у клиентских объектов, но у серверных его нет. О чем лог собственно, и сообщает.

  • Спасибо 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

@DibokDibokin, попробуй так:

 

local s_obj = alife():object(i)
if s_obj ~= nil then
    local c_obj = level.object_by_id(s_obj.id)

    if (c_obj and is_box[c_obj:get_visual_name()]) then

  • Спасибо 1
  • Полезно 1

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

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

Думается, мой вопрос имеет прямое отношение к скриптам - как реализовать (и есть ли мануал?) замедление или полную остановку игрового времени во время диалогов с неписями, во время чтения различных найденных документов ?

@mdm64, level.set_time_factor, если правильно помню.

  • Согласен 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

15.08.2020 в 15:36, mdm64 сказал:

как реализовать (и есть ли мануал?) замедление или полную остановку игрового времени во время диалогов с неписями

Я так понимаю - хотите фичу а-ля Фоллаут?

при диалогах и открытии инвентаря - все и всё вокруг замирают и ожидают действия игрока?

15.08.2020 в 15:58, Zander_driver сказал:

level.set_time_factor,

Это остановит только течение времени - смену дня и ночи и погодных циклов,

а вот НПС и зверушки как бегали и стреляли/кусались так и будут

  • Согласен 2
  • Полезно 1

В shadows addon 0.8 реализовано замедление времени по горячей клавише, может есть смысл по ковырять аддон?

  • Сомнительно 1

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

@Zander_driver, Да, он, вернее, требуется управление им.

@ted.80, Да, именно так. Просто в моём моде, который ещё верстается, есть довольно много больших диалогов и другой текстовой информации, во время которых (если игрок умеет читать) может произойти всё, что угодно - от выброса до нападения мутантов или враждебных сталкеров. Да и само время игры тратится по сути впустую, частенько будет получаться так - утром проснулся, похавал, поговорил с неписем или прочитал найденную инфу, и уже пора ужинать и баиньки... Конечно, несколько преувеличенно сказал, но суть именно такова.

Вот этого мне и нужно избежать.

@UriZzz, Честно говоря, пропустил эту фичу, аддон вроде как знакомый на слух. Ну, на крайняк придётся ковырнуть его, просто на это тоже требуется время, а чтобы разобраться в чужих скриптах, иногда немалое. Потому и задал вопрос, вдруг есть у кого нужное, уже выдернутое или просто есть.

2 часа назад, mdm64 сказал:

есть довольно много больших диалогов и другой текстовой информации

Предлагаю пару простых вариантов:

1. В gamedata/config/alife.ltx:  time_factor = 3 или меньше. Это уменьшит скорость течения времени в игре.

2. Ставить игру на паузу при чтении текстов. Соответственно, надпись "пауза" переместить так, чтобы не мешала.

  • Согласен 1

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

@aromatizer, Не лучший вариант. У меня обычно стоит time_factor = 10, и то потери игрового времени напрягают, а многие для себя ставят от 3 до 6.

А ставить на паузу тоже не вариант - каждый раз перемещать надпись "Пауза", а кроме того, насколько я помню, в режиме паузы в ЗП прокрутка не работает, опять же, иногда по несколько раз за прочтение одного документа снимать паузу, прокручивать и снова ставить паузу... сгодится, разве что, в качестве старого деревянного костыля....

  • Сомнительно 1
12 минут назад, mdm64 сказал:

каждый раз перемещать надпись "Пауза"

Зачем каждый раз?

  • Согласен 2

Здесь могла быть ваша реклама.

2 часа назад, mdm64 сказал:

У меня обычно стоит time_factor = 10, и то потери игрового времени напрягают

Не понял: переведи. А так-то time_factor = 10 предназначен для того, чтобы игрок быстрее бежал вперед, а не вдумчиво читал простыни текстов.) Думается мне, что оптимальное значение time_factor = 3.

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

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

@aromatizer, Да, для чтения 3-ка удобнее, слов нет. Но понимаешь, как-то контрреволюционно выглядит ситуация, когда ГГ за 3-10 минут выносит хорошо вооружённую многочисленную базу, тратя на переход из одного здания в другое несколько секунд. Не? :biggrin:

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

Изменено пользователем mdm64
  • Смешно 1
6 часов назад, mdm64 сказал:

время игры тратится по сути впустую, частенько будет получаться так - утром проснулся, похавал, поговорил с неписем или прочитал найденную инфу, и уже пора ужинать и баиньки

 

В игре есть парные info_portion: ui_inventory/ui_inventory_hideui_talk/ui_talk_hide,

которые отлавливаются при - открытии/закрытии - инвентаря и диалога соответственно,

написать Function() [и поставить её на апдейт] которая будет менять time_factor от 1 до 10,

в нужное время - это убережёт от выбросов, голода, жажды, и смерти от старости - во время чтения длинных диалогов,

но от зверушек и злобных нпс не спасёт.

  • Нравится 2
  • Согласен 2
  • Полезно 1

@ted.80, Так, а вот это уже очень интересно! я с парными поршнями дела не имел, поэтому просьба, если не сильно трудно, можно написать какой-то образец, инструкцию или шаблон толковый? Я хотя бы смогу освоить эти парные поршни, судя по описанию, они мне много где будут нужны.

@mdm64, попробуй этот код сунуть в файл bind_stalker.script в function actor_binder:update(delta) 

   в самый конец функции перед заключительным end

if db.actor:has_info("ui_inventory") or db.actor:has_info("ui_talk") then
	level.set_time_factor(1)
elseif db.actor:has_info("ui_inventory_hide") or db.actor:has_info("ui_talk_hide") then
	level.set_time_factor(10)
end

 

  • Нравится 1
  • Согласен 1
  • Полезно 3

@ted.80, Благодарю! Я так понимаю, что при этом изменяется ход времени при открытии-закрытии инвентаря, верно?

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

Что-нибудь кроме этого нужно в другие места добавлять? Поршни парные они системные или их необходимо всё-таки прописывать, как и "обычные"?

Изменено пользователем mdm64
Только что, mdm64 сказал:

Поршни парные они системные или их необходимо всё-таки прописывать

Системные. Их движок выдает/забирает, прописывать никуда не требуется.

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

Что-нибудь кроме этого нужно в другие места добавлять?

Неа. @ted.80, абсолютно готовый код написал, "под ключ" :) бери-пользуйся.

  • Согласен 1
  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

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

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

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

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

Войти

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

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

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