Half-Life и Adrenaline Gamer форум
http://www.aghl.ru/forum/

[TUT] Как создать свою пушку?
http://www.aghl.ru/forum/viewtopic.php?f=42&t=729
Страница 1 из 1

Автор:  KORD_12.7 [ 27 мар 2012, 18:04 ]
Заголовок сообщения:  [TUT] Как создать свою пушку?

[TUT] Как создать свою пушку?

Автор: GordonFreeman
Источник: http://serfreeman1337.narod.ru/weapon_mod.html

Создание своей пушки - очень легкое дело. Прежде всего нам стоит определиться что-за оружие у нас будет, подобрать модели и звуки. Хотя, все таки преждего всего нам надо почитать про Weapon Mod API. И так, давайте сделаем клон glock 18, но уже в стиле пистолет-пулемёта: 600 выстрелов в минуту. Как только определились, можно приступать к крафтингу плагина. Для начала подключим необходимый модуль:
Код:
#include <hl_wpnmod> // Weapon Mod
Теперь нам стоит определиться с ресурсами. У нас это будут стандартные звуки и модели от обычного глока. Для удобности напишем пару макросов:
Код:
#define MODEL_WORLD "models/w_9mmhandgun.mdl" // Модель в мире
#define MODEL_VIEW "models/v_9mmhandgun.mdl" // Модель в руках у игрока
#define MODEL_PLAYER "models/p_9mmhandgun.mdl" // Модель в руках модели игрока &)
#define MODEL_CLIP "models/w_9mmclip.mdl" // Магазин

#define SOUND_FIRE "weapons/pl_gun3.wav" // Звук выстрела
#define SOUND_RELOAD "weapons/reload1.wav" // Звук перезарядки
Как и все ресурсы, нам необходимо прекэшить их. Для этого в инклюде есть небольшые макросы для каждого случая:
Код:
#define PRECACHE_MODEL(%0) engfunc(EngFunc_PrecacheModel,%0)
#define PRECACHE_SOUND(%0) engfunc(EngFunc_PrecacheSound,%0)
#define PRECACHE_GENERIC(%0) engfunc(EngFunc_PrecacheGeneric,%0)
Прекэшим наши ресурсы:
Код:
public plugin_precache()
{
    PRECACHE_MODEL(MODEL_VIEW)
    PRECACHE_MODEL(MODEL_WORLD)
    PRECACHE_MODEL(MODEL_PLAYER)
    PRECACHE_MODEL(MODEL_CLIP)
   
    PRECACHE_SOUND(SOUND_FIRE)
    PRECACHE_SOUND(SOUND_RELOAD)
   
    PRECACHE_GENERIC("sprites/weapon_9mmsmg.txt")
}
Теперь нам необходимо зарегестрировать наше оружие в модуле, для этого используем натив wpn_mod_register_weapon. И так, давайте создадим несколько макросов с настройками оружия и зарегистрируем его.
Код:
// Параметры нашего оружия
#define WEAPON_NAME "weapon_9mmsmg" // Название оружия
#define WEAPON_SLOT 2 // Слот HUD'a, в котором будет отображаться наше оружие
#define WEAPON_POSITION 4    // Позиция в слоте
#define WEAPON_PRIMARY_AMMO "9mm" // Название припасов оружия, в нашем случаем - 9mm
#define WEAPON_PRIMARY_AMMO_MAX 250 // Максимальное кол-во боеприпасов
#define WEAPON_SECONDARY_AMMO "" // Вторичные боеприпасы - их нету
#define WEAPON_SECONDARY_AMMO_MAX -1 // нету
#define WEAPON_MAX_CLIP 30 // Максимальное кол-во патронов в магазине
#define WEAPON_DEFAULT_AMMO 100 // Начальное кол-во боеприпасов
#define WEAPON_FLAGS 0 // Флаги оружия
#define WEAPON_WEIGHT 12 // "Вес" оружия, при выборе его autoweaponswitching
#define WEAPON_DAMAGE 14.0 // Урон оружия

// Создадим отдельные боеприпасы со 100 патронами
#define AMMOBOX_CLASSNAME "ammo_9mmsmg"

public plugin_init()
{
        new smg = wpnmod_register_weapon
        (
                WEAPON_NAME,
                WEAPON_SLOT,
                WEAPON_POSITION,
                WEAPON_PRIMARY_AMMO,
                WEAPON_PRIMARY_AMMO_MAX,
                WEAPON_SECONDARY_AMMO,
                WEAPON_SECONDARY_AMMO_MAX,
                WEAPON_MAX_CLIP,
                WEAPON_FLAGS,
                WEAPON_WEIGHT
    )
    // Регистрируем наше оружие, устанавливаем его параметры из дефайнов
}
Мы его зарегистрировали, в smg находится ID нашего оружия. Что с ним делать? С помошью этого ID мы можем регистрировать различные хуки нашего оружия, для этого используем натив wpnmod_register_weapon_forward и следующие типы хуков:
Код:
Fwd_Wpn_Spawn - Вызывается при создании/спавне энтити оружия.
Fwd_Wpn_Deploy - Вызывается при активировании игроком оружия.
Fwd_Wpn_Idle - Период бездействия оружия, IDLE.
Fwd_Wpn_PrimaryAttack - Вызвается, когда владелец оружия нажал левую клавишу мыши. Главная атака.
Fwd_Wpn_Reload - Перезарядка оружия.
Fwd_Wpn_Holster - Вызывается при убирании оружия в "кобуру".

Регистрируем хуки:
Код:
wpnmod_register_weapon_forward(smg,Fwd_Wpn_Spawn,"fw_SmgSpawn")
wpnmod_register_weapon_forward(smg,Fwd_Wpn_Deploy,"fw_SmgDeploy")
wpnmod_register_weapon_forward(smg,Fwd_Wpn_Holster,"fw_SmgHolster")
wpnmod_register_weapon_forward(smg,Fwd_Wpn_Idle,"fw_SmgIdle")
wpnmod_register_weapon_forward(smg,Fwd_Wpn_PrimaryAttack,"fw_SmgPrimaryAttack")
wpnmod_register_weapon_forward(smg,Fwd_Wpn_Reload,"fw_SmgReload")
Жизнь вашего оружия начинается с его появления на карте, модуль спавнит энтитю, которой нужно вручную установить требуемые параметры. Пишем небольшую функцию на установку оружию мировой модели и начального боезапаса.
Код:
public fw_SmgSpawn(const ent)
{
    SET_MODEL(ent,MODEL_WORLD)
    wpnmod_set_offset_int(ent, Offset_iDefaultAmmo, WEAPON_DEFAULT_AMMO)
}
Для установки начального количества боеприпасов мы использовали натив wpnmod_set_offset_int, который служит для безопасной модификации памяти по смещению.


Продолжение следует...

ЗЫ
Скоро. :crazy:

Автор:  Demasturbot [ 06 май 2012, 04:19 ]
Заголовок сообщения:  Re: [TUT] Как создать свою пушку?

И где же продолжение?)) Интересно ведь!

Автор:  KORD_12.7 [ 06 май 2012, 06:54 ]
Заголовок сообщения:  Re: [TUT] Как создать свою пушку?

Demasturbot
Скоро допишем :)

Автор:  CTACIK [ 12 апр 2015, 02:06 ]
Заголовок сообщения:  Re: [TUT] Как создать свою пушку?

KORD_12.7 писал(а):
Demasturbot
Скоро допишем :)

Когда продолжение?

Автор:  Glaster [ 10 ноя 2020, 16:38 ]
Заголовок сообщения:  Re: [TUT] Как создать свою пушку?

KORD_12.7 писал(а):
Demasturbot
Скоро допишем :)
Когды продолжение?

Автор:  KORD_12.7 [ 30 ноя 2020, 19:30 ]
Заголовок сообщения:  Re: [TUT] Как создать свою пушку?

Glaster писал(а):
KORD_12.7 писал(а):
Demasturbot
Скоро допишем :)
Когды продолжение?
А оно ещё кому-то надо? хД
На самом деле всё просто: качаешь все плаги с пушками и изучаещь код, потом пишешь свою пушку :roll:

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/