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

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

@DibokDibokin, есть другой вариант, не по модели, а по секции [drop_box],

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

-- тестовые функции по клавише из главного меню
function main_menu:OnKeyboard(dik, keyboard_action) --virtual function
...
	-- поставить отметку на объект с логикой drop_box (лут из коробки)
	if dik == DIK_keys.DIK_F1 then
			if (level.present() and db.actor ~= nil and db.actor:alive()) then
				local level_actor = game_graph():vertex(alife():actor().m_game_vertex_id):level_id()
				for a=1,65535,1 do
					local obj = alife():object(a)
					if obj and obj ~= nil then
						local level_obj = game_graph():vertex(obj.m_game_vertex_id):level_id()
						if level_obj == level_actor then -- отметки только на текущей карте
							local obj_name = obj:name()
							if (obj.parent_id and obj.parent_id == 65535) then
								local ini = obj:spawn_ini()
								if (obj:spawn_ini() ~= nil and obj:spawn_ini():section_exist("drop_box") == true) then
									level.map_add_object_spot(obj.id, "obj_location", tostring(obj_name))
									-- obj_location, ид метки из map_spots.xml
									--[[
                                      <obj_location>
                                          <level_map spot="obj_location_spot"/>
                                          <mini_map spot="obj_location_spot"/>
                                      </obj_location>
                                      <obj_location_spot x="0" y="0" width="4" height="4" alignment="c" stretch="1">
                                          <texture r="0" g="255" b="255">ui_minimap_point</texture>
                                      </obj_location_spot>
									]]--
								end
							end
						end
					end
				end
			end
		end
		-- удалить отметку
		if dik == DIK_keys.DIK_F2 then
			if (level.present() and db.actor ~= nil and db.actor:alive()) then
				for a=1,65535,1 do
					local obj = alife():object(a)
					if obj and obj ~= nil then
						if (obj.parent_id and obj.parent_id == 65535) then
							if (obj:spawn_ini() ~= nil and obj:spawn_ini():section_exist("drop_box") == true and level.map_has_object_spot(obj.id, "obj_location")) then
								level.map_remove_object_spot(obj.id, "obj_location", "")
							end
						end
					end
				end
			end
		end

 

 

  • Спасибо 1
Ссылка на комментарий
35 минут назад, DibokDibokin сказал:

тоже не сработало.

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

В вашей функции, первая же строчка:

36 минут назад, DibokDibokin сказал:

 local s_obj = alife():object(i)

Чему здесь равно i ? Не определено. Что вам вернет в s_obj - ничего.

 

Я так понимаю, этот совет

14.08.2020 в 00:52, Zander_driver сказал:

Когда код творит что-то не то, что от него ожидается, полезно его снабдить выводами в лог интересующей информации. Пусть пишет, как у него дела, у кода этого. Тогда и дебаг быстрее делается

Решили игнорировать. Ваше право. Но тогда никакие "варианты" в скриптах не сработают, если только случайно. Любой код отладки требует, это нормально. Но отладки не будет без лога. И не будет понимания, что могло пойти не так, если не смотрели что код вообще делает, откуда в нем те или иные значения берутся.

  • Спасибо 1
  • Согласен 3
  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

Доброго времени!

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

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

FATAL ERROR
 
