halflife-thewastes-sdk/dlls/thewastes.cpp

223 lines
5.6 KiB
C++
Raw Normal View History

/***
*
* Copyright (C) 2002 The Wastes Project, All Rights Reserved.
*
* This product contains software technology from Valve Software, LLC,
* Copyright <EFBFBD> 1996-2001, Valve LLC, 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
* The Wastes Project. All other use, distribution, or modification is prohibited
* without written permission from The Wastes Project.
*
***/
#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "weapons.h"
#include "player.h"
#include "thewastes.h"
// Player items people can store on their person
playeritem_t MeleeItems[] = {
{ "weapon_combatknife", "", 0, CAT_MELEE },
{ "weapon_throwingknife", "weapon_throwingknife", 4, CAT_MELEE },
{ "weapon_baseballbat", "", 0, CAT_MELEE },
{ "weapon_sledgehammer", "", 0, CAT_MELEE },
{ "weapon_spear", "weapon_spear", 2, CAT_MELEE },
{ "weapon_cattleprod", "", 0, CAT_MELEE },
{ "weapon_katana", "", 0, CAT_MELEE },
};
playeritem_t SidearmItems[] = {
{ "weapon_beretta", "ammo_beretta", 1, CAT_SIDEARM },
{ "weapon_colt", "ammo_colt", 1, CAT_SIDEARM },
{ "weapon_deagle", "ammo_deagle", 1, CAT_SIDEARM },
{ "weapon_sawedoff", "ammo_buckshot", 1, CAT_SIDEARM },
{ "weapon_ruger", "ammo_ruger", 2, CAT_SIDEARM },
{ "weapon_handcannon", "ammo_handcannon", 2, CAT_SIDEARM },
};
playeritem_t PrimaryItems[] = {
{ "weapon_smg9", "ammo_smg9", 1, CAT_PRIMARY },
{ "weapon_sten", "ammo_sten", 1, CAT_PRIMARY },
{ "weapon_boltrifle", "ammo_boltrifle", 1, CAT_PRIMARY },
{ "weapon_mossberg", "ammo_buckshot", 1, CAT_PRIMARY },
{ "weapon_winchester", "ammo_winchester", 1, CAT_PRIMARY },
{ "weapon_akimboberettas", "ammo_beretta", 2, CAT_PRIMARY },
{ "weapon_akimbocolts", "ammo_colt", 1, CAT_PRIMARY },
{ "weapon_akimbodeagles", "ammo_deagle", 1, CAT_PRIMARY },
{ "weapon_akimbosawedoffs", "ammo_buckshot", 1, CAT_PRIMARY },
};
playeritem_t UniqueItems[] = {
{ "weapon_fnfal", "ammo_fnfal", 1, CAT_UNIQUE },
{ "weapon_tommygun", "ammo_tommygun", 1, CAT_UNIQUE },
{ "weapon_g11", "ammo_g11", 1, CAT_UNIQUE },
{ "weapon_jackhammer", "ammo_jackhammer", 1, CAT_UNIQUE },
};
playeritem_t OtherItems[] = {
// TODO: Bring back in when fixed!
// { "weapon_molotov", "weapon_molotov", 1, CAT_ITEM },
{ "weapon_fraggrenade", "weapon_fraggrenade", 1, CAT_ITEM },
{ "weapon_pipebomb", "weapon_pipebomb", 0, CAT_ITEM },
{ "extra_ammo", NULL, 0, CAT_ITEM },
};
playeritemlist_t g_MeleeItems = {
MeleeItems,
7,
};
playeritemlist_t g_SidearmItems = {
SidearmItems,
6,
};
playeritemlist_t g_PrimaryItems = {
PrimaryItems,
9,
};
playeritemlist_t g_UniqueItems = {
UniqueItems,
4,
};
playeritemlist_t g_OtherItems = {
OtherItems,
// 4,
3,
};
#ifndef CLIENT_DLL
// Spawns people with extra ammo
class CExtraAmmo : public CBasePlayerItem
{
public:
void Spawn()
{
pev->classname = MAKE_STRING( "extra_ammo" );
pev->solid = SOLID_TRIGGER;
UTIL_SetSize( pev, g_vecZero, g_vecZero );
}
void Touch( CBaseEntity *pOther )
{
if( pOther != NULL && pOther->IsPlayer() )
{
CBasePlayer *pPlayer = (CBasePlayer*)pOther;
// Sidearms
pPlayer->GiveNamedItem( "ammo_beretta" );
pPlayer->GiveNamedItem( "ammo_colt" );
pPlayer->GiveNamedItem( "ammo_deagle" );
pPlayer->GiveNamedItem( "ammo_ruger" );
pPlayer->GiveNamedItem( "ammo_handcannon" );
// Primary
pPlayer->GiveNamedItem( "ammo_smg9" );
pPlayer->GiveNamedItem( "ammo_sten" );
pPlayer->GiveNamedItem( "ammo_boltrifle" );
pPlayer->GiveNamedItem( "ammo_winchester" );
// Uniques
pPlayer->GiveNamedItem( "ammo_fnfal" );
pPlayer->GiveNamedItem( "ammo_tommygun" );
pPlayer->GiveNamedItem( "ammo_g11" );
pPlayer->GiveNamedItem( "ammo_buckshot" );
}
UTIL_Remove( this );
}
};
LINK_ENTITY_TO_CLASS( extra_ammo, CExtraAmmo );
#endif
void CWasteWeapon::Spawn()
{
CBasePlayerWeapon::Spawn();
}
void CWasteWeapon::ItemPostFrame()
{
if ((m_pPlayer->pev->button & IN_SPECIAL) && m_flNextPrimaryAttack <= 0.0)
{
SpecialMode();
m_pPlayer->pev->button &= ~IN_SPECIAL;
}
CBasePlayerWeapon::ItemPostFrame();
}
BOOL CWasteWeapon::UseDecrement()
{
#if defined( CLIENT_WEAPONS )
return TRUE;
#else
return FALSE;
#endif
}
void CWasteWeapon::SpecialMode()
{
}
// Simple solution
int CWasteWeapon::iGetWeight()
{
ItemInfo II;
GetItemInfo(&II);
return II.iWeight;
}
// Used for pistol whips (and melee weaps)
void FindHullIntersection( const Vector &vecSrc, TraceResult &tr, float *mins, float *maxs, edict_t *pEntity )
{
int i, j, k;
float distance;
float *minmaxs[2] = {mins, maxs};
TraceResult tmpTrace;
Vector vecHullEnd = tr.vecEndPos;
Vector vecEnd;
distance = 1e6f;
vecHullEnd = vecSrc + ((vecHullEnd - vecSrc)*2);
UTIL_TraceLine( vecSrc, vecHullEnd, dont_ignore_monsters, pEntity, &tmpTrace );
if ( tmpTrace.flFraction < 1.0 )
{
tr = tmpTrace;
return;
}
for ( i = 0; i < 2; i++ )
{
for ( j = 0; j < 2; j++ )
{
for ( k = 0; k < 2; k++ )
{
vecEnd.x = vecHullEnd.x + minmaxs[i][0];
vecEnd.y = vecHullEnd.y + minmaxs[j][1];
vecEnd.z = vecHullEnd.z + minmaxs[k][2];
UTIL_TraceLine( vecSrc, vecEnd, dont_ignore_monsters, pEntity, &tmpTrace );
if ( tmpTrace.flFraction < 1.0 )
{
float thisDistance = (tmpTrace.vecEndPos - vecSrc).Length();
if ( thisDistance < distance )
{
tr = tmpTrace;
distance = thisDistance;
}
}
}
}
}
}