Небольшое руководство по созданию многозарядной винтовки.
Решил внести свой вклад в развитие этого сайта.
Код снайперской винтовки уже есть, но она с отъемным магазином. Поэтому я решил сделать руководство по созданию магазинной винтовки с заряжанием по одному патрону. Винтовка не снайперская, но переделать ее в снайперскую не составит труда. Всем фанатам Дикого Запада посвящается! Хотя при желании, если немного подправить код, она подойдет и для Второй Мировой.
Итак, я решил показать вам, как сделать магазинную винтовку с заряжанием по одному патрону. За образец возьму винтовку Генри образца 1860 года. Почему ее? Она мне просто нравится. Хотя, при желании этот код, как уже говорилось выше, подойдет для любой неавтоматической винтовки с заряжанием по одному патрону – надо просто изменить количество патронов. Поскольку винтовки со скобой Генри часто выпускались под револьверный патрон, а также, чтобы избавить вас от лишнего геморроя, мы не будем создавать новый тип боеприпасов, а сделаем ее на основе патронов 357 Magnum.
Итак, начали.
Для начала создаем на сервере файл henry.cpp. Копируем туда следующий код:
С / С++:
/*** * * Copyright (c) 1996-2002, Valve LLC. All rights reserved. * * This product contains software technology licensed from Id * Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. * All Rights Reserved. * * Use, distribution, and modification of this source code and/or resulting * object code is restricted to non-commercial enhancements to products from * Valve LLC. All other use, distribution, or modification is prohibited * without written permission from Valve LLC. * ****/ #if !defined( OEM_BUILD ) && !defined( HLDEMO_BUILD )
if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) // HEV suit - indicate out of ammo condition m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0);
if (m_iClip != 0) m_flPumpTime = gpGlobals->time + 0.5;
// don't reload until recoil is done if (m_flNextPrimaryAttack > UTIL_WeaponTimeBase()) return;
// check to see if we're ready to reload if (m_fInSpecialReload == 0) { SendWeaponAnim( HENRY_START_RELOAD ); m_fInSpecialReload = 1; m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.6; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.6; m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 1.0; return; } else if (m_fInSpecialReload == 1) { if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase()) return; // was waiting for gun to move to side m_fInSpecialReload = 2;
SendWeaponAnim( HENRY_RELOAD );
m_flNextReload = UTIL_WeaponTimeBase() + 0.8; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.8; } else { // Add them to the clip m_iClip += 1; m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 1; m_fInSpecialReload = 1; } }
Небольшое руководство по созданию многозарядной винтовки.
Посмотрел модель - аж захотелось вестерн какой-нибудь начать делать в стиле Wanted!
Модель, кстати, сам делал?
Если да, то очень даже солидно. Выстрелы, перезарядка.
Цитата:
Решил внести свой вклад в развитие этого сайта
За это спасибо от меня лично. Знаю этот сайт еще с тех пор, когда он был hl-faction.ru, затем halflife.zone
И вот сейчас, глобальный Half-Life.
Я не силен в программировании, поверхностно знаю моделирование и немного картострой.
Но, как я вижу, туториал хороший.
Продолжай в том же духе!
А я попробую помочь создателям с пополнением коллекции модов
Добавлено через 3 минуты Kerard, P.S, не обижай админа, благодаря ему у нас есть этот сайт, а главное - форум
P.S.S, вон что он сделал с сайтом своих обидчиков
Чтобы переделать винтовку в снайперскую нужно вписать в файл henry.cpp вместо кода выше следующий код:
С / С++:
/***
*
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
*
* This product contains software technology licensed from Id
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
* All Rights Reserved.
*
* Use, distribution, and modification of this source code and/or resulting
* object code is restricted to non-commercial enhancements to products from
* Valve LLC. All other use, distribution, or modification is prohibited
* without written permission from Valve LLC.
*
****/
#if !defined( OEM_BUILD ) && !defined( HLDEMO_BUILD )
if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0)
// HEV suit - indicate out of ammo condition
m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0);
if (m_iClip != 0)
m_flPumpTime = gpGlobals->time + 0.5;