[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : ..\xrServerEntities\script_storage.cpp
[error]Line          : 748
[error]Description   : .... world over world\gamedata\scripts\state_mgr.script:247: C stack overflow

Понимаю, что ошибка где-то в анимках НПС, возможно даже, в скриптах логики неписей.Но все анимации вроде как стандартные, без изысков. И не пойму, ошибка в анимациях "обычных" неписей или квестовых, эксклюзивных, так сказать...

И вдогонку - в gamedata\scripts есть набор файлов, отвечающих за анимациии НПС, может ли кто-то скинуть полный перечень файлов в этой (а если есть и в других) папках, отвечающих за эти анимации (файлы типа - smart_covers_animpoint_sit_low, smart_covers_loophole_animpoint_sit_low, state_mgr_animation и подобные им, это просто для примера). Потому как набор таких файлов в оригинале ЗП сильно отличается от аналогичного набора в исходниках СДК 0.7, в СДК он больше.

Изменено пользователем mdm64
Ссылка на комментарий

@DibokDibokin, попробуй так:

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

local is_box = { 
    ["dynamics\\box\\box_wood_01"] = true,
    ["dynamics\\box\\box_metall_01"] = true,
    ["dynamics\\box\\box_paper"] = true,
}

function show_boxes()
    for i=1,65535 do
		local s_obj = alife():object(i)
		if s_obj ~= nil then
			local c_obj = level.object_by_id(s_obj.id)
			if (c_obj and is_box[c_obj:get_visual_name()]) then
				level.map_add_object_spot_ser(s_obj.id, "warfare_stalker_spot", "box")
			end
		end
    end
end

 

 

  • Спасибо 1
  • Согласен 2

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

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

@WinCap@DibokDibokin

Если есть таблица, из которой мы выдергиваем признак того, что объект у нас инв.ящик, так может правильнее сделать таким признаком story_id? Т.е. вместо перебора 65тыщ объектов перебрать несколько объектов из таблицы, получая объект по его story_id?

 

Просмотрел несколько страниц назад, не нашел изначальный вопрос @DibokDibokin. Из обсуждения понятно, что надо поставить метку на объект, но вот условия, когда ее надо ставить?

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

@WinCap, Среди объектов иногда бывают такие, у которых нету визуала. Смарты например. Попытка с колес использовать его "визуал" в качестве ключа таблицы, к нехорошим последствиям привести может :rolleyes:

 

@DibokDibokin


local is_box = { 
    ["dynamics\\box\\box_wood_01"] = true,
    ["dynamics\\box\\box_metall_01"] = true,
    ["dynamics\\box\\box_paper"] = true,
}

function show_boxes()
	printf("show_boxes run")
    for i=1,65535 do
		local s_obj = alife():object(i)
		if s_obj ~= nil then
			local c_obj = level.object_by_id(s_obj.id)
			if (c_obj) then
				local visual = c_obj:get_visual_name()
				if (visual and visual ~= "" and is_box[visual]) then
					printf(string.format("box object [%s:%i] detected. visual=%s", c_obj:section(), s_obj.id, visual))
					level.map_add_object_spot_ser(s_obj.id, "warfare_stalker_spot", "box")
				end
			end
		end
    end
	printf("show_boxes complete")
end

Готовый вариант, безопасный с точки зрения работы с таблицами, и снабженный выводами в лог, емнип, не требующими подключения сторонних библиотек к оригиналу. printf ведь работает в оригинале? :crazy2: кто помнит.

 

  • Спасибо 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

@Zander_driver, вот и проверит, если будут вылет с руганью на эту строчку, значит не работает:crazy2:.

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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

может правильнее сделать таким признаком story_id? Т.е. вместо перебора 65тыщ объектов

Из вопросов @DibokDibokin, по-моему, никак не следует, что интересующие ящики вообще story_id имеют.

А возникающие какие-либо задачи лучше решать без привлечения сторонних-дополнительных сущностей, если это возможно и удобно. имха.

Только что, UriZzz сказал:

если будут вылет

Его-то точно не будет. Куча printf-ов есть в скриптах оригинала, не закомментированных. Другое дело, они там в лог пишут или молча игнорируются... я не помню. Помню что на заре моддинга зачем-то строились монструозные костыли для вывода инфы в логи через консоль. А зачем и почему это делалось, уже не помню, хоть убейте.

  • Согласен 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

Ссылка на комментарий
56 минут назад, Zander_driver сказал:

А зачем и почему это делалось, уже не помню, хоть убейте.

Затем, что принтф не работает в оригиналах :)

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

Господа, чет я затупил

Вот так можно вернуть комьюнити НПС: npc:community(), а как вернуть уровень, на котором находится npc?

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

@_Sk8_AsTeR_, если движок OGSR, то sobj.level_name. Ты сразу уточняй, что за движок, что бы не гадать. 

  • Спасибо 1
Ссылка на комментарий
2 часа назад, abramcumner сказал:

принтф не работает в оригиналах

Ужас. И всякие log_что-нибудь тоже.

Давно там не ковырялся, успел позабыть, насколько все было плохо)

А ведь пожалуй, OGSR движок вообще любому начинающему ковыряльщику рекомендовать можно, дружелюбнее он к разработчику. Особенно начинающему.

@DibokDibokin, возьми на заметку)

  • Спасибо 1
  • Согласен 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

Начинающего ковыряльщика может интересовать вовсе даже не ТЧ, а, скажем, ЧН, как меня 9 лет назад, или ЗП. :)

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

@Kirgudu, про ЧН это слишком. Там я и еще пара пасонов.

Вот в ЗП - это возможно.

 

И еще, зачем вы в ОГСМ ГГ убили? Вы на ГГ, еще одного ГГ навесили? :biggrin:

Изменено пользователем Опричник

andreyholkin.gif

rod_cccp.gif

 

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

Никто не подскажет, что за интересное написание логики непися в поинте (ЗП) - ""wp00|a=sit_ass""? Первый раз встретил такое, это чей-то мод небольшой, старенький.

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

@Expropriator, я не об этом, это понятно, я про двойные скобки.

ПыСы. Самое интересное, что этот мод работает.

Изменено пользователем mdm64
  • Сочувствую 1
Ссылка на комментарий

@mdm64, может потому, что там один вейпоинт вообще, а не цепь.

Что то даже не знаю.

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

andreyholkin.gif

rod_cccp.gif

 

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

@Expropriator, Там плотно заселённые средних размеров две локации плюс полный ЗП. На каждой локе несколько смартов, в общей сложности десятка два отрядов плюс мутанты.... и на каждый отряд своя точка спавна, почти все неписи спавнятся через поинты, кроме уников.

Да, такой вопрос - можно ли управлять в ЗП отрядом, используя цепочку поинтов, как для одно сталкера? Помнится, в ТЧ это было возможно, а в ЗП что-то не видел нигде. Если можно, то как?

Изменено пользователем mdm64
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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