Перейти к контенту

Уроки по модостроению


Zeka1996Korneev

Рекомендуемые сообщения

Нам понадобится файл

treasure_manager.script.
В этом файле находим такие строки:
--' Юзание инициатора (возможность выдать тайник)
function CTreasure:use(npc)
    printf("TREASURE USE")
После строки printf("TREASURE USE") пишем:
if (npc and db.actor) then
    lootmoney.lootmoney(npc)
end

У нас должно выйти:
--' Юзание инициатора (возможность выдать тайник)
function CTreasure:use(npc)
    printf("TREASURE USE")

    if (npc and db.actor) then
        lootmoney.lootmoney(npc)
    end

Теперь создаём файл lootmoney.script и в нём пишем:
function lootmoney(npc)
    if npc ~= nil and not string.find(npc:section(),"arena") and npc:character_community()~="arena_enemy" then
        local money = npc:money()
        if money ~= nil and money ~=0 then
            local deadmoney = money
            local npc_rank
            npc_rank = ranks.get_obj_rank_name(npc)
            if npc_rank ~= nil then
                if npc_rank == "novice" and deadmoney >=400 then deadmoney=math.random(25,400)  
                elseif npc_rank == "experienced" and deadmoney >=500 then deadmoney=math.random(50,500)  
                elseif npc_rank == "veteran" and deadmoney >=600 then deadmoney=math.random(100,600)
                elseif npc_rank == "master" and deadmoney >=700 then deadmoney=math.random(200,700)  
                end
            end
            local news_texti = "\\n%c[255,255,0,0]Мёртвый сталкер: %c[default]"..npc:character_name().."\\n%c[255,255,0,0]Обнаружено денег: %c[default]"..game.translate_string(tostring(deadmoney).."руб.")
            db.actor:give_game_news(news_texti, "ui\\ui_iconsTotal", Frect():set(0,0,83,47), 1, 4000)
            db.actor:give_money(deadmoney)
            game_stats.money_quest_update(deadmoney)
            npc:give_money(-money)
            game_stats.money_quest_update(-money)
        end
    end
end

Итак, первым делом в директории gamedata\scripts создайте файл с названием имя_вашего_файла.script
1.Открываем его и пишем:

-- названия локаций
local level_name = {
    ["l01_escape"] = "Кордон",
    ["l02_garbage"] = "Свалка",
    ["l03_agroprom"] = "НИИ Агропром",
    ["l03u_agr_undergroun"] = "Подземелье НИИ Агропром",
    ["l04_darkvalley"] = "Тёмная долина",
    ["l04u_labx18"] = "Лаборатория X-18",
    ["l05_bar"] = "Бар",
    ["l06_rostok"] = "Дикая территория",
    ["l07_military"] = "Арм.склады",
    ["l08_yantar"] = "Янтарь",
    ["l08u_brainlab"] = "Лаборатория X-16",
    ["l10u_bunker"] = "Лаборатория X-10",
    ["l10_radar"] = "Радар",
    ["l11_pripyat"] = "Припять",
    ["l12_stancia"] = "ЧАЭС",
    ["l12_stancia_2"] = "ЧАЭС",
    ["l12u_sarcofag"] = "Саркофаг",
    ["l12u_control_monolith"] = "Управление Монолитом"
    }

-- названия группировок
local community = {
    ["stalker"] = "Сталкер",
    ["monolith"] = "Монолит",
    ["military"] = "Военные",
    ["bandit"] = "Бандит",
    ["killer"] = "Наемник",
    ["ecolog"] = "Эколог",
    ["dolg"] = "Долг",
    ["freedom"] = "Свобода",
    ["zombied"] = "Зомбированный",
    ["trader"] = "Торговец"
    }

function kill_npc(victim, who)
    if victim and IsStalker(victim) then
        -- определяется какая группировка у убитого, его имя, локация
        local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
        db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)
    end
end

2. Далее открываем xr_motivator.script, который находится в gamedata\scripts, ищем функцию:
function motivator_binder:death_callback(victim, who)
и после пишем: имя_вашего_файла.kill_npc(victim, who) в итоге:
function motivator_binder:death_callback(victim, who)
    имя_вашего_файла.kill_npc(victim, who)
    if who:id() == db.actor:id() then
        xr_statistic.addKillCount(self.object)
    end
Вот собственно и все!

Прим. от AntdiabloN. Можно сделать так чтобы при выводе инфы возможно было услышать звук принятого сообщения. В конце файла с сообщениями о смерти пишем -
-- Звук сообщения
function news_sound()
    local snd_obj
    snd_obj = xr_sound.get_safe_sound_object([[device\pda\pda_tip]]) -- путь до звукового файла
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 1, vector(), 1.0)
end
и в функции news_of_npc_kill перед первым end пишем - имя_вашего_файла.news_sound()
Пример как может быть выглядеть функция:
function kill_npc(victim, who)
    if victim and IsStalker(victim) then
        local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
        db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)
        имя_вашего_файла.news_sound()
    end
end

Изменено пользователем World_Stalker
Поправил
  • Спасибо 2

Поделиться этим сообщением


Ссылка на сообщение
 

Для создания спального мешка, нам понадобятся эти файлы:


В папке 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

Спальный мешок заспаунится в инвентаре после согласия отбить Шустрого у бандитов.

 

Примечания
Иконка у нас не спального мешка, а костюма бандита. Модель - мешок с песком.
Вот, собственно, и все! Можете тестировать!

 

Авторы
Статья создана: Weanchester, TuMaN
Создал скрипт сна: Ab@dDon
Отредактировал статью анонимный граммар-наци.

 

  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...