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

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

Здрасьте.

 

Есть диалог выбора типа ПНВ при прокачке брони, который выглядит примерно так:

фраза 11: выбираю ПНВ "Зеленый" / действие: установка ПНВ тип 1

фраза 12: выбираю ПНВ "Цифровой" / действие: установка ПНВ тип 2

фраза 18: выбираю ПНВ "Белая ночь" / действие: установка ПНВ тип 8

 

Можно ли получить номер, id или текст последней задействованной в диалоге фразы, чтобы исходя из этого определять тип ПНВ и не писать 8 однотипных функций? Думаю, где-то должна храниться информация "скрипт был вызван из фразы phrase_id диалога dialog_id".

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

И Вам не хворать.

В xml диалоги добавить тег <action> примерно вот так

<phrase id="123">
    <text>dialog_123</text>
    <action>dialogs.action</action>
</phrase>

где dialogs.action - function action(first_speaker, second_speaker, dialog_id, phrase_id) в файле dialogs.script

Как то так?

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

Через нет-пакет.

Вроде как story_id - свойство объекта "только для чтения". Сомнительно, что получится задать его простой правкой нет-пакета. В поясниловке к модулю Artos'а есть целый раздел об этом...

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

@AndreySol,@Змея,  Можно и записывать. Если еспользуйте X-Ray extensions, то там есть отдельная ф-ция. Логику можно задать в секции НПС или нет-пакетом.

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

@AndreySol, если порыться в самом модуле, можно увидеть, что свойство story_id входит в массив state свойств класса net_cse_alife_object. В то же время в классе net_cse_abstract есть position, direction и др. свойства, но вот именно story_id там нет. Думаю, значение story_id должно прекрасно устанавливаться без дополнительных плясок с бубном, требующихся при работе с абстрактной частью пакета. Мне кажется, что в сопроводиловке к модулю Артос просто описАлся.

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

 

10 часов назад, Змея сказал:

Как функцию спавна писать в скрипте?

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

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

 

P.S. По логике: если брать мой пример выше, то содержимое кастом даты можно установить так:

--...
local data = pk:get()
data.custom_data:setString("логика и проч.")
--...

 

Изменено пользователем Kirgudu
  • Согласен 1
Ссылка на комментарий
4 hours ago, Kirgudu said:

Но если я не прав - с удовольствием посыплю голову пеплом.

Прав, прав. story_id через нетпакет устанавливается. Единственное, что нужно помнить устанавливающим, что движок его зарегистрирует только при следующей загрузке сейва. Т.е. после сейв-лоада, ну или при переходе на другую локацию, что то же самое. 

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

А зачем заспавненному неписю вообще устанавливать story_id, зачем он ему нужен?

 

3 часа назад, dsh сказал:

что движок его зарегистрирует только при следующей загрузке сейва

Вроде даже при перезапуске игры.

Ссылка на комментарий
4 hours ago, Zagolski said:

зачем заспавненному неписю вообще устанавливать story_id

Например, что бы его потом по этому story_id найти и что нибудь с ним сделать. Или, что бы движок не удалил его трупик, если он будет долго лежать. А может ещё для чего, кто знает. 

 

4 hours ago, Zagolski said:

Вроде даже при перезапуске игры.

Точно не только при перезапуске игры. Но это относится к оригинальному движку. В NLC, к примеру, понятия не имею, как оно будет, что там переписали и поменяли. 

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

NLC, к примеру, понятия не имею, как оно будет, что там переписали и поменяли. 

То же самое осталось. Присваиваем story_id - переходим на другую локацию ( или сохраняемся и  грузим  сэйв) - получаем непися с новоприсвоенным story_id

След от кругов на воде - это тоже след (с)

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

Здравствуйте!

Подскажите, какой функцией можно включать/выключать фонарик в X-Ray extensions? И как подключить коллбэк на изменение состояния фонарика?

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

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

@Graff46, уже три раза перечитал эту статью.:biggrin:

Не могу понять, как использовать эти функции:

switch_torch(bool<switch_on>) -- переключает фонарь
bool<is_on> is_torch_enabled() -- возвратит true, если фонарь включён

 

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

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

@Fenrir02, Эти методы применимы к клиентскому объекту фонаря.
 

db.actor:object('device_torch'):switch_torch( true или false) -- включить или выключить фонарик
db.actor:object('device_torch'):is_torch_enabled() --Возвратит true или false в зависимости включен-ли фонарь

 

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

Доброго времени. У меня вот какой вопросик странный есть: возможно ли каким-то образом перебрать всех живых НПС и получить имя абсолютно случайного живого НПС? 

 

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

@_Sk8_AsTeR_, можно так примерно (для онлайновых нпс):

      local obj
	  local tbl = {}
	  for i = 1, 65534 do
	    obj = level.object_by_id( i )
	    if obj and isStalker( obj ) and obj:alive() then
	      table.insert( tbl, obj:character_name() )
	    end
	  end
	  return tbl[ math.random( #tbl ) ]
	

Либо по таблице db.storage пройтись. Для оффлайновых придется читать имя из их нет-пакета.

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

Здрасьте.

 

Имеется массив:

local nv_type = {
        ["bad"] = { ["price"] = 10*k, ["id"] = 911 },
        ["good"] = { ["price"] = 25*k, ["id"] = 912 },
        …
        ["bast"] = { ["price"] = 30*k, ["id"] = 918 }
                }

 

Как, имея конечное значение определенной строки, получить ссылку с названиями секций, например "nv_type.good.id" для значения "912"?

Простой поиск через "for key, value in pairs do" с возвратом имени ключа результата не дает (видимо, потому, что массив многоуровневый).

 

Сразу уточню, построение массива наоборот ( [911] = { [type] = "good", [price] = 10*k }, …) не рассматривается.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
print(nv_type["good"].id) -- печатать фиксированный элемент

for k, v in pairs(nv_type) do -- печатать всё
    print(nv_type[k].id)
end

Что-то такое?

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

Ранее был известен под ником BoBaH_671.

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

Я вот так делаю

Spoiler

local result = ""

    for i, v in pairs(nv_type) do
        if v == choice then
        result = i
        else
        result = "nope"
        end
    end
    
    db.actor:give_talk_message(result, task_texture, task_rect, "iconed_trade_info")

и получаю сообщение "nope". Как эту функцию перестроить, чтобы получить номер главной секции ("good") по значению входящего ключа ("id" = 911)?

 

Примечание: choice = номер фразы в диалоге, 911…918.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
local nv_type = {
        ["bad"] = { ["price"] = 10*k, ["id"] = 911 },
        ["good"] = { ["price"] = 25*k, ["id"] = 912 },
        ["bast"] = { ["price"] = 30*k, ["id"] = 918 }
                }

function get(choice)
local result = "nope"
    for k, v in pairs(nv_type) do
        if nv_type[k].id == choice then
            result = k
            break
        end
    end
    return result
end

PS: мне уже надоело редачить посты, чтобы исправлять табуляцию. Я ставлю одну, в посте их оказывается две. Сделал пробелами. Что я делаю не так? :az1000106:

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

Ранее был известен под ником BoBaH_671.

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

@Overfirst, твой пример можно сделать ещё проще, без повторного поиска в массиве: 

--...
if v.id == choice then
--...

А про табуляции отпиши в "вопросы и предложения", сюда админы могут и не заходить. :)

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

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

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

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

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

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

Войти

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

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

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