enum ak47_e
{
AK47_IDLE,
AK47_RELOAD,
AK47_DRAW,
AK47_SHOOT1,
AK47_SHOOT2,
AK47_SHOOT3,
};
class CAK47 : public CBasePlayerWeapon
{
void Spawn();
void Precache();
int iItemSlot() { return 2; }
bool GetItemInfo(ItemInfo* p);
void PrimaryAttack();
void Reload();
bool Deploy();
void WeaponIdle();
bool UseDecrement()
{
#if defined(CLIENT_WEAPONS)
return true;
#else
return false;
#endif
}
int m_iShell;
};
#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "weapons.h"
#include "player.h"
#include "soundent.h"
#include "gamerules.h"
#include "UserMessages.h"
LINK_ENTITY_TO_CLASS(weapon_ak47, CAK47);
void CAK47::Spawn()
{
Precache();
SET_MODEL(ENT(pev), "models/w_ak47.mdl");
m_iId = WEAPON_AK47;
m_iDefaultAmmo = 30;
FallInit(); // get ready to fall down.
}
void CAK47::Precache()
{
PRECACHE_MODEL("models/v_ak47.mdl");
PRECACHE_MODEL("models/w_ak47.mdl");
PRECACHE_MODEL("models/p_ak47.mdl");
m_iShell = PRECACHE_MODEL("models/shell.mdl"); // brass shellTE_MODEL
PRECACHE_SOUND("weapons/ak47-1.wav");
}
bool CAK47::GetItemInfo(ItemInfo* p)
{
p->pszName = STRING(pev->classname);
p->pszAmmo1 = "762";
p->iMaxAmmo1 = 90;
p->pszAmmo2 = NULL;
p->iMaxAmmo2 = NULL;
p->iMaxClip = 30;
p->iSlot = 2;
p->iPosition = 3;
p->iFlags = 0;
p->iId = m_iId = WEAPON_AK47;
p->iWeight = MP5_WEIGHT;
return true;
}
bool CAK47::Deploy()
{
return DefaultDeploy("models/v_ak47.mdl", "models/p_ak47.mdl", AK47_DRAW, "mp5");
}
void CAK47::PrimaryAttack()
{
// don't fire underwater
if (m_pPlayer->pev->waterlevel == 3)
{
PlayEmptySound();
m_flNextPrimaryAttack = 0.15;
return;
}
if (m_iClip <= 0)
{
PlayEmptySound();
m_flNextPrimaryAttack = 0.15;
return;
}
m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH;
m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH;
// player "shoot" animation
m_pPlayer->SetAnimation(PLAYER_ATTACK1);
Vector vecSrc = m_pPlayer->GetGunPosition();
Vector vecAiming = m_pPlayer->GetAutoaimVector(AUTOAIM_5DEGREES);
Vector vecDir = m_pPlayer->FireBulletsPlayer(1, vecSrc, vecAiming, VECTOR_CONE_3DEGREES, 8192, BULLET_PLAYER_MP5,
1, 30, m_pPlayer->pev, m_pPlayer->random_seed);
SendWeaponAnim(AK47_SHOOT1 + RANDOM_LONG(0, 2));
EMIT_SOUND(edict(), CHAN_AUTO, "weapons/ak47-1.wav", 1, ATTN_NORM);
Vector vecShellVelocity = m_pPlayer->pev->velocity + gpGlobals->v_right * RANDOM_FLOAT(100, 200) +
gpGlobals->v_up * RANDOM_FLOAT(100, 150) + gpGlobals->v_forward * 25;
EjectBrass(pev->origin + m_pPlayer->pev->view_ofs + gpGlobals->v_up * -12 + gpGlobals->v_forward * 20 +
gpGlobals->v_right * -8, vecShellVelocity, pev->angles.y, m_iShell, TE_BOUNCE_SHELL);
m_pPlayer->pev->punchangle.x -= 2;
m_iClip--;
m_flNextPrimaryAttack = 0.1;
m_flTimeWeaponIdle = 0.85;
}
void CAK47::Reload()
{
DefaultReload(30, AK47_RELOAD, 2.5);
}
void CAK47::WeaponIdle()
{
ResetEmptySound();
if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase())
return;
SendWeaponAnim(AK47_IDLE);
}
CSqueak g_Snark;
and paste CAK47 g_AK47;
below it.HUD_PrepEntity(&g_Snark, &player);
and paste HUD_PrepEntity(&g_AK47, &player);
below it.case WEAPON_SNARK:
pWeapon = &g_Snark;
break;
and paste
case WEAPON_AK47:
pWeapon = &g_AK47;
break;
below it.
UTIL_PrecacheOtherWeapon("weapon_hornetgun");
and paste UTIL_PrecacheOtherWeapon("weapon_ak47");
below it.
ak47
to the impulse 101
cheat command. Find GiveNamedItem("weapon_hornetgun");
and paste GiveNamedItem("weapon_ak47");
below it.
FireBulletsPlayer
function, the 30
is the damage value. You can change to any value.VECTOR_CONE_3DEGREES
with other values to make the spray cone wider/narrower.punchangle
to give different recoil strength.m_flNextPrimaryAttack
defines the rate of fire.You must log in to post a comment. You can login or register a new account.
I can get the gun in game, but it wont pick up any ammo so only get 30 shots.
says p->pszAmmo1 = "762"; I tried changing that to 9mm but the gun does not appear.
i copied all needed files and checked the sourcecode several times
any idea?