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



Hi leute, ich habe mal probiert, das der HGrunt die Bolts des crossbow schießt (oder allgemein andere waffen wie egon oder guass oder crowbar). Doch ich habe ka, wie ich das machen soll.Bei CHGrunt::Shoot... steht Fire bullets(...), das ist in der combat.cpp irgendwie gemacht. jetzt sagt nicht, mach einfach das selbe mit dem bolt, und schreibe firebolt. Sowas nützt mir nichts. Ich habe es probiert, doch ich bin noch nicht so gut. Please help me.

--

SWCOOPFORCE-TEAM

NEUE HOMEPAGE/SCREENS: SWCOOPFORCE-MOD | Helft mit für Legalisierung!

zum Seitenanfang zum Seitenende Profil || Suche
001
26.08.2001, 16:41
TheTinySteini



Uh-oh, da haste dir aber nicht gerade was einfaches rausgesucht. Denn die Bolts werden auf eine ganz andere Art und Weise gemacht als normale Kugeln (also MP5, Schrotflinte etc). Denn im Gegensatz zu den Kugeln, die eigentlich bloß Illusion sind und nicht wirklich durch die Gegend fliegen (es sieht bloß so aus, in Wirklichkeit treffen die Schüsse sofort), macht sich der Crossbow als eigenes Entity auf die Reise. Das kann man natürlich auch den HGrunts beibringen, aber einfach isses nicht. Guck dir erstmal die Crossbow.cpp an und versuch zu verstehen, wie die Pfeile abgeschossen werden.

--

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

zum Seitenanfang zum Seitenende Profil || Suche
002
27.08.2001, 17:51
Metew



Ich verstehs nicht, Hallo bitte gebt mir tips

--

SWCOOPFORCE-TEAM

NEUE HOMEPAGE/SCREENS: SWCOOPFORCE-MOD | Helft mit für Legalisierung!

zum Seitenanfang zum Seitenende Profil || Suche
003
27.08.2001, 17:59
Retro



Tipps, ich glaube eher du meinst nen kompletten Code, oder?! >:|

Nen Tipp kannst haben, lass den Grunt erstmal andere Bullets schießen, und zwar über den FireBullets befehl.

--

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
27.08.2001, 18:11
Metew



Lustig Retro, danke für deine Hilfe.

Ich wollte wissen wie ich sowas am besten mache, ob ich ne neu cpp datei machen soll, oder ob ich dass alles in die hgrunt.cpp schreiben muss.
Da es ja leider keine coder gibt, die noch "frei" sind muss ich das selber machen, doch ohne Hilfe von euch gehts nicht (obwohl mir dieses Forum seit ein paar monaten kein Hilfe war, da es manchen leuten Spaß macht, anfänger mit tollem spam zu nerven) also gebt mir bitte ratschläge oder sagt wie ihr das Problem gelöst habt.

--

SWCOOPFORCE-TEAM

NEUE HOMEPAGE/SCREENS: SWCOOPFORCE-MOD | Helft mit für Legalisierung!

zum Seitenanfang zum Seitenende Profil || Suche
005
27.08.2001, 19:07
Killing Me Softly



was jetzt kommt ist ohne Gewähr, hab's also nicht getestet:
1. neue Header-Datei cbolt.h und dort die Klassendeklaration von CCrossbowBolt aus crossbow.cpp reinkopieren (und in crossbow.cpp auskommentieren)
2. #include "cbolt.h" sowohl in crossbow.cpp als auch in hgrunt.cpp einfügen
3. neue Funktion in hgrunt.cpp einfügen (Code ist weitestgehend von 'CCrossbow::FireSniperBolt()' bzw. 'CHGrunt::Shoot()' geklaut)

Quellcode:
void CHGrunt::FireSniperBolt(void)
{   if (m_hEnemy == NULL)
    {    return;
    }
  
    TraceResult tr;

   EMIT_SOUND_DYN(ENT(pev), CHAN_WEAPON, "weapons/xbow_fire1.wav", RANDOM_FLOAT(0.95, 1.0), ATTN_NORM, 0, 93 + RANDOM_LONG(0,0xF));

   EMIT_SOUND_DYN(ENT(pev), CHAN_ITEM, "weapons/xbow_reload1.wav", RANDOM_FLOAT(0.95, 1.0), ATTN_NORM, 0, 93 + RANDOM_LONG(0,0xF));

   Vector vecSrc = GetGunPosition( );
   Vector vecDir = ShootAtEnemy(vecSrc);

   UTIL_TraceLine(vecSrc, vecSrc + vecDir * 8192, dont_ignore_monsters, edict(), &tr);

   if ( tr.pHit->v.takedamage )
   {   switch( RANDOM_LONG(0,1) )
        {   case 0:   EMIT_SOUND( tr.pHit, CHAN_BODY, "weapons/xbow_hitbod1.wav", 1, ATTN_NORM); break;
case 1:   EMIT_SOUND( tr.pHit, CHAN_BODY, "weapons/xbow_hitbod2.wav", 1, ATTN_NORM); break;
        }

        ClearMultiDamage( );
        CBaseEntity::Instance(tr.pHit)->TraceAttack(pev, 120, vecDir, &tr, DMG_BULLET | DMG_NEVERGIB );
        ApplyMultiDamage( pev, pev );
   }
   else
   {
      // create a bolt
      CCrossbowBolt *pBolt = CCrossbowBolt::BoltCreate();
      pBolt->pev->origin = tr.vecEndPos - vecDir * 10;
      pBolt->pev->angles = UTIL_VecToAngles( vecDir );
      pBolt->pev->solid = SOLID_NOT;
      pBolt->SetTouch( NULL );
      pBolt->SetThink( SUB_Remove );
      EMIT_SOUND( pBolt->edict(), CHAN_WEAPON, "weapons/xbow_hit1.wav", RANDOM_FLOAT(0.95, 1.0), ATTN_NORM );

      if (UTIL_PointContents(tr.vecEndPos) != CONTENTS_WATER)
      {
            UTIL_Sparks( tr.vecEndPos );
      }

      if ( FClassnameIs( tr.pHit, "worldspawn" ) )
      {
            // let the bolt sit around for a while if it hit static architecture
pBolt->pev->nextthink = gpGlobals->time + 5.0;
      }
      else
      {
            pBolt->pev->nextthink = gpGlobals->time;
      }
   }

    Vector angDir = UTIL_VecToAngles( vecDir );
    SetBlending( 0, angDir.x );
}

Nicht vergessen die Funktion auch in der Klassendeklaration mit einzufügen.
4. Wie du jetzt hinkriegst, das HGrunt die Crossbow auch benutz, überlasse ich dir. Zu Testzwecken würde ich in CHGrunt::HandleAnimEvent(...) unter 'case HGRUNT_AE_BURST1:' einfach mal Shoot() durch FireSniperBolt() ersetzen.

Färtisch

--

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

zum Seitenanfang zum Seitenende Profil || Suche
006
27.08.2001, 19:13
Metew



Cool danke, probiers gleichmal. So ausführlich hättest du das gar nicht machen müsen, sonst sagen wieder gewisse Leute, dass man nicht alles vor die Nase gesetzt bekommen soll. THX

--

SWCOOPFORCE-TEAM

NEUE HOMEPAGE/SCREENS: SWCOOPFORCE-MOD | Helft mit für Legalisierung!

zum Seitenanfang zum Seitenende Profil || Suche
007
27.08.2001, 22:15
Metew



er schießt den bolt, man sieht ihn aber nicht??

--

SWCOOPFORCE-TEAM

NEUE HOMEPAGE/SCREENS: SWCOOPFORCE-MOD | Helft mit für Legalisierung!

zum Seitenanfang zum Seitenende Profil || Suche
008
27.08.2001, 22:39
TheTinySteini



Hm, sprich, wenn er auf dich zielt und schießt, dann biste tod, ja? Also der Bolt wurde abgeschossen?
Das Problem an der Sache ist: Man kann ihn nicht im Flug sehen, weil's nämlich die "Billigversion" des Crossbows ist, die Instant-Hit Version. Is halt einfacher, aber dafür sieht man den Bolt im Flug nicht. Aber du solltest ihn sehen, wenn er auf eine Wand trifft. Denn dort sollte er dann für genau 5 Sekunden steckenbleiben.

--

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

