Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
10.08.2001, 15:43
Bearcat



Ich hab mir die letzten paar (!) Wochen um die Ohren geschlagen, um es hinzugekommen, daß ich mit einer Waffe auf der zweiten Feuerfunktion einen Laserpointer bekomme. Bloß das sollte kein solch ein Laserpunkt sein, wie bei dem Rakwerfer, sonder es soll ein richtiger Strahl sein. Ich hab diverse Sachen ausprobiert und mein Prob war, daß sich entweder gar nichts zeigte, oder mein Strahl ständig auf einen bestimmten Punkt zeigte...


könnt ihr mir helfen?

--


Dieser Beitrag wurde am 10.08.2001 um 15:44 von Bearcat bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
10.08.2001, 16:34
TheTinySteini



Whoops, sieht nicht gut aus :|

Aber kannste nicht vielleicht mal deinen Code hier posten, damit wir dir dort bei der Fehlersuche helfen können? Weil so isses ziemlich schlecht zu raten, woran es liegen könnte. Sehr wahrscheinlich ist aber, dass du Ortsvektoren mit Richtungsvektoren verwechselt hast (kann man im Code nicht direkt unterscheiden, is beides der gleiche Typ, aber sie werden verschieden gebraucht). Sprich, statt dass HL einen Punkt nimmt, der 100 Einheiten weiter links und 50 Einheiten geradeaus ist, hat HL dann einen Punkt genommen, der die Koordinaten (100|50) hat. Gut, die Koordinaten bestehen aus 3 Zahlen, is ja 3D, aber ich denke du weißt, was ich meine.

--

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

zum Seitenanfang zum Seitenende Profil || Suche
002
10.08.2001, 16:43
Bearcat



ok hier kommt der Code:

Zitat:

void CMP5::SecondaryAttack( void )
{
// Startfire();
/* UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );
Vector vecSrc = m_pPlayer->GetGunPosition( );
Vector vecAiming = gpGlobals->v_forward;

TraceResult tr;

UTIL_TraceLine( vecSrc, vecSrc + vecAiming * 128, dont_ignore_monsters, ENT( m_pPlayer->pev ), &tr );
*/

// CreateSpot();

CreateEffect();
//MakeBeam();
/* Vector vecStart = m_pPlayer->GetGunPosition( );
Vector vecEnd = gpGlobals->v_forward;
//Hier kommt Code rein um vecStart und vecEnd irgendwelchen sinnvollen Werten zuzuweisen

MESSAGE_BEGIN(MSG_PVS, SVC_TEMPENTITY, vecStart);
WRITE_BYTE(TE_LIGHTNING);
WRITE_COORD(vecStart.x);
WRITE_COORD(vecStart.y);
WRITE_COORD(vecStart.z);
WRITE_COORD(vecEnd.x);
WRITE_COORD(vecEnd.y);
WRITE_COORD(vecEnd.z);
WRITE_BYTE(10); // der beam besteht 1 Sekunde lang
WRITE_BYTE(10); // ist eine Einheit dick
WRITE_BYTE(0); // und sollte eigentlich ganz gerade sein
WRITE_SHORT(g_iLaser); // damit die Engine weiß, was sie für ein Sprite verwenden soll
MESSAGE_END();
*/

/* // don't fire underwater
if (m_pPlayer->pev->waterlevel == 3)
{
PlayEmptySound( );
m_flNextPrimaryAttack = gpGlobals->time + 0.15;
return;
}

if (m_pPlayer->m_rgAmmo[m_iSecondaryAmmoType] == 0)
{
PlayEmptySound( );
return;
}

m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH;

m_pPlayer->m_iExtraSoundTypes = bits_SOUND_DANGER;
m_pPlayer->m_flStopExtraSoundTime = gpGlobals->time + 0.2;

m_pPlayer->m_rgAmmo[m_iSecondaryAmmoType]--;

SendWeaponAnim( MP5_LAUNCH );

// player "shoot" animation
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );

if ( RANDOM_LONG(0,1) )
{
// play this sound through BODY channel so we can hear it if player didn't stop firing MP3
EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/glauncher.wav", 0.8, ATTN_NORM);
}
else
{
// play this sound through BODY channel so we can hear it if player didn't stop firing MP3
EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/glauncher2.wav", 0.8, ATTN_NORM);
}

UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );

// we don't add in player velocity anymore.
CGrenade::ShootContact( m_pPlayer->pev,
m_pPlayer->pev->origin + m_pPlayer->pev->view_ofs + gpGlobals->v_forward * 16,
gpGlobals->v_forward * 800 );

m_flNextPrimaryAttack = gpGlobals->time + 1;
m_flNextSecondaryAttack = gpGlobals->time + 1;
m_flTimeWeaponIdle = gpGlobals->time + 5;// idle pretty soon after shooting.

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

m_pPlayer->pev->punchangle.x -= 10;*/
}

