SoC. Создание ремонт комплектов — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

SoC. Создание ремонт комплектов — различия между версиями

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

Перейти к: навигация, поиск
(Небольшая заметка)
 
(не показаны 14 промежуточные версии 10 участников)
Строка 2: Строка 2:
 
Я опишу пример создания ремонт комплекта для костюмов, а для оружия в конце статьи сделаю пару заметок. Дело в том, что различия в создании ремонт комплектов почти нет.
 
Я опишу пример создания ремонт комплекта для костюмов, а для оружия в конце статьи сделаю пару заметок. Дело в том, что различия в создании ремонт комплектов почти нет.
 
   
 
   
1. Для начала нам нужно создать сам ремонт комплект, то есть предмет, а уже потом вешать на него функцию при использование. Для этого в config\misc\items.ltx в конец добавляем конфиг нашего предмета:
+
1. Для начала нам нужно создать сам ремонт комплект, то есть предмет, а уже потом вешать на него функцию при использовании. Для этого в config\misc\items.ltx в конец добавляем конфиг нашего предмета:
 
   
 
   
<pre>[repair_kit_outfit]:identity_immunities
+
<ini>[repair_kit_outfit]:identity_immunities
 
GroupControlSection = spawn_group
 
GroupControlSection = spawn_group
 
discovery_dependency    =
 
discovery_dependency    =
Строка 31: Строка 31:
 
eat_portions_num = 1
 
eat_portions_num = 1
 
animation_slot = 4
 
animation_slot = 4
hud = wpn_vodka_hud</pre>
+
hud = wpn_vodka_hud</ini>
2. Теперь добавим название и описание. Для этого в файле config\text\rus\string_table_enc_equipment.xml в конец между </string> и </string_table> добавляем строки по аналогии с уже написсанными:  
+
2. Теперь добавим название и описание. Для этого в файле config\text\rus\string_table_enc_equipment.xml в конец между </string> и </string_table> добавляем строки по аналогии с уже написанными:  
       <pre><string id="repair_kit_outfit_name">
+
       <xml><string id="repair_kit_outfit_name">
 
         <text>Ремонт комплект ДПК</text>
 
         <text>Ремонт комплект ДПК</text>
 
     </string>
 
     </string>
 
         <string id="enc_equipment_repair_kit_outfit">
 
         <string id="enc_equipment_repair_kit_outfit">
 
         <text>Новинка от Вани Болта - ремонт комплект ДПК для быстрой и эффективной починки костюмов. При его создании были учтены все недочёты и, следовательно, удалены. Благодаря улучшенным инструментам и деталям, а также облегченному весу весьма ценен. С его помощью можно увеличить состояние костюма до 100%, если он повреждён не больше 30%. Незаменимая вещь во время вылазки.</text>
 
         <text>Новинка от Вани Болта - ремонт комплект ДПК для быстрой и эффективной починки костюмов. При его создании были учтены все недочёты и, следовательно, удалены. Благодаря улучшенным инструментам и деталям, а также облегченному весу весьма ценен. С его помощью можно увеличить состояние костюма до 100%, если он повреждён не больше 30%. Незаменимая вещь во время вылазки.</text>
     </string></pre>
+
     </string></xml>
Отлично, с предметом закончили. Теперь приступим к самому главному - скриптам.  
+
Отлично, с предметом закончили. Теперь приступим к самому главному - скриптам.
 +
 
 
===Работа со скриптами===
 
===Работа со скриптами===
 
1.Вешаем функцию починки при использовании нашего ремонт комплекта.  
 
1.Вешаем функцию починки при использовании нашего ремонт комплекта.  
Строка 45: Строка 46:
 
находим функцию:
 
находим функцию:
  
function actor_binder:reinit() и после строки  
+
''function actor_binder:net_destroy()'' и после строки  
  
self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) пишем:
+
<code>self.object:set_callback(callback.take_item_from_box, nil)</code>
  
