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

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


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

Привет всем!

(написал о пулемёте и тут понеслось...)

Нужно было мне вот так делать... сразу (видео и др)

 

http://www.youtube.com/watch?v=BY66ac9cDCM

 

 

http://www.youtube.com/watch?v=cgzY-o8oLD4

 

 

http://yadi.sk/d/4TgE2ugl1JK7U

 

 

Что мы имеем:

Локация кордон.

Две точки спавна пулемёта. (обе ложные) - поскольку спавнил совсем в др. месте.

пулемет виден, "ножка" провалилась под террейн, его можно использовать, коллизия только для пуль (ГГ проходит сквозь него, как и все остальное), он статичен (не вертится на "ножке" (в билде вертится). - при использовании, нас переносит в точку 2-ва...

При использовании нас переносит, на точку 2-ва и мы можем стрелять, НПС и мутанты получают долгожданные HIT'ы.

 

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

2-я точка, скорее всего центр локации (не проверял).

 

 

P.S Проверю спавн на других локациях.

кинуть all.spawn - для чистого ТЧ v 1.0006

 

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

Попробуй зациклить логику -

 

Если не прокатит, то ...

 

Не прокатило... Никак. Вот не смог найти файл с диалогами Сяка, чтобы поршень новый, либо отключение полученого прицепить к реплике. Не подскажите в каком они находятся?

Сейчас прохожу: GWENT: The Witcher card game

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

Хочу заспавнить в инвентаре у актора изношенный костюм в начале игры.

Пока я поработал со спавном и написал скрипт:


function condoutfit()
local actor = db.actor
obj = actor:object("stalker_outfit")
if obj ~= nil then
obj:set_condition(0.3)
end
end

 

и вызвал его в функции actor_binder:update(delta). Скрипт работает, но есть проблема: если снять поврежденный костюм и затем надеть новый точно такой же(не через рюкзак), то он будет иметь ту же степень износа.

 

Если не трудно, то можете помочь с кодом и вызовом функции.

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

Gaz24,

вариант первый. Создаешь с помощью аллспавна изношенный предмет на уровне. В апдейте ставишь проверку: если не установлена инфопорция и на уровне есть предмет, то перенести его в инвентарь и установить инфопорцию.

вариант второй. Та же проверка на инфопорцию для разового запуска (можно уже не в апдейте, а скажем в netspawn), но вместо переноса готового предмета с уровня, спавнишь прямо в инвентарь, прописывая износ нетпакетом.

 

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

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

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

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

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

 

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

Gaz24, пора бы стандартные простейшие функции уже знать и применять.

Решение:

0. "заспавнить в инвентаре у актора изношенный костюм в начале игры" можно (как уже подсказал malandrinus) включением своей секции в all.spawn, в которой сразу и "потрепать" костюмчик. Но разберем более универсальный вариант со скриптовым спавном (подойдет не только для конкретного костюмчика).

1. Чтобы заспавнить любой объект в игру используется функция alife():create(...), ну а чтобы именно актору, то требуется последним (5-м) аргументом указать игровой идентификатор (ID) актора, т.е. имеем для твоего случая:

local se_actor_suite = alife():create("stalker_outfit", vector(), 0, 0, db.actor:id())

Чтобы костюмчик оказался у актора "изношенным" требуется задать требуемую степеть изношенности.

Однако, в момент спавна получаем в ответе функции спавна серверный объект костюма (se_actor_suite) с которым штатными функциями далее ничего не можем сделать, а требуется "потрепать" костюмчик. Поэтому требуется дождаться, когда костюм заспавнится в игру.

2. Чтобы не полагаться на случай и не тратить ресурсы и время понапрасну - запустим свой коллбэк на спавн гейм-объекта костюма в игру, который и даст нам факт такого появления (будет вызвана заданная нами функция my_callback_suite):

level.client_spawn_manager():add(se_actor_suite.id, 65535, my_callback_suite, "metka")

3. Вот теперь, когда сработает наш коллбэк, чтобы костюмчик оказался у актора "изношенным" используем в функции коллбэка штатную функцию:

function my_callback_suite(metka, id, obj)
 obj:set_condition(0.3) --/ портим костюмчик
end

4. Ну и напоследок, найдем местечно в скриптах игры, чтобы наш "подарок" для ГГ был именно в начале игры и только один раз. Для ТЧ это легко сделать там, где вызывается стартовое интро про грузовик смерти, т.е. место для вставки будет в методе actor_binder:update(delta) после стороки:

_G.g_start_avi = true
--/ вот тут и вставляем функцию спавна и запуск коллбэка.

Итого, имеем нечто такое в файле bind_stalker.script:

function actor_binder:update(delta)
 object_binder.update(self, delta)
 --/... тут некие оригинальные строки
 if self.bCheckStart then
   printf("SET DEFAULT INFOS")
   if not has_alife_info("storyline_actor_start") and (level.name() == "l01_escape") then
  self.object:give_info_portion("storyline_actor_start")
  _G.g_start_avi = true
  --/> это начало нашей вставки !!!
  local se_actor_suite = alife():create( "stalker_outfit", vector(), 0, 0, db.actor:id() )
  level.client_spawn_manager():add(se_actor_suite.id, 65535, my_callback_suite, "metka")
  --/< это конец нашей вставки !!!
  printf("*AVI* RUN START AVI")
   end
   --/... тут некие оригинальные строки
end
--/ добавляем свою функцию коллбэка на спавн в игру заспавненного костюма
function my_callback_suite(metka, id, obj)
 obj:set_condition(0.3) --/ портим костюмчик до 30% от "с иголочки"
end

 

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

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

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

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

Всем здрасте, я юзал поиск но вроде ничего похожего не нашёл, Как привязать нпс к точке спавна? Чтоб после например нападения он вернулся на место его спавна? НЕ понимаю как это сделать, вроде прописанно всё правильно и НПС есть всё ок ничего не вылетает, а вот при нападении например кабанов они разбегаться либо ходят свободно по локации, или стоят на месте, но не возвращаются на места спавна!

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

Надо прописать точки в all.spawn. В way_локация, на которой НПС спавнится. Потом эти точки в логике. Почитай здесь.

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

Спасибо я прочитал но я вот 1 не понимаю, тут пример на 1 нпс, а у меня их ну 35 шт где прописывать имя чтоб не было багов и путаницы названия?

 

 

[walker_stay_at_position_walk]
points = p0
p0:name = name00
p0:flags = 0x1
p0:position = ;координаты на которых стоим
p0:game_vertex_id = ;гейм вертекс координат
p0:level_vertex_id = ;левел вертеск координат

[walker_stay_at_position_look]
points = p0
p0:name = name00
p0:flags = 0x1
p0:position = ;координаты в которые смотрим
p0:game_vertex_id = ;гейм вертекс координат
p0:level_vertex_id = ;левел вертеск координат

И как я понимаю это

[logic]
active = walker@stay_at_position
combat_ignore = combat_ignore
danger = danger_condition

[walker@stay_at_position]
path_walk = walker_stay_at_position_walk
path_look = walker_stay_at_position_look

[combat_ignore]
combat_ignore_cond = always

[danger_condition]
ignore_distance = 0
ignore_distance_corpse = 0

написать писать не в:

[logic]

cfg = scripts

 

В итоге должно как я понимаю получиться так?

 

[870]
; cse_abstract properties
section_name = stalker
name = noobik
position = -172.21215820313,-19.941787719727,-161.09272766113
direction = 0,0,0

; cse_alife_trader_abstract properties
money = 5000
character_profile = esc_noobik

; cse_alife_object properties
game_vertex_id = 52
distance = 0
level_vertex_id = 76655
object_flags = 0xffffffbf
custom_data = <<END

[logic]
active = walker@stay_at_position
combat_ignore = combat_ignore
danger = danger_condition

[walker@stay_at_position]
path_walk = walker_stay_at_position_walk
path_look = walker_stay_at_position_look

[combat_ignore]
combat_ignore_cond = always

[danger_condition]
ignore_distance = 0
ignore_distance_corpse = 0

; cse
[smart_terrains]
none = true
END
story_id = 10000

; cse_visual properties
visual_name = actors\soldier\soldier_beret_1

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 2
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =

upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -172.21215820313,-19.941787719727,-161.09272766113
upd:o_model = 0
upd:o_torso = 0.028013030067086,0,0.9996075630188
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 2

; cse_alife_monster_abstract properties

upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_alife_human_abstract properties
predicate5 = 1,2,2,1,2
predicate4 = 0,1,1,1

; cse_ph_skeleton properties

upd:start_dialog =

; se_stalker properties

 

 

"Простыни" вкладываем в спойлер!

Устное предупреждение.

ColR_iT

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

Что-то в этом роде, только логика пишется в логике НПС в config\scripts\логика.ltx

[logic]

cfg = scripts\noobik_logic.ltx"

Это ссылка на логику.

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

Что-то в этом роде, только логика пишется в логике НПС в config\scripts\логика.ltx

[logic]

cfg = scripts\noobik_logic.ltx"

Это ссылка на логику.

Допустимы оба варианта. Если у Daniar299 простенькая логика лишь с привязкой НПС к точке, и он уверен, что "большего" ему и не понадобится, то он может вшить логику в секцию НПС, в алл.спавн (как он привел на своем примере). А вот если многоступенчатая логика, с несколькими схемами поведения, то лучше конечно вывести её из алл.спавн, как предложил ты (в отдельный конфигурационный файл). В таком случае очень удобно будет её проверять и тестировать и не понадобится каждый раз "распаковывать/компилировать" алл.спавн и начинать НИ, чтобы увидеть свои корректировки.

 

.

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

А какая функция(скрипт) может проиграть анимацию у определенного нпс при диалоге?

Ну допустим есть нпс, хочу что-бы после нажатия на кнопку в диалоге происходил action функции которая и вызовет анимацию wounded_heavy_3,

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

Заранее спасибо.

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

Что-то все чаще стали применяться отмазки в виде "в поиске так и не нашел ничего полезного"... :-( За годы моддинга в сети накопилось столько всего, что для тех, кто несилен в моддинге всегда можно найти 'более чем' полезного. Прежде чем заняться моддингом не мешало бы таким "искателям" подучиться вообще работать с компом и с поиском, и научиться ставить (себе) и задавать вопросы.

 

vasya092, читай и перечитывай "Справочник по функциям и классам" и его расширители-толкователи в виде статей на вики-сайтах (ссылки в шапке), не забыв и сам мануал по Lua хорошенько поштудировать.

 

P.S. Заодно и правила тебе бы почитать не лишним будет, в частности про "спасибы"...

 

Daniar299, хотя, вероятно, мой комментарий будет излишним, но... нередко он имеет место быть полезным:

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

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

2. Чтобы не было путаницы с кучей названий, да и прочих "неудобств", требование для заспавненных неписей: "находиться у точек спавна" довольно просто реализуется одной/парой самописных функций. Вот только на кой такое? Ну а играбельные варианты - требуют указания логики и путей, тут сколько неписей и их точек спавна - столько и путей с названиями. Привыкай к тому, что разнообразие не сделать на паре-тройке констант.

 

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

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

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

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

У него вроде бы есть в "простыне" -

....

[smart_terrains]

none = true

END

 

Только вот почему то в конце кустомдаты, обычно запрет на смарты ставят перед -

[logic]

Ну да всё равно, по-моему, сработает запрет.

===

Daniar299, Да и зачем тебе 35 "истуканчиков" с одинаковой логикой? Дело, конечно, твое, но раз уж такое кол-во НПС спавнишь, не легче (может и не "легче", но целесообразнее) ли просто им гулаг сделать и прописать 35 работ? Так, с игровой точки зрения, будет "красивше", да и игроку будет приятнее разнообразие в действиях НПС, чем лицезреть на "35 столбиков".(Ну, чисто моё ИМХО)...

.

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

Buusty, действительно 'вроде бы есть', и не столь место расположение строк сбило с толку, строки, точнее секции в кастом дате могут быть в каком угодно порядке, это это все одно читается/пишется в хеш-таблицу. А вот мусор в виде строки '; cse' перед смарт-секцией и неотформатированный весь пост - и сбили с толку... Так что извиняюсь за "не отвязку".

Ну и, так понимаю, для Daniar299 пока и лениво лишней "писаниной" заниматься, как и лишним чтивом, а хотСа увидеть результат своих ковыряний по простеньким туторам... так что до играбельности и красивостей еще до-о-олго. ;-)

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

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

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

Чаще возникает как раз обратная проблема, нпс при каждом выходе онлайн (переход в зону А-лайфа, перезагрузка) переключаются в исходную схему логики, так как не стоит проверка условий перехода между секциями в активной схеме.Как в НС 5 при загрузке во время атаки Волка и Ко деревни новичков, они дружно ломились обратно на ферму.Да и в НЛС 6 такие казусы были.

Чтобы заставить НПС оставатся в точке спавна(даже при отсутствии в этом месте АИ сетки), нужно активной сделать секцию remark , при этом поставив НПС полный игнор, иначе сорвавшись с места , останется там где успокоится.Или же как это принято в игре, прописать точки пути для активной схемы, или работу в смарте( к примеру kamp которая не требует в отдельных случаях создания точек пути).

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

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

gruber,

1. Твоя пожелалка не по адресу. 'Немягкость' моих комментов прямо пропорциональна степени тупости и лени вопроса, и является следствием... Мы не в институте для благородных девиц, и не собираюсь менять(ся) и в дальнейшем, если это не нарушает правил форума.

2. 'Удочку' дать не легче - а правильнее(! ИМХО), чтобы нуждающийся сам мог бы удовлетворять свои потребности, а не зависил от 'раздающего'. И те, кто в данном разделе форума ждет именно подачки в виде рыбы - ошибаюся, 'школа' учит, а не кормит.

 

(по существу поста)

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

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

Ну про kamp - тут и говорить нечего, никаким боком к "заставить НПС оставатся в точке спавна" ее не приделать, тем более она то (схема) вообще командует рандомные точки "рассаживания" никак не относящиеся к спавну. Да и в любом случае все одно требуется иметь или создать хотя бы одну точку (center_point).

 

Чаще возникает как раз обратная проблема, нпс при каждом выходе онлайн (переход в зону А-лайфа, перезагрузка) переключаются в исходную схему логики, так как не стоит проверка условий перехода между секциями в активной схеме.
'Чаще' - в данном случае относится к разработчику кода, а не к самим кодам. Именно человек думает и вкладывает 'свои мозги' компу, а тот только выполняет то, что ему приказано. Копипаст чужой логики и не желание довести ее до ума в каждом конкретном случае - и есть причина подобных проблем. Не так давно уже этот вопрос кратко рассматривался, нужно писать правильно и полно конфиги (условия) для логических схем, а не использовать шаблонные заготовки. Ни и при необходимости - дорабатывать имеющиеся схемы или писать свои.
  • Нравится 1

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

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

Я и давал совет новичку, повторюсь та же схема ремарка, единственный известный мне способ поставить НПС в точке с отсутствующей сеткой.А насчет кампа, по зоне раскиданы куча камп-поинтов, достаточно знать названия, таким способом можно привязать НПС к конкретной местности - один из вариантов для ленивых.Еще можно создать гулаг с перечнем работ, не заморачиваясь даже со спавном НПС(даже не заморачиваясь с созданием смарта, достаточно списка работ) - сами в итоге набегут из респвавнеров(конечно если гулаг без уникальных персонажей и не требуется в начале игры)

А о школе - все таки учитель в ней не последний человек, многое и от него зависит.

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

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

gruber: ...единственный известный мне способ поставить НПС в точке с отсутствующей сеткой
Вот хочется спросить, а где в вопросе было про отсутствие сетки? Вообще зачем такое в игре, тем более для "34 НПС"? Вместо того, чтобы "советовать" как расставлять истуканчиков по непотребным позициям, не лучше ли объяснить, что это или тупиковый путь или не понимание что-же и зачем сам автор вопроса пытается делать?!

'Единственность' - заключается только в том, что схема 'remark' единственная, которая перебивая своей активностью все остальные штатные AI-схемы, не оперирует перемещениями, тем самым не активируя 'move_mgr' и не заставляя движок перемешать НПС на AI-сетку. Однако, ничто не мешает НЕ прописывать вообще какую-либо штатную схему, ежели потребовался такой "болванчик" в непотребном для игры месте. И в любом случае, эта схема не заставляет находиться в точке, а не заставляет уходить из точки, что является большой разницей и по смыслу и по результату.

И ты не находишь свою оправдалку по kamp'у подходящей только для твоих каких-то иллюзий, а не для исходного вопроса. Во-первых, для кампов, ежели ты не хочешь чтобы НПС в кострах жарились, требуется и вторая точка (отличная от центра). Во-вторых, условие "точка спавна" и "точки посиделок" - ну никак не одно и тоже, и тем более это никакая не привязка "к точке"! Сам уже пишешь уже о "привязке к местности", а местность и точка - ну очень разное ;-) В общем "совет" из разряда: "в огороде бузина а в киеве дядка".

"Школа моддинга" - это не общеобразовательная контора с учителями и пр. Это САМОобразовательная и добровольная затея, где мы все учимСЯ, учимся на чужих ошибках и помогаем друг другу по мере имеющихся знаний и опыта. И никакой я тут не учитель, а такой же участник, как и другие... ну может побольше некоторых имею знаний и опыта. К сожалению кураторство (но не учительство!) на форуме неизвестно заработает ли вновь, но пока считаю для себя 'добровольно взятой обязаностью' не допускать (всеми способами) топики до уровня "ниже плинтуса", когда модмейкерство превращается в нахлебничество и иждивенчество.

 

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

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

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

Получаеться прикрепил к моду своему локацию болота и решил заселить её, народ появляеться стоит на местах всё ок, но стоит например заспаунить мобов без логики они бегают по локации и нечаянно агрять НПС , они тупо разбегаются! я вот и хочу чтоб они вернулись на место спауна, но я не понимаю как это прописать.

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

Пропиши точку в way_локация, в логике напиши к логике [camper@put] - это схема логики, а второе, точка, приписанная в all.spwan. Почитай еще про логику НПС.

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

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

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

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

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

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

Войти

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

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

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