Створення спального...
 
Сповіщення
Очистити все

Створення спального мішка (альтернативний спосіб)


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
7 місяців тому
 

Вітаю всіх! У минулому уроці по створенню спального мішка був один некритичний баг - якщо перетягнути його в слот швидкого доступу (який F1-F4), то гра вилетить. Є два методи боротьби з цим:

1. В налаштуваннях спальнику змінити

inv_grid_width = 2 
inv_grid_height = 2

на

inv_grid_width = 1
inv_grid_height = 1

і відповідно перемалювати його іконку, але іконка 1х1 для спальнику в інвентару буде виглядати не дуже.

2. Створити спальник, який працює на іншому принципі.

Про нього й піде мова.

Загальний принцип

Ми внаслідуємо спальник не від identity_immunities, а від бінокля. Що виходить:

  1. Спальник не можна буде перетягнути в слот швидкого доступу - не буде виліту
  2. Спальник буде спрацьовувати не при «використанні» (не буде такого пункта в меню), а при викиданні його з інвентару і післе сну його потрібно буде підняти назад, що НАБАГАТО реалістичніше.

Конфиги

В 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

Запускаємо нову гру та тестуємо!


   
Цитата