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

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

@Labadal я же говорю, ты сам может накосячил в тексте, я когда впервые разбирал спавн ACDC, я правя текстовые файлы спавна, то ли пропустил номер секции спавна , они шли не подряд, сборщиком собрал спавн ,не было никаких ошибок при сборке - всё собралось, но игра вылетала при загрузке спавна, потом всё перепроверил и пришлось вручную проверять чтоб не было пропуском номеров секций, ведь это же не SDK  ,который тебе сам всё корректно проставит, при компиляции, а сторонний сборщик, который переводит бинарные файлы в текстовые и обратно, тут нельзя самому юзеру нарушать структуру исходников.

Ссылка на комментарий
2 часа назад, Labadal сказал:

В каком тексте я накосячил? Причем тут вообще ACDC??

при том что это был пример, проблема у тебя из-за твоих косяков, а мы по минимуму инфы должны гадать что ты там косячишь:)

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

@Labadal попробуй запустить на OGSR-Engine. Так у тебя должен появиться нормальный лог. Без него так и будешь дальше тыкаться как слепой котенок.

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

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

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

1. Прошлый ответ не подошел или был пропущен?

https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/616/#comment-1480857

 

2. Статьи выдаются только через инфо-поршни – их и проверять.

2.1. Статья не является обязательной частью описания квеста.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
31.07.2024 в 13:39, Labadal сказал:

Запускаю игру - опять получаю безлоговый вылет

Была у меня когда-то давно такая история при сборке спавна с помощью xrAI. Проблема, насколько я понял тогда, в самом xrAI. Есть, вроде как, какая-то правленая версия, но я тогда её так и не нашёл - перешел на АСДС.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@naxac всё оказалось намного проще, нужно было просто скомпилировать локу с помощью xrLC а потом через xrAI графы и спавн собирать))

Такой еще вопросик:
ловлю безлоговый вылет при разговоре с НПС, зачастую в момент когда отправлю неписю предпоследнюю фразу диалога, за которой он должен ответить последней. Первым делом тоже подумал, что отсутствует функция, которая выдаётся после этой фразы, но нет, вылетает даже  в пустых от различных функций диалоги. Есть моменты, когда вылатает при попытке поговорить. Есть моменты, когда нпс тупо стоит на месте спавна и с ним не поговорить, однако вдупляется после сейвлоада. в логфайле последней записью почти всегда это: 

*INFO*:_npc='single_player'_id='ui_talk_hide'

в некоторых случаях пишет это: *INFO*:_npc='single_player'_id='ид_нпс_с_которым_разговор'

God save Hatsune Miku!

Ссылка на комментарий
2 часа назад, Labadal сказал:

Есть моменты, когда нпс тупо стоит на месте спавна и с ним не поговорить, однако вдупляется после сейвлоада

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

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

@Купер оказалось, что это не моя проблема. в оригинале этот же нпс так же "подвисает" (в деревне новичков). Понимаю, что нужно разбираться с причиной, однако её бы найти сначала.

God save Hatsune Miku!

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

@Norman Eisenherz , я к стыду своему так и не понял, как сделать привязку согласно совету. Не хватает знаний.

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

@Капрал Хикс Вообще не понятно зачем это нужно? Но даже если и так, в самом деле, задания просто так не выдаются, - поршнем зачастую. Вот и отслеживай этот поршень, если он у тебя есть, и выдавай другой, например. Можешь что-то типа этого: 

local function name(actor, info_pairs)
    for _, pair in ipairs(info_pairs) do
        if actor:has_info(pair.check) then
            actor:give_info_portion(pair.give)
            break
        end
    end
end

local info_pairs = {
    {check = "поршень, по которому выдаётся первый квест", give = "инфопоршень, который выдаётся, если он есть"},
    {check = "поршень, по которому выдаётся второй квест", give = "инфопоршень, который выдаётся, если он есть"},
    {check = "поршень, по которому выдаётся третий квест", give = "инфопоршень, который выдаётся, если он есть"}
}

check_and_give_info(db.actor, info_pairs)

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

Ну, или стандартным: 

