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

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

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

Версия от 15:35, 27 декабря 2012; Adarkman (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Всем привет. В статье 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