SoC. Спальный мешок — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(→Ссылки) |
|||
(не показаны 11 промежуточные версии 4 участников) | |||
Строка 1: | Строка 1: | ||
− | + | Для создания спального мешка, нам понадобятся эти файлы: | |
− | + | '''В папке 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''' и в конце пишем: | Заходим в '''gamedata\config\misc''', ищем файл '''items.ltx''' и в конце пишем: | ||
Строка 24: | Строка 42: | ||
inv_grid_x = 12 ;ширина по x | inv_grid_x = 12 ;ширина по x | ||
inv_grid_y = 0 ; высота по y | inv_grid_y = 0 ; высота по y | ||
− | cost = 3000 ; | + | cost = 3000 ;стоимость |
; eatable item | ; eatable item | ||
Строка 43: | Строка 61: | ||
Работа с созданием спального мешка завершена. | Работа с созданием спального мешка завершена. | ||
− | + | == Название и описание == | |
Заходим в '''gamedata\config\text\rus''', находим файл '''string_table_enc_equipment.xml''', открываем его и в самом низу, перед '''</string_table>''' пишем: | Заходим в '''gamedata\config\text\rus''', находим файл '''string_table_enc_equipment.xml''', открываем его и в самом низу, перед '''</string_table>''' пишем: | ||
Строка 56: | Строка 74: | ||
</xml> | </xml> | ||
− | + | Итак с предметом закончили Приступим к '''главному'''. | |
− | + | == Работа со скриптами == | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
Заходим в '''gamedata\scripts''', находим файл '''bind_stalker.script''', открываем его, находим функцию '''''function actor_binder:net_destroy()''''' и в колбеках пишем | Заходим в '''gamedata\scripts''', находим файл '''bind_stalker.script''', открываем его, находим функцию '''''function actor_binder:net_destroy()''''' и в колбеках пишем | ||
Строка 327: | Строка 304: | ||
end | end | ||
− | function main(scale) | + | function main(scale) -- основная функция |
− | basic_time_factor = level.get_time_factor() | + | basic_time_factor = level.get_time_factor () -- вычисление стандартной скорости течения времени |
− | db.actor:stop_talk() | + | db.actor:stop_talk() -- если игрок с кем-нибудь говорит, диалог закрывается. Здесь в ней нет смысла, но вдруг кому пригодится |
− | db.actor:hide_weapon() | + | db.actor:hide_weapon() -- ГГ прячет оружие в рюкзак |
− | level.disable_input() | + | level.disable_input() -- отключение управления |
− | main_sleep.starter(scale) | + | main_sleep.starter (scale) -- запуск скрипта, перематывающего время |
end | end | ||
− | function starter(scale) | + | function starter(scale) -- скрипт перемотки на нужное время |
− | local factor = scale * 2650 | + | local factor = scale * 2650 -- вычисление времени "пробуждения" |
− | game.start_tutorial("time_scaling") | + | game.start_tutorial("time_scaling") -- вызов функции перемотки |
− | level.set_time_factor(factor) | + | level.set_time_factor(factor) -- собственно сама перемотка |
end | end | ||
− | function dreamer() | + | function dreamer() -- отвечает за сны |
− | level.set_time_factor(basic_time_factor) | + | level.set_time_factor(basic_time_factor) --остановка перемотки. basic_time_factor - стандартная скорость течения времени |
− | local dream = dream.sleep_video_name_callback() | + | local dream = dream.sleep_video_name_callback () -- позволяет "показать" сон |
− | if dream ~= "" then | + | if dream ~= "" then |
− | + | game.start_tutorial(dream) -- показ одного из трёх снов | |
− | + | else | |
− | + | game.start_tutorial("without_dream") -- "без сна" | |
− | + | end | |
end | end | ||
function stopper() | function stopper() | ||
level.add_cam_effector("camera_effects\\dream.anm", 1, false, "") -- эффект подъема | level.add_cam_effector("camera_effects\\dream.anm", 1, false, "") -- эффект подъема | ||
− | db.actor:restore_weapon() -- | + | db.actor:restore_weapon() -- ГГ достаёт оружие |
− | level.enable_input() | + | level.enable_input() -- включается управление |
level.add_pp_effector("yantar_underground_psi.ppe", 222, false, "") -- эффект подъема | level.add_pp_effector("yantar_underground_psi.ppe", 222, false, "") -- эффект подъема | ||
− | if db.actor.health <= 0.60 then -- если хп упало меньше 60, то | + | if db.actor.health <= 0.60 then -- если хп упало меньше 60, то запускается функция съедания еды |
main_sleep.eat_food() | main_sleep.eat_food() | ||
end | end | ||
Строка 371: | Строка 348: | ||
С самым '''главным''' работа завершена. Переходим к предпоследнему пункту. | С самым '''главным''' работа завершена. Переходим к предпоследнему пункту. | ||
− | + | == Работа с XML-описателем == | |
Заходим в '''gamedata\config\ui''', создаем файл с названием '''ui_sleep.xml''', открываем его и пишем: | Заходим в '''gamedata\config\ui''', создаем файл с названием '''ui_sleep.xml''', открываем его и пишем: | ||
Строка 430: | Строка 407: | ||
Итак, кнопки описали. Последний пункт. | Итак, кнопки описали. Последний пункт. | ||
− | + | == Сны == | |
Заходим в '''gamedata\config\ui''', ищем файл '''ui_movies''', открываем и в самом конце пишем: | Заходим в '''gamedata\config\ui''', ищем файл '''ui_movies''', открываем и в самом конце пишем: | ||
Строка 531: | Строка 508: | ||
</time_scaling> | </time_scaling> | ||
</xml> | </xml> | ||
+ | |||
+ | Теперь зайдем в '''gamedata\config\misc''', найдем файл '''dream.ltx''', откроем его. В начале будет такая конструкция: | ||
+ | |||
+ | <ini> | ||
+ | ;-------------------------------------------------------------------------------- | ||
+ | ;--- 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 | ||
+ | </ini> | ||
+ | |||
+ | Удаляем sleep\, чтобы получилось так: | ||
+ | <ini> | ||
+ | ;-------------------------------------------------------------------------------- | ||
+ | ;--- 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 | ||
+ | </ini> | ||
+ | |||
+ | Сделали мы это, чтоб игра не вылетала во время сна. | ||
Со снами закончили. | Со снами закончили. | ||
− | + | == Заключение == | |
Осталось добавить мешок в игру. | Осталось добавить мешок в игру. | ||
Строка 542: | Строка 564: | ||
<lua> | <lua> | ||
− | + | dialogs.relocate_item_section(trader, "sleep_bag", "in") | |
</lua> | </lua> | ||
Строка 552: | Строка 574: | ||
dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in") | dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in") | ||
dialogs.relocate_item_section(trader, "wpn_knife", "in") | dialogs.relocate_item_section(trader, "wpn_knife", "in") | ||
− | + | dialogs.relocate_item_section(trader, "sleep_bag", "in") | |
end | end | ||
</lua> | </lua> | ||
− | Спальный мешок заспаунится | + | Спальный мешок заспаунится в инвентаре после согласия отбить Шустрого у бандитов. |
− | + | ___________________________________________________________________________________ | |
− | = | + | Но можно заспавнить его ГГ в инвентарь в начачле игры. |
+ | Создаём ppm_spawner.script и в нём пишем | ||
+ | <lua> | ||
+ | function give_me_speep_bag () | ||
+ | local obj = alife():create("sleep_bag", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) | ||
+ | end | ||
+ | </lua> | ||
− | * Иконка у нас не спального мешка, а костюма бандита. Модель - мешок | + | Теперь в gameplay открываем '''info_portions''' и пишем в функции |
− | + | '''<game_information_portions>''' | |
+ | Это | ||
+ | <lua> | ||
+ | <action>ppm_spawner.give_me_speep_bag</action> | ||
+ | </lua> | ||
+ | |||
+ | == Примечания == | ||
+ | |||
+ | * Иконка у нас не спального мешка, а костюма бандита. Модель - мешок с песком. | ||
Вот, собственно, и все! Можете тестировать! | Вот, собственно, и все! Можете тестировать! | ||
===Авторы=== | ===Авторы=== | ||
− | Статья создана: [[Участник:Weanchester]] | + | Статья создана: [[Участник:Weanchester|Weanchester]], [[Участник:TuMaN|TuMaN]] |
Создал скрипт сна: Ab@dDon | Создал скрипт сна: Ab@dDon | ||
+ | Инструкция по спавну в начале игры : svarog2741 | ||
Отредактировал статью анонимный граммар-наци. | Отредактировал статью анонимный граммар-наци. | ||
+ | == См. также == | ||
+ | [http://stalkerin.gameru.net/wiki/index.php/SoC._Редактирование_торговцев Редактирование ассортимента торговцев] | ||
+ | |||
+ | [http://stalkerin.gameru.net/wiki/index.php/Изменение_текстур Создание уникального значка для предмета] | ||
+ | == Ссылки == | ||
+ | [http://yadi.sk/d/T33CVF0nFcwjh Модель, текстура и значок спальника] | ||
+ | |||
+ | [http://www.mediafire.com/download/sauzyjh9isy4216/sleeping+bag.rar Готовый вариант] | ||
[[Категория:Скрипты]] | [[Категория:Скрипты]] |
Текущая версия на 10:43, 22 сентября 2015
Для создания спального мешка, нам понадобятся эти файлы:
В папке 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 и в конце пишем:
[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, открываем его и в самом низу, перед </string_table> пишем:
<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() и в колбеках пишем
self.object:set_callback(callback.use_object, nil)
Должно получиться так:
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() и так же в колбеках пишем
self.object:set_callback(callback.use_object, self.use_obj, self)
Должно получиться так:
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) и после неё пишем:
function actor_binder:use_obj(obj) main_sleep.sleep(obj) end
Должно получиться так:
---------------------------------------------------------------------------------------------------------------------- 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, открываем его и пишем:
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
С самым главным работа завершена. Переходим к предпоследнему пункту.
Работа с XML-описателем
Заходим в gamedata\config\ui, создаем файл с названием ui_sleep.xml, открываем его и пишем:
<?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, открываем и в самом конце пишем:
<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, откроем его. В начале будет такая конструкция:
;-------------------------------------------------------------------------------- ;--- 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\, чтобы получилось так:
;-------------------------------------------------------------------------------- ;--- 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
Сделали мы это, чтоб игра не вылетала во время сна.
Со снами закончили.
Заключение
Осталось добавить мешок в игру.
Для этого заходим в gamedata\scripts, ищем файл escape_dialog.script, открываем его, ищем функцию function give_weapon_to_actor (trader, actor) и после dialogs.relocate_item_section(trader, "wpn_knife", "in") пишем:
dialogs.relocate_item_section(trader, "sleep_bag", "in")
Должно получиться:
function give_weapon_to_actor (trader, actor) dialogs.relocate_item_section(trader, "wpn_pm", "in") dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in") dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in") dialogs.relocate_item_section(trader, "wpn_knife", "in") dialogs.relocate_item_section(trader, "sleep_bag", "in") end
Спальный мешок заспаунится в инвентаре после согласия отбить Шустрого у бандитов.
___________________________________________________________________________________
Но можно заспавнить его ГГ в инвентарь в начачле игры. Создаём ppm_spawner.script и в нём пишем
function give_me_speep_bag () local obj = alife():create("sleep_bag", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end
Теперь в gameplay открываем info_portions и пишем в функции <game_information_portions> Это
<action>ppm_spawner.give_me_speep_bag</action>
Примечания
- Иконка у нас не спального мешка, а костюма бандита. Модель - мешок с песком.
Вот, собственно, и все! Можете тестировать!
Авторы
Статья создана: Weanchester, TuMaN
Создал скрипт сна: Ab@dDon Инструкция по спавну в начале игры : svarog2741
Отредактировал статью анонимный граммар-наци.
См. также
Редактирование ассортимента торговцев
Создание уникального значка для предмета