if db.actor:has_info("поршень, по которому выдаётся первый квест") then 
   db.actor:give_info_portion("инфопоршень, который выдаётся, если он есть")
elseif db.actor:has_info("поршень, по которому выдаётся второй квест") then 
   db.actor:give_info_portion("инфопоршень, который выдаётся, если он есть")
elseif db.actor:has_info("поршень, по которому выдаётся третий квест") then 
   db.actor:give_info_portion("инфопоршень, который выдаётся, если он есть")


 

@Капрал Хикс кстати, есть ещё такой вариант, он отлавливает состояние квеста, попробуй его:

local task_status = db.actor:get_task_state("тут пишешь id квеста", 0) -- id квеста из <game_task id="id квеста">

if task_status == 0 then
    -- Действия, если задание провалено
elseif task_status == 2 then
    -- Действия, если задание выполнено
elseif task_status == 1 then
    -- Действия, если задание активно
elseif task_status == -1 then
    -- Действия, если задания нет ни в проваленных, ни в выполненных, ни в активных
end


 

Изменено пользователем Labadal
  • Полезно 1

God save Hatsune Miku!

Ссылка на комментарий
2 часа назад, Labadal сказал:

кстати, есть ещё такой вариант, он отлавливает состояние квеста, попробуй его:

О, пожалуй его и буду пробовать. Суть такой странной пожелалки вот в чём: я создал тип квеста на основе стандартного однотипного, где вместо поиска предмета задание засчитывается при выдаче определённого инфопоршня. Т.е. в таргете стоит не хвост собаки получить например, а имя инфопоршня.

Нужный инфопоршень конкретного 1 квеста на пробу пера выдаётся при наличии 4-х, которые выдаются при заходе ГГ в 4 спейс-рестриктора. Так вот, мне нужно в логике спейс-рестриктора добавить условие-заглушку, чтобы инфопоршень выдавался только при наличии активного квеста. Иначе, если игрок раньше времени придёт туда, квест как нужно работать не будет.

Разумеется, всё это можно было бы сделать гораздо проще через отдельно созданный квест, где бы в диалоге на его взятие выдавался бы поршень, который можно уже отследить, но захотелось мне вот ещё модифицировать стандартный task_manager, после того как я добавил туда возможность выдачи квестов на поиск предметов на любом классе.

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

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

on_actor_inside = … %=info_check%

 

[xr_effects.script]

function info_check()

local tm = task_manager.get_random_task()
local task = tm.task_info[type_parent]
if task.status = "selected" then 

end

 

Требуется только подставить заголовок нужной задачи (artefact_wolf какой-нибудь) и конечное действие.

  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Будем делать, за советы спасибо!

Ещё, други, в Зове Припяти можно при клике на найденные КПК в инвентаре слушать звуковое сообщение, которое выдаётся при его нахождении. Кто-нибудь в ТЧ такое перетаскивал?

Ссылка на комментарий
2 часа назад, Капрал Хикс сказал:

в Зове Припяти можно при клике на найденные КПК в инвентаре слушать звуковое сообщение,

ЕМНИП - сообщение воспроизводится при поднятии КПК, а при наведении курсора - во всплывающем окошке появляется текст,

подобное в ТЧ было в нычке стрелка при поднятии флешки, вот тут память меня подводит или в AMK нашем и родном :hm:

или в НарСоль, ну или маразм меня подводит :russian_ru:

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

@ted.80 @Капрал Хикс В любом случае, можешь попробовать данную функцию:

в своём скриптовом файле, например: sms_pda.script пишешь: 

function  use_pda(item)
    local sect = item:section()
    if sect == "тут имя секции твоего pda" then
--   тут выдаёшь сам звук, например: 

        local snd_obj = xr_sound.get_safe_sound_object([[affects\tinnitus3a]])
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)

--не забываешь выдать предмет обратно, т.к. при использовании он пропадает

alife():create("тут имя секции твоего pda", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())

 end

 

затем, в bind_stalker.script пишешь: 

 

в функции function actor_binder:reinit():

 

self.object:set_callback(callback.use_object, self.on_use_object, self)

 

 

в функции: function actor_binder:net_destroy() p/s не знаю, насколько действительно это нужно, у меня работает и без прописывании калбека в этой функции:

 

self.object:set_callback(callback.use_object, nil)

 

ну а дальше, где-то в bind.stalker создаёшь функцию:
 

function actor_binder:on_use_object(obj, who)
    sms_pda.use_pda(obj)
end


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

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

God save Hatsune Miku!

Ссылка на комментарий
26 минут назад, Labadal сказал:

В любом случае, можешь попробовать данную функцию:

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

но за старание плюсик :good2:   но ты забываешь один мааааленький нюанс ни в ТЧ ни в ЗП  кпк или пда кому как,

не является юзабельным предметом, ну нет у него функционала "использовать", ты можешь только выкинуть его или продать - ВСЁ!

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

присваивать ему иконку кпк вот потом его можно юзать.

43 минуты назад, Labadal сказал:
--не забываешь выдать предмет обратно, т.к. при использовании он пропадает

а чтоб с этим не париться:

[remkit]:device_pda
description			= "Ремнабор"
inv_name			= "Ремнабор"
inv_name_short		= "Ремнабор"
cost				= 5000
class			= II_ANTIR
eat_health = 	0
eat_satiety = 	0
eat_power = 	0
eat_radiation = 0
wounds_heal_perc = 0
eat_portions_num = -1

последняя строчка    eat_portions_num = -1  обозначает что предмет можно есть бесконечно 

он не пропадает из инвентаря и спавнить заново не нужно - пользуйся

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

@ted.80 точно-точно, благодарю за уточнение)

с помощью xrLuaFix от RvP как-то можно получить нормальный лог, причину? не понимаю в чем проблема, вылетает в диалогах, зачастую при последней фразе ГГ. (она может быть как и последней в самом диалоге, так и предпоследней, но для ГГ она точно последняя). При: 

function printf(fmt,...)
log(string.format(fmt,...))
local con = get_console()
con:execute(string.gsub(string.format(fmt,...), " ", "_"))
con:execute("flush")
end 

в лог файле последняя запись зачастую Unknown command:  *INFO*:_npc='single_player'_id='ui_talk_hide' и всё, больше никаких зацепок.  Бывает, что вылетает вообще при попытке поговорить, но это единичные случаи. понять бы в чем причина.

God save Hatsune Miku!

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

Мне тут посоветовали для поиска причины воспользоваться движком ОГСР, во время диалога произошёл вылет, ругался на следующую функцию: 

--[[
-- Диалоги помощи раненным
function init_help_wounded_medkit_dialog(dlg)
	local phr = dlg:AddPhrase("dm_general_help_medkit",0,-1,-10000)
	local phrase_script = phr:GetPhraseScript()
	phrase_script:AddAction("dialogs.transfer_medkit")
	
	local k,v = 0,0
	for k,v in pairs(phrase.help_thanks) do
		phr = dlg:AddPhrase(v.name,v.phr_id,0,-10000)		
		if phr then
			phrase_script = phr:GetPhraseScript()
			phrase_script:AddPrecondition("dialog_manager.precondition_help_thanks")
		end
	end
end
--]]

я её заккоментил, проблема пропала. Однако пропала только на огср, при возвращении на свой движок, опять безлоговый вылет. Есть идеи?

разные вылеты (при препоследней фразе диалога, при последней фразе диалога, просто при попытке поговорить), ругается на разные функции из файла dialog_manager, но ругается на AddPhrase. 
local phr = dlg:AddPhrase("",0,-1,-10000)
local phr = dlg:AddPhrase("dm_general_help_medkit",0,-1,-10000)
и тд. что блин делать? 

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

God save Hatsune Miku!

Ссылка на комментарий
1 час назад, Labadal сказал:

ругается на разные функции из файла dialog_manager

Откуда этот файл? Движок и скрипт шли одним комплектом?

Здесь могла быть ваша реклама.

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

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

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

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

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

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

Войти

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

Войти
×
×
  • Создать...