void CMP5::Startfire( void )
{
UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );
Vector vecAiming = gpGlobals->v_forward;
Vector vecSrc = m_pPlayer->GetGunPosition( );

Fire ( vecSrc, vecAiming );
}
void CMP5::Fire( Vector vecOrigSrc, Vector vecDir )
{
Vector vecSrc = vecOrigSrc;
Vector vecDest = vecSrc + vecDir * 8192;
edict_t *pentIgnore;
TraceResult tr, beam_tr;
}
void CMP5::CreateEffect( void )
{
DestroyEffect();

Vector vecAim = gpGlobals->v_forward;
Vector vecSrc = m_pPlayer->GetGunPosition( );

m_pBeam = CBeam::BeamCreate( LP_BEAM_SPRITE, 1 );
m_pBeam->PointsInit( vecSrc, vecAim ); /**/
m_pBeam->SetFlags( BEAM_FSINE );
m_pBeam->SetEndAttachment( 1 );
m_pBeam->pev->spawnflags = SF_BEAM_TEMPORARY; // Flag these to be destroyed on save/restore or level transition
}
void CMP5::DestroyEffect( void )
{
if ( m_pBeam )
{
UTIL_Remove( m_pBeam );
m_pBeam = NULL;
}
}


ich hab hier den kompletten Quellcode, den ich habe, reingeschrieben... es sind noch zwei verschiedene Wege, von denen der mit dem Fire nichts zeigt und der mit dem Effect diesen kleinen Laser zeigt...

--


Dieser Beitrag wurde am 10.08.2001 um 16:45 von Bearcat bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
10.08.2001, 17:48
The_Overmind



Hmmmmmm
ich glaub ich hab ne bessere Idee:
füg in die MP5 ne Neue Funktion ein die UpdateLaser() heißt.
Die von jeder der Funktionen PrimaryAttack|SecondaryAttack|WeaponIdle in deiner Mp5 *ähnlich wie beim Spo* aufgerufen wird *UpdateLaser();*
Die Zeiten bis auf WeaponIdle setzt du auf 0.1, auch in der weaponidle selbst
damit die Weaponidle aber dann anständig aussieht musst du solche SendWeaponAnims löschen *die sehen dann so abgehackt aus*
in der UpdateLaser fügst du jetzt eine If Funktion *wenn Spot = dann dies das jenes*
in diese if Funktion rufst du ein Client-side event auf
in diesem Event machst du dann Trace zum Endpunkt des Laser und machst dort den Laser. Is a.) nicht serverseitig ;) und b.) machst du server-seitig nur die UpdateLaser Funktion und das is nur ein event.

Wenn du genauere Hilfe damit brauchst schick mir ne ICQ msg 38138527 :)

--


Dieser Beitrag wurde am 10.08.2001 um 18:06 von The_Overmind bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
11.08.2001, 13:08
TheTinySteini



Grmpf, das is Pfusch! =)

Mach dann lieber ein Event, das du einmal schickst, um den Laser anzuschalten, und dann wieder, um ihn abzuschalten (nicht vergessen, den Laser auch in der Holster() abzuschalten!). Das spart viel Netzwerktraffic.

--

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

zum Seitenanfang zum Seitenende Profil || Suche
005
11.08.2001, 14:00
The_Overmind



ginge auch
ich weiß nur nicht wie man Thinks in der Client.Dll verwendet *schulterzuck*

--

zum Seitenanfang zum Seitenende Profil || Suche
006
11.08.2001, 14:37
TheTinySteini



void DLLEXPORT HUD_CreateEntities( void )

^- da kann man sowas z.B. machen. Gibt noch andere Funktionen, aber das ist eine, die auch für sowas vorgesehen ist, afaik. 8-]

--

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

zum Seitenanfang zum Seitenende Profil || Suche
007
14.08.2001, 21:15
Bearcat



Sorry Leute, was ihr da sagt, sind so ziemlich alles böhmische Dörfer für
mich... bin kompletter Codenewbie...
Was meinst du denn mit Event? Gibt es irgendwo dafür ein Codebeispiel?

--

zum Seitenanfang zum Seitenende Profil || Suche
008
14.08.2001, 21:36
The_Overmind



Bearcat:
guck dir mal bei der client.dll die ev_hldm.cpp an.
Dort bei der Funktion EV_FireGauss *oder so* wird der Laser von der Gauss samt Reflektion und GlowBalls gemacht.
Für den Laser ist ne Funktion die gEngfuncs.pEfxAPI->R_BeamEnt *oder so* heißt. Damit machst den Laser. Guck dir am besten in Ruhe die EV_FireGauss Funktion an, dann wirst du schon lernen wie man so ein Event macht.

Und dann versuch den Laserpointer aus der RPG mit dem Event zu verknüpfen *anstatt den Laserpointer mit TraceLine zeichnen bzw. updaten einfach Event aufrufen*. Damit solltest du doch schon so langsam zum Ziel kommen ;D

--

zum Seitenanfang zum Seitenende Profil || Suche