Вступ ГГ до угруповання!
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 == 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 ) -- спавним стовбур з тією ж секцією, щоб він зайняв слот 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 - Виводимо повідомлення на екран про те, що не можна брати зброю без певної броні 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 ( "назва предмета" ) ~ =
у діалог:
<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 ( " Назва предмета " _ _ _ _ _ _ _ _ _ _ _ _ _
У діалог:
<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>
Одразу зазначу, що всі ці скріпти можна використовувати - як у діалогах, так і в спейс рестрікторах. Для цього необхідну функцію потрібно буде прописати в xr_effects.script та викликати її в спейс рестрікторі через
on_info = %=назва_функції%
Але це вже інша тема та стаття.