Полезные методы и функции — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
FX (обсуждение | вклад) (→Полезные методы и функции для новичка) |
(→Авторы) |
||
(не показаны 5 промежуточные версии 1 участника) | |||
Строка 1: | Строка 1: | ||
− | |||
[[Категория:Скрипты]] | [[Категория:Скрипты]] | ||
Строка 14: | Строка 13: | ||
Выдаём функцию при разговоре с НПС | Выдаём функцию при разговоре с НПС | ||
− | + | == НПС вступает в группировку == | |
<pre>function ваше_название_функции(npc, actor)</pre> | <pre>function ваше_название_функции(npc, actor)</pre> | ||
Вызываем также, из любого диалога | Вызываем также, из любого диалога | ||
− | + | == Нельзя взять оружие без брони == | |
Пишем функцию в любом скрипе: | Пишем функцию в любом скрипе: | ||
<lua> | <lua> | ||
Строка 59: | Строка 58: | ||
− | + | == Удаление предмета с заданным именем из игры == | |
<lua>function name_function() | <lua>function name_function() | ||
Строка 80: | Строка 79: | ||
Я добавлю может кому и пригодится.'''Болотный Доктор''' | Я добавлю может кому и пригодится.'''Болотный Доктор''' | ||
− | + | == Выдаём предмет ГГ == | |
<lua>function название функции (first_speaker, second_speaker) | <lua>function название функции (first_speaker, second_speaker) | ||
dialogs.relocate_item_section(second_speaker, "название предмета", "in") | dialogs.relocate_item_section(second_speaker, "название предмета", "in") | ||
Строка 98: | Строка 97: | ||
Если надо больше меняем цифру 2 на нужную нам. | Если надо больше меняем цифру 2 на нужную нам. | ||
− | + | == Отбираем предмет у ГГ == | |
<lua>function название функции(first_speaker, second_speaker) | <lua>function название функции(first_speaker, second_speaker) | ||
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета") | dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета") | ||
Строка 115: | Строка 114: | ||
Если надо больше меняем цифру 2 на нужную нам. | Если надо больше меняем цифру 2 на нужную нам. | ||
− | + | == Спавним вещь в инвентарь ГГ == | |
<lua>function название функции() | <lua>function название функции() | ||
local obj = alife():create("ВЕЩЬ", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) | local obj = alife():create("ВЕЩЬ", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) | ||
Строка 124: | Строка 123: | ||
− | + | == Проверка предмета у ГГ == | |
Вариант первый | Вариант первый | ||
<lua>function Название функции() | <lua>function Название функции() | ||
Строка 147: | Строка 146: | ||
<code><precondition>имя скрипта.название функции</precondition></code> | <code><precondition>имя скрипта.название функции</precondition></code> | ||
− | + | Диалоговый вариант. | |
<lua>function Название функции(first_speaker, second_speaker) | <lua>function Название функции(first_speaker, second_speaker) | ||
return first_speaker:object("название предмета") ~= nil or | return first_speaker:object("название предмета") ~= nil or | ||
Строка 160: | Строка 159: | ||
описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора | описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора | ||
− | + | Проверка кол-ва предметов у ГГ | |
+ | <lua>function название функции(first_speaker, second_speaker) | ||
+ | local item_sections = { | ||
+ | ["medkit"] = 5, -- к примеру 5 аптечек | ||
+ | ["bandage"] = 2} -- и два бинта | ||
+ | |||
+ | local function calc(temp, item) | ||
+ | local sect = item:section() | ||
+ | if item_sections[sect] and item_sections[sect]>0 then | ||
+ | if item_sections[sect]==1 then | ||
+ | item_sections[sect] = nil | ||
+ | else | ||
+ | item_sections[sect] = item_sections[sect] - 1 | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | |||
+ | db.actor:iterate_inventory(calc, db.actor) | ||
+ | return next(item_sections)==nil | ||
+ | end | ||
+ | </lua> | ||
+ | |||
+ | В диалог: | ||
+ | <code><precondition>имя скрипта.название функции</precondition></code> | ||
+ | |||
+ | == Проверка денег у ГГ== | ||
Вариант первый(используют ПЫС) | Вариант первый(используют ПЫС) | ||
Строка 181: | Строка 205: | ||
<code><precondition>имя скрипта.название функции</precondition></code> | <code><precondition>имя скрипта.название функции</precondition></code> | ||
− | + | == Спавн динамики == | |
<lua>function spawn_vintar() | <lua>function spawn_vintar() | ||
alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210) | alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210) | ||
Строка 191: | Строка 215: | ||
− | + | == Убийство ГГ == | |
<lua>function название функции(npc, actor) | <lua>function название функции(npc, actor) | ||
npc:kill(actor) | npc:kill(actor) | ||
Строка 200: | Строка 224: | ||
<code><action>название скрипта.название функции</action></code> | <code><action>название скрипта.название функции</action></code> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | == Лечение ГГ == | |
Вставим этот экшен в диалог: | Вставим этот экшен в диалог: | ||
<code><action>dialogs.medic_magic_potion</action></code> | <code><action>dialogs.medic_magic_potion</action></code> | ||
− | + | == Выдача денег от НПС к ГГ == | |
<lua>function название функции(first_speaker, second_speaker) | <lua>function название функции(first_speaker, second_speaker) | ||
Строка 242: | Строка 242: | ||
− | + | == Выдача денег ГГ от НПС == | |
<lua>function название функции(actor, npc) | <lua>function название функции(actor, npc) | ||
Строка 254: | Строка 254: | ||
− | НПС становится врагом после определенной ветки диалога или другом | + | == НПС становится врагом после определенной ветки диалога или другом == |
− | + | -5000 враг 5000 друг | |
<lua>function название скрипта(actor, npc) | <lua>function название скрипта(actor, npc) | ||
npc:force_set_goodwill(-5000, actor) | npc:force_set_goodwill(-5000, actor) | ||
end</lua> | end</lua> | ||
− | |||
<code><action>название скрипта.название функции</action></code> | <code><action>название скрипта.название функции</action></code> | ||
Строка 266: | Строка 265: | ||
− | + | == Проверка инфопорции == | |
<lua>function название функции проверки(actor,npc) | <lua>function название функции проверки(actor,npc) | ||
Строка 279: | Строка 278: | ||
== Авторы == | == Авторы == | ||
'''Оригинальный вид статьи:''' | '''Оригинальный вид статьи:''' | ||
− | |||
*Меченый | *Меченый | ||
*Болотный Доктор | *Болотный Доктор |
Текущая версия на 08:42, 6 июля 2016
Содержание
- 1 Вступление ГГ в группировку!
- 2 НПС вступает в группировку
- 3 Нельзя взять оружие без брони
- 4 Удаление предмета с заданным именем из игры
- 5 Выдаём предмет ГГ
- 6 Отбираем предмет у ГГ
- 7 Спавним вещь в инвентарь ГГ
- 8 Проверка предмета у ГГ
- 9 Проверка денег у ГГ
- 10 Спавн динамики
- 11 Убийство ГГ
- 12 Лечение ГГ
- 13 Выдача денег от НПС к ГГ
- 14 Выдача денег ГГ от НПС
- 15 НПС становится врагом после определенной ветки диалога или другом
- 16 Проверка инфопорции
- 17 Авторы
Вступление ГГ в группировку!
1.Создаем файл ваше_название_скприпта.script в папке gamedata/scripts 2. Открываем его и пишем: --меняем группировку ГГ
function new_group(actor, npc) if npc:character_community() ~= "(dolg)" then npc:set_character_community("dolg", 0, 0) end end
Выдаём функцию при разговоре с НПС
НПС вступает в группировку
function ваше_название_функции(npc, actor)
Вызываем также, из любого диалога
Нельзя взять оружие без брони
Пишем функцию в любом скрипе:
function ваше_название_функции() local armor = db.actor:item_in_slot(6) -- слот брони local weapon = db.actor:item_in_slot(2) -- слот оружия (для пистолетов в оригинале слот 1) if db.actor:active_slot()==2 and weapon then -- за место 2 пишем слот оружия еще раз local tmp = armor and armor:section() or "" if not string.find(tmp, "пишем_название_брони") and (weapon:section()=="пишем_название_оружия") then -- пример:if (not string.find(tmp, "exo" )) and weapon:section()=="wpn_pkm" then -- скидываем оружие из слота в инвентарь -- выкидываем оружие, и тем самым освобождаем слот db.actor:drop_item(weapon) -- спавним ствол с той же секцией, чтобы он занял слот local tmpw = alife():create(weapon:section(), db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) -- подбираем выкинутый предмет обратно в инвентарь -- т.к. слот как бы занят он ляжет в рюкзак db.actor:transfer_item(weapon,db.actor) -- удаляем оружие в слоте alife():release(tmpw) -- выводим сообщение на экран о том, что нельзя брать оружие без определённой брони news_manager.send_tip(db.actor,"Невозможно взять пулемёт в руки без экзы",nil,nil,10000) end end end
Далее идем по пути gamedata/script/bind_stalker.script Функция:
function actor_binder:update(delta)
Сразу ниже неё пиши вызов в формате :
название_файла.название_функции
Можешь написать эту функцию в любом файле из папки scripts, а можешь создать свой файл и назвать, скажем, my_script, и написать там. Должно быть так : Код
function actor_binder:update(delta) my_script.check_armor()
Удаление предмета с заданным именем из игры
function name_function() local se_obj = alife():object("сюда_пишем_что_удалять_будем") if se_obj then alife():release(se_obj, true) end end
ПРИМЕР --' убираем финального Клыка
function dell_kluk_final() local se_obj = alife():object("final_kluk") if se_obj then alife():release(se_obj, true) end end
Я добавлю может кому и пригодится.Болотный Доктор
Выдаём предмет ГГ
function название функции (first_speaker, second_speaker) dialogs.relocate_item_section(second_speaker, "название предмета", "in") end
Размещается в файлах скрипт.
Выдача поршня вставляется под строку действия.
<action>название скрипта.название функции</action>
Примечание, что бы выдать два одинаковых предмета пишем
function название функции (first_speaker, second_speaker) dialogs.relocate_item_section(second_speaker, "название предмета", "in",2) end
Если надо больше меняем цифру 2 на нужную нам.
Отбираем предмет у ГГ
function название функции(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета") end
размещается в файлах скрипт
выдача поршня вставляется под строку действия:
<action>название скрипта.название функции</action>
Примечание, что бы отобрать два одинаковых предмета пишем
function название функции(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета",2) end
Если надо больше меняем цифру 2 на нужную нам.
Спавним вещь в инвентарь ГГ
function название функции() local obj = alife():create("ВЕЩЬ", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end
В диалог:
<action>название скрипта.название функции</action>
Проверка предмета у ГГ
Вариант первый
function Название функции() if db.actor:object("название предмета") then return true end return false end
в диалог:
<precondition>имя скрипта.название функции</precondition>
<---------Вариант второй)------------------>
function название функции(first_speaker, second_speaker) return first_speaker:object("название предмета") ~= nil end
в диалог:
<precondition>имя скрипта.название функции</precondition>
Диалоговый вариант.
function Название функции(first_speaker, second_speaker) return first_speaker:object("название предмета") ~= nil or first_speaker:object("название предмета") ~= nil or first_speaker:object("название предмета") ~= nil end
в диалог:
<precondition>имя скрипта.название функции</precondition>
описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора
Проверка кол-ва предметов у ГГ
function название функции(first_speaker, second_speaker) local item_sections = { ["medkit"] = 5, -- к примеру 5 аптечек ["bandage"] = 2} -- и два бинта local function calc(temp, item) local sect = item:section() if item_sections[sect] and item_sections[sect]>0 then if item_sections[sect]==1 then item_sections[sect] = nil else item_sections[sect] = item_sections[sect] - 1 end end end db.actor:iterate_inventory(calc, db.actor) return next(item_sections)==nil end
В диалог:
<precondition>имя скрипта.название функции</precondition>
Проверка денег у ГГ
Вариант первый(используют ПЫС)
function название функции(first_speaker, second_speaker) return first_speaker:money() >= 2000 end
в диалог:
<precondition>имя скрипта.название функции</precondition>
<-----------Вариант два--------------> Использовал на ТЧ, но и в ЗП работает
function название функции() return db.actor:money()>=10000 end
В диалог:
<precondition>имя скрипта.название функции</precondition>
Спавн динамики
function spawn_vintar() alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210) end
В диалог:
<action>название скрипта.название функции</action>
Убийство ГГ
function название функции(npc, actor) npc:kill(actor) end
В диалог:
<action>название скрипта.название функции</action>
Лечение ГГ
Вставим этот экшен в диалог:
<action>dialogs.medic_magic_potion</action>
Выдача денег от НПС к ГГ
function название функции(first_speaker, second_speaker) dialogs.relocate_money_to_actor(first_speaker, second_speaker, 2000) end
В диалог:
<action>название скрипта.название функции</action>
Выдача денег ГГ от НПС
function название функции(actor, npc) dialogs.relocate_money(npc,кол-во,"out") end
В диалог:
<action>название скрипта.название функции</action>
НПС становится врагом после определенной ветки диалога или другом
-5000 враг 5000 друг
function название скрипта(actor, npc) npc:force_set_goodwill(-5000, actor) end
<action>название скрипта.название функции</action>
Проверка инфопорции
function название функции проверки(actor,npc) return has_alife_info("инфо смерти") end
В диалог:
<precondition>имя скрипта.название функции</precondition>
Авторы
Оригинальный вид статьи:
- Меченый
- Болотный Доктор
Переоформление, перестройка, дополнение статьи:
- FantomICW
- FX