Предисловие.
Для добавление перезарядки, нам понадобится 2 вида патронов — обойма, и пули. Когда перезаряжаемся, мы тратим обойму и получаем патроны.
Перед началом, скачайте пак спрайтов с MEGA.
Также, я буду улучшать оружие coolGun, взятое из урока DECORATE. Делаем оружие.
Создаем пули.
Сначала, создадим первый вид патронов — пули. Добавьте следующий код к себе в DECORATE:
actor coolGunBullets : Ammo
{
inventory.maxamount 10
inventory.icon "CBULB0"
}
Разберем код:
actor coolGunBullets : Ammo
Если твой актор является патронами, то он должен наследоваться от Ammo.
- inventory.maxamount — указывает максимальное количество патронов в инвентаре.
- inventory.icon — указывает спрайт патронов.
Значение maxamount, запомните на будущее. Оно равно 10.
А так выглядит иконка первого типа патронов.
Пули разобрали, перейдем к обойме.
Создаем обойму.
Переходим ко 2-му типу патронов — обойма. Добавьте следующий код к себе в DECORATE:
actor coolGunAmmo : Ammo
{
height 16
radius 16
inventory.amount 10
inventory.maxamount 50
ammo.backpackamount 20
ammo.backpackmaxamount 100
inventory.icon "CAMMA0"
states {
spawn:
CAMM A 1
loop
}
}
Разберем основные комманды:
- inventory.amount — задает количество получаемых патронов.
- inventory.maxamount — задает максимальное количество патронов в инвентаре.
- ammo.backpackamount — если ты взял рюкзак (думовский предмет), то тебе выдается ammo.backpackamount патронов.
- ammo.backpackmaxamount — если ты взял рюкзак (думовский предмет), то максимальное количество патронов, станет равным ammo.backpackmaxamount.
- inventory.icon — задает иконку патронов
А так выглядит иконка второго типа патронов.
Добавляем перезарядку.
Добавьте стейт Reload в код актора coolGun.
Reload:
NULL A 0 A_JumpIfInventory("coolGunBullets",10,"Ready")
NULL A 0 A_JumpIfInventory("coolGunAmmo",1,1)
goto ready
CWEP A 0 A_TakeInventory("coolGunAmmo",1)
CWEP A 0 A_GiveInventory("coolGunBullets",10)
CWER ABCDEF 5
Goto ready
Разберем каждую строку:
NULL A 0 A_JumpIfInventory("coolGunBullets",10,"Ready")
Синтаксис у A_JumpIfInventory следующий:
A_JumpIfInventory("название_предмета",количество,"стейт")
- название_предмета — задает название предмета инвентаря (патроны).
- количество — задает количество предметов название_предмета нужное для того чтобы перепрыгнуть на стейт.
- стейт — задает точку перемещения, вместо стейта можно использовать число, оно будет указывать количество пропускаемых строк кода.
Таким образом, если у нас есть 10 coolGunBullets, то мы перепрыгнем на стейт Ready.
Данная строка:
NULL A 0 A_JumpIfInventory("coolGunBullets",10,"Ready")
Запрещает перезаряжать оружие, если количество патронов в обойме максимальное (максимальное количество патронов мы задавали в coolGunBullets)
NULL A 0 A_JumpIfInventory("coolGunAmmo",1,1)
В этой строке мы проверяем, есть ли у нас хотя-бы 1 обойма. Если есть, то перепрыгиваем через «goto ready«. В сущности, эта строка не позволяет нам перезарядится, если нет обойм.
CWEP A 0 A_TakeInventory("coolGunAmmo",1)
Данная строка забирает одну обойму из нашего инвентаря.
Комманда A_TakeInventory — забирает предмет из инвентаря, синтаксис у неё следующий:
A_TakeInventoty("название_предмета",количество)
Перейдем к следующей строке:
CWEP A 0 A_GiveInventory("coolGunBullets",10)
В этой строке мы даем 10 пулек, игроку. Синтаксис A_GiveInventory то же что и у A_TakeInventoty.
CWER ABCDEF 5
Goto ready
Дальше проигрываем анимацию перезарядки, и возвращаемся в стейт Ready
Стейт Reload готов, но он не будет работать. Чтобы он начал работать нужно добавить флаг WRF_ALLOWRELOAD у комманды A_WeaponReady:
Ready:
CWEP A 1 A_WeaponReady(WRF_ALLOWRELOAD)
Loop
А также, добавить флаг +Ammo_Optional.
+Ammo_Optional
И пропишите проперти нашему оружию:
weapon.ammotype "coolGunBullets"
weapon.ammouse 1
weapon.ammotype2 "coolGunAmmo"
weapon.ammouse2 0
Наш coolGun теперь использует coolGunBullets (пули) в качестве патронов, вместо Cell. На выстрел плазмы тратит 1 патрон. Также он использует coolGunAmmo (обоймы) в качестве 2-го типа патронов. На выстрел, обойму не тратит, поэтому 0.
Еще пропишем в начале стейта Fire проверку. Если нет патронов в обойме, то перезаряжаемся.
NULL A 0 A_JumpIfNoAmmo("Reload")
A_JumpIfNoAmmo — перепрыгивает на стейт, если нет патронов.
Готово! Прилагаю полный код coolGun:
Запускаем, проверяем. Не забудьте привязать клавишу перезарядки, в настройках игры. Также, чтобы заспавнить патроны, введите «summon coolGunAmmo» в консоли.
Заключение
Статья получилась объемной, надеюсь я смог вам объяснить, как делается перезарядка. Если есть вопросы, то задавайте их в комментариях.