[CoP] Ковыряемся в файлах - Страница 221 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

[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, критично делать через нет-пакеты? А то ведь есть set_condition(0.0..1.0)

Как я думаю, твой предмет не успевает "спавниться"

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)

Дело в том, что condition не конечная цель, мне ещё апгрейды нужно добавлять.

 

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 пользователей

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