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

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

@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

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

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

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

Дайте угадаю, так сказать, методом телепатического стука! А прямиком из 1.0004 патча.
О, сколько нам открытий чудных...

--* патч 5+
function gen_phrase_id_str()
    intro_id = intro_id + 1
    return tostring(intro_id)
end
--* патч 4-
function get_id()
    intro_id = intro_id + 1
    return intro_id
end

- Исправлена ошибка в диалогах. Эта ошибка приводила к тому, что диалоги с большой степенью вложенности зацикливались.

Т.е., как минимум, GSC в 5-ом патче поменяли тип используемой переменной в dialog_manager.script и далее по коду.

 

--* 6-ка
local phr = dlg:AddPhrase("","0","",-10000)
phr = dlg:AddPhrase("","1","0",-10000)
--* 4-ка
local phr = dlg:AddPhrase("",0,-1,-10000)
phr = dlg:AddPhrase("",1,0,-10000)

--* 6-ка
local phr = dlg:AddPhrase("dm_general_help_medkit","0","",-10000)
--* 4-ка
local phr = dlg:AddPhrase("dm_general_help_medkit",0,-1,-10000)

И аналогично во всех остальных местах кода, где это используется.

 

Смотреть что, куда и зачем секретное пытаемся соорудить и приспособить.

В Солянке 2016+, например, это исправлено и унифицировано с т.з. независимости от патча.

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

@Купер 

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...\level_editor\gamedata\scripts\dialog_manager.script:393: attempt to compare number with nil

Что тут, тогда? при сейвлоаде летит. 

God save Hatsune Miku!

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

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

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

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

naxac.gif

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

@naxac

В том и дело, что взял. 

 

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...\level_editor\gamedata\scripts\dialog_manager.script:393: attempt to compare number with nil

этот получаю при загрузке сохранения (НИ грузит норм). 

Переменная ver в функции function load(npc, reader, ver) почему-то уходит в nil. и при сравнении:

	if ver >= 7 then
		flag = reader:r_stringZ()
	else
		flag = tostring(reader:r_s16())
	end

 даёт такой вылет. Я, конечно, сделал ver = 8, чтобы избавиться от вылета, однако это ведь не решение. 

God save Hatsune Miku!

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

Переменная ver в функции function load(npc, reader, ver) почему-то уходит в nil

См. строку 342 в xr_motivator.script (патч 1.0006).

Мало заменить функцию из одного патча функцией из другого, надо ещё понимать, что ты делаешь. Если число аргументов увеличилось, откуда взяться значению добавленного аргумента? Только из места вызова самой функции, иначе будет пресловутый nil.

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

это ведь не решение

У тебя стоит какой-то мод, предназначенный для 4 патча, а движок - 6 патча. Отсюда и все проблемы с зависанием нпс, и вот эта трабла с диалог_менеджером тоже.

  • Спасибо 1
  • Нравится 1
  • Согласен 1

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

naxac.gif

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

@naxac если говорить в целом, игра была полностью под 1.0006 и всё работало. Случилась кое какая проблема (та проблема ранее, с безлоговым вылетом), я грешным делом подумал, что она из-за скриптов, почистил скрипты и недостающие (в основном xr_, _manager) взял из другой геймдаты, видимо из 1.0004. Сейчас попробую закинуть их из 1.0006. Посмотрим.

Да, дело в этом. в Xr_manager на 340 строке у меня - dialog_manager.load(self.object, reader), а в 1.0006 dialog_manager.load(self.object, reader, self.npc_script_version)

God save Hatsune Miku!

Ссылка на комментарий
02.08.2024 в 16:51, Labadal сказал:
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

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

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

@Капрал Хикс Попробуй в лог вывести что выводится в task_status.
 

То бишь:

local task_status = db.actor:get_task_state("тут пишешь id квеста", 0)
get_console():execute(task_status)

Дальше посмотрим.

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

God save Hatsune Miku!

Ссылка на комментарий
19 часов назад, Капрал Хикс сказал:
if task_status == 0 then

В lua_help есть такой класс:

C++ class task {

    const completed = 2;
    const fail = 0;
    const in_progress = 1;
    const task_dummy = -1;

};

Из названий констант, думаю, понятно, какая что значит.

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

naxac.gif

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

@naxac Да я-то ему уже подробно расписал, другое дело интересно почему не работает. 

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

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

God save Hatsune Miku!

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...