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

[CoP] Ковыряемся в файлах


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

как сделать чтоб при подходе к нпс, он кидал тебе диалог как коряга на Скадовске.... И если можно то распишите как это делать в мельчайших деталях... просто я пока нуб... и ещё где есть уроки по диалогом для Зов Припяти... можно ссылку пожалуйста :blush:

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

FeLLoN, специально для всех тебе подобных и 'нубов' в частности написана шапка топика, в которой кучка ссылок, где можно найти и те, по которым "расписано как это делать в мельчайших деталях..."

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

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

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

Такой вопрос. Можно ли при спавне объекта установить ему condition? Делаю так:

obj = alife():create('stalker_outfit', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())

local pk = m_netpk,get(obj, 1)

local data = pk:get()

data.condition = 0.5

pk:set(data)

 

 

Комбез появляется целёхонький.

Я знаю, что при изменении некоторых параметров у объекта нет-пакетом, его нужно отправить в оффлайн и вернуть обратно. Но ведь в данном случае объекта ещё нет в онлайне. Подскажите, буду благодарен.

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

Shredder, в отличии от иных 'инвентарных' предметов, комбезы (outfit) и оружие имеют два параметра, отвечающие за "износ" (исправность). Один в state-пакете и второй - в update-пакете, при чем второй как раз и будет в конечном итоге присвоен заспавненному комбезу.

Т.о. тебе требуется получать полный нет-пакет и задавать оба: data.condition и data.upd.condition.

В принципе, можно брать только update-пакет ( pk = m_netpk,get(obj,2) ) и изменять именно data.upd.condition - этого будет достаточно. Комбез будет спавниться исправным (он в любом случае при скриптовом спавне исправен на 100%) и "изнашиваться"... до указанного тобою значения.

obj = alife():create('stalker_outfit', vector(), 0, 0, db.actor:id()) --/ спавн в инвентарь актору
local pk = m_netpk,get(obj, 2) --/ получаем доступ к update-пакету
if pk:isOk() then --/ доступ получен?
 local data = pk:get() --/ читаем update-параметры
 data.upd.condition = 0.5 --/ изменяем параметр
 pk:set(data) --/ запоминаем
end

 

 

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

Изменено пользователем Artos
  • Нравится 1

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

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

Artos, спасибо за помощь. Приведённый код похож на правду, но не работает.

Во-первых, у update-части пакета свойство condition имеет другой формат. У только что созданного объекта оно равно 255. Ну это не важно.

Комбез всё равно появляется у ГГ целёхонький. Если таких же способом заспавнить объект подальше от ГГ, чтобы он не вышел в онлайн сразу, тогда всё норм - прихожу к месту спавна, у комбеза нужное состояние. Есть ещё идеи? Так не хочется этой канители с переводом оффлайн/онлайн.

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

Shredder, при спавне в радиусе онлайна можно использовать client_spawn_manager.

 local sobj = alife():create('stalker_outfit', vector(), 0, 0, db.actor:id())
level.client_spawn_manager():add(sobj.id, 0, function (id,obj) obj:set_condition(0.5) end)

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

Shredder, к сожалению не все и/или не всегда можно сделать "простенько и со вкусом"...

При спавне любого предмета актору - переводить этот предмет on->off->online и не получится, т.к. владелец предмета (актор) не может быть в оффлайне.

Также, действительно, не посмотрел внимательно коды и...

а) параметр upd.condition имеет hex-значение и должен задаваться в диапазоне 0...255 (0x00...0xFF).

б) при спавне в инвентарь актору измененный нет-пакет не перечитывается.

В итоге, выход не так уж и сложен:

1. Спавним предмет рядом с актором и меняем ему нужные параметры при помощи нет-пакетов

2. Ставим коолбэк, по которому при выходе предмета в онлайн - предмет трансферится актору.

В итоге код может быть таким:

--/ спавн 'рядом' с актором
sobj = alife():create('stalker_outfit', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
local pk = get_netpk(sobj,2) --/ получаем доступ к update-пакету
if pk:isOk() then --/ доступ получен?
 local data = pk:get() --/ читаем update-параметры
 data.upd.condition = math.floor(255*0.5) --/ изменяем параметр
 pk:set(data) --/ запоминаем
 --/ ставим коллбэк: по выходу в онлайн - трансфер актору
 level.client_spawn_manager():add(sobj.id, 0, function(id,obj) obj:transfer_item(obj, db.actor) end)
end

Не так все и усложнено :-)

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

Изменено пользователем Artos
  • Нравится 1

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

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

Artos

