Сповіщення
Очистити все

Корисні скріпти для використання


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Вступ ГГ до угруповання!

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>

   
Цитата
Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Одразу зазначу, що всі ці скріпти можна використовувати - як у діалогах, так і в спейс рестрікторах. Для цього необхідну функцію потрібно буде прописати в xr_effects.script та викликати її в спейс рестрікторі через

on_info = %=назва_функції%

Але це вже інша тема та стаття.


   
ВідповіcтиЦитата