SoC. Создание ремонт комплектов — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
Бага (обсуждение | вклад) (→Небольшая заметка) |
(→Небольшая заметка) |
||
(не показаны 28 промежуточные версии 14 участников) | |||
Строка 1: | Строка 1: | ||
===Создание ремонт комплекта=== | ===Создание ремонт комплекта=== | ||
− | |||
Я опишу пример создания ремонт комплекта для костюмов, а для оружия в конце статьи сделаю пару заметок. Дело в том, что различия в создании ремонт комплектов почти нет. | Я опишу пример создания ремонт комплекта для костюмов, а для оружия в конце статьи сделаю пару заметок. Дело в том, что различия в создании ремонт комплектов почти нет. | ||
− | + | ||
− | + | 1. Для начала нам нужно создать сам ремонт комплект, то есть предмет, а уже потом вешать на него функцию при использовании. Для этого в config\misc\items.ltx в конец добавляем конфиг нашего предмета: | |
− | + | ||
− | < | + | <ini>[repair_kit_outfit]:identity_immunities |
GroupControlSection = spawn_group | GroupControlSection = spawn_group | ||
discovery_dependency = | discovery_dependency = | ||
Строка 32: | Строка 31: | ||
eat_portions_num = 1 | eat_portions_num = 1 | ||
animation_slot = 4 | animation_slot = 4 | ||
− | hud = wpn_vodka_hud</ | + | hud = wpn_vodka_hud</ini> |
− | + | 2. Теперь добавим название и описание. Для этого в файле config\text\rus\string_table_enc_equipment.xml в конец между </string> и </string_table> добавляем строки по аналогии с уже написанными: | |
− | + | <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></ | + | </string></xml> |
− | + | Отлично, с предметом закончили. Теперь приступим к самому главному - скриптам. | |
− | Отлично, с предметом закончили. Теперь приступим к самому главному - | + | |
===Работа со скриптами=== | ===Работа со скриптами=== | ||
+ | 1.Вешаем функцию починки при использовании нашего ремонт комплекта. | ||
+ | Для этого в файле '''scripts\bind_stalker.script''' | ||
+ | находим функцию: | ||
− | '' | + | ''function actor_binder:net_destroy()'' и после строки |
− | < | + | |
− | Теперь в папке '''scripts''' создаёте свой | + | <code>self.object:set_callback(callback.take_item_from_box, nil)</code> |
− | Опять открываем '''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 | ||
end | end | ||
end</lua> | end</lua> | ||
− | + | 2. Добавляем саму функцию ремонта. | |
− | + | Для этого в файле '''ваше_название_скрипта.script''' пишем: | |
− | + | <lua> -- Ремонт комплект для костюмов | |
− | <lua>-- Ремонт комплект для костюмов | + | |
function repair_outfit() | function repair_outfit() | ||
local item_s6 = db.actor:item_in_slot(6) --объявляем переменную (item_s6) | 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%) | if item_s6 ~= nil and item_s6:condition() >=0.30 and item_s6:condition() ~=1 then --когда костюм можно чинить (состояние больше или равно 30%) | ||
− | |||
item_s6:set_condition(1) | item_s6:set_condition(1) | ||
local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]]) | local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]]) | ||
Строка 70: | Строка 83: | ||
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,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) | db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000) | ||
− | |||
elseif item_s6 == nil then --когда костюма нет | elseif item_s6 == nil then --когда костюма нет | ||
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм." | local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм." | ||
Строка 80: | Строка 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 (слот костюмов). | |
− | + | ||
Ещё нужно заменить переменную 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.Ремонт оружия и брони:
-- bind_stalker.script |
4. Для многоразового использования ремкомплекта можно не доспавнивать новый предмет при съедании, а в его конфиге указать для параметра eat_portions_num большое число.
eat_portions_num = 100500