Теорія
Сьогодні я розповім вам як спанити, наприклад, 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>