zum Seitenanfang zum Seitenende Profil || Suche
009
27.08.2001, 23:07
Andy_



Die Billig-version ist die Multplayer-Version... mit der Singleplayer solltes aber funktzen, also nimm doch mal FireBolt() statt FireSniperBolt() aus der crossbow.

Obwohl bei FireBolt du noch eingies an weiteren funktionen hinzufügen must...

--

42 Es gibt keinen Sinn des Lebens.


Dieser Beitrag wurde am 27.08.2001 um 23:09 von Andy bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
010
28.08.2001, 00:47
Metew



nein, Firebolt habe ich von Haus aus benutzt. Es total, du gehts um die Ecke, Tod. Mir ist es wichtig, da ich den bolt durch eine sprite eingetauscht, das will ich sehen. Sie stecken zwar in der wand (manchmal), aber wieso ist das die billig variante. Wie ist das den in der crossbow.cpp? Doch auch nicht anders, oder?

--

SWCOOPFORCE-TEAM

NEUE HOMEPAGE/SCREENS: SWCOOPFORCE-MOD | Helft mit für Legalisierung!

zum Seitenanfang zum Seitenende Profil || Suche
011
28.08.2001, 01:09
Andy_



Wenn du KillingMeSoftly's "Tut" vollkommen befolgt hast, dann hast du die FireSniperBolt Variante, nicht die FireBolt Variante... da gibts nen unterschied, nähmlich das fliege Model... billig Variante ist es nur, weil es für Multiplayer bestimmt ist, und durch den Wegfall der Fluganimation beträchtlich Traffic einspart. Wie gesagt... falls du es noch net gemacht hast, nim einfach FireBolt aus der crossbow.cpp, und editieredie unötigkeiten aus...

Oder hab ich dich doch falsch verstanden, und du hast tatsächlich FireBolt genommen, siehst es aber trotzdem nicht? Du hast ja ein Sprite genommen, sieht du nur das Sprite nicht, oder auch nicht alternativ das Model?

--

42 Es gibt keinen Sinn des Lebens.


Dieser Beitrag wurde am 28.08.2001 um 01:12 von Andy bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
012
28.08.2001, 13:24
Metew



//==================================================================
//Head-File: cbolt.h
//==================================================================
#define BOLT_AIR_VELOCITY 2000
#define BOLT_WATER_VELOCITY 1000

class CCrossbowBolt : public CBaseEntity
{
void Spawn( void );
void Precache( void );
int Classify ( void );
void EXPORT BubbleThink( void );
void EXPORT BoltTouch( CBaseEntity *pOther );
void EXPORT ExplodeThink( void );
float m_flPlayerSmokeTime;

int m_icool; // eine sprite, die dem pfeil folgt

public:
static CCrossbowBolt *BoltCreate( void );
};

____________________________________________________________________________
//=========================================================================
//hgrunt.cpp: firebolt
//=========================================================================