Вы верно шутите. Вместо красивой прогулки по саду, длинной в 100 метров, вы выбираете путь через горы. Зачем нужно использовать нет-пакеты, устанавливать самописные каллбеки, вместо использования кода на 2 строки, который предложил вам Charsi?

Freedom

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

_Призрак_, скорее "шутишь" ты...

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

Во-вторых, т.н. "самописные" - писаны разработчиками GSC, и не стОит приписывать мне их заслуги. Тем более этот же коллбэк использован и в упомянутой тобою "красивой прогулке".

Ну и, ты бы почитал последние посты, прежде чем "советовать". Изменять, добавлять 'updates' для костюма, что затеял Shredder, ты тоже собираешься парой строчек by Charsi? :crazy:

 

Не стОит сводить вопрос заданный для 'общего' случая к упрощениям и частностям. Этот раздел "школа..." не для выдачи на гора пары строчек готового кода, а все же (само)обучение, т.е. как и чем работать в той или иной ситуации.

Надеть шоры никогда не поздно, а вот снять их часто даже не знают как...

 

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

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

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

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

Доброго времени суток.

К вопросу о проводниках, точках перехода и пр.

Задумалось мне заспавнить переход и все вроде понятно в его секции, но вот все-таки непонятно про dest_graph_point.

Сбственно вопрос: как определить какая точка мне нужна? И где узнать ее имя?

userbar368.png

Ссылка на комментарий
Callisto, dest_graph_point - это граф-поинт, на котором будет спавнится актор на другой локации, куда кидает переход. Т.е. этот граф-поинт нужно создать на другой локации, направление (direction) которого будет определять, куда актор будет смотреть при переходе.
Ссылка на комментарий

Callisto, Clayman,

при скриптовом спавне этот параметр вроде как и не требуется. Там есть несколько параметров, которые исчерпывающе определяют точку перехода:

dest_game_vertex_id, dest_level_vertex_id, dest_position, dest_direction, dest_level_name

 

graph_point - есть такой специальный объект. Возможно, здесь подразумевается его использование, хотя я не уверен и сам никогда с такими объектами дела не имел.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Clayman, а можно узнать откуда этот бред про граф-поинт и тем более о 'нужно создать на другой локации'?

Все необходимыt параметры для коордират и направления задаются по-отдельности (dest_game_vertex_id, dest_game_vertex_id, dest_position, dest_direction) и именно они определяют в какой точке на локакции окажется актор и куда будет смотреть.

Парамет dest_graph_point имеет строковое значение ('start_actor_XX') и может даже быть пустой строкою.

Мне не известен ответ на вопрос Callisto, и сам бы хотел понять что это - рудимент от былых задумок разработчиков (скорее всего) или...

К сожалению сканирование ресурсов игр (ТЧ/ЧН/ЗП) на предмет нахождения каких-либо "граф-поинтов" иль чего иного с именами 'start_actor_XX' - ничего не дает, кроме упоминаний этого непонятного параметра в секциях левел-ченджеров...

При экспериментах - задание любой строки-имени для этого параметра не давало никакого видимого эффекта.

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

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

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

malandrinus, ну я так понял, что она через аллспавн делает. Просто в оригинале ПЫС-овских уровней всегда есть конечный граф-поинт, на котором спавнится актор при переходе. А через алл-спавн вроде граф-поинты и не добавишь, да? Я просто с ним не работаю...

 

Artos, распаковал бы уровни и посмотрел ради интреса на "бред" ПЫСов в СДК.

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

Clayman,

я имел в виду не геймпоинты глобального графа. Их можно добавлять только в SDK. Я имел в виду, что есть такой тип игровых объектов, cse_alife_graph_point. Я могу только предположить, что объекты этого класса имеют отношение к этому параметру в левелченджере.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Просто в СДК есть только один спавн-элемент graph_point, и при настройке level_changer-а нужно указать именно уровень для перехода и graph_point для перехода... все. Актор спавнится именно в этом граф-поинте с заданным направлением. И dest_graph_point указывает именно на имя этого граф-поинта, оно может быть любое, какое задашь в его параметрах.

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

Clayman, вот теперь можно дать ответ (спасибо за наводку):

dest_graph_point - имя граф-поинта (точки на карте) которому в SDK сопоставлены dest_game_vertex_id, dest_game_vertex_id, dest_position, dest_direction.

В игре эта точка (как объект) отсутствует и для спавна через скрипт и/или all.spawn не задействуется.

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

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

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

Всем огромное спасибо, переход все-таки работает.

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

Я так предполагаю, чито это только при первом посещении локации?

userbar368.png

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

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

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

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

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

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

Войти

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

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

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