self.object:set_callback(callback.use_object, self.repair_outfit_start, self)
+
пишем:
Теперь в папке scripts создаёте свой скриптовой фаил ваше_название_скрипта.script. Но! Название должно быть написано на английском языке и вместо пробелов должен стоять знак "_". Опять открываем bind_stalker.script и в самый конец добавляем эту функцию:  
+
 
 +
<code>self.object:set_callback(callback.use_object, nil)</code>
 +
 
 +
И теперь находим функцию
 +
 
 +
''function actor_binder:reinit()'' и после строки
 +
 
 +
<code>self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)</code>
 +
 
 +
пишем:
 +
 
 +
<code>self.object:set_callback(callback.use_object, self.repair_outfit_start, self)</code>
 +
 
 +
Теперь в папке '''scripts''' создаёте свой скриптовый файл '''ваше_название_скрипта.script'''. Но! Название должно быть написано на английском языке и вместо пробелов должен стоять знак "_". Опять открываем '''bind_stalker.script''' и в самый конец добавляем эту функцию:  
 
<lua>function actor_binder:repair_outfit_start(obj, who)
 
<lua>function actor_binder:repair_outfit_start(obj, who)
 
     if obj then  
 
     if obj then  
         if obj:section() == "repair_kit_outfit" then --здесь указываем предмет, при использование которого будет срабатывать функция ниже
+
         if obj:section() == "repair_kit_outfit" then --здесь указываем предмет, при использовании которого будет срабатывать функция ниже
 
         ваше_название_скрипта.repair_outfit() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функции
 
         ваше_название_скрипта.repair_outfit() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функции
 
         end
 
         end
Строка 59: Строка 73:
 
end</lua>
 
end</lua>
 
2. Добавляем саму функцию ремонта.  
 
2. Добавляем саму функцию ремонта.  
Для этого в файле ваше_название_скрипта.script пишем:  
+
Для этого в файле '''ваше_название_скрипта.script''' пишем:  
 
<lua> -- Ремонт комплект для костюмов
 
<lua> -- Ремонт комплект для костюмов
 
function repair_outfit()
 
function repair_outfit()
Строка 78: Строка 92:
 
         alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
 
         alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
 
     elseif item_s6:condition() ==1 then --когда костюм в отличном состояние
 
     elseif item_s6:condition() ==1 then --когда костюм в отличном состояние
         local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состояние."
+
         local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состоянии."
 
         db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
 
         db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
 
         alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
 
         alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
 
     end
 
     end
 
end</lua>
 
end</lua>
Всё! Теперь заходим в игру и наслаждаемся.  
+
Всё! Теперь заходим в игру и наслаждаемся.
 +
 
 
===Небольшая заметка===
 
===Небольшая заметка===
1. Чтобы сделать ремонт комплект для оружия проделываем тоже самое, только переименовываем всё вместо outfit на weapon и в функцие починки ставим слот 1 или 2 (оружейные слота) вместо 6 (слот костюмов).
+
1. Чтобы сделать ремонт комплект для оружия, проделываем, по сути, тоже самое, только переименовываем всё вместо "outfit" на "weapon" (хотя переименовать можно так, как хочется) и в функции починки ставим слот 1 или 2 (оружейные слота) вместо 6 (слот костюмов).
 
Ещё нужно заменить переменную item_s6 например на item_s1 или item_s2.
 
Ещё нужно заменить переменную item_s6 например на item_s1 или item_s2.
  
2. Число 0.30 - минимальное состояние костюма, следовательно его можно менять на любое вам угодное.
+
2. Число 0.30 - минимальное состояние костюма, его можно менять на любое вам угодное.
Простите за такое оформление, это моя вторая статья. В будущем, если будет больше свободного времени, постораюсь расписать все моменты подробно. Автор статьи: Бага.
+
Простите за такое оформление, это моя вторая статья. В будущем, если будет больше свободного времени, постараюсь расписать все моменты подробно.
 +
Автор статьи: Бага.
 +
 
 +
Данный метод создания ремонт комплектов не работает! (проверено)
 +
ЗЫ: StalkerNew2012 этот скрипт подправил теперь всё работает :)
 +
Ремонтный комплект без лишних сообщений просто съедается!:( Удваиваю товарища, у которого ремкомплект просто съелся, не сработав.
 +
 
 +
3.Ремонт оружия и брони:
 +
{| class="collapsible collapsed"
 +
|-
 +
!
 +
|
 +
|-
 +
|
 +
<code lua>
 +
 
 +
--    bind_stalker.script
 +
function actor_binder:repair_outfit_start(obj, who)
 +
    if obj then
 +
        if obj:section() == "repair_kit_outfit" then
 +
                remkomplekt.action_repair()
 +
        end
 +
    end
 +
end
 +
 
 +
--    remkomplekt.script
 +
function action_repair()
 +
-- эмулируем возврат ремкомплекта в инвентарь
 +
alife():create("repair_kit_outfit", vector(),0,0,0)
 +
 
 +
-- нет ли рядом врагов и монстров
 +
local apos = db.actor:position()
 +
for obj_id,_ in pairs (db.storage)do
 +
local obj = level.object_by_id(obj_id)
 +
if obj and (IsStalker(obj) or IsMonster(obj)) and obj:alive()
 +
and obj:relation(db.actor) == game_object.enemy and obj:position():distance_to(apos)<30 then
 +
send_tip("Нельзя чинить костюм, когда враги слишком близко.")
 +
return
 +
end
 +
end
 +
 +
-- пробуем чинить предмет в
 +
repair_item_in_slot(1) -- первом
 +
repair_item_in_slot(2) -- втором
 +
repair_item_in_slot(6) -- шестом слоте
 +
end
 +
 
 +
function repair_item_in_slot(num)
 +
local item = db.actor:item_in_slot(num)
 +
if item then
 +
local cond = item:condition()
 +
if cond < 0.3 then
 +
send_tip("%c[255,255,0,0]Ремонт невозможен: предмет в слоте "..num.. " сильно повреждён.")
 +
elseif cond > 0.95 then
 +
send_tip("%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]предмет в слоте "..num.. " в отличном состоянии.")
 +
else
 +
item:set_condition(1)
 +
send_tip("%c[255,0,255,0]Ремонт предмета в слоте "..num.. " завершен.")
 +
end
 +
else
 +
send_tip("%c[255,255,0,0]В слоте "..num.." нет предмета для починки.")
 +
end
 +
end
 +
 
 +
function send_tip(news_text)
 +
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
 +
end
 +
</code>
 +
|}
  
 +
4. Для многоразового использования ремкомплекта можно не доспавнивать новый предмет при съедании, а в его конфиге указать для параметра '''eat_portions_num''' большое число.
 +
<lua>eat_portions_num = 100500</lua>
 
[[Категория:Скрипты]]
 
[[Категория:Скрипты]]

Текущая версия на 17:09, 14 марта 2015

Создание ремонт комплекта

Я опишу пример создания ремонт комплекта для костюмов, а для оружия в конце статьи сделаю пару заметок. Дело в том, что различия в создании ремонт комплектов почти нет.

1. Для начала нам нужно создать сам ремонт комплект, то есть предмет, а уже потом вешать на него функцию при использовании. Для этого в config\misc\items.ltx в конец добавляем конфиг нашего предмета:

[repair_kit_outfit]:identity_immunities
GroupControlSection	= spawn_group
discovery_dependency    =
$spawn 			= "food and drugs\repair kit outfit"
$prefetch 		= 32
class			= II_ANTIR ;класс не трогаем!
cform                   = skeleton
visual                  = equipments\item_merger.ogf ;модель
description		= enc_equipment_repair_kit_outfit ;ссылка на описание в config\text\rus\....xml
 
inv_name		= repair_kit_outfit_name ;ссылка на название в config\text\rus\....xml
inv_name_short		= repair_kit_outfit_name ;тоже самое, что и inv_name
inv_weight		= 6.0 ;вес
 
inv_grid_width		= 2 ;ширина иконки
inv_grid_height		= 1 ;высота иконки
inv_grid_x		= 8 ;координата x иконки
inv_grid_y		= 18 ;координата y иконки
cost			= 10000 ;цена
;всё ниже написанное не трогаем, оно нам и не нужно
eat_health = 0
eat_satiety = 0
eat_power = 0
eat_radiation = 0
wounds_heal_perc = 0
eat_portions_num = 1
animation_slot = 4
hud = wpn_vodka_hud

2. Теперь добавим название и описание. Для этого в файле config\text\rus\string_table_enc_equipment.xml в конец между </string> и </string_table> добавляем строки по аналогии с уже написанными:

<string id="repair_kit_outfit_name">
        <text>Ремонт комплект ДПК</text>
    </string>
        <string id="enc_equipment_repair_kit_outfit">
        <text>Новинка от Вани Болта - ремонт комплект ДПК для быстрой и эффективной починки костюмов. При его создании были учтены все недочёты и, следовательно, удалены. Благодаря улучшенным инструментам и деталям, а также облегченному весу весьма ценен. С его помощью можно увеличить состояние костюма до 100%, если он повреждён не больше 30%. Незаменимая вещь во время вылазки.</text>
    </string>

Отлично, с предметом закончили. Теперь приступим к самому главному - скриптам.

Работа со скриптами

1.Вешаем функцию починки при использовании нашего ремонт комплекта. Для этого в файле scripts\bind_stalker.script находим функцию:

function actor_binder:net_destroy() и после строки

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

пишем:

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

И теперь находим функцию

function actor_binder:reinit() и после строки

self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)

