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

Скриптование


Svoboда

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

@AndreySol не знаю, покопался в движке, parent класса костра - класс CSpaceRestrictor, у которого parent в свою очередь CGameObject, а у него среди парентов есть и CUsableScriptObject (вроде так), который и даёт возможность вызова коллбека use и выставлять надписи методом set_tip_text. Однако для ВСЕХ рестрикторов эти методы ничего не дают. Почему - пока не разобрался... Мб костыли какие-то придётся делать, заменять все объекты (именно объекты) костров в СДК на спавн элементы с их моделями и им логику прописывать... Но это все локации перекомпилировать🤔 Не очень большое желание что-то делать так.

Поделиться этим сообщением


Ссылка на сообщение

@AndreySol не знаю, я на 10-ке на диск Х устанавливал СДК по "инструкции" и он бесперебойно работает🤔

@WinCap та костёр вообще никакую логику не воспринимает, он же рестриктор, пишу ему логику рестриктора (для теста вывод сообщения по событию actor_inside (не помню щас дословно название в логике)), но ему всё равно:az1000106:

@AndreySol короче, создал невидимый объект на основе моделей в equipment_cache (которые для inventory_box), так будет проще, как по мне. Подогнал размер под костры. Буду расставлять в каждом костре и логику прописывать соответствующую.

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

Поделиться этим сообщением


Ссылка на сообщение

Обнаружил такую недоработку в оригинале ЗП. Если скриптом воспроизводить звуки, то второй (и последующие) не воспроизведутся, пока не пройдёт предыдущий, и какая-то задержка в пару секунд... Это можно как-то пофиксить?

Поделиться этим сообщением


Ссылка на сообщение

Знатоки ТЧ, прошу помощи.
Захотелось мне добавить в циклические квесты помимо стандартного описания, прописываемого в xml (по типу "мне поступил заказ на медузу, нужно срочно достать, берёшься?"), ещё и список наград, чтобы выглядело так:
 

Скрытый текст

Слышал поверье, что зуб кровососа притягивает удачу? Будто бы того, кто на шее носит такой зуб, аномалии отпускают, и артефакты сами в руки идут? В общем, это всё фигня, но есть болваны, которые верят и готовы платить хорошие деньги. Принесешь челюсть кровососа, я тебе хорошо заплачу.
За это в награду ты получишь:
"иконка" Деньги: 3000
"иконка" Предметы: Дробь 20, бинт, аптечка

Как всё это добавить я разобрался, и иконки и текст нормально подставляются, но я никак не могу получить id квеста (напр. tm_monster_part_1)
Вот так сейчас выглядит код:
 

Скрытый текст
function CRandomTask:action_task_show_reward(npc, actor)
	local task_desc = self.task_info["tm_monster_part_1"]
	local task_texture, task_rect
	local message
		task_texture, task_rect = get_texture_info("ui_iconsTotal_found_money", "ui_iconsTotal_found_money")
		db.actor:give_talk_message(tostring(self.task_info[self.task_id_by_init_phrase_id[p3]]), task_texture, task_rect, "iconed_answer_item")
	
	if task_desc.reward_money ~= nil then
		task_texture, task_rect = get_texture_info("ui_iconsTotal_found_money", "ui_iconsTotal_found_money")
		message = game.translate_string("reward_list_money").." "..tostring(task_desc.reward_money)
		db.actor:give_talk_message(message, task_texture, task_rect, "iconed_answer_item")
	end
	
	if task_desc.reward_item ~= nil then
		task_texture, task_rect = get_texture_info("ui_iconsTotal_found_thing", "ui_iconsTotal_found_thing")
		message = game.translate_string("reward_list_items")
		for kk,vv in pairs(task_desc.reward_item) do
			message = message..", "..game.translate_string(news_manager.get_inv_name(vv))
		end
		db.actor:give_talk_message(message, task_texture, task_rect, "iconed_answer_item")
	end
end

 

И мне нужно вместо указанного мною id "tm_monster_part_1" как-то получить id выбранного в диалоге квеста. Как это сделать? Скрипт task_manager.script стандартный. Смотрел, как получают в других функциях, пробовал разные варианты, но что-то ни один не подошёл.

Вот функции добавления диалога и вызова функции выше:
 

Скрытый текст
function CRandomTask:init_task_dialog(dlg, parent)
	local phr = dlg:AddPhrase("tm_seek_new_job","0","",-10000)
	local phrase_script = phr:GetPhraseScript()

	phr = dlg:AddPhrase("tm_"..parent.."_list_job","1","0",-10000)
	phrase_script = phr:GetPhraseScript()
	phrase_script:AddAction("task_manager.action_task_show")
	phrase_script:AddPrecondition("task_manager.precondition_vendor_can_task")
		
	phr = dlg:AddPhrase("tm_"..parent.."_has_no_job","2","0",-10000)
	phrase_script = phr:GetPhraseScript()
	phrase_script:AddPrecondition("task_manager.precondition_vendor_cannot_task")
	
	for k,v in pairs(self.task_id_by_parent[parent]) do
		phr = dlg:AddPhrase(self.task_info[v].name, tostring(self.task_info[v].init_phrase_id), "1", -10000)		
		phrase_script = phr:GetPhraseScript()
		phrase_script:AddPrecondition("task_manager.precondition_task_avail")

		phr = dlg:AddPhrase(self.task_info[v].text, tostring(self.task_info[v].desc_phrase_id), tostring(self.task_info[v].init_phrase_id), -10000)
		phrase_script = phr:GetPhraseScript()
		phrase_script:AddAction("task_manager.action_task_show_reward")
		
		phr = dlg:AddPhrase("tm_seek_job_yes", tostring(self.task_info[v].yes_phrase_id), tostring(self.task_info[v].desc_phrase_id), -10000)
		phrase_script = phr:GetPhraseScript()
		phrase_script:AddAction("task_manager.action_give_task") --добавил данное действие для вызова функции выше

		phr = dlg:AddPhrase("tm_seek_job_no", tostring(self.task_info[v].no_phrase_id), tostring(self.task_info[v].desc_phrase_id), -10000)
	end

	dlg:AddPhrase("tm_seek_job_abandon","3","1",-10000)
end
--
--
--
function action_task_show_reward(npc, actor)
	get_random_task():action_task_show_reward(npc, actor)
end

 

 

  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

@Norman Eisenherz ну мне конкретно нужен этот id. Именно получить его, чтобы я мог прописать

local id = что-то, и чтобы это "что-то" выдало мне мой id квеста (в частном случае "tm_monster_part_1"), чтобы я потом прописал

local task_desc = self.task_info[id]

И уже от этого плясал и везде были свои данные конкретно этого квеста

  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение
21 час назад, Norman Eisenherz сказал:

Есть готовая таблица self.task_id_by_yes_phrase_id – из нее и получить id.

Ну таблица и эта, и task_id_by_init_phrase_id возвращали мне nil, хотя я вроде правильно всё подставлял, пришлось добавить цикл на прогон всех тасков персонажа и проверять совпадение по self.task_info[v].yes_phrase_id, но всё работает. Благодарю, что направил в нужное русло:drinks:

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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