Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
10.07.2001, 17:10
Hanky



Moin,
eine frage habe bez. den .sc files in hl/CS.

Zwar: in hl haben die coder überlegt, pro schussmethode einfachmal ne neue .cs file anzulegen. (siehe shotgun, glock)

in CS hat jede Waffe nur eine .cs datei. Eigentlich kein Problem, aber wie codet mal clientseitig eine Abfrage, ob die 2te Feuertaste mal gedrückt worden ist??

Dos is mal gerade mein prob, da ich waffe habe, die mit 8.sc files etwas aufwendig zu coden wären..:D

--

hankYs Page

zum Seitenanfang zum Seitenende Profil || Suche
001
10.07.2001, 17:46
Retro



Die *.sc ist doch überflüßig! Guck nur einmal in eine *.sc von CS dann weißte woszu die "gut" sind! hehe

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
002
10.07.2001, 18:22
Hanky



JAha, der Inhalt is scheiss egal!

Aber wie man das clientseitig codet..also ganz überflüssig sind se ja nit!! Sonst gäb es die ja auch in CS nicht!! Zur kommunikation gibbat die ja!

--

hankYs Page

zum Seitenanfang zum Seitenende Profil || Suche
003
10.07.2001, 19:40
Retro



Stimmt, die mußt du schon einrichten, nur in der Datei selber steht halt nichts drinne...

Genau das habe ich heute gemacht, und seitdem es fertig ist, funzt meine Waffe auch zu 100% =D

Ich such dir mal den Code raus, den ich gemacht hab... mom

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
004
10.07.2001, 19:53
Retro



So, das alles ist Client-seitig, meine Waffe heißt in dem Fall M14:
(der alte Code ist grün der neue rot)

ev_hldm.cpp
void EV_FireMP5( struct event_args_s *args );
void EV_FireM14( struct event_args_s *args );

So, das andere kommt unter dem von der MP5

void EV_FireM14( 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( M14_FIRE1 + gEngfuncs.pfnRandomLong(0,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, VECTOR_CONE_6DEGREES, 8192, BULLET_PLAYER_M14, 1, &tracerCount[idx-1] );
}
else
{
EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, VECTOR_CONE_3DEGREES, 8192, BULLET_PLAYER_M14, 1, &tracerCount[idx-1] );
}

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

ev_hldm.h
Die Animationen deklarieren:

enum m14_e
{
M14_LONGIDLE = 0,
M14_IDLE1,
M14_LAUNCH,
M14_RELOAD,
M14_DEPLOY,
M14_FIRE1,
M14_FIRE2,
M14_FIRE3,
};

hl_events.cpp
Und das ist jetzt der "link" zu den *.sc's

void EV_FireMP5( struct event_args_s *args );
void EV_FireM14( struct event_args_s *args );

gEngfuncs.pfnHookEvent( "events/mp5.sc", EV_FireMP5 );
gEngfuncs.pfnHookEvent( "events/m14.sc", EV_FireM14 );

So, das wars! :)
Jetzt sollte es klappen, ich geh mal davon aus, das du für deine Waffe nen neuen Bullet Typ hast, sonst mußte das noch nen bischen ändern! =)
Wenn noch was nicht stimmt, dann sags einfach! hehe

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
005
10.07.2001, 21:51
Hanky



hey..das weiss ich auch!!

ABER was du da nu gepostet hast: 1 Schussmodus!

Angenommen du hast eine Waffe mir Schalldämpfer! Dann ist die animation des Schusses eine andere (M14Fire1_SD z.B.) und die Lautstärke ist anders!

Siehe CS!

Thema CS: die haben für die Waffe nur eine .cs datei!

Wie bekommt der client nu mit, ob die 2te Schusstaste gedrückt worden ist..?? (Schalldämpfer)

--

hankYs Page

zum Seitenanfang zum Seitenende Profil || Suche
006
10.07.2001, 21:53
Hanky



Uh..falls meine Antwort weiter oben das etwas unfreundlich klingt..sorry @Retro

--

hankYs Page

zum Seitenanfang zum Seitenende Profil || Suche
007
10.07.2001, 23:18
Retro



Nene, schon ok, wollte nur helfen, wußte nicht genau was du gemeint hattest.

Aber dabei kann ich dir leider nicht helfen! :-\

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
008
11.07.2001, 08:36
-DiKoMe-



Mhhhh, man könnte durch ne zusätzliche message den Befehl geben das eine andere Funktion über die .sc Datei abgespielt wird, mhhh, find ich aber bissel umständlich, naja, es könnte auch sein...nein doch nicht.
Also um ehrlich zu sein, habe ich keine ahnung, aber intressiert mich auch nicht, ich nehm dann halt 2 .sc's.

--

Lebensweisheit: *g*
Wieviel Energie steckt in einem Pfennig?
E=2g*(300.000km/s)^2=1,8*10^14j
Also ca. 180 Billiarden j, damit könnte man Berlin 1 Jahr mit Strom versorgen :)

zum Seitenanfang zum Seitenende Profil || Suche
009
11.07.2001, 14:32
Hanky



Eine kleine, umständliche Idee habe ich auch!!

Zwar:

Wie in der player.cpp die ganzen Messages weitergeschickt werden, an den Client, da könnte man ja 1 weitere verschicken: gmsgInAttack2

oder sowas in der Richtung!

In dem Waffencode dann irgendwo sowas wie
m_pPlayer->gmsgInAttack2 = 1;
in einer if Schleife, ob die 2te Taste gedrückt worden ist..

Nur wie man das nu in der client wieder abliest usw...ich glaube das macht keinen Spass..auch wennes nicht gerade schlecht wäre!

--

hankYs Page

zum Seitenanfang zum Seitenende Profil || Suche
010
12.07.2001, 00:18
Killing Me Softly



geht alles viel einfacher *g*

ein Event wird auf der serverseite bekanntlich durch

PLAYBACK_EVENT( 0, m_pPlayer->edict(), m_usEvent );

ausgelöst. Hierbei handelt es sich aber um die Kurzform. Wenn man sich die Definition von PLAYBACK_EVENT anschaut findet man folgendes:

#define PLAYBACK_EVENT( flags, who, index ) PLAYBACK_EVENT_FULL( flags, who, index, 0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 0, 0, 0, 0 );

d.h. es werden also jede Menge weiterer Parameter mit übergeben.

Die genaue Definition der Parameter lautet:

(int flags, const edict_t *pInvoker, unsigned short eventindex,
float delay, float *origin, float *angles,
float fparam1, float fparam2,
int iparam1, int iparam2, int bparam1, int bparam2 )

Interessant hierbei ist 'float delay' (ja, man kann Events verzögert auslösen *g*) und flags, fparam1, fparam2, iparam1, iparam2, bparam1 und bparam2.

Interessant deswegen, weil diese dem Coder zum einen zur freien Verfügung stehen und zweitens diese in der 'struct event_args_t' auf dem Client plötzlich wieder auftauchen. Ein Zeiger auf ein 'struct event_args_t' wird
bekanntlich bei jeder Event-Funktion mit übergeben.

Wer sich ein Beispiel anschauen möchte, dem empfehle ich die gauss.cpp (einfach nach PLAYBACK_EVENT_FULL suchen) anzuschauen und parallel dazu die entsprechende Event-Funktion (EV_FireGauss() ) in ev_hldm.cpp. Dort findet man nämlich die Zeilen

float flDamage = args->fparam1;
int primaryfire = args->bparam1;

--

Der Horizont vieler Menschen ist ein Kreis mit Radius Null - und das nennen sie ihren Standpunkt.

zum Seitenanfang zum Seitenende Profil || Suche
011
12.07.2001, 08:43
Hanky



jo, cool!

Danke!!

--

hankYs Page

zum Seitenanfang zum Seitenende Profil || Suche