Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
01.02.2002, 16:30
Exec



moin moin

also ich hab mal (versucht) ne waffe zu machen ... mal wieder! man kann sie anwählen, klappt alles! macht auch schaden und so ... aba kein sound! tracelines + decals sind auch nich vorhanden! aba sonst geht alles perfekt ... ich weis echt nich mehr, an was es liegen soll .... helft mir!

ps: ich use das sdk 2.2 - und es nervt *g*

thx

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
001
01.02.2002, 17:46
R2-D2



post mal was de gemacht hast

--

®2-D2
Believe in Retrieve :)

Projects:
Monkey-Strike (Leader/Coder)
Water Wars (Head Coder)
Mixed Mod (Coder)

zum Seitenanfang zum Seitenende Profil || Suche
002
01.02.2002, 18:05
Exec



/***
*
* Copyright (c) 1996-2001, 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.
*
****/

#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "weapons.h"
#include "nodes.h"
#include "player.h"
#include "soundent.h"
#include "gamerules.h"

enum mg_e
{


MP5_LONGIDLE = 0,
MP5_IDLE1,
MP5_LAUNCH,
MP5_RELOAD,
MP5_DEPLOY,
MP5_FIRE1,
MP5_FIRE2,
MP5_FIRE3,


};

LINK_ENTITY_TO_CLASS( weapon_mg, CMG );

//=========================================================
//=========================================================
int CMG::SecondaryAmmoIndex( void )
{
return m_iSecondaryAmmoType;
}

void CMG::Spawn( )
{
pev->classname = MAKE_STRING("weapon_mg"); // hack to allow for old names
Precache( );
SET_MODEL(ENT(pev), "models/w_9mmAR.mdl");
m_iId = WEAPON_MG;

m_iDefaultAmmo = MG_DEFAULT_GIVE;

FallInit();// get ready to fall down.

}

void CMG::Precache( void )
{
PRECACHE_MODEL("models/v_9mmAR.mdl");
PRECACHE_MODEL("models/w_9mmAR.mdl");
PRECACHE_MODEL("models/p_9mmAR.mdl");

m_iShell = PRECACHE_MODEL ("models/shell.mdl");// brass shellTE_MODEL

PRECACHE_MODEL("models/grenade.mdl"); // grenade

PRECACHE_MODEL("models/w_9mmARclip.mdl");
PRECACHE_SOUND("items/9mmclip1.wav");

PRECACHE_SOUND("items/clipinsert1.wav");
PRECACHE_SOUND("items/cliprelease1.wav");

PRECACHE_SOUND ("weapons/hks1.wav");// H to the K
PRECACHE_SOUND ("weapons/hks2.wav");// H to the K
PRECACHE_SOUND ("weapons/hks3.wav");// H to the K

PRECACHE_SOUND( "weapons/glauncher.wav" );
PRECACHE_SOUND( "weapons/glauncher2.wav" );

PRECACHE_SOUND ("weapons/357_cock1.wav");

m_usMG = PRECACHE_EVENT( 1, "events/mg.sc" );
m_usMG2 = PRECACHE_EVENT( 1, "events/mg2.sc" );

PRECACHE_SOUND ("weapons/reload1.wav"); // shotgun reload
PRECACHE_SOUND ("weapons/reload3.wav"); // shotgun reload

}

int CMG::GetItemInfo(ItemInfo *p)
{
p->pszName = STRING(pev->classname);
p->pszAmmo1 = "9mm";
p->iMaxAmmo1 = _9MM_MAX_CARRY;
p->pszAmmo2 = "NULL";
p->iMaxAmmo2 = -1;
p->iMaxClip = MG_MAX_CLIP;
p->iSlot = 0;
p->iPosition = 1;
p->iFlags = 0;
p->iId = m_iId = WEAPON_MG;
p->iWeight = MG_WEIGHT;

return 1;
}

int CMG::AddToPlayer( CBasePlayer *pPlayer )
{
if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) )
{
MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev );
WRITE_BYTE( m_iId );
MESSAGE_END();
return TRUE;
}
return FALSE;
}

BOOL CMG::Deploy( )
{
return DefaultDeploy( "models/v_9mmAR.mdl", "models/p_9mmAR.mdl", MP5_DEPLOY, "mg" );
}

void CMG::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_iClip--;

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;

