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

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

Недавно у меня возник вопрос про активацию предметов (выбор активного) у npc. К примеру, оружие можно выбирать по слотам или напрямую через set_item(), а фонарик через enable_attachable_item(). Каким способом можно выбрать детектор (так, чтобы он работал, а не просто висел)? Пробовал через set_item - не помогло. А слот для детектора, насколько я знаю, есть только у игрока.

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

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

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

Фонарик - тоже ясно, он светит иль нет, но уже слота не имеет, и для его включение/отключение как раз и используется метод enable_attachable_item.

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

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Какой такой "работы" ты ожидаешь от детектора у НПС, чтобы игрок воспринимал именно как "работает активизированный детектор"?

Чтобы подавал звук, как у ГГ. Анимации самих НПС есть в оригинале (используются в квесте с Кругловым), только их нужно запускать скриптами.

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

Полтергейст, понятно ... модинг ради модинга ... :-(

По существу:

Пиши тогда аналог sr_light.script, а отсутствующее движковое включение озвучки детектора (у фонариков это вкл.света) - прикрути теми же скриптами (что не сложно). Получишь эквивалент использования/активизации аля-фонарик.

Оффтопик:

1. Если учесть, что и сам актор/игрок НЕ выключает свой детектор, таская всегда в слоте, т.е. он уже всегда активен(!) - то какова же будет игра, если вблизи какой-нить аномалии и группки неписей у них начнется какофония звуков от всех детекторов?

:wub:

И, кстати, если неписи, как дураки, не слышат пищания акторского детектора - то возникает вопрос - а почему должен актор слышать ихние? Тогда уж и писк их КПК должен слышать и, если какие-нить плееры в игре - то и музон от каждого ... :crazy:

ИМХО, уж если захотелось дать в какой-то сцене озвучку чужих детекторов, то ничено не мешает к тем же скриптам запускающим анимацию с детектором в руках, пригрутить и запуск звука детекторного ... а по окончании вырубить его.

 

 

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Вопрос по фонарику актера(ГГ) - им можно управлять скриптово: вкл\выкл, изменить параметры луча (ярче\темнее\фокус) ? Можно-ли скриптово отследить состояние - включен или выключен ?

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

AndreySol

О том, что многие параметры из *.ltx-конфигов предметов читаются один раз при старте игры и далее неизменны - давным давно всем (не только что начинающим) известно и об этом можно самому найти и прочитать. Параметры, которые возможно изменять можно посмотреть в секциях нет-пакетов соответствующего класса объекта. Параметров луча фонарика (ярче\темнее\фокус и т.п.) в нет-пакетах нет. О различных вариантах возможного внешнего вмешательства в память игры (xRray Extensions или аналоги) тут нет речи.

Если ознакомиться со скриптом sr_light.script, то можно увидеть, что для отслеживания состояния фонарика у НПС можно проверить:

oTorch:attachable_item_enabled() == true - где oTorch - собственно клиентский объект фонарика находящегося в инвентаре у НПС (если конечно он один у него, иначе перепроверяй все).

Для актора нужно проверять параметр нет-пакета: torch_flags (что даст информацию и по активности ПНВ) и если нужно изменять (управлять вкл/выкл):

torch_flags.Active = 1

torch_flags.NightVisionActive = 2

torch_flags.Unknown = 4

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos

И, кстати, если неписи, как дураки, не слышат пищания акторского детектора

В том-то и дело, что слышат, просто никак не реагируют. Собственно, я только из-за этого и взялся за эту (бредовую?) затею, т.к. думаю, что разрабы не зря включили детекторы в список объектов, на звук от которых срабатывает callback.sound.

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

В общем так я и предпологал, что с фонариком через нет-пакет работать прийдется.

И еще вопрос по фонарику - используя нет-пакет можно блокировать\разблокировать включение\отключение фонарика игроком через назначенную клавишу ?

 

Добавлено через 39 мин.:

Artos, в Вашем сообщении №666057 от 27.1.2012, 10:42 есть ссылка на обновленный модуль для работы с нет-пакетами, но она устарела. Можно обновить ? Или где скачать этот модуль ?

 

Добавлено через 48 мин.:

Artos, в еще одном Вашем сообщении №634939 от 13.10.2011, 1:54 есть такое:

а) В 'se_item.script' для классов оружия добавить функции чтения нет-пакетов и там брать нужные параметры с конца пакета. Учитывая, что апдейт и не част и не редок - для обсчета выстрелов этого вполне достаточно. И не требуется загружать апдейт актора.

б) Где удобно выполнять мониторинг наличия активного оружия в руках ГГ и именно это оружие (ID) мониторить в 'se_item.script'.

в) Отсекать перезарядки и пр. по их коллбэкам.

Можно подробнее, о том что имелось в виду в пункте в) ?
Ссылка на комментарий

AndreySol

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

Вообщем там возвращает определённую цифру когда идёт анимация зарядки, когда стрельба, когда переключение подствола и так далее. Колбека на стрельбу по моему кстати нету или он не точный - не помню, так что дополнительно надо расход патронов следить.

Строгое предупреждение от модератора ColR_iT
Это что это за ЗХ такое?!
Изменено пользователем ColR_iT

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Artos

Вопрос по поиску модуля для работы с нет-пакетами снимается, нашел от 27.01.2012.

 

Начал пробовать что да как, к примеру с тем же фонариком ГГ:

local obj_torch = db.actor:item_in_slot(9)
local se_obj = alife():object(obj_torch:id())
local pk = m_netpk.get(se_obj) -- запрос нет-пакета
if pk:isOk() then
    local data = pk:get() -- читаем данные из нет-пакета
    if data and data.upd then
        if data.upd.torch_flags then
local msg = string.format("%d", data.upd.torch_flags)
news_manager.send_tip(db.actor, msg, nil, nil, 30000)
        end
    end
end

в результате выдает сообщение "5". Как оно связано с:

torch_flags.Active = 1

torch_flags.NightVisionActive = 2

torch_flags.Unknown = 4

не понимаю. Помогите разобраться.

 

Сообщение от модератора ColR_iT
В следующий раз пост удалю. В шапке чётко написано: "К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк."
Изменено пользователем ColR_iT
Ссылка на комментарий

Версия модуля нет-пакетов (m_netpk.script) была обновлена до 120202.

В настоящее время актуальная версия: m_netpk 120311 (~26.6 кБ)

 

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

Немало параметров в игре имеет 'битовый' характер (object_flag/visual_flag/restrictor_flags/weapon_addons/...) и torch_flags тут не исключение. Т.е. важно значение каждого бита этого параметра, а не их сумма ...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Artos, я извиняюсь, но не могли бы вы привести пример простейшего сохранения глобальной переменной?
Ссылка на комментарий

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

1. Сохраняют/запоминают или значение или имя или и то и другое. О чем ты спрашиваешь?

2. "Сохранить" куда?

- в область памяти игры, чтобы можно далее в игре воспользоваться запомненным значением?

- сохранить в сэйв, чтобы после возобновления игры можно было восстановить запомненное?

- сохранить еще куда-то ... во внешний файл, например иль еще куда?

3. И для чего упомянуто определение "глобальная"? Если чтобы отделить от аналогичного имени локальной переменной, то имеет смысл привести конкретный контекст кодов, в которых требуется запоминать.

4. Немаловажен и тип данных значения 'запоминаемой' переменной ...

 

Для подобных вопросов имеется топик "Язык Lua. Общие вопросы программирования."

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Сообщение от модератора ColR_iT
Вопрос Viнt@rь и всю суть перенёс в соответствующую тему: [CoP] Ковыряемся в файлах, подобным вопросам там самое место, здесь же без кодов делать нечего...
Ссылка на комментарий

Artos, по порядку:

Сохраняют/запоминают или значение или имя или и то и другое. О чем ты спрашиваешь?

Сохранить значение. В моем случае, например число 90.

 

"Сохранить" куда?

Я думаю лучше будет сохранить в отдельный файл(скрипт) чтобы потом можно было считать необходимую переменную.

 

Приведу свой код:

damage = 100
local table_utterances = {"У вас нет консервы.","У вас нет не одной консервы.","У вас отсутствуют консервы.","Нечего открывать."}

function use_knife()
if damage == 0 then
create_item_in_inv("knife_broken")
broken_knife() --\\ это вывод сообщения он не важен.
return
end
if db.actor:object("conserva") then
remove_item_in_inv(db.actor,("conserva"))
create_item_in_inv("conserva_o")
create_item_in_inv("knife")
if proverka_sharpening_to_zero() == false then
damage = damage - 10
end
damage_knife() --\\ Состояние Ножа.
else
create_item_in_inv("knife")
news_manager.send_tip(db.actor, game.translate_string(table_utterances[math.random(#table_utterances)]))
end
end

 

 

После использования ножа его состояние уменьшается от 100 до 90. Всё отлично, но после перезагрузки глобальная переменная сбивается, и поэтому у меня возникла необходимость сохранить ее, чтобы после очередной перезагрузке игры, нож имел состояние, которое было до перезагрузки.

 

P.S. Вопрос тесно связан с игрой, поэтому решил писать сюда.

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

Tris, ты даже не удосужился полезть в скрипты, почти, любого мода, так как во многих из них используются функции сохранения/загрузки переменных, например: скрипты Artos`a, амк мода, и тп, включая оригинальный, пысовский, скрипт xr_logic в котором есть функции эти функции:

1.pstor_store(obj, varname, val) - сохранение переменной varname с значением val в пстор obj

2.pstor_retrieve(obj, varname, defval) - -загрузка переменной varname из пстора obj, если такой переменной нет, то вернет defval

 

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

Изменено пользователем Viнt@rь
Ссылка на комментарий

Возможно-ли перевести в офф-лайн и обратно в он-лайн объект, находящийся в слоте актера(ГГ), к примеру фонарик ? Если да, то как это правильно сделать.

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

Tris, очень советую изучать мат.часть :-) , иначе будешь изобретать велосипеды ...

О том, как сохранять нужное значение в сейве почитай в ФАК'эх и, как подсказал Viнt@rь, посмотри в готовых кодах оригинальной игры и многочисленых модах. Ведь это же одно из самых простейших и персонально для тебя нет желания дублировать строки кода. Тем более, посмотрев и почитав самостоятельно, надеюсь получишь не только ответ на этот вопрос.

А вот то, что ты до сих пор не знаешь того, что твоя переменная damage по сути должна соответствовать свойству предмета item:condition() - вот это жаль. Вместо того, чтобы изменять не некую искусственно придуманную переменную и вопрошать "а покажите мне как ее сохранить" - изменяй именно само состояние (износ) предмета и оно само сохранится в сэйве.

Как читается/изменяется параметр состояния предмета (condition) - смотри в кодах игры, примеров немало. Заодно получишь и визуальную возможность смотреть на износ твоего ножа по соответствуюшей полоске на худе в инвентаре.

 

Добавлено через 14 мин.:

AndreySol, почему возникают такие странные вопросы по сути на пустом месте?

1. Выше для тебя же приведена ссылка на модуль нет-пакетов, особенностью которого является наличие именно алгоритма перевода объекта в оффлайн и обратно (что и в readme написано). Что мешает посмотреть коды отмеченные комментом: "Helper: switchings 'online->offline->online'" и воспользоваться ими по аналогии или даже целиком? Ведь функция do_switchings(id) и предназначена для вызовов "из вне" и требуется всего лишь передать на вход игровой ID нужного объекта для его перевода в оффлайн и обратно.

2. В теме "Справочник по классам и функциям" расписаны те же set_switch_online и set_switch_offline, во многочисленных модах, начиная с АМК v1.3x можно найти готовые примеры применения этих функций.

 

Давайте НЕ задавать вопросов, ответы на которые можно найти самим, потратив немного своего времени и поработав немного своею головою.

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

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Выше для тебя же приведена ссылка на модуль нет-пакетов, особенностью которого является наличие именно алгоритма перевода объекта в оффлайн и обратно (что и в readme написано)

А я именно этот способ и пробовал использовать, но у меня ни для объектов в слотах актера(ГГ) ни для объектов в инвентаре не получается перевести в офф-лайн и обратно в он-лайн. Потому и задал вопрос.

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

AndreySol, прежде чем дальше что-то говорить/объяснять - ответь, плз, на пару глупых вопросов:

1. А для чего переводить в оффлайн находящуюся в рюкзаке у актора, например, аптечку иль иной предмет?

2. А что ты ожидаешь увидеть (когда и где, на экране, в логе, иль еще где) в качестве - "вот предмет находится в оффлайне"?

 

Иными словами, какую цель преследует перевод в оффлайн и обратно акторских предметов в инвентори и что для тебя является критерием: предмет ушел в оффлайн и вышел в онлайн?

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

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

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

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

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

Войти

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

Войти

AMK-Team.ru

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