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

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

@WinCap ну я вот так и сделал, но такая проблема, что умирают они не сразу после выдачи поршня, успевают еще в округе пошарахаться от тех, кто умер первым. Оттого и думал, что может быть их скриптом как-то. (А может быть есть возможность, убить всех сталкеров - обитателей определённого смарттеррейна?)

God save Hatsune Miku!

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

умирают они не сразу после выдачи поршня

В логике любого объекта, хитануть на 1000 урона кого-то с сидом 100:
=hit_npc(100:bip01_spine1:1000:0)

 

В логике убиваемого, path_name - путь, от которого будет урон:
=hit_npc(path_name:bip01_spine1:1000:0)

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

[ЗП 1.6.02]
Приведенный ниже код дает вылет без лога. В ТЧ и ЧН точно такой же код работает.
Нужна пояснительная бригада…

Spoiler
[scripts\ui_load_dialog.script]
function load_dialog:OnKeyboard(dik, keyboard_action)
(+) перед return true
	if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
		if dik == DIK_keys.DIK_UP or dik == DIK_keys.DIK_DOWN then
			get_console():execute("test")
		end
	end

 

 

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

Шпаргалка

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

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

Скрытый текст
[logic]
active = ph_idle
 
[ph_idle]
on_info = {+info} ph_idle@animation
 
[ph_idle@animation]
anim = idle


 

 

Z690 GAMING X DDR4, 12th Gen Intel(R) Core(TM) i7-12700KF, NVIDIA GeForce RTX 2060 SUPER, Windows 11.

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

@Nowislaw пример твой не работает?
Попробуй то же самое только под ph_button.

Ну, если не работает пример выше.

  • Спасибо 1

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

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

@Norman Eisenherz на чистом ЗП приведенный код работает без проблем, ищи причину вылета в другом.

  • Согласен 1

S.T.A.L.K.E.R. CoP Objects (upd 11.03.24)

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

Здравствуйте, подскажите - возможно вообще телепортировать непися на нужные мне (walk и look) координаты? 

God save Hatsune Miku!

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

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

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

Доброго дня!
Есть оригинальный каллбэк на смерть физических объектов (ящиков и т.п.): function generic_physics_binder:death_callback(victim, who)

Хочу идентифицировать, КТО "убил" ящик, но who:id(), who.id, who:section(), who:section_name() и т.д. вызывают вылет - нет такого метода.

Подскажите, кто знает, как же можно идентифицировать who?

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

В оригинале, видимо, только через костыли. В Anomaly есть какие-то правки и рабочее испытание "разбить 200 ящиков" с проверкой who:id() = db.actor:id().

 

Есть вариант зацепиться за событие спавна лута в [xr_box.script] и перебрать db.storage на предмет живых объектов рядом с ящиком, но это не позволит точно определить, кто именно разбил ящик гранатой в перестрелке.

  • Полезно 1

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

Шпаргалка

Ссылка на комментарий
27 минут назад, Norman Eisenherz сказал:

В оригинале, видимо, только через костыли.

Самое интересное, что в том же generic_physics_binder:hit_callback(obj, amount, local_direction, who, bone_index)

прекрасно работает who:id(), и тогда я  сделал там сохранение своей глобальной переменной kto_ubil = who, чтобы потом в death_callback её читать, но тут снова затык: если hit убивает ящик, то нет вызова hit_callback, а сразу - death_callback :blink: 
Ладно, будем искать...  :0blackhole:

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

Добрый день, возможно как-то получить количество определённых вещей на поясе? (Например, количество медуз) Спасибо

God save Hatsune Miku!

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

[ТЧ 1.0006]
Правка "отдавать артефакты сначала из инвентаря, потом с пояса".

 

Spoiler
[scripts\dialogs.script]
function relocate_item_section(victim, section, type)
	
		elseif type == "out" then
(–)
			db.actor:transfer_item(db.actor:object(section), victim)
(+)
			local inv_item = db.actor:object(section)

			db.actor:inventory_for_each(
				function(item)
					if item:section() == section then
						inv_item = item
						break
					end
				end
			)

			db.actor:transfer_item(inv_item, victim)

 

 

Безлоговый вылет при остановке перебора через break. В движке перебор описан как for(it =  item_list.begin(); item_list.end() != it; ++it) – такой цикл должен быть совместим с break. Или нет?
Как правильно остановить перебор инвентаря при обнаружении одного предмета?

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

Шпаргалка

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

@Norman Eisenherz я не знаток С++, но скорее всего break внутри выполняемой функции работает только в контексте этой функции, а поскольку никакого цикла в ней нет, такая команда приводит к исключению.

Более того, поскольку в нет и обработки и возвращаемого из functor значения (можно было бы вернуть true или false для остановки, как это сделано, например, в level.add_call для проверки выполнения условия), то и этот метод не пойдёт.
Отсюда ответ - никак.

А потому я бы переписал код так, чтобы после первого найденного предмета он сохранял его, не меняя больше:

local inv_item = nil
db.actor:inventory_for_each(function(item)
	if inv_item == nil and item:section() == section then inv_item = item end
end)
if inv_item then db.actor:transfer_item(inv_item, victim) end

 

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

@Kirgudu Сделал примерно то же через логический флаг; хотелось устранить лишние действия, но раз никак… :pardon:

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

Шпаргалка

Ссылка на комментарий
30.05.2023 в 16:25, phalcor сказал:

function generic_physics_binder:death_callback(victim, who)

Хочу идентифицировать, КТО "убил" ящик, но who:id(), who.id, who:section(), who:section_name() и т.д. вызывают вылет - нет такого метода.

Подскажите, кто знает, как же можно идентифицировать who?

Так вы бы и разбирались для начала, передан ли вообще who, и что он из себя представляет.

Вылет происходит когда вы дергаете методы не удостоверившись в их наличии, а также наличии самого объекта.

if who and type(who) == 'userdata' then
	if type(who.id) == 'number' then
		log("who - серверный объект") -- НЕ КЛИЕНТСКИЙ!
		-- Здесь можно смело использовать who.id, who:section_name(), и другие методы и свойства СЕРВЕРНОГО объекта.
		
	elseif type(who.id) == 'function' then
		log("who - клиентский объект") -- НЕ СЕРВЕРНЫЙ!
		-- Здесь можно смело использовать who:id(), who:section(), и другие методы и свойства КЛИЕНТСКОГО объекта
    
	else
		log("who - объект, но не серверный и не клиентский. Вообще непонятно что.")
    	-- Такого скорее всего не произойдет никогда. Ну, или почти.
	end
else
	log("who not found") -- Объект не был передан.
end
-- Главное не путайте серверные и клиентские объекты между собой.

 

  • Полезно 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Если в трех скриптах [bind_stalker / bind_monster / xr_motivator] это работает одинаково, то первым действием в четвертом скрипте будет все же повтор, а не проверка – какой смысл пенять новичкам, что они не знают ВСЕГО и не предполагают наличия кочки на ровном месте?

 

Проверили: userdata неизвестного класса – та самая неведома зверушка, которая не должна существовать, но выдается при каждом срабатывании скрипта в момент разрушения ящика. Как скриптовыми методами определить класс такого объекта?

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

Шпаргалка

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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