CoP: Ещё один спальный мешок — S.T.A.L.K.E.R. Inside Wiki

CoP: Ещё один спальный мешок

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск

Всем привет. В статье CoP. Создание спального мешка описан хороший метод создания спальника. К сожалению полученный спальник имеет существенный недостаток - если перетащить его в слот быстрого доступа (который F1-F4), то игра вылетает (проверялось на версии 1.6.02). Есть два метода борьбы с этим:

1. В описании спальника поменять

inv_grid_width = 2 
inv_grid_height = 2

на

inv_grid_width = 1
inv_grid_height = 1

и соответственно перерисовать его иконку, но иконка 1х1 для спальника в инвентаре будет выглядеть неприглядно

2. Создать спальник работающий на другом принципе

О втором методе и пойдйт речь.


Общий принцип

Мы унаследуем спальник не от identity_immunities, а от бинокля. Что получится:

  1. спальник нельзя будет перетащить в слот быстрого доступа - нет краша
  2. спальник будет срабатывать не при «использовании» (не будет такого пункта в меню), а при выбрасывании его из инвентаря и после сна его нужно будет подобрать обратно, что IMHO реалистичнее

Конфиги

В configs\misc\items.ltx дописываем:

 
------------------------------------------------------------------------------------------------
-- Спальный мешок
------------------------------------------------------------------------------------------------
[sleeping_bag]:wpn_binoc
;identity_immunities
GroupControlSection	      = spawn_group
discovery_dependency           = 
$spawn 			        = "devices\sleeping_bag"
$prefetch 		        = 32
class				= WP_BINOC
cform                           = skeleton
visual			        = dynamics\equipments\item_spalnik
inv_name		        = st_sleeping_bag_title
inv_name_short		        = st_sleeping_bag_title
description		        = st_sleeping_bag_descr
use_sound			= interface\bag_open
inv_weight			= 0.5
inv_grid_width		        = 2
inv_grid_height		        = 2
inv_grid_x			= 25
inv_grid_y			= 0
cost				= 0
eat_health                      = 0
eat_satiety                     = 0
eat_power                       = 0
eat_radiation                   = 0
wounds_heal_perc                = 0
eat_portions_num                = 1
slot 					  = -1
hit_power				= 0
hit_type				= fire_wound
ammo_class			= ammo_9x19_fmj
scope_status			= 0
silencer_status			= 0
grenade_launcher_status		= 0
animation_slot		        = 13
rpm					= 0
cam_dispersion		= 0
fire_dispersion_base	= 0
hit_power_critical		= 0
hud                             = wpn_vodka_hud
can_trade	                = false
random_sleep_a                  = 2
random_sleep_b                  = 6
quest_item      	        = false
 
 

Важно: visual ДОЛЖЕН существовать. OGF модели спальника можно найти в сети.

Скрипты

В scripts создаём sleeping_bag.script

 
function use(s_obj)
	if nil == s_obj then
		return
	end
	if surge_manager.actor_in_cover() then
		ui_sleep_dialog.sleep()
		give_info("sleep_active")
	else
		news_manager.send_tip(db.actor, game.translate_string("st_sleeping_bag_no_sleep"))
	end
	news_manager.send_tip(db.actor, game.translate_string("st_sleeping_bag_take_reminder"))
end
 
function use_inventory_item(s_obj)
	if s_obj and s_obj.section_name and s_obj:section_name() == "sleeping_bag" then
		use(s_obj)
	end
end
 

В bind_stalker.script в actor_binder:on_item_drop прописываем

 
function actor_binder:on_item_drop (obj)
	if(obj) then
		local s_obj = alife():object(obj:id())
		sleeping_bag.use_inventory_item(s_obj)
	end
end
 

В configs\text\rus\st_items_equipment.xml добавляем

 
      <string id="st_sleeping_bag_title">
		<text>«Спальный мешок»</text>
      </string>
      <string id="st_sleeping_bag_descr">
		<text>Непромокаемый спальный мешок.  Один из способов переночевать в Зоне. Но от радиации не спасёт, поэтому для ночевки нужно искать места по-укромнее. Например такие, где можно переждать выброс.</text>
      </string>
 

В configs\text\rus\ui_st_screen.xml добавляем

 
	<string id="st_sleeping_bag_no_sleep">
		<text>В этом месте не заснуть. Нужно найти более надежное укрытие, там где можно переждать выброс.</text>
	</string>	
	<string id="st_sleeping_bag_take_reminder">
		<text>%c[255,255,255,0]Не забудьте забрать спальный мешок.%c[default]</text>
	</string>
 

В configs\gamepley\character_desc_general.xml ищем в самом начале

 
<!-- 											 -->
<!--				 Actor 						 -->
<!-- 											 -->
 
	<specific_character id="actor" no_random = "1">
		<name>st_actor_name</name>
		<icon>ui_inGame2_Hero</icon>
		<map_icon x="2" y="5"></map_icon>
 
		<team>Actor</team>
		<supplies>
			[spawn] \n
			device_torch \n
			wpn_binoc \n
			wpn_knife = 1 \n
			detector_simple \n
			helm_respirator \n
			stalker_outfit \n
 

и добавляем

sleeping_bag \n

В configs\mp\mp_ranks.ltx ищем

 
[rank_0]
rank_name						= st_rank_novice		; звание
rank_exp						= 0, 0          ; опыт, артефакты
rank_diff_exp_bonus				= 1, 1.5, 2, 3, 4
;----------------- new items -------------------------
available_items					=
 

И в конце длиннющей строки available_items через запятую добавляем sleeping_bag

Запускаем новую игру и тестируем

Другие места
LANGUAGE