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



Gibt es einen Befehl zur Abfrage wieviele Player noch leben ? Ich hab nähmlich 'n RundenSystem und wenn der Player tot ist, soll er erst respawnen, entweder wenn die Zeit vorbei ist, oder wenn nur noch ein oder kein player mehr lebt... bei mir respawnt er erst, wenn die zeit vorbei ist... also brauch ich den Befehl...

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
001
12.01.2001, 17:39
Prefect



Nein, gibt's nicht, aber es sollte eine einfach Übung sein, es einzubauen. Mach eine Schleife durch alle Player durch (such am Besten nach UTIL_PlayerByIndex() um ein Beispiel zu kriegen).
Dann hast du so ne Schleife:

Quellcode:
int living = 0;

... //initstuff

for(...) {
   ....
   if (!pPlayer)
     continue;
   if (pPlayer->IsAlive())
     living++;
}

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
002
12.01.2001, 17:50
RocketCoder



thx, aber ich hab eins net beachtet, ich hab 2 teams... wie geht das mit teams ? ob mindestens einer au einem team lebt...
Neue Frage: Wie kann man machen, dass wenn einer connected, dass er dann warten muss bis eine neue runde anfängt ?

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
003
12.01.2001, 18:00
calle



Ich habe bei mir auch das Rundensystem eingebaut, und habe das gleiche Proplem wie du !
Desshalb bin ich gespannt auf eure nächsten Posts.

cu all Calle

--

http://www.callesclub.de

zum Seitenanfang zum Seitenende Profil || Suche
004
12.01.2001, 18:27
Another1



int iTeam1Alive = 0;
int iTeam2Alive = 0;

for(int i = 0;i<gpGlobals->maxClients;i++)
{
CBasePlayer *pPlayer = (CBasePlayer*)UTIL_PlayerByIndex(i);
if (!pPlayer)
continue;
if (pPlayer->IsAlive() && FStrEq(pPlayer->m_szTeamName,"team1name")
iTeam1Alive++;
if (pPlayer->IsAlive() && FStrEq(pPlayer->m_szTeamName,"team2name")
iTeam2Alive++;

}

// hier kann man nun iTeam1Alive und iTeam2Alive für den code benutzen!!
// z.B if(!iTeam1Alive && iTeam2Alive) { /* erste team is tot!!, tu das...*/ };

das sollte reichen!

ich glaub ich habe den code schon 1000000000000 mal gecodet!!!
Ich!
Bin!
DER AUSRUFE!!
.. naja, ich glaub den rest kan sich jeder denken

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
005
12.01.2001, 18:32
Buy-Menu-Man



Und mal wieder hilft uns Another1 bei unserem MOD......das wird mir ja langsam peinlich......

--

http://battletech-hl.teamfortress2.de

zum Seitenanfang zum Seitenende Profil || Suche
006
12.01.2001, 18:40
RocketCoder



thx Another1... =)

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
007
12.01.2001, 20:34
Another1



no problem, btw: was is daran peinlich ? dazu is ein forum doch da *g*

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
008
13.01.2001, 03:12
calle



Hallo Leute !
Kann mir einer von euch sagen in welche Datei ich das einbauen soll !

int iTeam1Alive = 0;
int iTeam2Alive = 0;

for(int i = 0;i<gpGlobals->maxClients;i++)
{
CBasePlayer *pPlayer = (CBasePlayer*)UTIL_PlayerByIndex(i);
if (!pPlayer)
continue;
if (pPlayer->IsAlive() && FStrEq(pPlayer->m_szTeamName,"team1name")
iTeam1Alive++;
if (pPlayer->IsAlive() && FStrEq(pPlayer->m_szTeamName,"team2name")
iTeam2Alive++;

}

und was ich noch einbauen muss, damit das auch bei mir mit dem Rundensystem klappt !

Danke

Calle

--

http://www.callesclub.de

zum Seitenanfang zum Seitenende Profil || Suche
009
13.01.2001, 12:44
Another1



naja, in die CYourGamerules::Think() damit es jedes frame getestet wird, außerdem musst du auch noch die gesamte anzahl von spielern testen die schon ein team gewählt haben, denk mal was sonst passieren würde, wenn nur ein spieler spielt: Der PC denkt, das andere team is tot und fängt ununterbrochen die neue runde an!

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
010
13.01.2001, 13:17
RocketCoder



In welcher Datei findet man denn die CYourGamerules::Think() ?!!! Kann man den code nicht in die void CBasePlayer::PlayerDeathThink(void) einfügen ?

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
011
13.01.2001, 13:47
Another1



Muss ich alles erklären ??
CYourGamerules was supposed to be the gamerules u use
Also: wenn das CHalfLifeTeamplay is dann is die functio CHalfLifeTeamplay::Think, bei CHalfLifeMultiplay CHalfLifeMultiplay::Think, aber ich glaub du musst das in CHalfLifeTeamplay::Think() tun, das sollte reichen!! btw: SUCHEN is eigebtlich bei JEDEM vernünftiegm editor dabei, nur son tipp!

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
012
13.01.2001, 16:52
RocketCoder



Gibts einen speziellen Befehl für das Respawnen nach dem tot ? Spawn(); funzt nähmlich net wenn man gestorben ist... =(

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
013
13.01.2001, 17:22
Another1



gibt ne respawn function

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
014
13.01.2001, 17:35
RocketCoder



hat sich schon erledigt... du kannst aber doch auch normales Spawn(); benutzen...

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
015
14.01.2001, 01:46
calle



Hallo Leute !
Ich weis nicht wo ich das mit der Spawn Funktion einbauen muss, bis jetzt habe ich nur das eingebaut, und erhalte immer diese Fehler !

int iTeam1Alive = 0;
int iTeam2Alive = 0;

for(int i = 0;i<gpGlobals->maxClients;i++)
{
CBasePlayer *pPlayer = (CBasePlayer*)UTIL_PlayerByIndex(i);
if (!pPlayer)
continue;
if (pPlayer->IsAlive() && FStrEq(pPlayer->m_szTeamName,"Runner"));
iTeam1Alive++;
if (pPlayer->IsAlive() && FStrEq(pPlayer->m_szTeamName,"Hunter"));
iTeam2Alive++;

teamplay_gamerules.cpp(102) : warning C4390: ';' : Leere kontrollierte Anweisung aufgetreten; ist dies beabsichtigt?
teamplay_gamerules.cpp(104) : warning C4390: ';' : Leere kontrollierte Anweisung aufgetreten; ist dies beabsichtigt?

RocketCoder ! wie sieht deine Spawn funktion aus !

BITTE HELFT MIR !

DANKE
Calle

--

http://www.callesclub.de

zum Seitenanfang zum Seitenende Profil || Suche
016
14.01.2001, 04:07
Another1



tu mal das ";" hinter den if(pPlayer->IsAlive()) .... weg, da es sonst kein "sinn" macht, das if zu testen, da ja dananch eine leere anweisung ausgeführt wird, nämlich ;
also einfach die pberflüssigen ; wegtun und schon funzt

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
017
14.01.2001, 05:55
calle



die Fehler sind weg ! Danke .
Aber ich er Respawnt immer noch nicht wenn mein Team oder das gegnerische Team tot ist !
Ich habe ach immer noch nicht das eingebaut :

// hier kann man nun iTeam1Alive und iTeam2Alive für den code benutzen!!
// z.B if(!iTeam1Alive && iTeam2Alive) { /* erste team is tot!!, tu das...*/ };

was du gepostet hast !
Ich weis, ich nerve langsam, aber ich hänge an dieser stelle Irgendwie fest !
Bitte schreibt mir nochmal, wo ich was einbauen muß, damit er Respawnt wenn ein Team tot ist !

Es ist auch irgenwie sehr spät ! oder früh ! vieleich habe ich desshalb auch kein Peilung mehr !

Danke für eure Hilfe !

calle

--

http://www.callesclub.de

zum Seitenanfang zum Seitenende Profil || Suche
018
14.01.2001, 12:27
RocketCoder



ich hab den code ans Ende der void CBasePlayer::PlayerDeathThink(void) (in der player.cpp) eingebaut... den code den du da hast bauste auch einfach mal ans Ende ein, und fügst diese stück dann noch hinzu:
if (iTeam1Alive == 0)
{
if (!PlayersT1 ==0)
{
NewRnd = true;
}
else
if (iTeam2Alive == 0)
{
NewRnd = true;
}
}
if (iTeam2Alive == 0)
{
if (!PlayersT2 == 0)
{
NewRnd = true;
}
else
if (iTeam1Alive == 0)
{
NewRnd = true;
}
}
if (NewRnd)
{
m_iRoundStartTime = gpGlobals->time;
respawn ( pev, FALSE ); //durch das False bleibt keine Leiche liegen...
pev->button = 0;
m_iRespawnFrames = 0;
pev->nextthink = -1;
}

dann entfernst du über deinem code noch "pev->nextthink = -1;"

So, ich hab aber auch noch ein Problem =(
Also: Meiner respawnt net wenn der Befehl ausgeführt wird, (auch net bei Spawn() ) sondern ich muss noch nach vorne laufen drücken oder schießen damit er respawnt =(((( woran liegt das ?

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
019
14.01.2001, 12:34
Another1



weil der code vor deinem code immer die function abbricht, wenn keine taste gedrückt wurde! schau mal nach!

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
020
14.01.2001, 13:33
RocketCoder



meine respanw function liegt aber in der UpdateClientData funktion... und wenns NewRnd true ist dann wird das respanw in der UpdateCLietn Data ausgeführt... aber dazu muss ich noch diese scheiß taste drücken =( ich hba die PlayerDeathThink nach button... (down) abgesucht und ne menge gelöscht... es hat sich aber net verändert

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
021
14.01.2001, 15:09
Another1



mmmh, ich würd das, wie schon gesagt, in CHalfLifeMultiplay::Think() einbauen (wenn nur normales deathmatch, nicht teamplay als grundlage benutzt wird, bei teamplay is dann CHalfLifeTeamplay::Think() nötig), also einfach unten ranbauen.
Probier mal den code:
(also dafür gibs doch bestimmt nen platz in euren credits ;)


int iTeam1Alive = 0;
int iTeam2Alive = 0;
int iValidPlayers = 0;

for(int i = 0;i<gpGlobals->maxClients;i++)
{
CBasePlayer *pPlayer = (CBasePlayer*)UTIL_PlayerByIndex(i);
if (!pPlayer)
continue;
if (pPlayer->IsAlive() && FStrEq(pPlayer->m_szTeamName,"Runner"));
iTeam1Alive++;
if (pPlayer->IsAlive() && FStrEq(pPlayer->m_szTeamName,"Hunter"));
iTeam2Alive++;
if(FStrEq(pPlayer->m_szTeamName,"Hunter") || FStrEq(pPlayer->m_szTeamName,"Runner"))
iValidPlayers ++;

};

if(((!iTeam1Alive && iTeam2Alive) || (iTeam1Alive && !iTeam2Alive)) && (iValidPlayers > 1))
{
for(int i = 0;i<gpGlobals->maxClients;i++)
{
CBasePlayer *pPlayer = (CBasePlayer*)UTIL_PlayerByIndex(i);
if(!pPlayer)
continue;
extern void respawn(entvars_t* pev, BOOL fCopyCorpse);
respawn(pPlayer->pev,FALSE);

};
char *szWinner = (iTeam1Alive)?"Runner":"Hunter";

UTIL_ClientPrintAll(HUD_PRINTCENTER,"%s Won the round! RoundRestart!\n",szWinner);
};

[c=red]ps: der code funzt nur ab 2 spieler oder höher! und beide müssen in verschiedenen teams sein![/c]

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
022
14.01.2001, 16:00
calle



Hallo Another1 !
Ich habe den Code jetzt genau so wie du es beschrieben hast eingebaut.
Der Code lies sich ohne Propleme Compilieren, was mich schon mal sehr gefreut hat !.
Ich habe es gleich in meinem kleinen Lan was aus zwei Rechnern besteht getestet.
Wie du ja schon bemerkt hast, habe ich zwei Teams in meinem Mod.
Das eine Team heist Hunter un das andere Runner.
Bei meinem Versuch, bestand jeweils ein Team aus einem Spieler, sowie du es beschrieben hast.
Als erstes habe ich mit meinem Hunter den Runner gekillt, und es kam die Message "Hunter Won the round! RoundRestart!" was ja auch so sein sollte.
Beide Teams haben Respawn, aber mit dem Hunter konnte ich nur weiter spielen. Der Runner allerdings ging in so eine art Observer Mode, wo ich Ihn zwar steuern konnte, aber keinen waffen hatte oder benutzen konnte.
Als Hunter konnte ich den Runner sehen aber durch Ihn durch laufen.
Als ich mit dem Runner den Hunter gekillt habe kam keine Message "Runner Won the round ! Round restart" sondern alles lief so weiter.
Der Hunter viel übrigens nicht in diesen komischen Observer Mode sondern blieb am boden liegen.
Die Zeit lief jedes mal weiter. Egal ob ich mit dem Hunter den Runner oder mit dem Runner den Hunter gekillt habe.
Auch als die Zeit rum war, und die Runde neu begann, konnte ich den Hunter nicht steuern, sondern er blieb am boden liegen.
Kannst du mir vieleicht sagen woran das liegt, das die Zeit weiter läuft, und woran es liegt das es wenn ich mit dem Hunter den Runner kille fast alles schon klappt, und anders rum nicht !
Bitte helfe mir ! den meine Motivation steigt wieder sehr bei diesem Teil erfolg !

DANKE

Calle

--

http://www.callesclub.de

zum Seitenanfang zum Seitenende Profil || Suche
023
14.01.2001, 16:09
RocketCoder



for(int i = 0;i<gpGlobals->maxClients;i++)
{
CBasePlayer *pPlayer = (CBasePlayer*)UTIL_PlayerByIndex(i);
if (!pPlayer)
{
continue;
}
if (pPlayer && FStrEq(pPlayer->m_szTeamName,"TEAM1_NAME"))
{
PlayersT1++;
}
if (pPlayer && FStrEq(pPlayer->m_szTeamName,"TEAM2_NAME"))
{
PlayersT2++;
}
}

for(i = 0;i<gpGlobals->maxClients;i++)
{
CBasePlayer *pPlayer = (CBasePlayer*)UTIL_PlayerByIndex(i);
if (!pPlayer)
{
continue;
}
if (pPlayer->IsAlive() && FStrEq(pPlayer->m_szTeamName,"TEAM1_NAME"))
{
Team1Alive++;
}
if (pPlayer->IsAlive() && FStrEq(pPlayer->m_szTeamName,"TEAM2_NAME"))
{
Team2Alive++;
}
}

------------------------------------
kann es sein, dass dieser code net funzt ? wenn ja welche stelle geht denn net ? ich hoffe jemand hilft...

--

cu

zum Seitenanfang zum Seitenende Profil || Suche
024
14.01.2001, 16:16
calle



Hier noch ein Nachtrag bezüglich "Credits" Another1 !
Wenn wir das zusammen hinbekommen, das es bei mir alles funzt !
bekommst du natürlich einen dicken Eintrag in den Credits !
Ich weis nicht wieviele Leute meinen Mod irgenwann Spiele werden, aber 2 Dinge sind sicher.
1.Ich werde meinen Mod "Run or Die" auf jeden Fall fertigstellen, auch wenn es noch Jahre dauern sollte.
2.ca.50 Leute werden meinen Mod auf jeden Fall spielen, denn ich habe einen großen bekanntenkreis wo ich manchmal ein Lan veranstalte, die dann meinen Mod natürlich Testen werden, und auch deinen Namen in den Credits finden werden.
Ich hoffe das verstärkt noch ein bischen mehr deine Motivation mir zu helfen.
Danke

Calle

--

http://www.callesclub.de

zum Seitenanfang zum Seitenende Profil || Suche