Бывaлый, как Алекс_Гордон сказал, так проще сделать. Открываешь gamedata\config\gameplay\character_desc_general.xml, там ищешь секцию ГГ, а в ней: <icon>xxxxxxxxx</icon>, и вместо xxxxxxxxx вставляешь, что тебе нужно. Иконка долговца в экзоскелете: ui_npc_u_stalker_do_exoskeleton
Другие иконки можешь найти здесь: gamedata\config\ui\ui_npc_unique.xml
Злой Ящер, обратись в другую тему, здесь отвечают на вопросы по модостроению
добавлено спустя 2 минут
Возможно ли вернуть вырезанные из игры анимации передвижения? Через SDK просматривал все анимации, в стоячих и сидячих состояниях уже парочку вернул, а вот с ходьбой всё никак понять не могу. Как мне, например, сделать, чтобы сталкер шёл, шатаясь из стороны в сторону?
Сообщение было успешно отредактировано VOva-VIP (30-07-2013 12:59 GMT3 часа, назад)
VOva-VIP
Судя по тому какие вопросы тут задают - тебе врятли кто ответит. А вообще восстановление анимаций дело запутанное, и статей нормальных по ним тоже нет. Глянь в моде Восстановление старого сюжета, там они 100% должны быть восстановленны.
А меня мучает такая фишка:
В level_task.script есть автоматическая функция коллбеков на взятие тех или иных предметов. Вот она:
Код:
local level_scripts = {
darkscape_task
}
function proceed()
if db.actor == nil then
return
end
for k, v in pairs( level_scripts ) do
v.proceed()
end
Насколько я понял она распространяется в те файлы, которые прописаны в таблице local level_scripts. В свой darkscape.task я вставляю такой код:
Код:
function proceed()
local actor = db.actor
if actor:object ("box_toolkit_1") then
db.actor:give_info_portion("ds_box_toolkit_1_get")
end
if actor:object ("box_toolkit_2") then
db.actor:give_info_portion("ds_box_toolkit_2_get")
end
if actor:object ("box_toolkit_3") then
db.actor:give_info_portion("ds_box_toolkit_3_get")
end
end
При взятии этих предметов инфорпоршни просто не выдаются. Всё уже перепроверил - ничего понять не могу.
Fantom2323, а знаешь почему "мучает"? Потому, что это не автоматическая функция и уж тем более не коллбэк. Это просто функция, которая вызывается из трёх мест: коллбэк на получение инфопорции, взятие и потерю предмета, не более. Но даже при этом твоя конструкция вполне рабочая, только работать будет с задержкой (вероятно). Ты проверяешь не поднятие данных предметов, а уже их наличие в инвентаре. Попробуй поднять нужный предмет, а затем взять какой-нибудь другой, мне почему-то кажется, что при поднятии второго предмета и будет выдан инфопоршень.
А вообще, почему не воспользоваться действительно коллбэками в bind_stalker.script?
ЦитатаКак мне, например, сделать, чтобы сталкер шёл, шатаясь из стороны в сторону?
Это делается в моделях. Сам не делал, но скриптово не создать. По примеру, как сделать из любого перса зомби сталкера, либо пьяного сталкера, чтобы шёл и качался из стороны в сторону.
ColR_iT
Вот смотри, я всегда когда что нибудь делаю - сразу тестирую, никогда не леплю того что потом может не работать. Действительно, моя конструкция рабочая, но не срабатывает. Всё эти 3 предмета я забираю из ящика к себе в инвентарь, после того как возьму квест, но не один инфопоршень не выдаётся. Есть конечно и другие способы (давно бы мог их заюзать) но мне этот кажется более универсальным, тем более что раз не работает - значит "особняк", а раз "особняк" - надо разобраться.
добавлено спустя 6 минут
И ещё, пока ты здесь, подскажи мне пожалуйста.
Сделал такой диалог, нужно чтобы он исчезал после того как ГГ отдаст все инструменты технику. На всякий случай вот скелет диалога:
Код:
<dialog id="searcher_technik_out_toolkit">
<precondition>darkscape_task.ds_out_all_box_toolkit</precondition>
<phrase_list>
<phrase id="0">
<text>Я насчёт инструментов.</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>Что-то нашел? Или спросить что хочешь?</text>
<next>2</next>
<next>3</next>
<next>4</next>
<next>5</next>
<next>6</next>
</phrase>
<phrase id="2">
<precondition>darkscape_task.ds_have_box_toolkit_1</precondition>
<text>Я нашел инструменты для грубой работы.</text>
<action>darkscape_task.ds_out_box_toolkit_1</action>
<give_info>ds_box_toolkit_1_out</give_info>
<next>21</next>
</phrase>
<phrase id="3">
<precondition>darkscape_task.ds_have_box_toolkit_2</precondition>
<text>Я нашел инструменты для тонкой работы.</text>
<action>darkscape_task.ds_out_box_toolkit_2</action>
<give_info>ds_box_toolkit_2_out</give_info>
<next>31</next>
</phrase>
<phrase id="4">
<precondition>darkscape_task.ds_have_box_toolkit_3</precondition>
<text>Я нашел инструменты для настройки.</text>
<action>darkscape_task.ds_out_box_toolkit_3</action>
<give_info>ds_box_toolkit_3_out</give_info>
<next>41</next>
</phrase>
<phrase id="5">
<dont_has_info>ds_box_toolkit_plases</dont_has_info>
<text>Где мне стоит их поискать?</text>
<next>51</next>
</phrase>
<phrase id="6">
<text>Да так, ничего важного.</text>
<action>dialogs.break_dialog</action>
</phrase>
<phrase id="21">
<text>Ну вот, хоть что-то уже есть, всё лучше чем голыми руками работать. Держи аванс, заслужил.</text>
<action>darkscape_task.ds_box_toolkit_1_reward</action>
</phrase>
<phrase id="31">
<text>Отличный набор, как мне его не хватало... Эх, что это я, вот держи за работу.</text>
<action>darkscape_task.ds_box_toolkit_2_reward</action>
</phrase>
<phrase id="41">
<text>С такими инструментами я не то что стволы да броню чинить буду - я с ними ракету в небо запущу, хе-хе. Спасибо огромное, это тебе за услугу.</text>
<action>darkscape_task.ds_box_toolkit_3_reward</action>
</phrase>
<phrase id="51">
<text>Здесь в окрестностях есть заправка, бензина там конечно давно уже нет, а вот инструменты думаю найдутся, только осторожнее - там бандиты себе лагерь разбили.</text>
<give_info>ds_box_toolkit_plases</give_info>
</phrase>
</phrase_list>
</dialog>
А вот сама проверочка, (которая в самом вверху диалога)
Код:
function ds_out_all_box_toolkit()
if not has_alife_info("ds_box_toolkit_1_out") and not has_alife_info("ds_box_toolkit_2_out") and not has_alife_info("ds_box_toolkit_3_out") then
return true
else
return false
end
end
Мне нужно чтобы при получении всех 3 поршней - диалог исчезал, а он исчезает после получения 1, любого поршня из списка, что поправить нужно?
Сообщение было успешно отредактировано Fantom2323 (31-07-2013 14:28 GMT3 часа, назад)
Fantom2323, а, теперь ясно почему не работает - функция proceed вызывается только из трех колбеков и колбек на взятие предмета из ящика к ним не относится. Подними предмет с земли и получишь инфопорцию (возможно после поднятия следующего предмета, хотя вряд ли).
Цитатамне этот кажется более универсальным
Ключевое слово здесь - "кажется". Это не так - универсальностью здесь и не пахнет, а вот дополнительные расходы на вызов функции это запросто.
По диалогу...
Попробуй такую функцию:
Код:
function ds_out_all_box_toolkit ()
local actor = db.actor
return actor:dont_has_info("ds_box_toolkit_1_out") and actor:dont_has_info("ds_box_toolkit_2_out") and actor:dont_has_info("ds_box_toolkit_3_out")
end
Если не сработает, значит одна из инфопорций уже есть у ГГ.
ColR_iT
И ещё такой вопрос. Мне надо создать адекватную логику приветствия и прощания НПС с ГГ. Что я только не делал, как только не изголялся, но ничего не получается, НПС здоровается и прощается с ГГ либо криво, либо никак. Вот например:
Всё! Это пьяный сталкер идёт шатаясь, руки в карманах. В распакованном олл.спавне, в way_... .ltx прописывай эту анимацию (drunk_walk_0) своему НПС и смотри. Есть ещё анимация очень пьяного. Вот:
Не все и не во всех вариантах анимации работают корректно. Например: "drunk" у меня отлично отыгрывает бандит, а долговец идёт задом наперёд почему-то...
Arist, в таком случае, Fantom2323 "поднимал" другие предметы, либо не правильно проверял наличие инфопорции. Fagot_, если не секрет, а от куда информация о параметрах для подключения анимаций в файлах state_lib.script и state_mgr_animation_list.script? Fantom2323, что касается приветствия... Значение параметров on_actor_dist_* ни коем образом не определяет подходит ли ГГ или отходит, они лишь проверяют расстояние, поэтому вполне логично, что НПС прощается, когда ты подходишь к нему. Поэтому у тебя два варианта:
1. В активной секции, где НПС должен тебя встречать, проверяешь расстояние на котором ПНС будет приветствовать ГГ; включаешь схему remark (где будет отыгрываться анимация и звук); после этого переводишь НПС на другую похожую схему, где опять проверяешь расстояние на котором НПС будет прощаться, поскольку в данный момент ГГ будет точно ближе указанного расстояния, то проверка будет определять именно отдаление актора.
В логике это будет выглядеть так:
Будет здорово, если ты не будешь открывать спойлер а попытаешься по алгоритму, что я дал, написать логику самостоятельно
Код:
[walker@waiting_coming_actor] ; ждём прихода игрока
on_actor_dist_le = 5 | remark@welcome_actor ; проверяем подошёл ли ГГ
[remark@welcome_actor] ; приветствуем игрока
; и по окончании звука переходим на схему, где будем ждать ухода игрока
on_signal = sound_end | walker@waiting_care_actor
[walker@waiting_care_actor] ; ждём ухода игрока
on_actor_dist_ge = 7 | remark@goodbye_actor ; проверяем отошёл ли ГГ
[remark@goodbye_actor] ; прощаемся с игроком
; и переходим на схему ожидания ГГ, после проигрывания звука
on_signal = sound_end | walker@waiting_coming_actor
Я упустил обязательные параметры схем, чтобы донести суть. Надеюсь мысль ясна.
2. Дописывать функцию, которая будет определять отходит ли ГГ или подходит, исходя из изменения расстояния между ГГ и НПС.
chistit ruje_1 Чистка ружья сидя на чем либо.
dmg_norm_idle_0 Стоит и держится одной рукой за бок и тяжело дышит (Раненый)
dmg_norm_idle_1 Тоже самое что и dmg_norm_idle_0
dmg_norm_run_back_0 Раненый НПС отходит назад.
dmg_norm_run_fwd_0 Раненый НПС бежит вперёд.
dmg_norm_run_fwd_1 Раненый НПС хромая идёт вперёд.
doc_agr_0
drink_idle_10 Пьяный, держится за что-либо.
drink_idle_11 Пьяный, держится за что-либо.
drink_idle_2_1 Пьяный.
drink_idle_2_2 Тоже что и drink_idle_2_1, только НПС переменается с руки на руку...
drink_idle_3_0 Из положения drink_idle_2_2 ложит руку на руку,потом ложит голову на руки,засыпает.
drink_idle_3_1 -- drink_idle_3_4
drink_idle_5_0 -- drink_idle_5_1 Очень пьяный. (Присутствует скриншот).
drink_idle_7 -- drink_idle_5_1 НПС в пьяном состоянии крепко спит. (Присутствует скриншот).
drunk НПС идёт, шатаясь в разные стороны
drunk_idle_0 НПС стоит на месте и шатается (руки в карманах)
drunk_walk_0 НПС идет пытаясь показаться не пьяным (руки в карманах)
free_facer_0 НПС с левой руки бьёт кулаком.
idle_to_wounded_0 -- idle_to_wounded_3 Падения НПСов
ispug_0 -- ispug_3 НПС пугаеться.
k stene НПС прислонился к стене...(как в ЗП когда не отдаешь артефакт Сталкеру)
kurit sidya_ 0 Курит сидя.
monolith_0 -- monolith_5 Какой-то странный подвешенный НПС получается,то к верх ногами
то не пойми как...
myach_1 -- myach_2 Бьёт ногой по мячу.
prison_0 -- prison_1 НПС склонившись над лежащим смотрит на него, потом махает рукой над ним
и принимает стоячее положение...
sidya_boltaet_0 Сидит и болтает.
smeh Смеётся.
spit_4 Пытается заснуть, сидит качается чешет руку.
stoya_kurit_2_0 Курит стоя.
stoya_nos Ковыряеться в носу.
stoya_sopli Чихает.
stul Сидит и чистит ствол.
udar_0 Бьёт кулаком с размаху.
wedro Ногой пинает что-то (якобы ведро)
chasovoy_0 С оружием в руках чешит спину,нагинается вперёд и назад(делает зарядку).
chasovoy_1 Чешит задницу
chasovoy_2 Оглядываеться на горизонт.
chasovoy_3 Зевает.
chasovoy_4 Чешит голову.
chest_0, chest_0_idle_0 Переходит с идловой аниации, стоит смирно.
chest_0_idle_1 Стоит смирно, перехода с идловой анимки нету.
chest_0_idle_2 Отдаёт честь.
chest_0_idle_3 Получил команду "Вольно".
knopka_0 -- knopka_2 Нажимает на кнопку
metering_0_draw_0 -- 1 Цикл анимации, достаёт детектор с кармана.
metering_0_hide_0 -- 1 Цикл анимации, прячет детектор в карман.
metering_0_idle_0 Стоит с детектором в руках, никакой паники.
metering_0_idle_11 Детектор начинает лагать.
metering_0_idle_12 Детектор начинает лагать.
metering_0_idle_6 ПАНИКА!!!Детектор запиликал, везде аномалии, сталкер отходит назад,
прикрывает себя рукой (Судя по всему - выброс)...
Открыл файлы state_lib , state_mgr_animation_list и, по аналогии с уже существующими секциями, сделал новые. А откуда информация насчёт этих двух файлов, точно не помню, но по-моему на "сталкерине" вычитал. Не все анимации опробовал. Кроме нескольких "пьяных", ещё работает "курит сидя"(только без сигареты), "чистит ружьё". "Курит стоя" не провильно работает - нпс, на самом деле, курит сидя.
Сообщение было успешно отредактировано Fagot_ (01-08-2013 19:49 GMT3 часа, назад)
Fagot_, всё ясно - ключевое выражение "по аналогии". Я просто подумал, что ты где-то нашёл определение параметров в этих файлах и возможные их значения.
-------------------------------------------- ColR_iT, нет. К сожалению, в направлении моддинга область моих познаний ограничена, поэтому "по аналогии"...
Всех приветствую. Делал квест, ничего не предвещало беды, но вдруг случилось страшное:
Код:
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\task_manager.script:471: attempt to index local 'sel_task' (a nil value)
Это произошло при переходе на локацию, где я установил рестриктор. Вот он:
Код:
function restrictor_x18_diplomat()
--local se_obj = alife():create("space_restrictor",vector():set(8.794,-8.176,48.947),3800,1162) --х18
local se_obj = alife():create("space_restrictor",vector():set(-74.271,0.447,-424.868),87140,826)-- у фермы
local custom = "[logic]\n"..
"active = sr_idle\n"..
"[sr_idle]\n"..
"on_actor_inside = nil %+gavrosh_umer +proval_zadaniya%"
rewrite_restrictor(se_obj, custom, 6.0)
end
Переношу рестриктор на ту локацию, где нахожусь (для проверки), вхожу в него - ничего не происходит, инфопоршни не выдаются. Если после спавна рестриктора сохраниться, то при загрузке этого сохранения вылет с тем же логом. В task_manager строка 471 выглядит так:
--' Проверяем, что жив выдавший квест. local parent = alife():story_object(story_by_parent[sel_task.parent])
if parent == nil or (parent.alive ~= nil and not parent:alive()) then
self.task_info[self.active_task_by_type[p1]].status = "failed"
self.task_info[self.active_task_by_type[p1]].last_task_time = game.get_game_time()
return true
end
---------------------------------------
Квест выдаёт мой новый персонаж...
Fagot_, мне почему-то думается, что ты знаешь что именно говорит тебе вылет (не может найти ключ sel_task в таблице story_by_parent), но ты не знаешь почему, так?
Если да, то каким образом мы должны догадываться как у тебя формируется таковая таблица и как в этой таблице оказывается данный ключ?
ColR_iT
Приветствую! За предложенную логику - огромное спасибо, работает как надо. Если бы ты знал сколько нервов и времени я убил на поиски нужной логики... А если не трудно ещё подсобишь?
1.Мне нужна функция-таймер, для диалога, чтобы по истечении времени выдался инфопоршень.
2.И такой ещё вопрос, не знаешь почему иногда некоторые НПС "зависают" не отыгрывая свою логику. Просто тупо стоят на месте, без анимации, пялятся в одну точку, игнорируя активную схему и переходы на другие схемы. При этом даже оффлайн-онлайн им не помогает. Вот логика этого НПС:
Код:
[logic]
active = walker@idle
trade = misc\trade_searcher_trader.ltx
combat_ignore = combat_ignore
Fagot_, это явно какой-то глюк. Ты что-то прописывал в биндер? И посмотри есть ли у тебя выше указанной тобою строки вот такая конструкция:
Код:
local game_difficulty = reader:r_u8()
local load_treasure_manager = false
if game_difficulty >= 128 then
game_difficulty = game_difficulty - 128
load_treasure_manager = true
end
-- Случайный спавн мутантов при заходе на локацию:
spawn_sluchainji.random_spawn()
в function actor_binder:on_item_take (obj)
Код:
--ОТСЛЕЖИВАНИЕ ПОЯВЛЕНИЯ ПРЕДМЕТОВ В ИНВЕНТАРЕ:
if db.actor then
name = obj:section()
if db.actor:object("pda_gavrosha") ~= nil then
db.actor:give_info_portion("infa_pda_gavrosh")
end
end
в function actor_binder:update(delta)
...
Код:
-- Новости:
news_main_data.show_news_main()
...
Код:
--==потрёпаный броник в начале НИ \Artos\:
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")
...
-- добавляем свою функцию коллбэка на спавн в игру потрёпанного броника:
function my_callback_suite(metka, id, obj)
obj:set_condition(0.3) -- портим броник до 30%
end
1. А у тебя есть какие-то варианты? Ты пробовал делать?
2. Причин может быть уйма, но зачастую это ошибка где-то в скриптах. Когда-то находил один из возможных вариантов исправления, но уже и не помню где и как.
P.S. Твою логику можно сократить вот так:
Код:
[logic]
active = walker@idle
trade = misc\trade_searcher_trader.ltx
combat_ignore = combat_ignore
ColR_iT
1. У меня есть единственный таймер из старого скрипта моих новостей.
Код:
local time_period ={
90000
}
time_news = 0
function time_update_news()
local time = time_global()
if time_news < time then
time_news = time + time_period[math.random(#time_period)]
news_monsters.monsters_news()
end
end
Но, если я правильно понимаю его только на апдейт, а на диалог нельзя вешать.
P.S. Твою логику взял сразу, т.к. повторюсь - времени и нервов было потрачено достаточно, чтобы впасть в ступор. Как раз и задал тебе этот вопрос именно от того самого "ступора".
P.S.S. Кстати протестировав ещё раз логику - заметил что НПС может зависнуть на ремарке приветствия, даже не произнеся фразу...
local iTimer
function start_Timer_60_s()
iTimer = time_global() + 60*1000 -- таймер на 60сек.
end
function timer_60_s() -- вызывается из ':update' сталкер-биндера
if iTimer and iTimer < time_global() then
iTimer = nil
твой_скрипт.функция()
end
end
function функция()
db.actor:give_info_portion("поршень")
end
В bind_stalker.script :
function actor_binder:update(delta) --таймеры:
твой_скрипт.функция()
...
В диалог: <action>твой_скрипт.start_Timer_60_s</action>
Только есть одна проблема - сейв/лоад или переход на др.локацию - и таймер слетает...
Сообщение было успешно отредактировано Fagot_ (02-08-2013 06:31 GMT3 часа, назад)
Fantom2323 твой нпс похоже вступает в ступор от того, что он торгаш.
Код:
trade = misc\trade_searcher_trader.ltx
Закомменти строку эту и проверь. Такое есть у торговцев нпс. У них лучше ремарку любую отыграть в путях, чем обыгрывать такими способами, как на подходе к нему
Код:
on_actor_dist_le_nvis = 2 |
и т.д.
Fagot_ Вырезанные анимки я также добавлял раньше, но некоторые пришлось убрать из-за подвисания логики ключевых персов, но кое-какие оставил, ибо работают без головняков, но только с правкой скрипта того же xr_remark.script Однажды я вернул анимку сидящего нпс, который чистит ствол. Всё работало как надо, но позже, когда зашёл повторно на эту локу, при приближении к нему, схватил коварный неизлечимый вылет, указывающий на этот скрипт. Теперь только эта анимка работает без проблем, если не считать того, что стул ему под зад сложно привязать. Может присесть мимо стула.
dimak , да, я тоже замудохался с сидящим персом - то мимо стула сядет, то на него, но после оффлайн/онлайн - мимо. Потом зажал стул в угол, нацелил пятую точку сталкера на него и всё, стулу падать было некуда. Вылета не было, но на всякий случай, не мог бы ты показать, как модифицировал xr_remark.script ?
Как создать миссию???Только скажите все с толком с чувством с расстановкой...Подробно опешите что каждая строка означает,а то скачал сборник по модострою а там шляпа какая-то.
На апдейт, я имею ввиду биндер актора, можно и не вешать таймер, можно задать свой апдейт на время при помощи функции
Код:
level.add_call(func_precondition, func_effect)
Данная "конструкция" создаст свой апдейт. Здесь func_precondition - это безымянная функция которая должна возвращать false, пока биндер должен работать, как только необходимо прекратить апдейт, то нужно вернуть true; а func_effect - это тоже безымянная функция, которая выполниться сразу после того, как биндер прекратит работу.
Здесь готового варианта не будет ибо хочу, чтобы люди думали, а не занимались копи-пастом.
dimak
ЦитатаУ них лучше ремарку любую отыграть в путях, чем обыгрывать такими способами, как на подходе к нему
Позволь полюбопытствовать, а как ты в путях задашь условие, что НПС должен что-то сделать когда ГГ подойдёт к нему на определённое расстояние?
Джей Джей, и это всё, что ты хочешь!? Может сразу сюжет тебе написать? А то как-то ради одной миссии париться не охота...
ColR_iT Бро,как создать диалог помощь НПС,к примеру:
Привет сталкер,какой-то ты бледный весь вялый...Может помочь чем нибудь??
Ну ты понял если ты играл В lost world requital
добавлено спустя 15 минут
ColR_iT Что скажешь?
добавлено спустя 4 минут
ColR_iT Бро, ты тут???
добавлено спустя 15 минут
ColR_iT Бро,ты долго учился по скриптам и логики?Сколько кг успокоительного покупал???
добавлено спустя 2 минут
ColR_iTТЫ ЧТО ЗАЛИП???
Сообщение было успешно отредактировано Джей Джей (02-08-2013 15:42 GMT3 часа, назад)
Джей Джей
Шлёпай на этот сайт - http://stalkerin.gameru.net/ Раздел: База Знаний - Конфиги.
На будущее - здесь немногие будут пережевывать то, что уже как 5-ый год лежит в различных статьях.
ColR_iT
Понял только то, что пока одна функция не выключиться - вторая не будет работать. Не то чтобы я что-то выпрашиваю, но у меня нет даже понятия о том как сделать такой апдейт.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.