Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
10.12.2001, 19:32
Nicemice
Moderator


Hi,
Mit dieser Funktion bekomme ich ja die aktuell zum Server verbunden Spieler zurück, oder ?

Mein Problem:
-ein Spieler verbindet.

...und ich bekomme einen Pointer zurück, wenn ich die Liste von Indexe durchgehe. (klar)

-noch ein Spieler verbinder

...und ich bekomme zwei Pointer zurück, wenn ich die Liste von Indexe durchgehe. (auch klar)

-nun trennt ein Spieler die Verbindung.

...und ich bekomme wieder zwei Pointer zurück, wenn ich die Liste von Indexe durchgehe. (warum das ?, es müßte doch eigntlich einer sein)

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
001
10.12.2001, 21:40
Mazze



Weiß nicht. Kann mir grad den Source-Code der Funktion nicht ansehen, aber du kannst ja mit if(pPlayer) dosomething testen, ob es den Player auch gibt!

--

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

zum Seitenanfang zum Seitenende Profil || Suche
002
10.12.2001, 23:44
Nicemice
Moderator


Alles was ich machen will, ist eine Liste mit den Spieler, die aktuell verbunden sind. Das ist alles.

--

www.d3opencoop.com - A Doom3 Cooperative Mod

zum Seitenanfang zum Seitenende Profil || Suche
003
11.12.2001, 09:21
hausi



Gibt es nicht in der client.cpp eine Funktion, wenn ein Spieler connected und eine, wenn der Spieler disconnected (Bin gerade bei der Arbeit, kann also nicht nachsehen)

--

zum Seitenanfang zum Seitenende Profil || Suche
004
11.12.2001, 14:23
Archangel



das sollte funzen...
Quellcode:
ALERT(at_console, "Listing players\nid\tname\n");
for(int i = 1; i <= gpGlobals->maxClients; i++) {
.CBasePlayer *plr = (CBasePlayer *)UTIL_PlayerByIndex(i);
.if(plr)
..ALERT(at_console, "%d\t%s\n", i, STRING(plr->pev->netname));
}

kA ob das funzt, kanns gerade nit ausprobieren..

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
005
11.12.2001, 14:49
Nicemice
Moderator


Hi,
Genauso, wie du es geschrieben hast, hab ichs probiert und so funktioniert es nicht.

Die Sache ist die: Wenn ein Spieler den Server wieder verläßt, wird das dazugehörende CBasePlayer Objekt nicht gelöscht, sondern nur in so eine Art 'Init' Zustand versetzt. Das hat zu Folge, das man 'leere' CBasePlayer Objekte zurückbekommt. Wenn man die obige Funktion testet, einen Spieler connecten und wieder trennen läßt, wird trotzdem seine ID aufgelistet.

Ich hab jetzt ein mäßig elegant Möglichkeit gefunden, die einem die (tatsächlich) verbunden Spieler liefert:

Quellcode:
ALERT(at_console, "Listing players\nid\tname\n");
CBasePlayer *pPlayer = NULL;
for (i=1; i<= gpGlobals->maxClients;i++)
{
pPlayer = (CBasePlayer*)UTIL_PlayerByIndex(i);
if (pPlayer)
{
edict_t *pPlrEdict = pPlayer->edict();
if (pPlrEdict->v.solid != SOLID_NOT)
ALERT(at_console, "%d\t%s\n", i, STRING(pPlayer->pev->netname));
}
}

--

www.d3opencoop.com - A Doom3 Cooperative Mod


Dieser Beitrag wurde am 11.12.2001 um 14:50 von Nicemice bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
11.12.2001, 15:31
Archangel



öhm, nur mal so rein aus interesse, ist &pPlayer->edict()->v nicht gleich pPlayer->pev ?

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
007
11.12.2001, 17:37
Prefect



Archangel: ja :)

Das Problem, das ihr habt, liegt eigentlich in der Engine. Die entfernt nämlich Playeredicts nicht sofort bzw. nicht komplett (das sieht man auch im Spiel; Leute, die Offline gegangen sind haben noch eine Zeit lang einen "Geist" von sich im Spiel).

Wenn du tatsächlich eine genauere Auflistung der verbundenen Spieler brauchst solltest du entsprechenden Code in ClientPutInServer() und ClientDisconnect() einbauen.

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
008
11.12.2001, 17:55
Another1



soweit ich weiß, muss man einfach den netname checken
if(!FStringNull(pPlayer->pev->netname) && *((char*)STRING(pPlayer->pev->netname)))
{
// pPlayer should be connected ... oder so
}

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche