Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
23.10.2001, 19:22
thinktank



Wie kann ich eine Think-Funktion Client-Side bzw. in einem Event machen ?
Ich will nämlich ein Feuerball machen und den Schweif per Event machen, und der muss ja selbstständig Clientside gezeichnet werden sonst machts ja keinen Sinn.

--

zum Seitenanfang zum Seitenende Profil || Suche
001
25.10.2001, 15:57
thinktank



Meine Posts sind immer so kompliziert ;D ............
Niemand antwortet ............. :)

--

zum Seitenanfang zum Seitenende Profil || Suche
002
25.10.2001, 16:02
bbjoker



Wieso willst du das so schwer lösen?
Was du machen willst ist einen Raketenwerfer ... nur das die Rakete nen Ball ist (musst nur Model ändern) und das der Weiße schweif Rot ist!

ALso einfach den Code vom RPG kopieren nen paar Variablen erzeugen und fertig! Ganz simple!

CU!

--

zum Seitenanfang zum Seitenende Profil || Suche
003
25.10.2001, 16:03
bbjoker



PS: in diesem Froum dauert es immer nen bischen länger bis einer Antwortet ... is doch aber OK!

--

zum Seitenanfang zum Seitenende Profil || Suche
004
26.10.2001, 20:48
thinktank



Ja , aber so sieht doch kein Feuerball aus ;)

--

zum Seitenanfang zum Seitenende Profil || Suche
005
26.10.2001, 22:15
EliteCounter



er will glaub ich das haben was kommt wenn man den scondary firemode der egon passiert. Das ding an der wand

--

www.codingplanet.de
www.itn-clan.de.vu

EliteCounter@gmx.de <---TUTORIALS SCHICKEN,WEGEN MEGA TUTORIAL PACKET!!!!(es können auch alte OpenSources sein, eben alls was ihr habt!!!!)

Was wäre wenn???

zum Seitenanfang zum Seitenende Profil || Suche
006
26.10.2001, 22:15
EliteCounter



lass mich mal raten, du machstn DBZ mod.
Ich hassse DBZ!! (nichtpersönlichanalleDBZfansgemeint!*

--

www.codingplanet.de
www.itn-clan.de.vu

EliteCounter@gmx.de <---TUTORIALS SCHICKEN,WEGEN MEGA TUTORIAL PACKET!!!!(es können auch alte OpenSources sein, eben alls was ihr habt!!!!)

Was wäre wenn???

zum Seitenanfang zum Seitenende Profil || Suche
007
27.10.2001, 16:45
thinktank



keine Ahnung, was du mit DBZ meinst ;) , vielleicht die deutsche Bäcker Zeitung ? ( http://www.dbz-verlag.de/ ) :D

--

zum Seitenanfang zum Seitenende Profil || Suche
008
27.10.2001, 16:53
bbjoker



Na aber nen Feuerball ist doch ne "Rakete" nen anderes Model und fertig! Die waffe muss natürlich auch weg ... aber das müsste funzen!

--

zum Seitenanfang zum Seitenende Profil || Suche
009
29.10.2001, 08:42
thinktank



Ja natürlich funzt das, aber ich würde halt gerne ein Schweif haben, ich hab schon einen gemacht, aber serverside und das ist nicht soo toll ;).
Vielleicht krieg ich ein Bild ....

--

zum Seitenanfang zum Seitenende Profil || Suche
010
29.10.2001, 19:51
R2-D2



mach deinen schweif mit der TE_BEAMFOLLOW message...weiss gar nich, wie dus sonst machen solltest

--

®2-D2
Believe in Retrieve :)

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

zum Seitenanfang zum Seitenende Profil || Suche
011
30.10.2001, 19:03
thinktank



hrmpf ! ;) TE_BEAMFOLLOW ist doch der Schweif von der Rakete , da kommt was nicht so tolles raus ;).
So siehts auf Serverside gecodet aus :

--

zum Seitenanfang zum Seitenende Profil || Suche
012
30.10.2001, 19:13
TheTinySteini



/me guckt mal in die Trickkiste...

/me holt dieses l33te Stückchen Code hervor:

Quellcode:
//============================================================
// TTT: a few functions I use for testing client-side effects
// bound to spritetest.sc
//============================================================


void SpTestHitCB( TEMPENTITY *pTemp, pmtrace_t *pTrace )
{
gEngfuncs.Con_Printf("Sprite collision, deleting\n");
pTemp->die = 0.0;

if(pTemp->entity.baseline.iuser1)
{
((TEMPENTITY *)pTemp->entity.baseline.iuser1)->die = 0.0;
gEngfuncs.Con_Printf("Deleted child sprite\n");
}
}

void SpTestCB( TEMPENTITY *pTemp, float flFrameTime, float flClientTime )
{
float s, c, distance;
vec3_t forward, right, up;

for( int i = 0; i < 3; i++ )
pTemp->entity.baseline.vuser1[ i ] += pTemp->entity.baseline.origin[ i ] * flFrameTime;

AngleVectors( pTemp->entity.angles, forward, right, up );

distance = (pTemp->entity.baseline.vuser1 - pTemp->entity.baseline.vuser2).Length();

s = sin( (distance + 360 * pTemp->entity.baseline.fuser1) / 50 );
c = cos( (distance + 360 * pTemp->entity.baseline.fuser1) / 50 );
pTemp->entity.origin = pTemp->entity.baseline.vuser1 + s * up * 40 + c * right * 40;

int m_iBeam = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/smoke.spr" );

gEngfuncs.pEfxAPI->R_BeamPoints(
pTemp->entity.origin,
pTemp->entity.prevstate.origin,
m_iBeam,
0.2,
5.0,
0.5,
64.0,
0.0,
0,
0.0,
0.8/255,
0.9/255,
0.1/255
);

if( pTemp->die > 0.0 )
pTemp->die = flClientTime + 0.1; // higher die time, entity gets killed through collision detection
}

void EV_SpriteTest( event_args_t *args )
{
int idx;
int m_iGlow;
vec3_t origin;
vec3_t angles;
vec3_t velocity;
vec3_t up, forward, right;

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

AngleVectors( angles, forward, right, up );

gEngfuncs.Con_Printf("Forward %4.2f %4.2f %4.2f; right: %4.2f %4.2f %4.2f\n", forward.x, forward.y, forward.z, right.x, right.y, right.z );

m_iGlow = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/hotglow.spr" );

TEMPENTITY *pTemp = gEngfuncs.pEfxAPI->R_TempSprite(
origin,
forward * 300,
0.4,
m_iGlow,
kRenderTransAdd,
kRenderFxNoDissipation,
0.5,
8.0,
FTENT_COLLIDEWORLD | FTENT_CLIENTCUSTOM
);

pTemp->entity.angles = angles;
pTemp->entity.curstate.renderamt = 192;
pTemp->clientIndex = idx; // don't hit player that created this sprite
pTemp->callback = SpTestCB; // callback that makes spiral effect
pTemp->entity.baseline.vuser1 = pTemp->entity.baseline.vuser2 = origin;
pTemp->entity.baseline.fuser1 = 0.5;

TEMPENTITY *pTemp2 = gEngfuncs.pEfxAPI->R_TempSprite(
origin,
forward * 300,
0.4,
m_iGlow,
kRenderTransAdd,
kRenderFxNoDissipation,
0.5,
8.0,
FTENT_COLLIDEWORLD | FTENT_CLIENTCUSTOM
);

pTemp2->entity.angles = angles; // explicitly set angles
pTemp2->entity.curstate.renderamt = 192;
pTemp2->clientIndex = idx; // don't hit player that created this sprite
pTemp2->hitcallback = SpTestHitCB; // callback when it hits something
pTemp2->callback = SpTestCB; // callback that makes spiral effect
pTemp2->entity.baseline.vuser1 = pTemp2->entity.baseline.vuser2 = origin;
pTemp2->entity.baseline.fuser1 = 0.0;
pTemp2->entity.baseline.iuser1 = (int)pTemp;
}

Da, sollte dir doch einiges an Hilfe bieten. Credits wären allerdings net schlecht =)

[Editiert wegen Inkompatibilität zum ThWboard Code]

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy


Dieser Beitrag wurde am 30.10.2001 um 19:15 von TheTinySteini bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
013
30.10.2001, 22:20
thinktank



Das ,was ich suche, scheint dieses pTemp->callback zu sein. Was ist ein Callback ?

--


Dieser Beitrag wurde am 30.10.2001 um 22:23 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
014
30.10.2001, 23:47
m0rgu3



Das ist ein Funktion die du als Parameter übergibst und dann Quasi von der aufgerufenen Funktion aufgerufen wird... Check?!? *g*

Bsp: (also nur schematisch)

void callback()
{
Bla bla bla
}

void blub (CallBackProc cc);
{
bla bla bla
cc(); //Da wird dann die Callback von oben aufgerufen
//Oder was du in die Parameter von blub rein hast
bla bla bla
}

Hauptprogramm oder so:
{
bla bla bla
blub ( callback ); //Hier überibst du die _FUNCTION_ callback als Parameter...
bla bla bla
}

Verstanden *gg*

Greetz

--

Man brauchte drei C64 um zum Mond zu fliegen. Win2k braucht mindestens einen PII 350. Irgendwas stimmt doch da nicht!


Dieser Beitrag wurde am 30.10.2001 um 23:47 von m0rgu3 bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
015
31.10.2001, 11:05
thinktank



ja , danke :). Nur wann wird die übergebene Funktion aufgerufen ? pTemp->hitcallback ist ja klar, aber wann wird pTemp->callback aufgerufen ?
Und was ist flFrameTime ?

--

zum Seitenanfang zum Seitenende Profil || Suche
016
31.10.2001, 11:51
TheTinySteini



pTemp->callback wird afaik jedes Frame aufgerufen, vielleicht aber auch nur alle 0.1 Sekunden, bin mir nicht mehr ganz sicher.
flFrameTime ist die Zeit, die seit dem letzten Frame vergangen ist, bzw. seit dem letzten Aufruf des Callbacks.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
017
31.10.2001, 13:46
thinktank



Und wie kann ich TEMPENTITY *pTemp der Funktion SpTestHitCB übergeben ?
Global machen ?

--

zum Seitenanfang zum Seitenende Profil || Suche
018
31.10.2001, 17:02
thinktank



Habs beim Compilen gecheckt ;) .......

--

zum Seitenanfang zum Seitenende Profil || Suche
019
03.11.2001, 20:58
thinktank



Ok habs jetzt so halb :
Quellcode:
void EV_FireFireball(struct event_args_s *args)
{
vec3_t origin;
vec3_t angles;
vec3_t VecSrc;
vec3_t forward, right, up;

VectorCopy(args->origin, origin);
VectorCopy(args->angles, angles);

AngleVectors(angles, forward , right, up);

VecSrc = origin + forward * 16;  // view offset is missing

int m_iGlow = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/hotglow.spr" );

TEMPENTITY *pTemp = gEngfuncs.pEfxAPI->R_TempSprite(
VecSrc,
forward * 800, // same velocity as the fireball
0.4,
m_iGlow,
kRenderTransAdd,
kRenderFxNoDissipation,
0.5,
8.0,
FTENT_COLLIDEWORLD | FTENT_CLIENTCUSTOM
);

pTemp->callback = EV_DrawFireballSprites;
pTemp->hitcallback = EV_FireballHit;
flNextDraw = gEngfuncs.GetClientTime() + 0.1;

pTemp->entity.curstate.vuser1 = forward;
pTemp->entity.curstate.vuser2 = VecSrc;

}

void EV_DrawFireballSprites(TEMPENTITY *pTemp, float flFrameTime, float flClientTime)
{
int m_iSprite = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/xfireball3.spr" );

vec3_t origin(pTemp->x,pTemp->y,pTemp->z);

TEMPENTITY *pTemp2 = gEngfuncs.pEfxAPI->R_TempSprite(
origin,
Vector(0,0,0),
0.4,
m_iSprite,
kRenderTransAdd,
kRenderFxNoDissipation,
0.5,
8.0,
FTENT_SPRANIMATELOOP
);

if (pTemp->die > 0.0)
pTemp->die = flClientTime + 1.0; // dies, when hit sth.
}

void EV_FireballHit(TEMPENTITY *pTemp, pmtrace_t *pTrace)
{
pTemp->die = 0.0;
}

Nur jetzt wird nur das "Hotglow"-Sprite gezeichnet, das sozusagen das Führungssprite und somit eine Art Kopie des Feuerballs darstellt. Also der eigenliche Schweif wird nicht gezeichnet.

--


Dieser Beitrag wurde am 03.11.2001 um 21:05 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
020
05.11.2001, 17:48
thinktank



ähmmmm flNextDraw ist nur für Debug-Zwecke ;) ......

--

zum Seitenanfang zum Seitenende Profil || Suche
021
07.11.2001, 16:16
thinktank



Hallo ? :) (ja , ich muss wieder zugeben, dass ich ungeduldig bin :))

--

zum Seitenanfang zum Seitenende Profil || Suche
022
10.11.2001, 20:08
thinktank



*hochspamm*

--

zum Seitenanfang zum Seitenende Profil || Suche