Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
24.08.2001, 23:51
McMapper



also ich hab einen bool in meiner player.h nun brauch ich den aber in der combat.cpp wie kann ich den da benutzen ? ich hoffe ihr wisst was ich meine ! thx im vorraus !

--

zum Seitenanfang zum Seitenende Profil || Suche
001
25.08.2001, 00:47
Retro



Deklarier die Variable einfach so:

Quellcode:[color="blue"]extern[/color] BOOL DeineVar;

Und in die include-teil der combat.cpp noch das (falls es noch net drinne ist):

Quellcode:[color="blue"]#include[/color] "player.h"

--

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 */


Dieser Beitrag wurde am 25.08.2001 um 00:47 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
25.08.2001, 01:07
McMapper



extern BOOL IsInvis;

=

F:\Editors\hl\sdk\Sdk\SourceCode\dlls\player.h(264) : error C2071: 'IsInvis' : ungueltige Speicherklasse

toll !

ausserdem brauche ich auch noch ne funktion ausser player.cpp

naja noch ne idee ?

--

zum Seitenanfang zum Seitenende Profil || Suche
003
25.08.2001, 01:20
Retro



Hmm, das liegt an irgend etwas anderem!
Also Variablen kann man so ganz einfach übergeben...

Hmm, und ne ganze Funktion?!
Quellcode:[color="blue"]extern[/color] void DeineFunktion(...);

Beide sachen kommen oftmals im SDK vor, also kann ich garnicht falsch liegen.
Versuch mal die Variable so zu deklarieren:

Quellcode:[color="blue"]extern[/color] DLL_GLOBAL BOOL IsInvis;

Wenn das auch nicht geht, dann liegt der Fehler irgendwo anders.
Wie gesagt... alle Methoden die ich beschrieben hab sind im SDK drinne.

--

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
25.08.2001, 01:25
McMapper



da MUSST du falsch liegen : DENN

error C2720: 'ToggleVis' : 'extern' Speicherklassenbezeichner fuer Elemente unzulaessig
error C2071: 'IsInvis' : ungueltige Speicherklasse

erzeugt durch

extern void ToggleVis( void );
extern DLL_GLOBAL BOOL IsInvis;

andere ideen ?

--

zum Seitenanfang zum Seitenende Profil || Suche
005
25.08.2001, 01:37
Retro



Sorry, da kann ich auch net weiterhelfen.
Also das es bei den Variablen so funktioniert kann ich dir aber garantieren, da ich es vor 2 Minuten grad wieder gemacht hab - und es geht!

Woran es bei dir scheitert weis ich net, sorry, musste warten bis die Elite wieder da ist =)

--

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
006
25.08.2001, 01:42
McMapper



naja ich kanns nu machen halt ausserhalb der c base player doch nun was noch tolleres DAS: es hat vorher immer gefunzt :
error C2227: Der linke Teil von '->renderamt' muss auf Klasse/Struktur/Union zeigen

wegen dem

pev->renderamt = 20;

wie gesagt s hat schomal gefunzt.. nu ich hab die funktionen AAAAHHAAABER dann kommt auch noch das :
error C2039: 'ToggleVis' : Ist kein Element von 'CBasePlayer

WAAA was ist bloss los

--

zum Seitenanfang zum Seitenende Profil || Suche
007
25.08.2001, 01:49
McMapper



aaalso ich hab probleme behoben bis auf eins :

F:\Editors\hl\sdk\Sdk\SourceCode\dlls\player.cpp(4502) : error C2227: Der linke Teil von '->renderamt' muss auf Klasse/Struktur/Union zeigen
F:\Editors\hl\sdk\Sdk\SourceCode\dlls\player.cpp(4503) : error C2227: Der linke Teil von '->rendermode' muss auf Klasse/Struktur/Union zeigen
F:\Editors\hl\sdk\Sdk\SourceCode\dlls\player.cpp(4511) : error C2227: Der linke Teil von '->renderamt' muss auf Klasse/Struktur/Union zeigen
F:\Editors\hl\sdk\Sdk\SourceCode\dlls\player.cpp(4512) : error C2227: Der linke Teil von '->renderfx' muss auf Klasse/Struktur/Union zeigen
F:\Editors\hl\sdk\Sdk\SourceCode\dlls\player.cpp(4513) : error C2227: Der linke Teil von '->rendermode' muss auf Klasse/Struktur/Union zeigen

waas zum deibel iss da falsch ?! hiiilfe

--

zum Seitenanfang zum Seitenende Profil || Suche
008
25.08.2001, 03:39
The_Overmind



dann haste das Wort das vor dem -> is falsch geschrieben, oder die Struktur is in ner Header Datei definiert, auf die deine CPP Datei nit zugreift.

--

zum Seitenanfang zum Seitenende Profil || Suche
009
25.08.2001, 11:34
Mazze



Das mit der einen Variablen:
Was redet ihr hier eigentlich?

Mit extern kann man nur global definierte Variablen einfügen. Und zwar in einer Quellcodedatei, da das ja in einer Headerdatei keinen Sinn macht, oder?
Wieso machst du nicht einfach #include "deineheaderdatei" ???

Ich denke mal dein Problem ist, dass du die Variable in CBasePlayer deklariert hast und nun nicht so etwas wie pPlayer oder so hast.
Das würde ich so machen:
GetClassPtr((CBasePlayer *)pev)->deineVeriable
Dann hasst du sie....

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
010
25.08.2001, 11:42
McMapper



nope
ich habs anders gemacht ich hab auch den header player.h includet aber die func und den bool als static definiert dann hab ich sie aufgerufen über
Quellcode:
CBasePlayer :: ToggleVis();

und den bool über
Quellcode:
if (CBasePlayer :: IsInvis = true)

und ich kann es compilen ohne fehler nun
ist mein problem wie gesagt ein anderes ich hab diese function in der player.cpp:

Quellcode:
void CBasePlayer :: ToggleVis( void )
{
if (IsInvis == false || NULL)
{
pev->renderamt = 20;
pev->rendermode = kRenderTransAlpha;
IsInvis = true;



}
else
{
pev->renderamt = 255;
pev->renderfx = kRenderFxNone;
pev->rendermode = kRenderNormal;
IsInvis = false;

}

nun scheint das pev net zu stimmen und bis gestern um 2 uhr ist mir nichts eingefallen. nun problem erkannt ?

--


Dieser Beitrag wurde am 25.08.2001 um 11:42 von McMapper bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
011
25.08.2001, 13:51
[PE]Spinator



nix zum pev, aber zu "if (IsInvis == false || NULL)":
das bedeutet etwa dasselbe wie:
if( !IsInvis )
{
[stuff...]
}

if( NULL )
{
[stuff...]
}

und ich glaube nit, das NULL jemals true sein wird, kannst also gleich weglassen...

--

This post was written using Opera 7.0 (http://www.opera.com)

zum Seitenanfang zum Seitenende Profil || Suche
012
25.08.2001, 14:24
McMapper



nein
denn ganz am anfang ist IsInvis ja noch nicht gesetzt

--

zum Seitenanfang zum Seitenende Profil || Suche
013
25.08.2001, 14:37
[PE]Spinator



aber dieses NULL bezieht sich nicht auf IsInvis... Wenn schon müsstest du schreiben:
if ( IsInvis == false || IsInvis == NULL)

was schlussendlich trotzdem dasselbe ist wie:
if ( !IsInvis )

--

This post was written using Opera 7.0 (http://www.opera.com)

zum Seitenanfang zum Seitenende Profil || Suche
014
25.08.2001, 14:40
McMapper



ok thx aber das andere problem hat vorrang :-)

--


Dieser Beitrag wurde am 25.08.2001 um 14:43 von McMapper bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
015
25.08.2001, 15:02
[PE]Spinator



ok, ich seh 2 möglichkeiten:
1) Die Funktion nicht als static deklarieren.
2) eine Schlaufe einbauen, welche sich alle player "anschaut". Hier die Funktion:

Quellcode:
void CBasePlayer :: ToggleVis( void )
{
for (int i = 1; i <= gpGlobals->maxClients; i++)
{
     CBasePlayer *pl = (CBasePlayer *)UTIL_PlayerByIndex (i);
     if (!pl)
          continue;
     if ( !IsInvis )
     {
          pl->pev->renderamt = 20;
          pl->pev->rendermode = kRenderTransAlpha;
          pl->IsInvis = true;
     }
     else
     {
          pl->pev->renderamt = 255;
          pl->pev->renderfx = kRenderFxNone;
          pl->pev->rendermode = kRenderNormal;
          pl->IsInvis = false;
     }
}
}

IsInvis darf dann aber nicht statisch sein (darf es sowieso nicht, da es ja player spezifisch sein soll).

--

This post was written using Opera 7.0 (http://www.opera.com)


Dieser Beitrag wurde am 25.08.2001 um 15:03 von [PE]Spinator bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
016
25.08.2001, 15:26
McMapper



nun wenn ich die function nicht als static definier kann ich nicht auf sie zugreifen in der combat.cpp :(

--

zum Seitenanfang zum Seitenende Profil || Suche
017
25.08.2001, 15:29
[PE]Spinator



desshalb ja die 2. lösung....

das wäre das was hinter der Zeichenfolge "2) " und abwärts steht... änder deine Funktion einfach so um.

[edit]
ups... das ist ja zum togglen :)
dann übergib der funktion nen zeiger auf den richigen player oder den index...
Auf jedenfall darf IsInvisible nicht static sein...

--

This post was written using Opera 7.0 (http://www.opera.com)


Dieser Beitrag wurde am 25.08.2001 um 15:31 von [PE]Spinator bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
018
25.08.2001, 15:32
McMapper



WAAA dann bitte mal den code wie er sein sollte
ach ja mach dein icq an

--

zum Seitenanfang zum Seitenende Profil || Suche
019
25.08.2001, 15:40
TheTinySteini



Ach, sag mal lieber, von wo aus du die Funktion ToggleVis aufrufst!
Denn das da oben ist Pfusch. Memberfunktionen sind schließlich dafür da, dass sie im Zusammenhang mit einer Klasse aufgerufen werden, aber genau das machst du mit der ToggleVis nicht, es könnte genauso gut eine globale Funktion sein, die nix mit CBasePlayer zu tun hat. Du solltest dir bereits in der combat.cpp einen Pointer auf den Spieler holen, den du unsichtbar machen willst. Und dann machst du eben bei genau diesem Spieler pPlayer->ToggleVis(). So, und das IsInvisible machste dann nicht static, sondern als Membervariable von CBasePlayer.
Insofern, zeig mal her, wo du das ToggleVis aufrufen willst. Ich bin mir 99,9%ig sicher, dass du bereits dort einen Pointer auf den jeweiligen Spieler kriegst.

--

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

zum Seitenanfang zum Seitenende Profil || Suche
020
25.08.2001, 15:48
[PE]Spinator



Jup, machen wir grad so :)

--

This post was written using Opera 7.0 (http://www.opera.com)

zum Seitenanfang zum Seitenende Profil || Suche
021
25.08.2001, 16:44
McMapper



tja dieser pointer

Quellcode:
CBasePlayer *player = (CBasePlayer*) CBaseEntity::Instance( pevAttacker );

lässt hl
crashen

--


Dieser Beitrag wurde am 25.08.2001 um 16:44 von McMapper bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
022
25.08.2001, 17:57
Mazze



Was schreibe ich da oben eigentlich???
Haaaallo!

Ich sags nochmal:
Ich denke mal dein Problem ist, dass du die Variable in CBasePlayer deklariert hast und nun nicht so etwas wie pPlayer oder so hast.
Das würde ich so machen:
GetClassPtr((CBasePlayer *)pev)->deineVeriable
Dann hasst du sie....

Ach übrigens: Ich blick immer noch nicht was du überhaupt willst....

Wie TTT schon gesagt hat: Sag uns mal wo du die Funktion aufrufen willst!

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
023
25.08.2001, 17:58
[PE]Spinator



Es funzt... Er hat nur vergessen zu editieren.

--

This post was written using Opera 7.0 (http://www.opera.com)

zum Seitenanfang zum Seitenende Profil || Suche
024
26.08.2001, 13:54
McMapper



AAALSO : der bool und ev auch die func kommen beim primary attack jeder waffe zum zuge also hab ich einfach m_pPlayer genommen. PASST. aber trotzdem danke

--

zum Seitenanfang zum Seitenende Profil || Suche