CommNews Forum Home  

Zurück   CnC Foren > Verschiedenes > Tech-Support / Tech-Talk

 
 
Themen-Optionen Thema bewerten Ansicht
  #1  
Alt 10-07-2003, 21:24
Benutzerbild von Antr4ks.de
Antr4ks.de Antr4ks.de ist offline
EVA Programmierer

 
Registriert seit: Jul 2001
Beiträge: 2.528
Antr4ks.de hat noch keine Bewertung oder ist auf 0
OL Nick: Antr4ks
An alle C++ Profis, habe Kompilierungsfehler

Hi Leutz, bin grad an nem Mod für Half-Life dran, hab n bisschen im Netz gesucht und echt gute Skripte gefunden. Da hab ich auch ein Skript wie man n Flammenwerfer erstellt. Nur leider hab ichs SDK 2.3 und das Skript wurde sicher für n früheres geschrieben, deshalb bekam ich auch n paar Fehler. Die meisten hab ich gefixt, doch jetzt ist noch ein Fehler da, den ich nicht wegkrieg.
Hier ist erstmal der Code vom Flammenwerfer:

Zitat:
flamethrower.cpp
---------------------------------------------------------------------------------

//zuerst mal die ganzen includes...
#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "weapons.h"
#include "nodes.h"
#include "player.h"
#include "gamerules.h"
#include "shake.h" //braucht man nur, wenn man den Spieler beim Auslösen durchschütteln will

//Hier fängt der spannende Teil an: Meine Flamme besteht aus (bis zu 15) "Feuerbällen". Die werden hier "gemacht".
class CFireBall : public CBaseEntity
{
void Spawn( void );
void Precache( void );
void EXPORT AnimateThink( void );
void EXPORT ExplodeTouch( CBaseEntity *pOther );

EHANDLE m_hOwner;

public:
static CFireBall *BallCreate( void );

};


LINK_ENTITY_TO_CLASS( fire_ball, CFireBall );

//Hiermit wird ein neuer Feuerball erstellt...
CFireBall *CFireBall::BallCreate( void )
{
CFireBall *pBall = GetClassPtr( (CFireBall *)NULL );
pBall->pev->classname = MAKE_STRING("fireball");
pBall->Spawn();

return pBall;
}


void CFireBall :: Spawn( void )
{
Precache( );
pev->movetype = MOVETYPE_FLY;
pev->solid = SOLID_BBOX;

SET_MODEL(ENT(pev), "sprites/xspark4.spr");
pev->rendermode = kRenderTransAdd;
pev->rendercolor.x = 255;
pev->rendercolor.y = 255;
pev->rendercolor.z = 255;
pev->renderamt = 255;
pev->scale = 0.2;

UTIL_SetSize(pev, Vector( 0, 0, 0), Vector(0, 0, 0));
UTIL_SetOrigin( pev, pev->origin );

SetThink( AnimateThink ); //Das wird jetzt immer wieder ausgeführt...

//Wenn man beim Auftreffen der Bälle irgendwas machen will (Sound, anderes Sprite),
//muss man die nächste Zeile wieder ent-kommentieren
// SetTouch( ExplodeTouch );

m_hOwner = Instance( pev->owner );
pev->dmgtime = gpGlobals->time; // keep track of when ball spawned
pev->nextthink = gpGlobals->time + 0.03;
}


void CFireBall :: Precache( void )
{
PRECACHE_MODEL("sprites/xspark4.spr"); //wir brauchen bloß ein Sprite
}


void CFireBall :: AnimateThink( void )
{
pev->nextthink = gpGlobals->time + 0.05; //das nächste Mal in einer zwanzigstel Sekunde ausführen

pev->frame = ((int)pev->frame + 1) % 11; //Das Sprite ein bischen animieren...
pev->scale = pev->scale * 1.5; //Ganz wichtig: hier wird das Sprite vergrößert
//Am Anfang ist es ganz klein und wird dann immer größer

entvars_t *pevOwner;
if ( pev->owner )
pevOwner = VARS( pev->owner );
else
pevOwner = NULL;
pev->owner = NULL; // can't traceline attack owner if this is set

RadiusDamage( pev->origin, pev, pevOwner, 1, pev->scale * 10, CLASS_NONE, DMG_BURN );
//Hier richten wir dann den Schaden an. Der Ausmaß orientiert sich auch ander Größe des Sprites
//Pro Feuerball ziehe ich hier einen Lebenspunkt ab. Bei 30 Feuerbällen pro Sekunde ist das nicht wenig. Man kann es natürlich noch erhöhen...

//Wenn das Sprite länger als eine halbe Sekunde lebt, wird es hier zerstört.
if (gpGlobals->time - pev->dmgtime > 0.5 || pev->velocity.Length() < 10)
{
SetTouch( NULL );
UTIL_Remove( this );
}
}


void CFireBall::ExplodeTouch( CBaseEntity *pOther )
{

//Wenn man das weiter oben aktiviert hat kann man hier seinen Code reinschreiben...

UTIL_Remove( this );
}



//Hier fängt endlich die eigentliche Waffe an!





LINK_ENTITY_TO_CLASS( weapon_flamethrower, CFlamethrower ); //Unsere Waffe heißt "weapon_flamethrower"

//Ich verwende das Model der Egon. Passt eigentlich ganz gut.
enum egon_e {
EGON_IDLE1 = 0,
EGON_FIDGET1,
EGON_ALTFIREON,
EGON_ALTFIRECYCLE,
EGON_ALTFIREOFF,
EGON_FIRE1,
EGON_FIRE2,
EGON_FIRE3,
EGON_FIRE4,
EGON_DRAW,
EGON_HOLSTER
};

int CFlamethrower::AddToPlayer( CBasePlayer *pPlayer ) //langweilig, aber nötig...
{
if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) )
{
MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev );
WRITE_BYTE( m_iId );
MESSAGE_END();
return TRUE;
}
return FALSE;
}

void CFlamethrower::Spawn( ) //Hier wird das Model zum Aufsammeln gespawned
{
Precache( );
m_iId = 16;
SET_MODEL(ENT(pev), "models/w_egon.mdl");
m_iClip = 20;
FallInit();
}

void CFlamethrower::Precache( void )
{
//Wir brauchen drei Models (wie für jede Waffe)
PRECACHE_MODEL("models/w_egon.mdl");
PRECACHE_MODEL("models/v_egon.mdl");
PRECACHE_MODEL("models/p_egon.mdl");

//Und zwei Sounds. Die müsst ihr schon selber machen.
PRECACHE_SOUND("weapons/flamethrower.wav"); //FLAMMENWERFER AKTIV
PRECACHE_SOUND("weapons/flameout.wav"); //FLAMME STIRBT

//Das ist ganz wichtig; wir brauchen für unsere Waffe Feuerbälle
UTIL_PrecacheOther( "fire_ball" );

}
int CFlamethrower::GetItemInfo(ItemInfo *p)
{
p->pszName = STRING(pev->classname);
p->pszAmmo1 = "uranium"; //wir verwenden die gleiche Muni wie für Egon und Gauss. Könnt ihr ändern.
p->iMaxAmmo1 = URANIUM_MAX_CARRY;
p->pszAmmo2 = NULL;
p->iMaxAmmo2 = -1;
p->iMaxClip = WEAPON_NOCLIP;
p->iSlot = 0; //Ich hab die Waffe direkt unter die Brechstange gesetzt. Wollt ihr sicher auch ändern.
p->iPosition = 1;
p->iId = m_iId = 16;
p->iFlags = 0;
p->iWeight = EGON_WEIGHT;
return 1;
}


BOOL CFlamethrower:eploy( void )
{
return DefaultDeploy( "models/v_egon.mdl", "models/p_egon.mdl", EGON_DRAW, "egon" );
}

void CFlamethrower::Holster( int skiplocal /* = 0 */ )
{
SendWeaponAnim( EGON_HOLSTER );
}

//Aha, jetzt wirds ernst.

void CFlamethrower::PrimaryAttack()
{
if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0)
return; //Pech, Ammo ist leer...