#ifdef CLIENT_DLL
if ( !bIsMultiplayer() )
#else
if ( !g_pGameRules->IsMultiplayer() )
#endif
{
// optimized multiplayer. Widened to make it easier to hit a moving player
vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_20DEGREES, 8192, BULLET_PLAYER_9MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); //6degrees 2, 0 8192
}
else
{
// single player spread
vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_20DEGREES, 8192, BULLET_PLAYER_9MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); //3 degrees 2, 0
}

if ( m_fInZoom )
{
vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_20DEGREES, 8192, BULLET_PLAYER_9MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed );
}

int flags;
#if defined( CLIENT_WEAPONS )
flags = FEV_NOTHOST;
#else
flags = 0;
#endif

PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usMG, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 );

if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0)
// HEV suit - indicate out of ammo condition
m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0);

m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.02;

if ( m_fInZoom )
{
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.08;
}

if ( m_flNextPrimaryAttack < UTIL_WeaponTimeBase() )
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.1;

m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );

m_fInSpecialReload = 0;
}

void CMG::SecondaryAttack( void )
{
if ( m_pPlayer->pev->fov != 0 )
{
m_fInZoom = FALSE;
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 0; // 0 means reset to default fov
}
else if ( m_pPlayer->pev->fov != 40 )
{
m_fInZoom = TRUE;
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 45;
}

m_flNextSecondaryAttack = 0.5;
m_flNextPrimaryAttack = 0.8;

}

void CMG::Reload( void )
{
if ( m_pPlayer->ammo_9mm <= 0 )
return;

if ( m_fInZoom )
{
SecondaryAttack( );
}

DefaultReload( MG_MAX_CLIP, MP5_RELOAD, 1.5 );
}

void CMG::WeaponIdle( void )
{
ResetEmptySound( );

m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );

if ( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() )
return;

int iAnim;
switch ( RANDOM_LONG( 0, 1 ) )
{
case 0:
iAnim = MP5_LONGIDLE;
break;

default:
case 1:
iAnim = MP5_IDLE1;
break;
}

SendWeaponAnim( iAnim );

m_flTimeWeaponIdle = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); // how long till we do this again.

}

class CMGAmmoClip : public CBasePlayerAmmo
{
void Spawn( void )
{
Precache( );
SET_MODEL(ENT(pev), "models/w_9mmARclip.mdl");
CBasePlayerAmmo::Spawn( );
}
void Precache( void )
{
PRECACHE_MODEL ("models/w_9mmARclip.mdl");
PRECACHE_SOUND("items/9mmclip1.wav");
}
BOOL AddAmmo( CBaseEntity *pOther )
{
int bResult = (pOther->GiveAmmo( AMMO_MGCLIP_GIVE, "9mm", _9MM_MAX_CARRY) != -1);
if (bResult)
{
EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM);
}
return bResult;
}
};
LINK_ENTITY_TO_CLASS( ammo_mgclip, CMGAmmoClip );

void CMG::Holster( int skiplocal )
{
if ( m_fInZoom )
{
SecondaryAttack( );
}

m_pPlayer->m_flNextAttack = gpGlobals->time + 0.5;

SendWeaponAnim( MP5_RELOAD );
}

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
003
01.02.2002, 18:11
Exec



UTIL_PrecacheOtherWeapon( "weapon_mg" ); in der weapons.cpp

gSkillData.plrDmgMG = 2; multiplay_gamerules

float plrDmgMG; skill.h

#define WEAPON_MG 16
#define MG_WEIGHT 1
#define MG_MAX_CLIP 200
#define MG_DEFAULT_GIVE 200
#define AMMO_MGCLIP_GIVE MG_MAX_CLIP

class CMG : public CBasePlayerWeapon
{
public:
void Spawn( void );
void Precache( void );
int iItemSlot( void ) { return 1; }
int GetItemInfo(ItemInfo *p);
int AddToPlayer( CBasePlayer *pPlayer );

void PrimaryAttack( void );
void SecondaryAttack( void );
int SecondaryAmmoIndex( void );
BOOL Deploy( void );
void Reload( void );
void WeaponIdle( void );
float m_flNextAnimTime;
int m_iShell;

BOOL m_fInZoom;
void Holster( int skiplocal = 0 );

virtual BOOL UseDecrement( void )
{
#if defined( CLIENT_WEAPONS )
return TRUE;
#else
return FALSE;
#endif
}

private:
unsigned short m_usMG;
unsigned short m_usMG2;
};
weapons.h

also den zoom hab ich auch irgendwo mit initialisiert, der geht auch ohne probs bei der mp5

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
004
01.02.2002, 19:34
R2-D2



du hast den sound ja nirgends aufgerufen, nur geprecached.

entweder du spielst den sound in der primaryattack funktion ab, oder du rufst in client-seitig per event auf (besser)

--

®2-D2
Believe in Retrieve :)

Projects:
Monkey-Strike (Leader/Coder)
Water Wars (Head Coder)
Mixed Mod (Coder)

zum Seitenanfang zum Seitenende Profil || Suche
005
01.02.2002, 19:41
Exec



in der ev_hldm.cpp ? also so hier in der art:

void EV_FireMP5( event_args_t *args )
{
int idx;
vec3_t origin;
vec3_t angles;
vec3_t velocity;

vec3_t ShellVelocity;
vec3_t ShellOrigin;
int shell;
vec3_t vecSrc, vecAiming;
vec3_t up, right, forward;
float flSpread = 0.01;

idx = args->entindex;
VectorCopy( args->origin, origin );
VectorCopy( args->angles, angles );
VectorCopy( args->velocity, velocity );

AngleVectors( angles, forward, right, up );

shell = gEngfuncs.pEventAPI->EV_FindModelIndex ("models/shell.mdl");// brass shell

if ( EV_IsLocal( idx ) )
{
// Add muzzle flash to current weapon model
EV_MuzzleFlash();
gEngfuncs.pEventAPI->EV_WeaponAnimation( MP5_FIRE1 + gEngfuncs.pfnRandomLong(0,2), 2 );

V_PunchAxis( 0, gEngfuncs.pfnRandomFloat( -2, 2 ) );
}

EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 20, -12, 4 );

EV_EjectBrass ( ShellOrigin, ShellVelocity, angles[ YAW ], shell, TE_BOUNCE_SHELL );

switch( gEngfuncs.pfnRandomLong( 0, 1 ) )
{
case 0:
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/hks1.wav", 1, ATTN_NORM, 0, 94 + gEngfuncs.pfnRandomLong( 0, 0xf ) );
break;
case 1:
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/hks2.wav", 1, ATTN_NORM, 0, 94 + gEngfuncs.pfnRandomLong( 0, 0xf ) );
break;
}

EV_GetGunPosition( args, vecSrc, origin );
VectorCopy( forward, vecAiming );

if ( gEngfuncs.GetMaxClients() > 1 )
{
EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, 8192, BULLET_PLAYER_MP5, 2, &tracerCount[idx-1], args->fparam1, args->fparam2 );
}
else
{
EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, 8192, BULLET_PLAYER_MP5, 2, &tracerCount[idx-1], args->fparam1, args->fparam2 );
}
}

oder wo genau? ich hab erst msvc++ ein paar tage -> hab noch nich viel clientseitig gemacht ...

thx

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
006
01.02.2002, 23:45
R2-D2



du rufst doch serverseitig mit deiner waffe, den event fuer die "mg" auf, also erstell einen neuen event dafuer, programmier alles noetige clientseitige dafuer und dann klappts
lies dir mal retros tut darueber durch. das findste hier beim dhcc

--

®2-D2
Believe in Retrieve :)

Projects:
Monkey-Strike (Leader/Coder)
Water Wars (Head Coder)
Mixed Mod (Coder)

zum Seitenanfang zum Seitenende Profil || Suche
007
01.02.2002, 23:50
Exec



also das tut "Client-Side Waffen-coding" ? hhmmmm ok ich setzt mich morgen mal ran! bis morgen *g* es kommen sicher fehler *nichtsohoff*

***edit***

Dort werden Sachen wie der Patronenauswurf und Decals gesteuert. Ohne client-code für eine Waffe (oder besser für einen Bullet-Typ) kommen beim schießen keine Decals und auch keine Tracelines, ebenso keine Patronen und kein Sound...

hhhmmmmppfffff ich sollte vorher erstemal intensiv lesen ....

--

"selbermachen rockt am meisten :D" - -LeJean-


Dieser Beitrag wurde am 01.02.2002 um 23:51 von da_EXE bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
02.02.2002, 18:47
Exec



so also ich hab das mal jetzt gemacht .... geht aba nich :-(

hier mal alles was ich gemacht hab:

ev_hldm.cpp

extern "C"
void EV_FireMg( struct event_args_s *args );

nach dem mp5 kram das hier:

//======================
//mg start
//======================
//MG
void EV_FireMg( event_args_t *args )
{
int idx;
vec3_t origin;
vec3_t angles;
vec3_t velocity;

vec3_t ShellVelocity;
vec3_t ShellOrigin;
int shell;
vec3_t vecSrc, vecAiming;
vec3_t up, right, forward;
float flSpread = 0.01;

idx = args->entindex;
VectorCopy( args->origin, origin );
VectorCopy( args->angles, angles );
VectorCopy( args->velocity, velocity );

AngleVectors( angles, forward, right, up );

shell = gEngfuncs.pEventAPI->EV_FindModelIndex ("models/shell.mdl");// brass shell Das Model der Patronenhülse die ausgeworfen wird

if ( EV_IsLocal( idx ) )
{
// Add muzzle flash to current weapon model
EV_MuzzleFlash();
//M16_FIRE1 ist die Animation die abgespielt werden soll
gEngfuncs.pEventAPI->EV_WeaponAnimation( MP5_FIRE1 + gEngfuncs.pfnRandomLong(0,2), 2 );
}

//Positionsangabe an der die Hülse ausgeworfen wird
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 20, -12, 4 );
EV_EjectBrass ( ShellOrigin, ShellVelocity, angles[ YAW ], shell, TE_BOUNCE_SHELL ); //lässt die Patronenhülse herrausfallen

switch( gEngfuncs.pfnRandomLong( 0, 1 ) ) //hier wird der Schuß-Sound abgespielt (m16-1.wav oder m16-2.wav)
{
case 0:
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/hks1.wav", 1,
ATTN_NORM, 0, 94 + gEngfuncs.pfnRandomLong( 0, 0xf ) );
break;
case 1:
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/hks2.wav", 1,
ATTN_NORM, 0, 94 + gEngfuncs.pfnRandomLong( 0, 0xf ) );
break;
}

EV_GetGunPosition( args, vecSrc, origin );
VectorCopy( forward, vecAiming );

//hier ist darauf zu achten das die VECTOR_CODE_ angaben mit denen aus der mp.dll übereinstimmen
if ( gEngfuncs.GetMaxClients() > 1 )
{
// EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, VECTOR_CONE_20DEGREES, 8192, BULLET_PLAYER_9MM, 1, &tracerCount[idx-1] );
EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, 8192, BULLET_PLAYER_9MM, 2, &tracerCount[idx-1], args->fparam1, args->fparam2 );
}
else
{
// EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, VECTOR_CONE_20DEGREES, 8192, BULLET_PLAYER_9MM, 1, &tracerCount[idx-1] );
EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, 8192, BULLET_PLAYER_9MM, 2, &tracerCount[idx-1], args->fparam1, args->fparam2 );
}

if ( EV_IsLocal( idx ) )
{
V_PunchAxis( 0, gEngfuncs.pfnRandomFloat( -2, 2 ) );
}
}

//======================
//mg end
//======================

ev_hldm.h

extern "C"
void EV_FireMg( struct event_args_s *args );

bei gamehook
gEngfuncs.pfnHookEvent( "events/mg.sc", EV_FireMg );

keine compile errors, geht aba nich ...

ps: ich hab keine neue muni gemacht! maybe liegts daran .... hhhmmm

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
009
04.02.2002, 22:48
M0n60



warum lässte den client side quatsch nich sein und rufst den sound serverseitig auf, den code dafür kriegste aus de(r/n) frühen sdk version(en), vor hl v. 1.1.0.0. das verursacht dann ein klitze kleines bisschen mehr traffic aber darauf kann man auch scheißen, schließlich hat hl vor 1.1.x.x auch ohne ALLZU hohe pings funktioniert und diese geschichte hier wird garantiert nich so laggen wie es old school hl tat..

-Merlin

--

zum Seitenanfang zum Seitenende Profil || Suche
010
05.02.2002, 14:13
EVZ-NiMBiS



Interessant!!
Konnte ich auch gebrauchen!
thx

--

Wir sind doch alle Kekse.

zum Seitenanfang zum Seitenende Profil || Suche
011
10.02.2002, 15:00
Exec



also das geht doch nich an .... ich hab das m16 tut + retros tut gemacht, genauso wies sein soll, aba es geht nich!

vielleicht könnte ja mal jemand 1waffe zu dem original code zufügen, die dann auch geht? *bettel* ich hab jetzt schon seit 10tagen rumprobiert, aba es will einfach nich!

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche