Четверг, 28.03.2024, 18:35
Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » S.T.A.L.K.E.R. Модострение » S.T.A.L.K.E.R. Shadow of Chernobyl » Создание рабочего спального мешка (Для создания спального мешка, нам понадобятся.....)
Создание рабочего спального мешка
Vavilov8Дата: Воскресенье, 09.09.2012, 18:03 | Сообщение # 1
VIP
Группа: Администраторы
Сообщений: 42
Репутация: 0
Статус: Offline
Для создания спального мешка, нам понадобятся эти файлы:
В папке scripts
bind_stalker.script
пустой файл main_sleep.script

В папке config/ui
ui_movies.xml
пустой ui_sleep.xml

В папке config/misc
dream.ltx
items.ltx

В папке config/texs/rus
string_table_enc_equipment.xml

Заходим в gamedata\config\misc, ищем файл items.ltx и в конце пишем:

Code

[sleep_bag]:identity_immunities  
GroupControlSection    = spawn_group  
discovery_dependency =  
$spawn    = "food and drugs\sleep_bag"  
$prefetch   = 32  
class   = II_ANTIR ;класс  
cform           = skeleton  
visual          = physics\decor\bag_01.ogf ;модель мешка с песком  
description  = enc_equipment_sleep_bag ;описание  
     
inv_name   = sleep_bag ;наименование  
inv_name_short  = sleep_bag ;наименование  
inv_weight   = 0.2 ;вес  
     
inv_grid_width  = 2 ;ширина иконки  
inv_grid_height  = 2 ;высота иконки  
inv_grid_x   = 12 ;ширина по x  
inv_grid_y   = 0 ; высота по y  
cost    = 3000 ;стоимость  
     
; eatable item  
eat_health = 0  
eat_satiety = 0  
eat_power = 0  
eat_radiation = 0.0  
wounds_heal_perc = 0  
eat_portions_num = 1  
     
; food item  
animation_slot  = 4  
     
;hud item  
hud = wpn_vodka_hud  


Заходим в gamedata\config\text\rus, находим файл string_table_enc_equipment.xml, открываем его и в самом низу, перед пишем:

Code

<string id="sleep_bag">  
      <text>Спальный мешок</text>  
</string>  
<string id="enc_equipment_sleep_bag">  
      <text>Отличный спальный мешок. Ткань не рвется, устойчивая к воде. Отличная вещь переночевать в Зоне.</text>  
</string>  


Заходим в gamedata\scripts, находим файл bind_stalker.script, открываем его, находим функцию function actor_binder:net_destroy() и в колбеках пишем:

Code

self.object:set_callback(callback.use_object, nil)  


Должно получится так:
Code

function actor_binder:net_destroy()  
   if(actor_stats.remove_from_ranking~=nil)then  
    actor_stats.remove_from_ranking(self.object:id())  
   end  
--    game_stats.shutdown ()  
   db.del_actor(self.object)  
     
      sr_light.clean_up ()  
     
   self.object:set_callback(callback.inventory_info, nil)  
   self.object:set_callback(callback.article_info, nil)  
   self.object:set_callback(callback.on_item_take, nil)  
   self.object:set_callback(callback.on_item_drop, nil)  
   --self.object:set_callback(callback.actor_sleep, nil)  
   self.object:set_callback(callback.task_state, nil)  
   self.object:set_callback(callback.level_border_enter, nil)  
   self.object:set_callback(callback.level_border_exit, nil)  
   self.object:set_callback(callback.take_item_from_box, nil)  
   self.object:set_callback(callback.use_object, nil) -- вот наш колбек  
     
   if sr_psy_antenna.psy_antenna then  
    sr_psy_antenna.psy_antenna:destroy()  
    sr_psy_antenna.psy_antenna = false  
   end  
     
   xr_sound.stop_all_sound_object()  
     
   object_binder.net_destroy(self)  
end  


В этом же файле находим функцию function actor_binder:reinit() и так же в колбеках пишем:
Code

self.object:set_callback(callback.use_object, self.use_obj, self)  


Должно получится так:

Code

function actor_binder:reinit()  
   object_binder.reinit(self)  
     
   local npc_id = self.object:id()  
     
   db.storage[npc_id] = { }  
     
   self.st = db.storage[npc_id]  
   self.st.pstor = nil  
     
   self.next_restrictors_update_time = -10000  
     
   self.object:set_callback(callback.inventory_info, self.info_callback, self)  
   self.object:set_callback(callback.article_info, self.article_callback, self)  
   self.object:set_callback(callback.on_item_take, self.on_item_take, self)  
   self.object:set_callback(callback.on_item_drop, self.on_item_drop, self)  
   self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats  
   --self.object:set_callback(callback.actor_sleep, self.sleep_callback, self)  
   self.object:set_callback(callback.task_state, self.task_callback, self)  
   --self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self)  
   self.object:set_callback(callback.level_border_enter, self.level_border_enter, self)  
   self.object:set_callback(callback.level_border_exit, self.level_border_exit, self)  
   self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)  
   self.object:set_callback(callback.use_object, self.use_obj, self) -- вот наш колбек  
end  


Так же в этом файле находим функцию function actor_binder:on_item_drop (obj) и после неё пишем:

Code

function actor_binder:use_obj(obj)  
      main_sleep.sleep(obj)  
end  


Должно получиться так:
Code

------------------------------------------------------------------------
function actor_binder:on_item_drop (obj)  
      level_tasks.proceed(self.object)  
      --game_stats.update_drop_item (obj, self.object)  
end  
------------------------------------------------------------------------
function actor_binder:use_obj(obj) -- функция на использование предмета  
      main_sleep.sleep(obj) -- наш будущий скрипт и функция в нем.  
end  
------------------------------------------------------------------------


Теперь в gamedata\scripts создаем файл c названием main_sleep.script, открываем его и пишем:

Code

function sleep(obj)  
     if obj ~= nil then  
        if obj:section() == "sleep_bag" then -- при использоваании спального мешка будет открываться выборочное меню  
         local hud = sleep_ui(get_hud()) -- указываем на class "sleep_ui" (CUIScriptWnd)  
           level.start_stop_menu(hud, true) -- открываем меню  
   end  
      end  
end  
     
     
class "sleep_ui" (CUIScriptWnd)  
     
function sleep_ui:__init(owner) super()  
   self.owner = owner  
   self:InitControls()  
   self:InitCallBacks()  
end  
     
function sleep_ui:__finalize() end  
     
function sleep_ui:InitControls()  
   self:Init(50,50,550,450)  
     
   local xml = CScriptXmlInit()  
   xml:ParseFile("ui_sleep.xml") -- настройки будут воспроизводиться в этом xml файле  
     
   xml:InitStatic("back_video", self) -- видео сзади  
     
   xml:InitStatic("background", self) -- рамка сзади  
     
   self:Register(xml:Init3tButton("caption", self),"caption") -- заголовок  
   self:Register(xml:Init3tButton("btn_1", self),"btn_1") -- кнопка на сон одного часа  
   self:Register(xml:Init3tButton("btn_2", self),"btn_2") -- кнопка на сон трех часов  
   self:Register(xml:Init3tButton("btn_3", self),"btn_3") -- кнопка на сон девяти часов  
   if db.actor.health < 0.9 then -- если здоровье упало, то  
   self:Register(xml:Init3tButton("btn_4", self),"btn_4") -- кнопка на выздоровления  
      end  
   self:Register(xml:Init3tButton("btn_quit", self),"btn_quit") -- кнопка выхода  
end  
     
function sleep_ui:InitCallBacks()  
   self:AddCallback("btn_1", ui_events.BUTTON_CLICKED, self.sleep_ui1, self) -- кнопка один идет на функцию sleep_ui1  
   self:AddCallback("btn_2", ui_events.BUTTON_CLICKED, self.sleep_ui2, self) -- кнопка два идет на функцию sleep_ui2  
   self:AddCallback("btn_3", ui_events.BUTTON_CLICKED, self.sleep_ui3, self) -- кнопка три идет на функцию sleep_ui3  
   if db.actor.health < 0.9 then  
   self:AddCallback("btn_4", ui_events.BUTTON_CLICKED, self.sleep_ui4, self) -- кнопка идет на sleep_ui4  
      end  
   self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self) -- кнопка идет на выход  
end  
     
function sleep_ui:OnKeyboard(dik, keyboard_action) -- функция на отмену сна при нажатии клавиши Esc  
   CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)  
   if keyboard_action == ui_events.WINDOW_KEY_PRESSED then  
    if dik == DIK_keys.DIK_ESCAPE then  
     self:on_quit()  
    end  
    if dik == DIK_keys.DIK_NUMPAD1 then  
     self:sleep_ui1()  
    end  
    if dik == DIK_keys.DIK_NUMPAD2 then  
     self:sleep_ui2()  
    end  
    if dik == DIK_keys.DIK_NUMPAD3 then  
     self:sleep_ui3()  
    end  
    if dik == DIK_keys.DIK_NUMPAD4 then  
     self:sleep_ui4()  
    end  
   end  
   return true  
end  
     
function sleep_ui:sleep_ui1() -- вот функция от кнопки один  
    main_sleep.sleep_one_hour() -- спим один час  
    self:on_quit() -- выход  
end  
function sleep_ui:sleep_ui2() -- вот функция от кнопки два  
    main_sleep.sleep_three_hours() -- спим три часа  
    self:on_quit()  
end  
function sleep_ui:sleep_ui3() -- вот функция от кнопки три  
    main_sleep.sleep_nine_hours() -- спим девять часов  
    self:on_quit()  
end  
function sleep_ui:sleep_ui4() -- функция от кнопкм четыри  
    main_sleep.sleep_health(scale) -- спим до выздоровления  
    self:on_quit()  
end  
     
function sleep_ui:check_game() -- проверка запущена ли игра  
   local check = false  
   if level.present() and (db.actor ~= nil) and db.actor:alive() then  
    check = true  
   end  
   return check  
end  
     
function sleep_ui:on_quit() -- вот кнопка выхода  
      self:GetHolder():start_stop_menu(self, true)  
      alife():create("sleep_bag", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) -- спаун мешка обратно  
end  
     
     
-- -----------------------------  
--  DreamMod v0.1 by Ab@dDon ---  
--  Edited by Weanchester    ---  
-- -----------------------------  
     
function sleep_one_hour() -- сон один час  
   main_sleep.main(1)  
end  
     
function sleep_three_hours() -- сон три часа  
   main_sleep.main(3)  
end  
     
function sleep_nine_hours() -- сон девять часов  
   main_sleep.main(9)  
end  
     
function sleep_health(scale) -- сон до выздоровления  
   local sleep_time = (1 - db.actor.health)*5.00  
   main_sleep.main(sleep_time)  
end  
     
function main(scale) -- основная функция  
   basic_time_factor = level.get_time_factor () -- вычисление стандартной скорости течения времени  
   db.actor:stop_talk() -- если игрок с кем-нибудь говорит, диалог закрывается. Здесь в ней нет смысла, но вдруг кому пригодится  
   db.actor:hide_weapon() -- ГГ прячет оружие в рюкзак  
   level.disable_input() -- отключение управления    
   main_sleep.starter (scale) -- запуск скрипта, перематывающего время   
end  
     
function starter(scale) -- скрипт перемотки на нужное время  
   local factor = scale * 2650 -- вычисление времени "пробуждения"  
   game.start_tutorial("time_scaling") -- вызов функции перемотки  
   level.set_time_factor(factor) -- собственно сама перемотка   
end  
     
function dreamer() -- отвечает за сны  
   level.set_time_factor(basic_time_factor) --остановка перемотки. basic_time_factor - стандартная скорость течения времени  
   local dream = dream.sleep_video_name_callback () -- позволяет "показать" сон  
   if dream ~= "" then  
   game.start_tutorial(dream) -- показ одного из трёх снов  
   else  
   game.start_tutorial("without_dream")  -- "без сна"  
   end  
end  
     
function stopper()  
   level.add_cam_effector("camera_effects\\dream.anm", 1, false, "") -- эффект подъема  
   db.actor:restore_weapon() -- ГГ достаёт оружие  
   level.enable_input() -- включается управление  
   level.add_pp_effector("yantar_underground_psi.ppe", 222, false, "") -- эффект подъема  
      if db.actor.health <= 0.60 then -- если хп упало меньше 60, то запускается функция съедания еды  
      main_sleep.eat_food()  
      end  
end  
     
function eat_food() -- функция съедания еды  
if db.actor:eat(db.actor:object("conserva")) ~= nil or  
     db.actor:eat(db.actor:object("bread")) ~= nil or  
     db.actor:eat(db.actor:object("kolbasa")) ~= nil then  
     end  
end  


Заходим в gamedata\config\ui, создаем файл с названием ui_sleep.xml, открываем его и пишем:

Code

<?xml version="1.0" encoding="windows-1251" ?>  
     
<main>  
   <back_video x="10" y="10" width="380" height="320" stretch="1">  
    <texture>ui\credits_back_512_v10</texture>  
   </back_video>  
     
   <background x="0" y="0" width="400" height="340" stretch="1">  
    <texture x="0" y="0" width="350" height="460">ui\ui_dg_inventory</texture>  
   </background>  
     
   <caption x="175" y="30" width="50" height="35">  
    <text>Сон</text>  
   </caption>  
     
   <btn_1 x="72" y="80" width="256" height="35">  
   <texture_e>ui\ui_btn_mm_e</texture_e>  
   <texture_t>ui\ui_btn_mm_t</texture_t>  
   <texture_h>ui\ui_btn_mm_h</texture_h>  
    <text>Спать 1 час</text>  
   </btn_1>  
     
   <btn_2 x="72" y="130" width="256" height="35">  
   <texture_e>ui\ui_btn_mm_e</texture_e>  
   <texture_t>ui\ui_btn_mm_t</texture_t>  
   <texture_h>ui\ui_btn_mm_h</texture_h>  
    <text>Спать 3 часа</text>  
   </btn_2>  
     
   <btn_3 x="72" y="180" width="256" height="35">  
   <texture_e>ui\ui_btn_mm_e</texture_e>  
   <texture_t>ui\ui_btn_mm_t</texture_t>  
   <texture_h>ui\ui_btn_mm_h</texture_h>  
    <text>Спать 9 часов</text>  
   </btn_3>  
     
   <btn_4 x="72" y="230" width="256" height="35">  
   <texture_e>ui\ui_btn_mm_e</texture_e>  
   <texture_t>ui\ui_btn_mm_t</texture_t>  
   <texture_h>ui\ui_btn_mm_h</texture_h>  
    <text>Спать до восстановления здоровья</text>  
   </btn_4>  
     
          <btn_quit x="270" y="300" width="117" height="29">  
   <texture_e>ui_button_ordinary_e</texture_e>  
   <texture_t>ui_button_ordinary_t</texture_t>  
   <texture_h>ui_button_ordinary_h</texture_h>  
       <text>Выход</text>  
          </btn_quit>  
</main>  


Заходим в gamedata\config\ui, ищем файл ui_movies, открываем и в самом конце пишем:

Code

<Movie-003_Rats_OutPut-010>  
    <play_each_item>1</play_each_item>  
    <global_wnd x="0" y="0" width="1024" height="768">  
     <auto_static x="0" y="0" width="1024" height="768" stretch="1">  
      <window_name>back</window_name>  
      <texture>intro\intro_back</texture>  
     </auto_static>  
    </global_wnd>  
     
    <item type="video">  
     <sound>characters_voice\scenario\video\dream_rats</sound>  
     <pause_state>on</pause_state>  
     <function_on_stop>main_sleep.stopper</function_on_stop>  
     <video_wnd x="0" y="0" width="1024" height="768" stretch="1">  
      <texture x="0" y="1" width="512" height="245">sleep\movie-003_rats_output-010</texture>  
     </video_wnd>  
    </item>  
   </Movie-003_Rats_OutPut-010>  
     
   <esc_sky_01>  
    <play_each_item>1</play_each_item>  
    <global_wnd x="0" y="0" width="1024" height="768">  
     <auto_static x="0" y="0" width="1024" height="768" stretch="1">  
      <window_name>back</window_name>  
      <texture>intro\intro_back</texture>  
     </auto_static>  
    </global_wnd>  
     
    <item type="video">  
     <sound>characters_voice\human_01\dolg\states\sleep\sleep_1.ogg</sound>  
     <pause_state>on</pause_state>  
     <function_on_stop>main_sleep.stopper</function_on_stop>  
     <video_wnd x="0" y="0" width="1024" height="768" stretch="1">  
      <texture x="0" y="1" width="512" height="245">sleep\esc_sky_01</texture>  
     </video_wnd>  
    </item>  
   </esc_sky_01>  
     
   <aes_sky_red>  
    <play_each_item>1</play_each_item>  
    <global_wnd x="0" y="0" width="1024" height="768">  
     <auto_static x="0" y="0" width="1024" height="768" stretch="1">  
      <window_name>back</window_name>  
      <texture>intro\intro_back</texture>  
     </auto_static>  
    </global_wnd>  
     
    <item type="video">  
     <sound>ambient\air_2.ogg</sound>  
     <pause_state>on</pause_state>  
     <function_on_stop>main_sleep.stopper</function_on_stop>  
     <video_wnd x="0" y="0" width="1024" height="768" stretch="1">  
      <texture x="0" y="1" width="512" height="245">sleep\aes_sky_red</texture>  
     </video_wnd>  
    </item>  
   </aes_sky_red>  
     
   <without_dream>  
    <play_each_item>1</play_each_item>  
    <global_wnd x="0" y="0" width="1024" height="768">  
     <auto_static x="0" y="0" width="1024" height="768" stretch="1">  
      <window_name>back</window_name>  
      <texture>intro\intro_back</texture>  
     </auto_static>  
    </global_wnd>  
     
    <item type="video">  
     <sound>characters_voice\human_01\dolg\states\sleep\sleep_1.ogg</sound>  
     <pause_state>on</pause_state>  
     <function_on_stop>main_sleep.stopper</function_on_stop>  
     <video_wnd x="0" y="0" width="1024" height="768" stretch="1">  
      <texture x="0" y="1" width="1024" height="768">intro\intro_back</texture>  
     </video_wnd>  
    </item>  
   </without_dream>  
     
   <time_scaling>  
    <play_each_item>1</play_each_item>  
    <global_wnd x="0" y="0" width="1024" height="768">  
     <auto_static x="0" y="0" width="1024" height="768" stretch="1">  
      <window_name>back</window_name>  
      <texture>intro\intro_back</texture>  
     </auto_static>  
    </global_wnd>  
     
    <item type="video">  
     <sound>characters_voice\human_01\monolith\states\sleep\sleep_6.ogg</sound>  
     <pause_state>off</pause_state>  
     <can_be_stopped>off</can_be_stopped>  
     <function_on_stop>main_sleep.dreamer</function_on_stop>  
     <video_wnd x="0" y="0" width="1024" height="768" stretch="1">  
      <texture x="0" y="1" width="1024" height="768">intro\intro_back</texture>  
     </video_wnd>  
    </item>  
   </time_scaling>  


Теперь зайдем в gamedata\config\misc, найдем файл dream.ltx, откроем его. В начале будет такая конструкция:

Code


;-----------------------------------------------------------------------  
;--- Regular dreams ----------------------------------------------------  
;-----------------------------------------------------------------------  
[regular_dream1]  
dream       = sleep\aes_sky_red  
probability = 10  
type        = nightmare  
     
[regular_dream2]  
dream       = sleep\esc_sky_01  
probability = 5  
type        = normal  
     
[regular_dream3]  
dream       = sleep\Movie-003_Rats_OutPut-010  
probability = 8  
type        = happy  


Удаляем sleep\, чтобы получилось так:

Code

;-----------------------------------------------------------------------
;--- Regular dreams ----------------------------------------------------
;-----------------------------------------------------------------------
[regular_dream1]  
dream       = aes_sky_red  
probability = 10  
type        = nightmare  
     
[regular_dream2]  
dream       = esc_sky_01  
probability = 5  
type        = normal  
     
[regular_dream3]  
dream       = Movie-003_Rats_OutPut-010  
probability = 8  
type        = happy  



Поздравляю! Спальный мешок готов.
 
Форум » S.T.A.L.K.E.R. Модострение » S.T.A.L.K.E.R. Shadow of Chernobyl » Создание рабочего спального мешка (Для создания спального мешка, нам понадобятся.....)
  • Страница 1 из 1
  • 1
Поиск: