Уроки CLEO. Урок №5: даємо головному герою об'єкт в руки

Зміст уроку:
1. Передісторія
2. Програми
3. Знаходимо об'єкт або зброю
4. Даємо в руки об'єкт або зброю
1. Передісторія
Ви напевно хочете, щоб головний герой брав щось у руки, наприклад, зброю. Це дуже просто!
Якщо коротко, потрібно прописати в скрипті команду 01B2: give_actor $PLAYER_ACTOR weapon 25 ammo 1000 // Load the weapon model before using this. Замість 25 ви ставите ID зброї (можна подивитися в довідці: Допомога > Статті > Пікапи), замість 1000 ви повинні поставити будь-яке число, хоч 1000000! Це кількість патронів.
Але ми зараз зацікавлені в тому, щоб дати герою саме об'єкт, а не зброю. Наприклад, пляшку. У будь-якому випадку, нижче ми детально розглянемо обидва варіанти.
2. Програми
Нам знадобляться такі програми: Sanny Builder 3 (створення скриптів), Map Editor (редактор локації, але ми будемо тільки дізнаватися про потрібні об'єкти з нього) і GMM (в якій ми дізнаємося ID зброї, якщо будемо вручати герою не об'єкт, а зброю).
3. Знаходимо об'єкт або зброю
Ітак, ми почнемо шукати спочатку звичайний об'єкт. Для цього скачайте та встановіть Map Editor, зайдіть у програму, вкажіть шлях до гри і натисніть ОК. Перший раз програма може вийти з ладу, вдруге все пройде гладко!
Коли ви зайдете, ви не побачите нічого, крім порожнього вікна, але натисніть на Scene і у вас з'явиться вікно з частинами світу GTA SA. Але краще не відкривати всі файли відразу, відеокарта та оперативна пам'ять занадто навантажаться.
Щоб політати по околицях або інтер'єрах GTA SA, ставте галочку на будь-якій з частин світу. Політайте і знайдіть свій об'єкт, а потім клікніть двічі по ньому, він буде виділений червоним.
Об'єкт знайдено, тепер потрібно записати його ID (числовий ідентифікатор). Він відображається там, де показано на нижньому малюнку.
ID мого об'єкта – 1520. Значить, я можу закривати Map Editor і вже робити скрипт.
Для продовження створення скрипта, який вручить герою в руки об'єкт, переходьте до розділу статті №4. А якщо ви хочете вручити в руки герою не об'єкт, а зброю — читайте нижче.
Дізнаємося ID зброї. Для цього встановимо GMMM, відкриємо програму, увійдемо в меню Weapons і знайдемо там потрібну зброю.
Я вибрав катану. Оскільки в минулому уроці я ставив анімацію медитації, катана підійде дуже добре! Тепер нам залишилося зробити скрипт.
4. Даємо в руки об'єкт або зброю
Передача персонажу об'єкта або зброї дуже схожа, але є відмінність. Для того щоб дати, наприклад, вибраний раніше об'єкт (пляшка), потрібно писати Model.Load(1520), а щоб дати зброю, потрібно написати Model.Load(#katana) (також, щоб дати зброю в руки, треба позначити її як змінну, про що нижче).
Ітак, почнемо! Спочатку розберемося, як давати в руки об'єкт, а потім як давати зброю.
Відкриваємо наш початий вже в минулих уроках скрипт, і в частині, в якій ми пишемо, які речі скрипту потрібно завантажити, прописуємо код, що вказує на завантаження потрібної моделі:
Model.Load(1520)
Весь скрипт виглядає так:
Потім потрібно зробити так, щоб коли герой виконує якусь анімацію (як прикріпляти анімацію я писав у попередньому уроці), об'єкт сам з'являвся в руках.
$BUT = Object. Init(1520, 10@, 20@, 30@)
070A: AS_actor $PLAYER_ACTOR attach_to_object $BUT offset 0.05 0.06 0.05 on_bone 6 16 perform_animation "NULL" IFP_file "NULL" time -1
Ось так у мене виглядає код:
Все, об'єкт потрапляє в руку, але потрібно зробити, щоб по закінченню програвання анімації він зник! Пропишіть після останньої анімації наступне:
0687: clear_actor $Player_actor task
Object. Destroy($BUT)
Object. RemoveReferences($BUT)
Model.Destroy(1520)
Ось код скрипта цілком:
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
04ED: load_animation "PARK"
Model.Load(1520)
038B: load_requested_models
04EE: animation "PARK" loaded
:NONAME_1
wait 0
if
0AB0: key_pressed 90
else_jump @NONAME_1
wait 0
0812: AS_actor $Player_actor perform_animation "Tai_Chi_in" IFP_file "PARK" 4.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1 // versionB
$BUT = Object. Init(1520, 10@, 20@, 30@)
070A: AS_actor $PLAYER_ACTOR attach_to_object $BUT offset 0.05 0.06 0.05 on_bone 6 16 perform_animation "NULL" IFP_file "NULL" time -1
wait 1000
:NONAME_2
wait 0
if
0AB0: key_pressed 84
else_jump @NONAME_2
wait 0
0812: AS_actor $Player_actor perform_animation "Tai_Chi_Out" IFP_file "PARK" 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time -1// versionB
0687: clear_actor $Player_actor task
Object. Destroy($BUT)
Object. RemoveReferences($BUT)
Model.Destroy(1520)
wait 1000
jump @NONAME_1
Можете перевірити в грі. Все, давати в руки об'єкт під час програвання анімації ми навчилися.
Тепер розберемося як давати в руки зброю.
Для цього пишемо в скрипті, як завантажувати нашу зброю:
Model.Load(#KATANA)
Тепер робимо катану перехідною, пишемо це після рядка:
0812: AS_actor $Player_actor perform_animation "Tai_Chi_in" IFP_file "PARK" 4.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1 // version
Тут пишемо:
0781: get_weapon_with_ID 8 model_to 22@
8 – це ID катани, ID ви можете дізнатися з довідки (див. вище). Отже, тепер катана є перехідною 22@, а далі потрібно робити все так само, як ми ставили пляшку, тільки замінюючи назви та цифри.
Це туди, де ми писали 0781: get_weapon_with_ID 8 model_to 22@, тільки обов'язково після:
$KAT = Object. Init(22@, 10@, 20@, 30@)
070A: AS_actor $PLAYER_ACTOR attach_to_object $KAT offset 0.05 0.06 0.05 on_bone 6 16 perform_animation "NULL" IFP_file "NULL" time -1
А це вписуємо після останньої анімації:
0687: clear_actor $Player_actor task
Object. Destroy($KAT)
Object. RemoveReferences($KAT)
Model.Destroy(22@)
Ось так виглядає весь скрипт, який дозволяє дати в руки гравцеві зброю при виконанні анімації:
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
04ED: load_animation "PARK"
Model.Load(#KATANA)
038B: load_requested_models
04EE: animation "PARK" loaded
:NONAME_1
wait 0
if
0AB0: key_pressed 90
else_jump @NONAME_1
wait 0
0812: AS_actor $Player_actor perform_animation "Tai_Chi_in" IFP_file "PARK" 4.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1 // versionB
0781: get_weapon_with_ID 8 model_to 22@
$KAT = Object. Init(22@, 10@, 20@, 30@)
070A: AS_actor $PLAYER_ACTOR attach_to_object $KAT offset 0.05 0.06 0.05 on_bone 6 16 perform_animation "NULL" IFP_file "NULL" time -1
wait 1000
:NONAME_2
wait 0
if
0AB0: key_pressed 84
else_jump @NONAME_2
wait 0
0812: AS_actor $Player_actor perform_animation "Tai_Chi_Out" IFP_file "PARK" 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time -1// versionB
0687: clear_actor $Player_actor task
Object. Destroy($KAT)
Object. RemoveReferences($KAT)
Model.Destroy(22@)
wait 1000
jump @NONAME_1
Ось і все, можна грати.