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

[SoC] Ковыряемся в файлах


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

 

 

У меня получилось несколько omf файлов. Как мне их запихнуть в один общий?
Можешь попробовать назначить их в СДК. Посмотри как сделаны стандартные анимки для ТЧ. Положи свой .omf  в папку \gamedata\meshes\actors\

и в СДК назначь галочку. После компила оно впишется в модель.

3c03c13a2ad17f5a3f4b8fd2d752198805039725

"Кругом зомби.....у меня кончаются патроны...."

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

Зачем их пришивать к модели по отдельности? Я сразу делаю один файл из нужных анимок, stalker_animation.omf, и все модели сразу имеют все добавленные анимации, это самый удобный способ. В противном случае получается жутко неудобно, когда ты на модель будешь шить несколько файлов, это надо все модели перебирать, а с таким чудо-софтом, как сдк, лучше лесом ходить от таких операций и не выглядывать.

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

Как спавнить вещь в тайник, который находится на другой локации (или на одной локации с Актором, но не факт что в онлайне), имея story id?

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

Спасибо за советы, кое в чем разобрался. Пока разбирался понял, что упустил пару моментов. Начал переделывать, но выскакивает такая ошибка. Вообще рандомная, может появится, а может и нет. Но если появилась, фиг избавишься и СДК из-за неё зависает. Гуглил, ничего не нашел.

 

788fe6e545e64573bad40a21f302bd35.jpg

Работы butcher_512. Все ссылки пропали, поэтому ложу свои сюда, чтобы никогда не потерять:

Customization Pack 0.83 [Beta4] - SoC - Тема модификации.

Customization Pack CoP [Beta]   - CoP - Тема модификации.

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

Хотел вот узнать, как реализована система изменения рангов нпс в народной солянке?(например когда нпс новичок у него один визуал, но через некоторое игровое время, он становится по рангу ветераном и у него сменяется визуал на соответствующий)

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

@WizziGun, по моему нет. В ЧН метки ставятся на сквады, в ТЧ такого понятия нет, разве что дописать в гулаги механизм выбора лидера по каким-то параметрам (н-р самая крутая пушка) и ставить на него метку, как он помрет искать далее в этом гулаге мужика, снимать с первого и ставить на второго, и так пока все не вымрут, примерно так в ЧН и ЗП делается, если я не ошибаюсь, только там, разумеется, все проще. Я очень давно с этим разбирался, возможно кто-то другой подскажет точнее. Так, навскидку, не сильно нагрузит, на самом первом старте переберем всех и поставим стартовые сохраняемые метки (или просто врезки в функции наполнения гулагов сделать), далее, перед отрегистрацией трупа от смарта перебираем его смарт и переназначаем метку гулага другому неписю (новому "главарю" гулага), проще прямо по рангу. Какое поведение меток будет в оффлайне не берусь сказать, в ТЧ скорее всего все будет абсолютно статично, в ЧН по моему тоже они двигаются только на текущей локации, но точно не помню.

 

Можно просто поставить метки на гулаги, если там кто-то есть, но это будет так себе, так как метки будут статичны, и если там намечается какой-то движняк, то этого будет не видно.

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

@WizziGun,

я уже слегка забыл ЧН. Это динамичные отметки НПС на карте в самом ПДА, так и на карте с заданиями? 

ed_rez.gif

c1f11b67ff360413e81b4e4dcf21eb41.jpg

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

Кто подскажет, что за фигня:

Из диалога передаю три одинаковых предмета неписю.

function give_accumulators_azot(first_speaker, second_speaker)


dialogs.relocate_item_section(second_speaker, "akkum", "out")
dialogs.relocate_item_section(second_speaker, "akkum", "out")
dialogs.relocate_item_section(second_speaker, "akkum", "out")
end

 

 

В момент трансфера - вылет:

Expression : e_entity->ID_Parent == id_parent
Function : xrServer::Process_event_reject
File : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cpp
Line : 23
Description : akkum56258
Arguments : single_player

 

 

Что за вылет такой, никогда ничего подобного не видел, всегда функции передачи предметов работали.

Сталкер - наше всё!

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

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

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

Прибил наконец вылет игры, при адаптации к своей сборке и движковым правкам (растягивающим интро текстуры на весь экран) скрипта автопаузы после загрузки левела аля ЗП от Charsi. Теперь стал вопрос, как заставить заглохнуть музыкальную тему из главного меню, во время работы скрипта. Сначала, добавил по классике level.set_snd_volume(0), а после нажатия игроком любой кнопки level.set_snd_volume(1) - почему-то не катит. Да и вообще ситуация со звуком в скрипте не очень понятна:

 

 

function on_mm_init(mm)
	if level.present() and _G.press_any_key_on_start then
		_G.press_any_key_on_start = false
		level.hide_indicators()
		mm.start_btn = CUIStatic()
		mm.start_btn:SetStretchTexture(true)		
		mm.start_btn:SetWndRect(Frect():set(0,0,1024,768))
		mm.start_btn:InitTexture("intro\\intro_"..level.name())
		mm.start_btn:SetText("Нажмите любую клавишу для перехода к игре")
		mm.start_btn:SetTextAlign(CGameFont.alCenter)
		mm.start_btn:SetTextY(695)
		mm.start_btn:SetFont(GetFontGraffiti22Russian())
		mm.alpha = 255
		mm:AttachChild(mm.start_btn)
		mm:Show(false)
		--mm.sv = level.get_snd_volume() <--------- Исходник. Получаем текущую громкость звука? А где его отключение?
		level.set_snd_volume(0) <--------- Не работает. ХЗ 
		mm.tmr = profile_timer() -- Создаем таймер
		mm.tmr:start() -- Запускаем его
		mm.last_time = 0 -- Инициализируем время последнего апдейта
		_G.ui_main_menu.main_menu.__init = _G.ap_mm_init
	end
end

function mm_on_kbd(mm,dik, keyboard_action)
	if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
		if mm.start_btn then
			level.show_indicators()
			level.set_snd_volume(1) <--------- Не работает. ХЗ
			--level.set_snd_volume(mm.sv) <---------- Исходник. Возвращаем громкость звука из mm.sv = level.set_snd_volume()?
			_G.ui_main_menu.main_menu.OnKeyboard = _G.ap_mm_on_kbd
			_G.ui_main_menu.main_menu.Update = _G.ap_mm_upd
			get_console():execute("main_menu off")
		end
	end
	return mm.start_btn~=nil
end 

 

З.Ы. И да, точно нет способа запихнуть в скрипт скрытие курсора? (хоть подменой текстуры)

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

Ссылка на комментарий
Silver Raven, подмена текстуры есть на 7 патче. Звук попробуйте так: выкл:
 _G.mus_vol = get_console():get_float("snd_volume_music")
 _G.amb_vol = get_console():get_float("snd_volume_eff")
 get_console():execute("snd_volume_music 0")
 get_console():execute("snd_volume_eff 0")

вкл:

 get_console():execute("snd_volume_music "..tostring(_G.mus_vol))
 get_console():execute("snd_volume_eff "..tostring(_G.amb_vol))
 _G.amb_vol = 0
 _G.mus_vol = 0
Ссылка на комментарий

@Kondr48, угу, так работает. 

 

Остается только вопрос с курсором и...

 

З.Ы. Функция, проверяющая текущую сложность игры по пресетам (новичек, сталкер и т.п.) и возвращающая true или false в зависимости от результата проверки. Нашел похожую в оригинале, но не понял как допилить ее.

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

Извините, если данный вопрос уже задавался. Допустим, что я собрал необходимые мне локации в одну gamedata, теперь сам вопрос, как мне эти локации перенести на амк мод? Как я понял нужно добавить секции в all.spawn, если да, то какие?

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

@Ximera_1999, тебе надо подшить геймграф, собрать весь спавн воедино. Тебе нужно найти инфу по прогам acdc и gg_editor. Еще надо добавить левел-ченджеры в алсспавн для переходов. Где то на просторах инета есть инфа.

 

Вот тут кое - что есть
 

andreyholkin.gif

rod_cccp.gif

 

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

@Ximera_1999, создание переходов скриптом. Автор - не я.

 

 

function create_level_changer( -- Спавн переходов между локациями
	p_story_id,	-- STORY_ID нового level_changer (понадобится нам позже)
	p_position,	-- вектор, координаты точки, в которой будет располагаться центр нового level_changer
	p_lvertex_id,	-- level_vertext_id  - идентифицируют уровень, на котором будет создан level_changer
	p_gvertex_id,	-- game_vertext_id   	
 
	p_dest_lv,	-- level_vertex_id   - идентифицируют уровень, на который level_changer будет перебрасывать игрока 
	p_dest_gv,	-- game_vertex_id
	p_dest_pos,	-- координаты точки, в которой на новом уровне окажется игрок
	p_dest_dir,	-- направрение взгляда игрока
	p_dest_level,	-- название уровня, например "L11_Pripyat"
	p_silent	-- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход)
)
	local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id)
 
	level.map_add_object_spot(obj.id, "level_changer", "")
 
	local packet = net_packet()
	obj:STATE_Write(packet)
 
	-- свойства cse_alife_object
	local game_vertex_id 			= packet:r_u16()
	local cse_alife_object__unk1_f32 	= packet:r_float()
	local cse_alife_object__unk2_u32 	= packet:r_u32()
	local level_vertex_id 			= packet:r_u32()
	local object_flags 			= packet:r_u32()
	local custom_data 			= packet:r_stringZ()
	local story_id 				= packet:r_u32()
	local spawn_story_id			= packet:r_u32()
 
	-- свойства cse_shape
	local shape_count 			= packet:r_u8()
	for i=1,shape_count do
		local shape_type 		= packet:r_u8()
		if shape_type == 0 then
			-- sphere
			local center 		= packet:r_vec3()
			local radius 		= packet:r_float()
		else
			-- box
			local axis_x_x = packet:r_float()
			local axis_x_y = packet:r_float()
			local axis_x_z = packet:r_float()
			local axis_y_x = packet:r_float()
			local axis_y_y = packet:r_float()
			local axis_y_z = packet:r_float()
			local axis_z_x = packet:r_float()
			local axis_z_y = packet:r_float()
			local axis_z_z = packet:r_float()
			local offset_x = packet:r_float()
			local offset_y = packet:r_float()
			local offset_z = packet:r_float()
		end
	end
 
	-- свойства cse_alife_space_restrictor
	local restrictor_type 			= packet:r_u8() 
	-- свойства cse_level_changer
	local dest_game_vertex_id		= packet:r_u16()  
	local dest_level_vertex_id 		= packet:r_u32()  
	local dest_position 			= packet:r_vec3()
	local dest_direction 			= packet:r_vec3()
	local dest_level_name 			= packet:r_stringZ()
	local dest_graph_point 			= packet:r_stringZ()
	local silent_mode 			= packet:r_u8()
 
 
	packet:w_begin(game_vertex_id)			-- game_vertex_id
	packet:w_float(cse_alife_object__unk1_f32)
	packet:w_u32(cse_alife_object__unk2_u32) 
	packet:w_u32(level_vertex_id)			-- level_vertex_id
	packet:w_u32( bit_not(193) )			-- object_flags = -193 = 0xFFFFFF3E
	packet:w_stringZ(custom_data)
	packet:w_u32(p_story_id)			-- story_id
	packet:w_u32(spawn_story_id) 
	packet:w_u8(1)			-- количество фигур
	packet:w_u8(1)			-- тип фигуры: box
	packet:w_float(2)	   -- axis_x_x
	packet:w_float(0)	   -- axis_x_y
	packet:w_float(0)	   -- axis_x_z
	packet:w_float(0)	   -- axis_y_x
	packet:w_float(4)	   -- axis_y_y
	packet:w_float(0)	   -- axis_y_z
	packet:w_float(0)	   -- axis_z_x
	packet:w_float(0)	   -- axis_z_y
	packet:w_float(4)	   -- axis_z_z
	packet:w_float(0)	   -- offset_x
	packet:w_float(0)	   -- offset_y
	packet:w_float(0)          -- offset_z
	packet:w_u8(3)	 	   -- restrictor_type
	packet:w_u16(p_dest_gv)			-- destination game_vertex_id
	packet:w_u32(p_dest_lv)			-- destination level_vertex_id
	packet:w_vec3(p_dest_pos)		-- destination position
	packet:w_vec3(p_dest_dir)		-- destination direction (направление взгляда)
	packet:w_stringZ(p_dest_level)		-- destination level name
	packet:w_stringZ("start_actor_99")	-- some string, always const
	packet:w_u8(p_silent)			-- 1 for silent level changing
	
	packet:r_seek(0)
	
	obj:STATE_Read(packet, packet:w_tell())

end

function Название_функции()
		create_level_changer(31410, vector():set( 917.35, 0.419, -316.35 ), 403866, 2401,
			73868,
			2117,
			vector():set( 31.3, 3.0, 240.0 ),
			vector():set(  0.0, 0.0,  -1.0 ),
			"L11_Pripyat",
			0)

end

 

Отметка на карте:

--Находим файл level_tasks.script и в функции add_lchanger_location пишим:

		obj = sim:story_object(11410)
		if obj then
			level.map_add_object_spot(obj.id, "level_changer", "To Pripyat")
		end

Здесь 11410 - story_id нашего level_changer 

 

 

 

Криво и косо описал. Но надеюсь поймешь. Если нет, то в ЛС.

Изменено пользователем Kober(BRUC)
  • Полезно 1
Ссылка на комментарий
Сдается мне, что твои функции пытаются передать один и тот же предмет.

Да я таким способом сколько раз передавал предметы, и не по одному, а помногу.

 

Опытным путем выяснил, что передача одного (!) предмета проходит на ура, передача двух и более (именно этих!) предметов - вылет. При том, что любые другие предметы (патроны, например) передаются кучами без вылета.

 

Собсно, не может ли это быть связано с массой предмета (в районе 4 кг)?

 

 

 

 

мб через цикл, что то типа

У меня была такая мысль, но я уже отказался от всей этой затеи.

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

Сталкер - наше всё!

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

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

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

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

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

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

Войти

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

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

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