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



moin moin

also ich hab mich jetzt so einigermaßen ins sdk2.2 eingearbeitet ... so, nun wollt ich für meine crowbar als secondary funktion bolt verschiessen lassn, geht auch alles 1a (auch das client-side geht - aba nich richtig, dazu später)

nur, werden plötzlich 2bolts abgefeuert! einer server-side (der geht perfekt) und einer (so vermute ich) client-side (geht nich perfekt) -> ich will aba nur einen ;) , ausserdem macht der zweite keinen schaden, keine explosion ...

hier mal der client.dll code:

void EV_BallCallback ( struct tempent_s *ent, float frametime, float currenttime )
{
ent->entity.origin = ent->entity.baseline.vuser1;
ent->entity.angles = ent->entity.baseline.vuser2;
}

void EV_Flameswd2( event_args_t *args )
{
vec3_t vecSrc, vecEnd;
vec3_t up, right, forward;
pmtrace_t tr;

int idx;
vec3_t origin;
vec3_t angles;
vec3_t velocity;

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

VectorCopy( args->velocity, velocity );

AngleVectors( angles, forward, right, up );

EV_GetGunPosition( args, vecSrc, origin );

VectorMA( vecSrc, 8192, forward, vecEnd );

gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/xbow_fire1.wav", 1, ATTN_NORM, 0, 93 + gEngfuncs.pfnRandomLong(0,0xF) );
//gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_ITEM, "weapons/xbow_reload1.wav", gEngfuncs.pfnRandomFloat(0.95, 1.0), ATTN_NORM, 0, 93 + gEngfuncs.pfnRandomLong(0,0xF) );

if ( EV_IsLocal( idx ) )
{
if ( args->iparam1 )
gEngfuncs.pEventAPI->EV_WeaponAnimation( FLAMESWD_ATTACK1HIT, 1 );
else if ( args->iparam2 )
gEngfuncs.pEventAPI->EV_WeaponAnimation( FLAMESWD_ATTACK1HIT, 1 );
}

// Store off the old count
gEngfuncs.pEventAPI->EV_PushPMStates();

// Now add in all of the players.
gEngfuncs.pEventAPI->EV_SetSolidPlayers ( idx - 1 );
gEngfuncs.pEventAPI->EV_SetTraceHull( 2 );
gEngfuncs.pEventAPI->EV_PlayerTrace( vecSrc, vecEnd, PM_STUDIO_BOX, -1, &tr );

//We hit something
if ( tr.fraction < 1.0 )
{
physent_t *pe = gEngfuncs.pEventAPI->EV_GetPhysent( tr.ent );

//Not the world, let's assume we hit something organic ( dog, cat, uncle joe, etc ).
if ( pe->solid != SOLID_BSP )
{
switch( gEngfuncs.pfnRandomLong(0,1) )
{
case 0:
gEngfuncs.pEventAPI->EV_PlaySound( idx, tr.endpos, CHAN_BODY, "weapons/xbow_hitbod1.wav", 1, ATTN_NORM, 0, PITCH_NORM ); break;
case 1:
gEngfuncs.pEventAPI->EV_PlaySound( idx, tr.endpos, CHAN_BODY, "weapons/xbow_hitbod2.wav", 1, ATTN_NORM, 0, PITCH_NORM ); break;
}
}
//Stick to world but don't stick to glass, it might break and leave the ball floating. It can still stick to other non-transparent breakables though.
else if ( pe->rendermode == kRenderNormal )
{
gEngfuncs.pEventAPI->EV_PlaySound( 0, tr.endpos, CHAN_BODY, "weapons/xbow_hit1.wav", gEngfuncs.pfnRandomFloat(0.95, 1.0), ATTN_NORM, 0, PITCH_NORM );

//Not underwater, do some sparks...
if ( gEngfuncs.PM_PointContents( tr.endpos, NULL ) != CONTENTS_WATER)
gEngfuncs.pEfxAPI->R_SparkShower( tr.endpos );

vec3_t vBallAngles;
int iModelIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( "models/crossbow_bolt.mdl" );

VectorAngles( forward, vBallAngles );

TEMPENTITY *ball = gEngfuncs.pEfxAPI->R_TempModel( tr.endpos - forward * 10, Vector( 0, 0, 0), vBallAngles , 5, iModelIndex, TE_BOUNCE_NULL );

if ( ball )
{
ball->flags |= ( FTENT_CLIENTCUSTOM ); //So it calls the callback function.
ball->entity.baseline.vuser1 = tr.endpos - forward * 10; // Pull out a little bit
ball->entity.baseline.vuser2 = vBallAngles; //Look forward!
ball->callback = EV_BallCallback; //So we can set the angles and origin back. (Stick the ball to the wall)
}
}
}

gEngfuncs.pEventAPI->EV_PopPMStates();
}

ich schätze, das hier der zweite bolt erstellt wird:
if ( ball )
{
ball->flags |= ( FTENT_CLIENTCUSTOM ); //So it calls the callback function.
ball->entity.baseline.vuser1 = tr.endpos - forward * 10; // Pull out a little bit
ball->entity.baseline.vuser2 = vBallAngles; //Look forward!
ball->callback = EV_BallCallback; //So we can set the angles and origin back. (Stick the ball to the wall)
}

thx

--

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

zum Seitenanfang zum Seitenende Profil || Suche
001
05.04.2002, 14:21
fS|eixid



Könntest du vielleicht mir mal deine crossbow.cpp schicken?
Weil ich glaube es liegt nich am sprite oder so

sondern an deinem rechner(Hatte mein freund auch mal [naja sowas ähnliches] )Neue Grafik treiber helfen :-)

--

Project leader at www.future-strike.de

zum Seitenanfang zum Seitenende Profil || Suche
002
05.04.2002, 14:25
Exec



ne, das sieht nich nach nem trieber-prob aus ;) da fleigen definitiv 2bolts, die auch shcön in der wand stecken bleiben ;) -> nene nix da

--

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

zum Seitenanfang zum Seitenende Profil || Suche
003
05.04.2002, 14:29
fS|eixid



naja egal ^^

mhm vielleicht rechnet dein compiler falsch?-gg-
mit was compilstn?O_o

--

Project leader at www.future-strike.de

zum Seitenanfang zum Seitenende Profil || Suche
004
05.04.2002, 14:32
Exec



na mit msvc++ - das is ein code fehler, sonst nix! glaubs mir ;)

--

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

zum Seitenanfang zum Seitenende Profil || Suche
005
05.04.2002, 14:34
fS|eixid



Ach scheisse -g-
Na du hasst warscheinlich bisschen mehr Ahnung als ich :D

--

Project leader at www.future-strike.de

zum Seitenanfang zum Seitenende Profil || Suche
006
05.04.2002, 16:58
Exec



ja, das glaub ich auch ... es lag daran:

//We hit something
if ( tr.fraction < 1.0 )
{
physent_t *pe = gEngfuncs.pEventAPI->EV_GetPhysent( tr.ent );

//Not the world, let's assume we hit something organic ( dog, cat, uncle joe, etc ).
if ( pe->solid != SOLID_BSP )
{
switch( gEngfuncs.pfnRandomLong(0,1) )
{
case 0:
gEngfuncs.pEventAPI->EV_PlaySound( idx, tr.endpos, CHAN_BODY, "weapons/xbow_hitbod1.wav", 1, ATTN_NORM, 0, PITCH_NORM ); break;
case 1:
gEngfuncs.pEventAPI->EV_PlaySound( idx, tr.endpos, CHAN_BODY, "weapons/xbow_hitbod2.wav", 1, ATTN_NORM, 0, PITCH_NORM ); break;
}
}
//Stick to world but don't stick to glass, it might break and leave the ball floating. It can still stick to other non-transparent breakables though.
else if ( pe->rendermode == kRenderNormal )
{
gEngfuncs.pEventAPI->EV_PlaySound( 0, tr.endpos, CHAN_BODY, "weapons/xbow_hit1.wav", gEngfuncs.pfnRandomFloat(0.95, 1.0), ATTN_NORM, 0, PITCH_NORM );

//Not underwater, do some sparks...
if ( gEngfuncs.PM_PointContents( tr.endpos, NULL ) != CONTENTS_WATER)
gEngfuncs.pEfxAPI->R_SparkShower( tr.endpos );

vec3_t vBallAngles;
int iModelIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( "models/crossbow_bolt.mdl" );

VectorAngles( forward, vBallAngles );

TEMPENTITY *ball = gEngfuncs.pEfxAPI->R_TempModel( tr.endpos - forward * 10, Vector( 0, 0, 0), vBallAngles , 5, iModelIndex, TE_BOUNCE_NULL );

if ( ball )
{
ball->flags |= ( FTENT_CLIENTCUSTOM ); //So it calls the callback function.
ball->entity.baseline.vuser1 = tr.endpos - forward * 10; // Pull out a little bit
ball->entity.baseline.vuser2 = vBallAngles; //Look forward!
ball->callback = EV_BallCallback; //So we can set the angles and origin back. (Stick the ball to the wall)
}
}
}

so, nur dann bringt mir die waffen client-side mäßig gar nix .... (ich habs rausgenommen, da gehts)

--

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

zum Seitenanfang zum Seitenende Profil || Suche
007
05.04.2002, 22:30
Another1



logisch das da 2 fliegen, der trick von clientside krams is ja auch, das es auf der clientside gezeichnet wird (und auch so weit wie nötig berechnet) und der server nicht mehr ständig position etc. zum client schicken muss. Trotzdem muss der server aber auch noch irgendwie wissen, was da durch die gegend fliegt, das is dann aber unsichtbar und alles was es macht is kollidieren und schaden. Bei dir sind leider beide, client und serverside, sichtbar.

... p.s. bei länger in der luft fliegenden projektilen (, die evtl sogar noch abprallen) etc. kann es natürlich ohne syncronization zu blöden async-fehlern kommen (konkret: beim server is das projektil ganz knapp anner wand vorbei, beim client is es, durch kleinste 'unstimmigkeiten' zwischen server und client zum zeitpunkt des abschusses, knapp in die wand. Das is zwar nich spielentscheidend, macht die sache aber irgendwie unglaubwürdiger (vor allem wenn sowas häufiger passiert und auffällt.))

--

Another1

...relaxing..atm =)
... und Schweiz suckt!


Dieser Beitrag wurde am 05.04.2002 um 22:31 von Another1 bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche