Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
28.10.2001, 09:58
bbjoker



Moin,

Ich habe gerade die Teamplayfunktion reingenommen! Mit den Spawnpoints .. also wo die Spieler starten!
Aber wenn ich´s kompiliere kommt immer folgender Fehler:

Linker-Vorgang läuft...
Bibliothek .\Profilemp/mp.lib und Objekt .\Profilemp/mp.exp wird erstellt
player.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct edict_s * __cdecl EntSelectSpawnPoint(class CBaseEntity *)" (?EntSelectSpawnPoint@@YAPAUedict_s@@PAVCBaseEntity@@@Z)
.\Profilemp/mp.dll : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

Was mach ich falsch?`was muss ich ändern?

Ciao
BBJOKER

--

zum Seitenanfang zum Seitenende Profil || Suche
001
28.10.2001, 10:05
Seeb



mit meinen kläglichen c++ kenntnissen würd ich sagen du hast das struct edict_s zwar initialisiert ihm aber keinen wert zugewiesen, das is das problem

--

besucht chAos mApping

zum Seitenanfang zum Seitenende Profil || Suche
002
28.10.2001, 18:03
bbjoker



Moin,

Also jetzt ist der FEHLER SO:

--------------------Konfiguration: mp - Win32 Profile--------------------
Kompilierung läuft...
gamerules.cpp
Linker-Vorgang läuft...
Bibliothek .\Profilemp/mp.lib und Objekt .\Profilemp/mp.exp wird erstellt
gamerules.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct edict_s * __cdecl EntSelectSpawnPoint(class CBaseEntity *)" (?EntSelectSpawnPoint@@YAPAUedict_s@@PAVCBaseEntity@@@Z)
player.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct edict_s * __cdecl EntSelectSpawnPoint(class CBaseEntity *)" (?EntSelectSpawnPoint@@YAPAUedict_s@@PAVCBaseEntity@@@Z)
.\Profilemp/mp.dll : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

mp.dll - 3 Fehler, 0 Warnung(en)

----------------------------------

es muss an dem CODE TEIL LIEGEN: --- denk ich!

-----------------------------------
//=========================================================
edict_t *CGameRules :: GetPlayerSpawnSpot( CBasePlayer *pPlayer )
{

edict_t *pentSpawnSpot = EntSelectTeamSpawnPoint( pPlayer );

if (g_pGameRules->IsTeamplay())
edict_t *pentSpawnSpot = EntSelectTeamSpawnPoint( pPlayer );
else
edict_t *pentSpawnSpot = EntSelectSpawnPoint( pPlayer );

pPlayer->pev->origin = VARS(pentSpawnSpot)->origin + Vector(0,0,1);
pPlayer->pev->v_angle = g_vecZero;
pPlayer->pev->velocity = g_vecZero;
pPlayer->pev->angles = VARS(pentSpawnSpot)->angles;
pPlayer->pev->punchangle = g_vecZero;
pPlayer->pev->fixangle = TRUE;

return pentSpawnSpot;
}

//=========================================================
------------------------------------------
und:
------------------------------------------
extern edict_t *EntSelectSpawnPoint( CBaseEntity *pPlayer );
extern edict_t *EntSelectTeamSpawnPoint( CBaseEntity *pPlayer );
--------------------------------------------

Habt ihr jetzt ne ahnung?

--

zum Seitenanfang zum Seitenende Profil || Suche
003
28.10.2001, 18:04
bbjoker



Das ist aus so nen Tutorial genommen und etwas verändert da das TUT nicht funzt!

Achso oben das ist in der gamerulz.cpp

das jetzt ist in der Player.cpp daran kann es auch liegen ... ist auch sehr warscheinlich:

---------------------------------
edict_t *EntSelectTeamSpawnPoint( CBaseEntity *pPlayer )
{
CBaseEntity *pSpot;
edict_t *player;

player = pPlayer->edict();
CBasePlayer *cbPlayer = (CBasePlayer *)pPlayer; // Get a CBasePlayer

pSpot = g_pLastSpawn;
// Randomize the start spot
for ( int i = RANDOM_LONG(1,5); i > 0; i-- )
{
if (FStrEq(cbPlayer->m_szTeamName, "Team1_name")) // if team1
pSpot = UTIL_FindEntityByClassname( pSpot, "info_player_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team2_name"))// if team2
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team2_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team3_name"))// if team2
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team3_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team4_name"))// if team2
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team4_start" );
else // not team observer
pSpot = UTIL_FindEntityByClassname( pSpot, "info_player_observer" );
}

if ( FNullEnt( pSpot ) ) // skip over the null point
{

if (FStrEq(cbPlayer->m_szTeamName, "Team1_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_player_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team2_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team2_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team3_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team3_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team4_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team3_start" );
else
pSpot = UTIL_FindEntityByClassname( pSpot, "info_player_observer" );
}

CBaseEntity *pFirstSpot = pSpot;

do
{
if ( pSpot )
{
// check if pSpot is valid
if ( IsSpawnPointValid( pPlayer, pSpot ) )
{
if ( pSpot->pev->origin == Vector( 0, 0, 0 ) )
{

if (FStrEq(cbPlayer->m_szTeamName, "Team1_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_player_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team2_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team2_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team3_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team3_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team4_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team4_start" );
else
pSpot = UTIL_FindEntityByClassname( pSpot, "info_player_observer" );
continue;
}

// valid pSpot, so it can be returned
goto ReturnSpot;
}
}
// increment pSpot


if (FStrEq(cbPlayer->m_szTeamName, "Team1_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_player_team1" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team2_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team2_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team3_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team3_start" );
else if (FStrEq(cbPlayer->m_szTeamName, "Team4_name"))
pSpot = UTIL_FindEntityByClassname( pSpot, "info_Team4_start" );
else
pSpot = UTIL_FindEntityByClassname( pSpot, "info_player_observer" );

} while ( pSpot != pFirstSpot ); // loop if we're not back to the start

// we haven't found a place to spawn yet, so kill any guy at the first spawn point and spawn there

if ( !FNullEnt( pSpot ) )
{
CBaseEntity *ent = NULL;
while ( (ent = UTIL_FindEntityInSphere( ent, pSpot->pev->origin, 128 )) != NULL )
{
// if ent is a client, kill em (unless they are ourselves)
if ( ent->IsPlayer() && !(ent->edict() == player) )
ent->TakeDamage( VARS(INDEXENT(0)), VARS(INDEXENT(0)), 300, DMG_GENERIC );
}
goto ReturnSpot;
}

ReturnSpot:
if ( FNullEnt( pSpot ) )
{
ALERT(at_error, "PutClientInServer: no spawn points on level");
return INDEXENT(0);
}

g_pLastSpawn = pSpot;
return pSpot->edict();
}
--------------------------------------

HELFT MIR!!!

--

zum Seitenanfang zum Seitenende Profil || Suche
004
29.10.2001, 15:26
bbjoker



kapiert das keiner? Ich verstehe ich fehlermeldung auch nicht LEIDER !

--

zum Seitenanfang zum Seitenende Profil || Suche
005
29.10.2001, 18:55
R2-D2



Quellcode:edict_t *CGameRules :: GetPlayerSpawnSpot( CBasePlayer *pPlayer )
{
edict_t *pentSpawnSpot = EntSelectSpawnPoint( pPlayer );

if (g_pGameRules->IsTeamplay())
{
edict_t *pentSpawnSpot = EntSelectTeamSpawnPoint( pPlayer );
}

pPlayer->pev->origin = VARS(pentSpawnSpot)->origin + Vector(0,0,1);
pPlayer->pev->v_angle  = g_vecZero;
pPlayer->pev->velocity = g_vecZero;
pPlayer->pev->angles = VARS(pentSpawnSpot)->angles;
pPlayer->pev->punchangle = g_vecZero;
pPlayer->pev->fixangle = TRUE;

return pentSpawnSpot;
}

--

®2-D2
Believe in Retrieve :)

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

zum Seitenanfang zum Seitenende Profil || Suche
006
29.10.2001, 19:29
bbjoker



Danke ... aber die 3 Fehler sind geblieben ... ich weis ja auch nicht wieso! Hab alles gemacht! Nur wenn ich die Zeile ausklammere gehts:

player.cpp
// edict_t *pentSpawnSpot = EntSelectSpawnPoint( pPlayer );
------------------
gamerulz.cpp
// edict_t* pentSpawnSpot = EntSelectSpawnPoint( this );
// pev->origin = VARS(pentSpawnSpot)->origin + Vector(0,0,1);
// pev->angles = VARS(pentSpawnSpot)->angles;

--

zum Seitenanfang zum Seitenende Profil || Suche
007
29.10.2001, 20:06
R2-D2



dann scheint der fehler in deiner EntSelectSpanPoint funktion in der player.cpp zu liegen
nimm dir n frisches SDK und kopier die da raus

--

®2-D2
Believe in Retrieve :)

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

zum Seitenanfang zum Seitenende Profil || Suche
008
29.10.2001, 20:50
bbjoker



mmm...
*freu* ZITAT: nimm dir n fisches *freu*

Ok mach ich mal sehen ob´s funzt ..

äh ... ich hab garkeine Funktion die so heißt in meiner player.cpp

UPS

CU!

--

zum Seitenanfang zum Seitenende Profil || Suche
009
29.10.2001, 21:19
bbjoker



Hab ich gemacht ... jetzt sind´s "nur" noch 2 Fehler:

--------------------Konfiguration: mp - Win32 Profile--------------------
Kompilierung läuft...
gamerules.cpp
Linker-Vorgang läuft...
Bibliothek .\Profilemp/mp.lib und Objekt .\Profilemp/mp.exp wird erstellt
gamerules.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct edict_s * __cdecl EntSelectTeamSpawnPoint(class CBaseEntity *)" (?EntSelectTeamSpawnPoint@@YAPAUedict_s@@PAVCBaseEntity@@@Z)
.\Profilemp/mp.dll : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

mp.dll - 2 Fehler, 0 Warnung(en)

Wenn ich den Code jetzt auch noch austausche dann hab ich die eigendliche Funktion die ich wollte garnichtmehr ... findet ihr nen Fehler? Oder muss ich austauschen?

--

zum Seitenanfang zum Seitenende Profil || Suche
010
29.10.2001, 22:25
Basiror



du musst die mit extern blah blah blah in deine gamerules.cpp einfügen

--

Basiror's Labs Game-Development page

Hifle in form von Tutorials, Artikeln und anderem wird dankbar angenommen

zum Seitenanfang zum Seitenende Profil || Suche
011
30.10.2001, 07:32
bbjoker



@Basiror: Hab ich ja! Daran liegts nicht!

CU!

--

zum Seitenanfang zum Seitenende Profil || Suche
012
30.10.2001, 09:46
Basiror



darf ich darauf hinweissen dass due erst die entselectspawnpoint und jetzt die
entselectteamspawnpoint net hast
-> nochmal checken ob du das extern nict nur für die extern edict *entselectspawnpoint sondern auch füt die teamspawnpoint hast

ps: falls es bigguys team spawn tut war da gibt glaub ich nen bug mit dem teamplay check

--

Basiror's Labs Game-Development page

Hifle in form von Tutorials, Artikeln und anderem wird dankbar angenommen

zum Seitenanfang zum Seitenende Profil || Suche
013
30.10.2001, 12:11
Prefect



*kopfschüttel*

Zitat:

gamerules.obj : error LNK2001: Nichtaufgeloestes externes Symbol "struct edict_s * __cdecl EntSelectTeamSpawnPoint(class CBaseEntity *)" (?EntSelectTeamSpawnPoint@@YAPAUedict_s@@PAVCBaseEntity@@@Z)
.\Profilemp/mp.dll : fatal error LNK1120: 1 unaufgeloeste externe Verweise

Das hier bedeutet ganz eindeutig, daß die Funktion edict_s *EntSelectTeamSpawnPoint(CBaseEntity *) zwar an einer Stelle im Code _aufgerufen_ wird, sie wird aber nirgendswo definiert.

Wenn du an einer Stelle eine Deklaration hast wie:

Zitat:

extern edict_t *EntSelectTeamSpawnPoint( CBaseEntity *pPlayer );

... dann ist das ja lediglich ein Platzhalter, der dem Compiler sagt, daß es eine solche Funktion gibt. Du hast die Funktion aber ganz offensichtlich nirgendwo _definiert_, d.h. der eigentliche Code für die Funktion existiert nirgends. Es sollte ja wohl einleuchtend sein, daß der Linker nicht erraten kann, was die Funktion tun soll. Wenn dem so wäre, müßte man ja gar nicht mehr programmieren...

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
014
30.10.2001, 17:49
bbjoker



Moin,

Ok, danke ich habe mir ne neue EntSelectTeamSpawnPoint geschrieben! Jetzt kann ich kompilieren ohne Fehler ... jetzt muss es nur noch alles im Spiel funktionieren!

Also danke!

CU!

--

zum Seitenanfang zum Seitenende Profil || Suche
015
30.10.2001, 23:36
m0rgu3



Autsch, das tut ja soo weh...!

--

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

zum Seitenanfang zum Seitenende Profil || Suche
016
31.10.2001, 08:14
bbjoker



@mOrgu3 -> können doch nicht alle alles gleich wissen oda?

Funzt alles primast ... Thx!

--

zum Seitenanfang zum Seitenende Profil || Suche
017
31.10.2001, 10:26
R2-D2



na endlich :)

--

®2-D2
Believe in Retrieve :)

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

zum Seitenanfang zum Seitenende Profil || Suche