пишем:

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

Теперь в папке scripts создаёте свой скриптовый файл ваше_название_скрипта.script. Но! Название должно быть написано на английском языке и вместо пробелов должен стоять знак "_". Опять открываем bind_stalker.script и в самый конец добавляем эту функцию:

function actor_binder:repair_outfit_start(obj, who)
    if obj then 
        if obj:section() == "repair_kit_outfit" then --здесь указываем предмет, при использовании которого будет срабатывать функция ниже
        ваше_название_скрипта.repair_outfit() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функции
        end
    end
end

2. Добавляем саму функцию ремонта. Для этого в файле ваше_название_скрипта.script пишем:

 -- Ремонт комплект для костюмов
function repair_outfit()
local item_s6 = db.actor:item_in_slot(6) --объявляем переменную (item_s6)
    if item_s6 ~= nil and item_s6:condition() >=0.30 and item_s6:condition() ~=1 then --когда костюм можно чинить (состояние больше или равно 30%)
        item_s6:set_condition(1)
        local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]])
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,0]Ремонт костюма завершен."
        db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
    elseif item_s6 == nil then --когда костюма нет 
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм."
        db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
        alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
    elseif item_s6:condition() <0.30 then --когда костюм нельзя чинить (состояние меньше 30%)
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: костюм слишком сильно повреждён."
        db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
        alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
    elseif item_s6:condition() ==1 then --когда костюм в отличном состояние
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состоянии."
        db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
        alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
    end
end

Всё! Теперь заходим в игру и наслаждаемся.

Небольшая заметка

1. Чтобы сделать ремонт комплект для оружия, проделываем, по сути, тоже самое, только переименовываем всё вместо "outfit" на "weapon" (хотя переименовать можно так, как хочется) и в функции починки ставим слот 1 или 2 (оружейные слота) вместо 6 (слот костюмов). Ещё нужно заменить переменную item_s6 например на item_s1 или item_s2.

2. Число 0.30 - минимальное состояние костюма, его можно менять на любое вам угодное. Простите за такое оформление, это моя вторая статья. В будущем, если будет больше свободного времени, постараюсь расписать все моменты подробно. Автор статьи: Бага.

Данный метод создания ремонт комплектов не работает! (проверено) ЗЫ: StalkerNew2012 этот скрипт подправил теперь всё работает :) Ремонтный комплект без лишних сообщений просто съедается!:( Удваиваю товарища, у которого ремкомплект просто съелся, не сработав.

3.Ремонт оружия и брони:

4. Для многоразового использования ремкомплекта можно не доспавнивать новый предмет при съедании, а в его конфиге указать для параметра eat_portions_num большое число.

eat_portions_num = 100500
Другие места
LANGUAGE