void CHGrunt::FireBolt(void)
{
if (m_hEnemy == NULL)
{
return;
}

TraceResult tr;

EMIT_SOUND_DYN(ENT(pev), CHAN_WEAPON, "weapons/Laser1.wav", ...usw

EMIT_SOUND_DYN(ENT(pev), CHAN_ITEM, "weapons/xbow_reload1.wav",.... usw
Vector vecSrc = GetGunPosition( );
Vector vecDir = ShootAtEnemy(vecSrc);

UTIL_TraceLine(vecSrc, vecSrc + vecDir * 8192, dont_ignore_monsters, edict(), &tr);

if ( tr.pHit->v.takedamage )
{ //switch( RANDOM_LONG(0,1) )
//{ case 0: EMIT_SOUND( tr.pHit, CHAN_BODY, "weapons/xbow_hitbod1.wav", 1, ATTN_NORM); break;
//case 1: EMIT_SOUND( tr.pHit, CHAN_BODY, "weapons/xbow_hitbod2.wav", 1, ATTN_NORM); break;
//}

ClearMultiDamage( );
CBaseEntity::Instance(tr.pHit)->TraceAttack(pev, 120, vecDir, &tr, DMG_BULLET | DMG_NEVERGIB );
ApplyMultiDamage( pev, pev );
}
else
{
// create a bolt
CCrossbowBolt *pBolt = CCrossbowBolt::BoltCreate();
pBolt->pev->origin = vecSrc;//tr.vecEndPos - vecDir * 10;
pBolt->pev->angles = UTIL_VecToAngles( vecDir );

pBolt->pev->velocity = vecDir * BOLT_AIR_VELOCITY;
pBolt->pev->speed = BOLT_AIR_VELOCITY;
pBolt->pev->solid = SOLID_NOT;
pBolt->SetTouch( NULL );
pBolt->SetThink( SUB_Remove );

pBolt->pev->avelocity.z = 10;
EMIT_SOUND( pBolt->edict(), CHAN_WEAPON, "weapons/xbow_hit1.wav", RANDOM_FLOAT(0.95, 1.0), ATTN_NORM );

if (UTIL_PointContents(tr.vecEndPos) != CONTENTS_WATER)
{
UTIL_Sparks( tr.vecEndPos );
}

{
pBolt->pev->nextthink = gpGlobals->time;
}
}

Vector angDir = UTIL_VecToAngles( vecDir );
SetBlending( 0, angDir.x );
}

Ich habe so gut wie alles geändert, das ging, hat aber nichts genütz, seht ihr den Fehler?

--

SWCOOPFORCE-TEAM

NEUE HOMEPAGE/SCREENS: SWCOOPFORCE-MOD | Helft mit für Legalisierung!

zum Seitenanfang zum Seitenende Profil || Suche
013
28.08.2001, 18:25
The_Overmind



Ja klar

geh ma in die crossbow.cpp und guck dir dort den Code vom Bolt an.
DAS is dann der Code vom fliegenden Bolt.

Was du da hast, is einfach nur ne TraceLine zur nächsten Wand/Gegner.
Wenn Gegner, dann macht der Bolt Schaden, wenn Wand wird an der Position mit dem gleichen Aufschlagwinkel ein Model vom Bolt hingepackt, das nach 5 secs verschwindet.

Du hast die gesamte Funktion FireSniperBolt einfach nur zu FireBolt umbenannt. Das kann dann auch nit funken.
Wie gesagt, guck mal in dei Crossbow.cpp und guck dir die Class CCrossbowBolt und deren Funktionen an.
Und dann guck dir den Code von der CCrossbow::FireBolt() an.

--

zum Seitenanfang zum Seitenende Profil || Suche
014
28.08.2001, 22:44
Metew



Verdammt, das kann doch nicht so schwierig sein, es geht nicht!

--

SWCOOPFORCE-TEAM

NEUE HOMEPAGE/SCREENS: SWCOOPFORCE-MOD | Helft mit für Legalisierung!

zum Seitenanfang zum Seitenende Profil || Suche
015
28.08.2001, 23:17
Killing Me Softly



Ist es eigentlich auch nicht. Versuch mal folgendes:

Quellcode:
void CHGrunt::FireBolt(void)
{
if (m_hEnemy == NULL)
{
return;
}

EMIT_SOUND_DYN(ENT(pev), CHAN_WEAPON, "weapons/Laser1.wav", ...usw

EMIT_SOUND_DYN(ENT(pev), CHAN_ITEM, "weapons/xbow_reload1.wav",.... usw

Vector vecSrc = GetGunPosition( );
Vector vecDir = ShootAtEnemy(vecSrc);
Vector angDir = UTIL_VecToAngles( vecDir );
Vector anglesAim = angDir;

anglesAim.x = -anglesAim.x;

CCrossbowBolt *pBolt = CCrossbowBolt::BoltCreate();
pBolt->pev->origin = vecSrc;
pBolt->pev->angles = anglesAim;
pBolt->pev->owner = edict();

pBolt->pev->velocity = vecDir * 2000;
pBolt->pev->speed = 2000;
pBolt->pev->avelocity.z = 10;

SetBlending( 0, angDir.x );
}

--

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

zum Seitenanfang zum Seitenende Profil || Suche
016
29.08.2001, 17:57
Metew



@ Killing Me Softly: du hast was gut bei mir

--

SWCOOPFORCE-TEAM

NEUE HOMEPAGE/SCREENS: SWCOOPFORCE-MOD | Helft mit für Legalisierung!

zum Seitenanfang zum Seitenende Profil || Suche