Jump to content

Recommended Posts

Marafon6540    524

@Plotnik если использовать X-Ray extensions, то там все просто:

level.get_target_dist() 

Добавлена функция получения расстояния до точки, на которую смотрим (игровой дальномер, который отображается под прицелом)

Share this post


Link to post
Share on other sites
Plotnik    3

@Marafon6540 Про это мне известно. Я делаю оружие с функцией телепорта в точку прицеливания и хочу чтобы оно шло на любую версию игры. Вот как оно работает на Call Of Chernobyl (если вдруг кому интересно).
https://youtu.be/9aOeplHKpsY

У меня есть вот такая корявая идея:

function get_target_distance()

	local console = get_console()
	console:execute("hud_crosshair_dist on") -- включаем опцию дистанции до цели

	local distance_text = get_hud():GetCustomStatic("ТИП_ТЕКСТА"):wnd():TextControl():GetText() -- получаем дистанцию как текст
	local distance_number = tonumber(distance_text) -- переводим этот текст в число

	console:execute("hud_crosshair_dist off") -- отключаем опцию дистанции до цели

	return distance_number 

end

Только как называется этот тип текста? Он же должен быть прописан в одном из файлов в папке configs/ui. Я никак не могу его найти.
Может есть ещё какой-нибудь способ?
 

 

Share this post


Link to post
Share on other sites
Graff46    418

Как подружить ГГ и заагрившуюся группировку? Я делал так:

relation_registry.set_community_goodwill ("dolg", db.actor:id(), 5010)

Долговцы в ГГ не стреляют, но когда видят ГГ, некоторые в панику ударяются и тычат оружием именно в ГГ, но не стреляют!
И еще. Долговцы нейтральны и поговорить с некоторыми можно.


fe2f085fa6ec930af82f5856df7e561b.jpg

Share this post


Link to post
Share on other sites
Vinozavr    33

Приветствую. Нужна помощь/консультация по вот такому делу - возможно ли через скрипт увеличить/уменьшить k_hit, k_disp, k_pierce, k_dist у патронов из заданного списка при условии наличия на поясе определенного артефакта? Если да, то как это сделать/реализовать? Т.е, когда у ГГ на поясе висит определенный артефакт, у патронов из указанного в функции списка увеличиваются/уменьшаются  k_hit, k_disp, k_pierce, k_dist . Скриптер из меня не ахти какой поэтому и спрашиваю. Буду благодарен за помощь. 

Share this post


Link to post
Share on other sites
AndreySol    100
2 часа назад, Vinozavr сказал:

возможно ли через скрипт увеличить/уменьшить k_hit, k_disp, k_pierce, k_dist

Нет. Эти параметры читаются движком напрямую из конфигов, соответственно скриптами тут не обойтись.

Share this post


Link to post
Share on other sites
Fenrir02    197

Доброго времени суток! Подскажите как реализовать "Звук при отрезании частей монстров" как в ОП 2


Важнейшая задача цивилизации - научить человека мыслить.

Share this post


Link to post
Share on other sites
vampirnik77    121

Я давненько "общаюсь" со скриптами, не скажу что профи, но что-то могу. Так вот, суть, сидел себе вечером ковырялся в xr_effects.script и повстречал там строку вида:

...
if p[2] and p[2] ~= nil then
...

И как модно сейчас говорить "словил триггер", разве эти два условия не равносильны? Разве не достаточно этого?

if p[2] then

 

Edited by vampirnik77

Share this post


Link to post
Share on other sites
Dennis_Chikin    3,602

Предполагается, что кто-нибудь особо одаренный может засунуть туда false, а где-то сильно потом его захотеть.

 

upd: да, оно еще и с  ошибкой.

Edited by Dennis_Chikin
  • Thanks 1

Share this post


Link to post
Share on other sites
Space.Marine    268

Прошу помощи. Сам в скриптах не силён.

Есть функция проигрывания звукового файла:

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

function CSurgeManager:play_siren_sound()
	local snd_obj=self.blowout_sounds["siren"]
	local snd_position
	if snd_obj ~= nil and snd_obj:playing() then
		snd_obj:stop()
	end
	if(level.name()=="zaton") then
		snd_position=vector():set(115,8,184)
	elseif(level.name()=="jupiter") then
		snd_position=vector():set(-50,16,198)
	else
		snd_position=vector():set(147,15,-187)
	end
	if snd_obj ~= nil then
		snd_obj:play_at_pos(db.actor, snd_position)
		snd_obj.volume = 1
		--self.debugMessages[12]:SetText("playing: "..tostring(id))
	end
end

 

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

Share this post


Link to post
Share on other sites
Dennis_Chikin    3,602
function CSurgeManager:play_siren_sound()
	local snd_obj=self.blowout_sounds["siren"]

В таком виде "извне" уже недоступно. Править саму функцию.

А поскольку сделано "псевдообъектом" - то еще и его куда-то вытягивать.

 

Проще написать свое.

  • Thanks 1

Share this post


Link to post
Share on other sites
vampirnik77    121

Есть способ отловить какой скрипт вызывает вылет? Адаптирую улучшенный ai к правленому движку, ловлю вылет, раньше такого не видел.
 

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

FATAL ERROR
 
[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : ..\xrServerEntities\script_storage.cpp
[error]Line          : 540
[error]Description   : game_object:id() threw an exception

 

Share this post


Link to post
Share on other sites
Malandrinus    596
15 hours ago, vampirnik77 said:

разве эти два условия не равносильны?

 

Строго говоря, эти условия не равнозначны. Однако, второе является избыточным, так как либо равно true (и таким образом не влияет на результат вне зависимости от значения p[2]), либо совпадает с первым, когда p[2] равно nil (поскольку в этом случае p[2] эквивалентно false), и соответственно тоже не влияет на результат. Зачем это сделано трудно предположить. Версия, что автор этого кода не знал об особенностях Lua и перестраховывался отпадает, поскольку избыточное условие стоит вторым и значит проверяется после первого и значит никак не страхует от проверки в первом условии потенциального значения nil.


 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Share this post


Link to post
Share on other sites
Malandrinus    596
5 hours ago, vampirnik77 said:

Есть способ отловить какой скрипт вызывает вылет?

Если вылет вызван скриптом, то при вылете будет показан стек Lua и соответственно сбойный скрипт. Если этого нет, то напрашивается вывод, что сбой вызван не скриптом.

  • Thanks 1

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Share this post


Link to post
Share on other sites
Metro_Rus    75

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

[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ТБ

 

Share this post


Link to post
Share on other sites
AndreySol    100
1 час назад, Metro_Rus сказал:

%=give_treasure(esc_treasure_1)%

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

  • Like 1

Share this post


Link to post
Share on other sites
Metro_Rus    75
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ТБ

 

Share this post


Link to post
Share on other sites
Dennis_Chikin    3,602

treasures[treasure_id].active в данном случае - из того, что мы здесь видим -  является попыткой извлечь что-то из nil.  Что предполагалось получить таким способом - сложно сказать.

 

Впрочем, для начала, еще интересно, ОТКУДА должно что-то вызываться в

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

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

Edited by Dennis_Chikin

Share this post


Link to post
Share on other sites
Metro_Rus    75
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ТБ

 

Share this post


Link to post
Share on other sites
Metro_Rus    75

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

 

  • Confused 1

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

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

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

 

Share this post


Link to post
Share on other sites
Dennis_Chikin    3,602

Гм, ну тогда надо смотреть, как (чем) заполняется treasures[]

Ну а потом проверять, точно ли везде передается строка, и является ли она ключом в этой таблице.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

AMK-Team.ru

×
×
  • Create New...