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

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


Svoboда

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

Решил попробовать восстановить в ЗП конструкцию тайников как в ТЧ/ЧН, в общем такая проблема: н своей локации поставил рестриктор:

[logic]
active = sr_idle@start

[sr_idle@start]
on_actor_inside = sr_idle@nil %=give_treasure(esc_treasure_1)%

[sr_idle@nil]

Условие: при входе в рестриктор получаем информацию о тайнике, при входе в рестриктор - вылет

stack trace:
001B:049CB7D0 lua.JIT.1.1.4.dll, lua_yield()

 

Как я понимаю - ошибка скриптов, вот функция выдачи тайника

function give_treasure(treasure_id)
	if treasures[treasure_id] ~= nil then
		if treasures[treasure_id].active ~= true then
			treasures[treasure_id]:give_treasure()
		else
			local active_treasure = get_active_treasure_by_target(treasures[treasure_id].target)
			abort("Unable to give treasure [%s] because inventory box is already in use by treasure [%s]", treasure_id, active_treasure)
		end
	else
		abort("There is no treasure with id [%s]", treasure_id)
	end
end
function get_active_treasure_by_target(target)
	for k,v in pairs(treasure_by_target[target]) do
		if v.active == true then
			return v.section
		end
	end
	return "nil"
end

PS: inventory box с названием "esc_treasure_1" на локацию добавил, также прописал ему story_id

PS 2: Без story_id ничего не происходит, ни вылета - ни выдачи

"Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов

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

OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ

 

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


Ссылка на сообщение
1 час назад, AndreySol сказал:

esc_treasure_1 - это имя тайника, ID, StoryID ?

И имя тайника/бокса и Story_ID тайника/бокса(одновременно), как я понимаю проблема в этом?

По-моему получение айди объекта по его name было вырезано из ЗП - нужно прописывать StoryID

 

PS я пока что в скриптовании нуб :) Могу понять что в них написано, но не могу написать собственный

"Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов

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

OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ

 

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


Ссылка на сообщение
8 часов назад, Dennis_Chikin сказал:

ОТКУДА должно что-то вызываться в

on_actor_inside = sr_idle@nil %=give_treasure(esc_treasure_1)%

и есть ли оно ТАМ.

При входе в один из space restrictor поставленных на локации, должно выскакивать смс "получена информация о тайнике" и в invertory box под названием "esc_treasure_1" должны заспавниться вещи прописанные в misc\treasure_manager.ltx(или из подключенного к нему файла)

[list_treasure_escape]
esc_treasure_1

[esc_treasure_1] 
target = esc_treasure_1
name = st_esc_cross_2
description = st_esc_cross_2_descr
items = medkit, 1, antirad, 1
condlist = {=actor_on_level(escape)} true, false

c592ef0841b585e1afdb2b072bbb8eca.png

 

Но при входе в это space restrictor происходит вылет stack trace, также он ИНОГДА происходит при обыске трупов - свидетельство того что возможно работает эта функция:

function use(npc)
	printf("treasure_manager: npc[%s] is used by actor", npc:name())
	local available_treasures = {}
	local selected_treasure = nil
	for k,v in pairs(treasures) do
--[[
		printf("found treasure %s", tostring(v.section))
		-- Проверить доступность по кондлисту.
		printf("    condlist %s", tostring(xr_logic.pick_section_from_condlist(db.actor, npc, v.condlist)))
		-- Проверить доступность по рангу.
		printf("    rank %s", tostring(v:check_rank_and_community(npc)))
		-- Проверить не выдан ли он уже.
		printf("    active %s", tostring(v.active))
		-- Проверить не выдан ли другой тайник на этот же таргет.
		printf("    used %s", tostring(v:check_for_used_target()))
		printf("    cost=%d", v.treasure_cost)
]]
		if xr_logic.pick_section_from_condlist(db.actor, npc, v.condlist) == "true" and
			v:check_rank_and_community(npc) == true and v.active ~= true and v:check_for_used_target() == true and (v.treasure_cost==0) then	-- 24.04.08
			table.insert(available_treasures, v)
		end
	end
	if #available_treasures == 0 or math.random(100) > 20 then
		return
	end
	selected_treasure = available_treasures[math.random(1, #available_treasures)]
	selected_treasure:give_treasure()
end

 

"Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов

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

OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ

 

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


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

PS: как известно все команды в логике space restrictor  юзаются из функций в xr_effects.script

Команда give_treasure в xr_effects.script

function give_treasure (actor, npc, p)
	if p == nil then abort("Required parameter is [NIL]") end
	for k,v in pairs(p) do
		treasure_manager.give_treasure(v)
	end
end

 

  • Сомнительно 1

"Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов

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

OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ

 

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


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

Всем привет.

Как в логике НПС прописать его исчезновение(Стоит НПС, отходим на пару метров, получаем инфопоршень, НПС исчезает)

"Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов

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

OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ

 

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


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

Привет народ!

Кто-нибудь знает какая функция в скриптах проигрывает звук смерти НПС(как в ТЧ или в ЧН... Типа: "Ай мля...", "Ты что?!", "Мамаа...") или это в движке?

 

"Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов

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

OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ

 

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


Ссылка на сообщение
local esc_b2_give_random_table = {}
esc_b2_give_random_table[1] = {		[1] = {item = {"af_medusa"}},
									[2] = {item = {"af_blood"}},
									[3] = {item = {"af_vyvert"}}
	}
	
	
function esc_b2_give_random(first_speaker, second_speaker)
	for i = 1,1 do
		if has_alife_info("test_function") then
			for j = 1,#esc_b2_give_random_table[i] do
				if has_alife_info("test_function") then
					for k,v in pairs(esc_b2_give_random_table[i][j].item) do
						dialogs.relocate_item_section_to_actor(first_speaker, second_speaker,v)
					end			
					give_info("esc_b2_done_item_"..tostring(i).."_"..tostring(j))
					break
				end
			end	
	    end
	end
end

 

Пытаюсь создать функцию на выдачу рандомных предметов

НПС, которому в экшене диалога прописана эта функция(esc_b2_give_random), всегда выдает только первый предмет из esc_b2_give_random_table, т.е. af_medusa

А нужно, чтобы он выдавал случайно 1 из 3, прописанных в esc_b2_give_random_table, предметов

"Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов

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

OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ

 

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


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

@WinCap, Спасибо

function esc_b2_give_random(first_speaker, second_speaker)
    local random = math.random(1,3)
	if random == 1 then
		dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "af_medusa")
	end
	if random == 2 then
		dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "af_blood")
	end
	if random == 3 then
		dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "af_vyvert")
	end
end

можно вроде и так:puffy:

задаем рандомное число от "a" до "z"

Если "функция" равна "b", то делаем это..

Если "функция" равна "q", то делаем другое..

"Люди — животные, не имеющие ни страха, ни уважения, ни сочувствия. Лишь только блеск выгоды в глазах" © Алексей Шевцов

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

OC: Windows 10 Home, Видеокарта: NVIDIA GeForce GTX 1050 TI 4ГБ, Процессор: Intel Core i3 7100 3900 МГц 2 ядра, RAM(ОЗУ): 8ГБ DDR4, ROM(ПЗУ): 1ТБ

 

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


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

AMK-Team.ru

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