Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
27.06.2004, 22:26
Barney_Roxx



hallo

ich möchte einen nickname schutz schreiben. das ganze sieht so aus:

Quellcode://client.cpp



//void ClientPutInServer()

if(strcmp(STRING(pEntity->v.netname),"Admin") == 0 && strcmp(Won_Id,"123456789") != 0)
{
    SERVER_COMMAND("kick Admin\n");
}



//void ClientUserInfoChanged()

if(strcmp(pName,"Admin") == 0 && strcmp(Won_Id,"123456789") != 0)
{
    SERVER_COMMAND("kick Admin\n");
}
Won_Id ist eine const char variable der ich die WONID des spielers übergeben möchte. die frage ist nun, wie komme ich an seine WONId in der client.cpp, in den beiden funktionen?

--


Dieser Beitrag wurde am 27.06.2004 um 22:31 von Barney_Roxx bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
28.06.2004, 17:24
Exec



GETPLAYERWONID(pEntity) is der command

frag mich aber nich, wie weit der noch in steam geht

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
002
28.06.2004, 20:13
Barney_Roxx



ich möchte es schon mit WON nutzen.
GETPLAYERWONID gibt es aber nicht. muss ich da noch was includieren?

--

zum Seitenanfang zum Seitenende Profil || Suche
003
28.06.2004, 21:10
Exec



aja,ganz vergessen

#define GETPLAYERWONID (*g_engfuncs.pfnGetPlayerWONId) unter #define GETPLAYERAUTHID (*g_engfuncs.pfnGetPlayerAuthId) in der enginecallback.h

das is aus irgend sonem admin-system tut von hlpp

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
004
30.06.2004, 00:10
Barney_Roxx



danke das klappt. jetzt habe ich aber ein anderes problem. wie mache ich das in der player.cpp? habe mir eine html_score funktion geschrieben mit zahlreichen features. sowiet so gut. jetzt kommt das problem.

diese funktion möchte ich wie folgt aufrufen:

Quellcode:void CBasePlayer::AddPoints( int score, BOOL bAllowNegativeScore )
{
....
....
....

html_Score(GETPLAYERWONID,NAME,pev->frags,m_iDeaths);
}
1. Es funktioniert garnicht ;-) (aus der killed() funktion irgendwie haldwegs)
2. GETPLAYERWONID, wie genau geht das hier?
3. NAME müsste der playername sein des aktuellen spieler den es betrifft.

wo soll ich meine funktion aufrufen? wiegesagt, unter AddPoints wird die irgendwie garnicht aufgerufen.

--


Dieser Beitrag wurde am 30.06.2004 um 00:24 von Barney_Roxx bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
30.06.2004, 00:40
Deciever



Weißt du was das größte problem ist?
Won ist ab ende Sommer raus! dann war die Arbeit umsonst, außer du bastels es für Steam um, wenn möglich

--

DMC-INTERACTIVE

Tactical Espionage Action - SuperSteve
- decies Half-Life Adventure Interface (HL-AI)

zum Seitenanfang zum Seitenende Profil || Suche
006
30.06.2004, 02:03
Barney_Roxx



OK ich hab es gelöst. ganz einfach

html_Score(GETPLAYERWONID(edict()),NAME,pev->frags,m_iDeaths);

in die PreThink funktion ;-)
nun läuft mein system genau so wie ich mir das vorgestellt habe. aber da der aufruf nun in der PrreThink stattfindet, kommt es zu lags. gibt es eine lösung die dafür geeignet ist, anstelle der PreThink?

ich muss nur noch wissen wie ich an den betroffenen spielernamen komme, von der PreThink funktion. weis das jemand?

--


Dieser Beitrag wurde am 30.06.2004 um 05:39 von Barney_Roxx bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
30.06.2004, 10:20
Killing Me Softly



@Deciever: GETPLAYERWONID(...) gibt unter Steam die Steam-Id zurück d.h. man muss glücklicherweise gar nix ändern.

@Barney_Roxx: den Spielername erhälst du mit STRING(pev->netname)

--

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

zum Seitenanfang zum Seitenende Profil || Suche
008
30.06.2004, 15:01
Barney_Roxx



Killing Me Softly: Danke ;-)

aber das mit der PreThink geht nicht. je mehr spieler joinen, um so mehr wird die html_score und html_scoresave funktion benutzt. dies führt zu extremen lags. ich selber als netzwerk client habe einen ping von 35 (normal 4-7).

es muss doch einen platz für den korrekten aufruf geben?

--

zum Seitenanfang zum Seitenende Profil || Suche
009
30.06.2004, 16:15
Killing Me Softly



void CHalfLifeMultiplay :: PlayerKilled( ... ) wäre z.B. so ein Ort.

--

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

zum Seitenanfang zum Seitenende Profil || Suche
010
30.06.2004, 17:35
Barney_Roxx



das bringt mir eben nichts. hab ich oben schon geschrieben ;-)
so werden die scores des spielers ja nur dann geupdated wenn er gestorben ist. ich wills aber in echtzeit updaten wenn er gestorben/getötet ist/hat

--

zum Seitenanfang zum Seitenende Profil || Suche
011
30.06.2004, 17:46
Barney_Roxx



oder meinst du das so?

Quellcode:if ( pVictim->pev == pKiller )  
{  // killed self
    //HIER <---- AUFRUF
}
else if ( ktmp && ktmp->IsPlayer() )
{
    // if a player dies in a deathmatch game and the killer is a client, award the killer some points
    //HIER <---- AUFRUF
}
else
{  // killed by the world
    //HIER <---- AUFRUF
}

