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

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий

@dsh так баг привращается в фичу:cool:

  • Согласен 1

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

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

UriZzz.gif

Ссылка на комментарий
3 часа назад, Баба ЯГА сказал(а):

где-то в скриптах есть коллбэк на взятие ГГ в руки физобъекта

Имя скрипта как бы намекает: bind_physic_object.script

Там ф-ия: generic_physics_binder:use_callback

Через неё без проблем отследишь поднятие дроп-ящика, в котором заведомо может  что-нибудь спаунится. А остальное... Не уверен, попробуй ковырнуть init, но думаю, выше упоминали правки движка не без причины.  

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

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

По физ-объектам - понял, спасибо, нет смысла, надо движок ковырять.

 

Есть ещё вопрос, получил через пакет данные по level_changer, там есть:

 

dest_position = userdata

dest_direction = userdata

 

Я пробовал так:  vector(t.dest_direction).x - но оно выдаёт всё по нулям...

пробовал так: t.dest_directiondirection().x - так вообще ошибку выдаёт...

как вместо userdata получить данные?..

 

shapes = table

t.shapes[1]: offset = userdata
t.shapes[1]: shtype = number
t.shapes[1]: v2 = userdata
t.shapes[1]: v3 = userdata
t.shapes[1]: v1 = userdata

 

Так-же там есть shapes - таблица, я её распарсил - но в ней тоже userdata...

 

Как получить данные в этих случаях из userdata?

 

1) хочу посмотреть как там всё устроено на переходах

2) нужно изменить точку перехода и сделать радиус метра два - не больше, пробовал так:

 

t.level_vertex_id = 397480
t.game_vertex_id = 1811
t.shapes = { { ["shtype"] = 0, ["center"] = vector():set( 0, 0, 0 ), ["radius"] = 2 } }

 

но ничего не вышло...

Изменено пользователем Баба ЯГА

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

Ссылка на комментарий
07.04.2021 в 17:12, dsh сказал(а):

Это баг оригинального движка.

Насколько помню - это недозапись в огф модели актора в костюмах группировок, где таскание трупов\вещей забагованно. В СДК должен быть указательstalker_hero_captures.ltx.

Изменено пользователем gam
  • Полезно 2
Ссылка на комментарий

@Баба ЯГА Вот некоторые модели исправляющие данный косяк, сделанные правда для себя. По моему к модам Лекс антигаз и Джекман армор. Если пригодиться конечно.

https://disk.yandex.ru/d/_MwdBMiNp9CvBw

 

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

Возможно ли получить в игре скриптово реальное время компьютера (не игровое время), как в Lua с помощью os.date()  ?

Если да, то можно пример для получения yy:MM:dd hh:mm:ss?  

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

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

@Баба ЯГА, а чем os.date() не устраивает?

Пример:

local date_str = os.date("%y:%m:%d %H:%M:%S")

 

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

Теги для os.date (PiL3):

 

%a  Сокращенное название дня недели (например, Wed)

%A  Полное название дня недели (например, Wednesday)

%b  Сокращенное название месяца (например, Sep)

%B  Полное название месяца(например, September)

%с  Дата и время(например, 09/16/98 23:48:10)

%d  День месяца (например, 16)[01-31]

%H  Час в 24-часовой системе (например, 23)[00-23]

%I  Час в 12-часовой системе (например, 11)[00-11]

%j  День года (например, 259) 1001-3661

%M  Минуты (например, 48)[00-59]

%m  Месяц (например, 09)[01-12]

%p  "am" или "рm"

%S  Секунды (10)[00-60]

%w  День недели (3)[0-6=Воскресенье-суббота]

%x  Дата (например, 09/16/98)

%X  Время (например, 23:48:10)

%y  Год как две цифры (например, 98)

%Y  Полный год (например, 1998)

%%  Знак %

 

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

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

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

@WinCap Я знаю как в Lua получать дату и время... Будь добр, прочитай ещё раз мой предыдущий вопрос, внимательно. Потом - сам проверь В ИГРЕ - то что ты рекомендуешь - и ты сам себе ответишь на свой вопрос: "... а чем os.date() не устраивает..." Если бы оно работало В ИГРЕ - я бы не спрашивал :facepalm:

Вопрос - актуален: 

 

Возможно ли получить в игре скриптово реальное время компьютера (не игровое время) -> как в Lua с помощью os.date()?  Если да, то можно пример для получения yy:MM:dd hh:mm:ss?

Для "быстрых" и невнимательных: os.date() в игре STALKER - не работает.

 

! Unknown command:  ..\gamedata\scripts\test.lua:101:_attempt_to_index_global_'os'_(a_nil_value)

 

Изменено пользователем Баба ЯГА
  • Не согласен 1

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

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

@Баба ЯГА Как это не работает? В OGSE таким образом главное меню подбирается в зависимости от реального времени суток.

 

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

function main_menu:InitBackground()
    local time = level.present() and level.get_time_hours() or tonumber(os.date("%H", os.time()))
    local night = time <= 8 or time >= 20
    self.bg_st:InitTexture(night and "ui\\ui_mm_night_back" or "ui\\ui_mm_main_back")
    local multiplier = 0.5625
    if screen_aspect_ratio > 2 then -- ultra-wide
        multiplier = 0.40
    end
    local tex_orig_w = screen_aspect_ratio * 1024 * multiplier
    local tex_orig_x_offs = (1024 - tex_orig_w) / 2
    self.bg_st:SetOriginalRect(tex_orig_x_offs, 0, tex_orig_w, 768);
end

 

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

@I am Dead ну, может, в OGSE - уже и допилили движок и там есть такое, не спорю, у меня - нет (играю в Диетическую Солянку), кстати, в оригинале - тоже нет os. Вот по-этому и спрашиваю - может кто поможет (если, конечно, кто знает).

 

 

 @NikitosKnyaz 

12 часов назад, NikitosKnyaz сказал(а):

можно ли в ОП 2-1 через скрипт выдать и показать на карте все тайники существующие в зоне?!

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

Можно, вот так, например:


function find_all_tainik()
  local s_obj,cnt = nil, 0
	for i = 1, 65534 do
    s_obj = alife():object(i)
    if (s_obj) and (s_obj:section_name():find("inventory" , 1, true) or s_obj:section_name():find("_box" , 1, true))  then
		  cnt = cnt + 1
      get_console():execute( "load ::: ".."section: "..s_obj:section_name().." | name: "..s_obj:name().." | id: "..s_obj.id)
      if level.map_has_object_spot( s_obj.id, "treasure" ) == 0 then -- нет метки
        level.map_add_object_spot_ser( s_obj.id, "treasure", "Тайник"..s_obj:name() ) -- поставим свою
      end
    end
  end
  get_console():execute( "load ::: ".."Количество найденных тайников = "..cnt)
end

find_all_tainik()

 

 

 

Изменено пользователем Баба ЯГА

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

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

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

1. Как скриптово активировать диалог с нужным нпс?

2. Как активировать торговлю с этим нпс? (Например, после активации определённой фразы)

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

@ARTLantist, поскольку вопрос задан в теме "скриптование", то:

1. Функции npc:set_start_dialog("start_dialog") и npc:restore_default_start_dialog().

2. Функции npc:enable_trade() и npc:disable_trade().

Но, возможно, удастся обойтись стандартными средствами:

1. Теги has_info и dont_has_info для диалога или параметры meet_dialog и use в секции meet работы npc.

2. Параметр trade_enable в секции meet работы npc.

  • Нравится 1

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

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

Приветствую. Пару вопросов:

1)В игре есть метод начать неразрываемый диалог с НПС, однако существует хитрость: если нажать паузу, а затем Esc, то такой диалог всё-таки закроется. Как это поправить?

2) Есть такая функция:

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

if math.random(100) <= 50 then
    действие_1
elseif math.random(100) > 50 then
    действие_2
end

но срабатывает не всегда. Где ошибка?

Спасибо.

Изменено пользователем Jek@n
Ссылка на комментарий
43 минуты назад, Jek@n сказал(а):

Есть такая функция: ... Где ошибка?

Ошибка, как мне кажется, в elseif. В данном варианте вероятность срабатывания будет такой:

0% <-- действие_1 --> 50% <-- ничего_не_делать --> 75% <-- действие_2 --> 100%.

Нужно написать так:

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

if math.random(100) <= 50 then
    действие_1
else
    действие_2
end

 

 

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

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

Ссылка на комментарий
4 часа назад, Jek@n сказал(а):

нажать паузу, а затем Esc, то такой диалог всё-таки закроется. Как это поправить?

Ну, самый простой способ: не нажимать на esc вовремя паузы.

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

Ни чего больше, кроме правки движка, в голову не лезет.

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

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

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

UriZzz.gif

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

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

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

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

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

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

Войти

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

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

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