if (!Working) {m_flAmmoUseTime = gpGlobals->time;} //Wenn wir gerade erst anschalten -> zieh gleich mal ein Ammo ab!
m_flTimeWeaponIdle = gpGlobals->time + 0.1;
m_flNextPrimaryAttack = gpGlobals->time + 0.1; //sollte klar sein
SendWeaponAnim( EGON_FIRE4 ); //sucht euch eine aus..
EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_STATIC, "weapons/flamethrower.wav", 0.98, ATTN_NORM, 0, 125 ); //unser Sound läuft
Working = TRUE;

if ( gpGlobals->time >= m_flAmmoUseTime ) //Zieh ein Ammo ab, wenn die Zeit reif ist
{
UseAmmo( 1 );
m_flAmmoUseTime = gpGlobals->time + 0.2;
}

Vector anglesAim = m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle;
UTIL_MakeVectors( anglesAim );
anglesAim.x = -anglesAim.x;
Vector vecSrc = m_pPlayer->GetGunPosition( ) - gpGlobals->v_up * 2; //Wo wir sind..
Vector vecDir = gpGlobals->v_forward; // ..und wo wir hinwollen!

float delta = 0.06976; //8 Grad Abweichung..

//Jetzt werden drei Feuerbälle ertellt. Alle mit zufälliger Abweichung und Geschwindigkeit

vecDir = vecDir + Vector( RANDOM_FLOAT( -delta, delta ), RANDOM_FLOAT( -delta, delta ), RANDOM_FLOAT( -delta, delta ) );
CFireBall *pBall1 = CFireBall::BallCreate();
pBall1->pev->origin = vecSrc;
pBall1->pev->angles = anglesAim;
pBall1->pev->owner = m_pPlayer->edict();
pBall1->pev->velocity = vecDir * RANDOM_FLOAT( 400, 600 );

vecDir = vecDir + Vector( RANDOM_FLOAT( -delta, delta ), RANDOM_FLOAT( -delta, delta ), RANDOM_FLOAT( -delta, delta ) );
CFireBall *pBall2 = CFireBall::BallCreate();
pBall2->pev->origin = vecSrc;
pBall2->pev->angles = anglesAim;
pBall2->pev->owner = m_pPlayer->edict();
pBall2->pev->velocity = vecDir * RANDOM_FLOAT( 400, 600 );

vecDir = vecDir + Vector( RANDOM_FLOAT( -delta, delta ), RANDOM_FLOAT( -delta, delta ), RANDOM_FLOAT( -delta, delta ) );
CFireBall *pBall3 = CFireBall::BallCreate();
pBall3->pev->origin = vecSrc;
pBall3->pev->angles = anglesAim;
pBall3->pev->owner = m_pPlayer->edict();
pBall3->pev->velocity = vecDir * RANDOM_FLOAT( 400, 600 );
}


//der WeaponIdle wird etwas Zweckentfremdet. Hier stellen wir fest, wenn der Spieler aufhört zu feuern.
void CFlamethrower::WeaponIdle()
{
if (m_pPlayer->pev->button & IN_ATTACK)
return;

if (Working == TRUE)
{
EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/flameout.wav", 0.8, ATTN_NORM);
Working = FALSE;
SendWeaponAnim( EGON_FIDGET1 ); //Dreh am Hebel des Flammenwerfers
}
m_flTimeWeaponIdle = gpGlobals->time + 0.1;
return;
}




So, wenn ich jetzt kompielieren will, zeigt der Compiler (Visual c++ 6.0) den Fehler

Zitat:
--------------------Konfiguration: hl - Win32 Profile--------------------
Kompilierung läuft...
flamethrower.cpp
C:\SIERRA\SDK\Source Code\dlls\flamethrower.cpp(207) : error C2065: 'Working' : nichtdeklarierter Bezeichner
Fehler beim Ausführen von cl.exe.

flamethrower.obj - 1 Fehler, 0 Warnung(en)
(Siehe Rot!)

Könnt ihr mir helfen? Was muss ich machen??
THX Wenn ihrs könnt
__________________
ESL-Playersheet
// ESL Admin Team
Mit Zitat antworten
 

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:50 Uhr.


Powered by vBulletin Version 3.7.3 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template-Modifikationen durch TMS

Affiliates
United Forum GetBoinKeD cnc.onlinewelten.de