--

zum Seitenanfang zum Seitenende Profil || Suche
012
30.06.2004, 18:52
Barney_Roxx



nein das bringts auch nicht. es müsste schon sowas sein
Killed();
haveKilled();

sonst geht das nicht.
weil wenn ich meine funktion nur in einer killed funktion aufrufe, wird meine html score ja nur dann geuppdated wenn der jeweilige spieler getötet wurde. das ist ja auch schön und gut. nur was ist wenn er fraggs macht und ein weilchen nicht stirbt? tja, dann wird die score eben bei Frags garnicht geupdatet und das ist mein problem. es soll ja bei beiden fällen sterben/fraggen meine score funktion aufrufen bzw. updaten. was tun?

--

zum Seitenanfang zum Seitenende Profil || Suche
013
30.06.2004, 19:36
xenomeliteforce



mach doch folgendes:
Sobald ein Spieler stirbt / spawnt, werden die Statistiken für alle Spieler bzw. vom Killer und Gekilltem geupdatet.
Wenn kein Spieler gestorben ist, dann bekommt auch niemand Frags ;-)

--

xenom[GER]

- Ich werd nie wieder zu einem Dust-Klon Augenkrebs sagen - Sir_Pepe (zur Map toonrun)
- das wäre ungefähr so wie wenn du meine tipparbeit als rechtschreibduden nimmst - DrZenz
- nur leute, die etwas verbergen wollen, posten minibilder von ihrer map :D - Acumen

zum Seitenanfang zum Seitenende Profil || Suche
014
30.06.2004, 23:11
Killing Me Softly



@Barney_Roxx: Frage: wenn ein Spieler gekilled wird dann von was oder wem bitteschön? Richtig, entweder er fällt irgendwo runter oder er wurde von jemand anderen erschossen.

Und aus diesem Grunde ist void CHalfLifeMultiplay :: PlayerKilled( ... ) genau der richtige Ort für sowas, auch wenn du dies mit drei hintereinanderfolgenden Posts bestreitest *g*; zumindest waren die Jungs und Mädels von Valve genau dieser Meinung. Ansonsten wäre es nämlich nicht zu erklären, wieso sie ausgerechnet in dieser Funktion die Frags von dem Opfer (pVictim) und die Frags von dem der gefraged hat (pKiller) berechnet haben.

Du warst doch ganz oben schon so schön nahe dran:

Quellcode:if ( pVictim->pev == pKiller )  
{  // killed self
    // d.h. Opfer und Killer sind identisch; ergo: der Doofkopp hat sich selber gekilled
    pKiller->frags -= 1;
}
else if ( ktmp && ktmp->IsPlayer() )  
{   // if a player dies in a deathmatch game and the killer is a client, award the killer some points
    // == der Killer ist ein richtiger Spieler und bekommt deswegen den Frag gutgeschrieben
    pKiller->frags += IPointsForKill( peKiller, pVictim );
    FireTargets( "game_playerkill", ktmp, ktmp, USE_TOGGLE, 0 );
}
else
{  // killed by the world
   // == der Doofkopp ist wahrscheinlich von nem Hochhaus gesprungen
   pVictim->pev->frags -= 1;
}

// =========================================
// Und hier wird's für uns interessant, "update the scores'
// bedeutet nämlich, das die neue Scores an die ganzen
// Clients geschickt werden und wenn Valve an dieser Stelle
// die Scores aktualisieren kann, können wir das schon lange
// =========================================

// update the scores
// killed scores

MESSAGE_BEGIN( MSG_ALL, gmsgScoreInfo );
    WRITE_BYTE( ENTINDEX(pVictim->edict()) );
    WRITE_SHORT( pVictim->pev->frags );
    WRITE_SHORT( pVictim->m_iDeaths );
    WRITE_SHORT( 0 );
    WRITE_SHORT( GetTeamIndex( pVictim->m_szTeamName ) + 1 );
MESSAGE_END();

// =========================================
//          zuerst für das Opfer
// =========================================
html_Score(GETPLAYERWONID(pVictim->edict()),STRING(pVictim->pev->netname),pVictim->pev->frags,pVictim->m_iDeaths);
// =========================================

// killers score, if it's a player
CBaseEntity *ep = CBaseEntity::Instance( pKiller );
if ( ep && ep->Classify() == CLASS_PLAYER )
{
    CBasePlayer *PK = (CBasePlayer*)ep;

    MESSAGE_BEGIN( MSG_ALL, gmsgScoreInfo );
        WRITE_BYTE( ENTINDEX(PK->edict()) );
        WRITE_SHORT( PK->pev->frags );
        WRITE_SHORT( PK->m_iDeaths );
        WRITE_SHORT( 0 );
        WRITE_SHORT( GetTeamIndex( PK->m_szTeamName) + 1 );
    MESSAGE_END();

   // =========================================
   //       und dann für den Killer
   // =========================================
   html_Score(GETPLAYERWONID(PK->edict()),STRING(PK->pev->netname),PK->pev->frags,PK->m_iDeaths);
   // =========================================

    // let the killer paint another decal as soon as he'd like.
    PK->m_flNextDecalTime = gpGlobals->time;
}

--

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


Dieser Beitrag wurde am 30.06.2004 um 23:17 von Killing Me Softly bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
015
07.07.2004, 15:20
Barney_Roxx



mega merci für dein bemühung, recht haste da :-)

--

zum Seitenanfang zum Seitenende Profil || Suche