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

Спавн об'єктів через db.script


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

Теорія

Сьогодні я розповім вам як спанити, наприклад, AK-74 на самому початку гри, без використання діалогів! Але перш ніж вчитися запускати функції без використання діалогів - спочатку навчитеся їх викликати загальноприйнятим методом.

Практика

Для початку нам треба розпакувати db.script і там знаходимо функцію:

 
function add_actor ( obj )
	actor = obj
	actor_proxy:net_spawn ( obj ) 
	add_obj ( obj ) 
end
 

Змінимо цю функцію. У нас має вийти так:

 
function add_actor ( obj )
	actor = obj
	actor_proxy:net_spawn ( obj ) 
	add_obj ( obj ) 
        new_spawn.give_ak74 ( )  
end
 

new_spawn.script - це назва скрипта, в якому буде знаходитись наша функція спавна калаша.

Створюємо скрипт new_spawn.script та пишемо там функцію:

 
function give_ak74 ( ) 
    alife ( ) :create ( "wpn_ak74" , db.actor:position ( ) , db.actor:level_vertex_id ( ) , db.actor:game_vertex_id ( ) , db.actor:id ( ) ) 
end
 

Всі! Тепер після того, як ми з'явимося у нас в інвентарі, буде AK-74 і без використання діалогів! У такий спосіб можна спанити не тільки калаш, а й іншу зброю та патрони.

Якщо ви хочете, щоб предмет спав у вас тільки один раз, при початку нової гри то функцію у файлі new_spawn.script потрібно переробити таким чином:

 
function give_ak74 ( ) 
	if db.actor:dont_has_info ( "start_game_spawn" )  then 
		alife ( ) :create ( "wpn_ak74" , db.actor:position ( ) , db.actor:level_vertex_id ( ) , db.actor : db.actor:id ( ) ) 
		db.actor:give_info_portion ( "start_game_spawn" ) 
	end 
end
 

Далі нам необхідно зареєструвати новий інфопоршень, робиться це так: У папці gamedata/config(s)/gameplay/ відкриваємо блокнотом один із файлів, ім'я яких починається з info_*.xml , де * це назва рівня. Відкриємо, наприклад, файл info_l01escape.xml і в кінець перед тегом </game_information_portions> додаємо: <info_portion id="start_game_spawn"></info_portion>


   
Цитата