Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
25.09.2001, 16:37
Morgan[HLF]



Hi Leute,
nehmen wir einmal an ich hätte 2 Spielerklassen, einen normalen Spieler und ein Monster.

Nun möchte ich das am Anfang des Spiels ein Spieler das Monster wird ! Wenn dieses Monster einen Spieler tötet , dann wird dieser Spieler das Monster!

Wie könnte man das realisieren ?!

Problemlösungen und Denkanstöße sind willkommen!

--

http://www.powercreator.de <-Screen & Printdesign

zum Seitenanfang zum Seitenende Profil || Suche
001
25.09.2001, 17:38
R2-D2



definier ne variable in der player.h, die du zb "m_iClassNumber" nennst.
und in multiplay_gamerules.cpp in PlayerSpawn(oder so ähnlich) fragste ab, ob m_iClassNumber 0 oder 1 is...je nachdem machste dann entsprechende aenderungen.
und in die player.cpp in die Killed function schreibste ungefaehr das:

if(m_iClassNumber==0)
m_iClassNumber=1;
else if(m_iClassNumber==1)
m_iClassNumber=0;

alles klar?

--

®2-D2
Believe in Retrieve :)

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

zum Seitenanfang zum Seitenende Profil || Suche
002
25.09.2001, 17:45
Morgan[HLF]



Das ist mir von Anfang an klar gewesen, mein Problem liegt darin, das wenn das "Monster " einen tötet dieser dann das Monster wird !

alles klar ?!:)

--

http://www.powercreator.de <-Screen & Printdesign

zum Seitenanfang zum Seitenende Profil || Suche
003
25.09.2001, 17:47
Retro



Dürfte per "pev->attacker->m_iClassNumber = 1;" gehen

--

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.09.2001, 18:02
anothergb02



wenn du es ganz simpel mache willst machst du das so:
TakeDmage .. oder irgend wo da .. halt in der die Funk
CBaseEntity pEntity = Attacker;
und dann this = pEntity :D lol naja ob das so funken wird ? sicher nicht also währe besser wenn du einfach nur das model und das team kopierst
also pev->team = pevAttacker->team;
und dann halt noch das Model, kannst ja im Notfall iuser4 als Modelindex oder ModleString benutzen und daran halt erkennen, welches Model.....
oder mach das irgend wie :D naja es gibt unendlich viele Moeglichkeiten, wie du das machen kannst :P aber wähle moeglichst eine Sinvolle !

--

Being in john Malkovich
.....

zum Seitenanfang zum Seitenende Profil || Suche
005
25.09.2001, 18:30
Morgan[HLF]



öhm ja alles klar:=)

Du meinst also ich soll in der CBaseAttacker oder wied das heißt die Abfrage machen wen das "Monster" getötet hat ja?

Oder sehe ich das falsch ?

Andere Denkansätze sind willkommen:)

--

http://www.powercreator.de <-Screen & Printdesign

zum Seitenanfang zum Seitenende Profil || Suche
006
25.09.2001, 21:09
Morgan[HLF]



So das mit den beiden Spielerklassen habe ich jetzt hinbekommen!!

Meine Variable heißt m_iPlayerClass!!

Wenn man in Spiel kommt soll einer der Spieler das Monster werden!

Ich habe dafür diesen Code:

pPlayer->m_iPlayerClass = rand()%1+1; Es gibt ja 2 Klassen also soll er auch nur 2 Zufallszahlen generieren!

Aber wo soll dieser Code hin, ich denke mal entweder in der multyplay_gamerules.cpp in PlayerSpawn oder in player.cpp in Spawn! Was denkt ihr ?
Also ich habe es zur Zeit in der multylpay_gamerules.cpp ! Aber irgendwie bleibe ich immer dieselbe Klasse!! Ka wieso!

Und wie kann ich es machen das nur einer von allen Spielern der Scream am Anfang wird ??

--

http://www.powercreator.de <-Screen & Printdesign

zum Seitenanfang zum Seitenende Profil || Suche
007
26.09.2001, 13:15
thinktank



Du kannst aber auch die Variable pev->playerclass benutzen (ist ja extra dafür vorgesehen (oder?)). Aber benutze nicht pev->classname , da das der Name der Klasse(also in diesem Fall : "player") ist und nicht der Name der anderen Klasse (z.B.:"Monster"). Oder ?
[edit]
Dieser Code ist "fast" richtig :) :

pPlayer->m_iPlayerClass = rand()%1+1;

Da Punkt-Vor-Strich gilt muss du es folgendermaßen schreiben :

pPlayer->m_iPlayerClass = rand()%2;

Oder wenn du willst, dass nur eine 1 und eine 2 rauskommen können, dann so:

pPlayer->m_iPlayerClass = (rand()%2)+1;

Verstanden ;) ? Oder war das falsch ( ich bin ziemlich unsicher, bei den ganzen Profs hier ;) )

[/edit]

--


Dieser Beitrag wurde am 26.09.2001 um 13:19 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
26.09.2001, 13:51
Archangel



Zitat:
thinktank postete

Dieser Code ist "fast" richtig :) :

pPlayer->m_iPlayerClass = rand()%1+1;

Da Punkt-Vor-Strich gilt muss du es folgendermaßen schreiben :

pPlayer->m_iPlayerClass = rand()%2;

Oder wenn du willst, dass nur eine 1 und eine 2 rauskommen können, dann so:

pPlayer->m_iPlayerClass = (rand()%2)+1;

[/edit]

nein, das ist falsch

rand()%2 liefert eine zahl zwischen 0 und 2, also 3 zahlen

und @Morgan:
ich weiß nich was das rand()%1+1 bringen soll.. rand()%1 reicht doch auch, 0 und 1 als klassen find ich irgendwie logischer als 1 und 2

--

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
009
26.09.2001, 14:14
Morgan[HLF]



Ja das habe ich ja, jetzt habe ich noch ein paar Probleme und zwar

1. soll das Monster solange das Monster bleiben bis ein Spieler den killt
2. der normale Spieler solange ein normaler Spieler bis er das Monster kill
3. die Abfrage ob ein Spieler das Monster getötet hart und dieser dann zum Monster wird, irgendwie mit attaker oder so!

Need Assistance!

--

http://www.powercreator.de <-Screen & Printdesign

zum Seitenanfang zum Seitenende Profil || Suche
010
26.09.2001, 14:54
Archangel



versuchs mal so:

in der CBasePlayer::Killed(entvars_t *attacker, ...........)

schreibst du hin:
if(m_iPlayerClass) { // Spieler ist Mensch
CBasePlayer *pPlayer = (CBasePlayer *)UTIL_PlayerByIndex(ENTINDEX(ENT(attacker)) - 1);
pPlayer->m_iPlayerClass = 1;
m_iPlayerClass = 0;
}

ich weiß nit ob der param attacker heißt, und garantie, daß es absturzsicher funzt hab ich auch nich, aber ich geh mal davon aus, das die entindizes 1 - 32 (oder 1 - MAXCLIENTS) für die spieler reserviert sind..

wenn m_iPlayerClass private is, musst du noch ne funktion SetPlayerClass einbauen..

--

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
011
26.09.2001, 15:15
Morgan[HLF]



Muss das nicht so aussehen: 0 ist für Spielerklasse Mensch

if(m_iPlayerClass==0) { // Spieler ist Mensch
CBasePlayer *pPlayer = (CBasePlayer *)UTIL_PlayerByIndex(ENTINDEX(ENT(attacker)) - 1);
pPlayer->m_iPlayerClass = 1;
m_iPlayerClass = 0;//Wofür soll das sein, der Spieler wird doch eine Zeile darüber auf Mosnter gesetzt, hier setzt du es wieder um ???!!!

Der erkennt das attacker nicht, ich habe daraus pevAtacker gemacht! Solbald ich dann sterbe stürzt hl ab!

--

http://www.powercreator.de <-Screen & Printdesign


Dieser Beitrag wurde am 26.09.2001 um 15:31 von Morgan[HLF] bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
012
26.09.2001, 16:20
Archangel



nein nein...
ich nehme hier für spielerklasse mensch 1, und eine abfrage
if(var)
ist äquivalent zu if(var != 0)
und außerdem ist pPlayer nicht der spieler, von dem aus die funk aufgerufen wird, sondern der angreifer

--

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
013
26.09.2001, 16:47
Morgan[HLF]



Also muss das so bei mir aussegehen wenn Monster 1 und Opfer 0 ist ?

if(m_iPlayerClass!=1) // Spieler ist Mensch
{
CBasePlayer *pPlayer = (CBasePlayer *)UTIL_PlayerByIndex(ENTINDEX(ENT(pevAttacker)) - 1);
pPlayer->m_iPlayerClass = 0;
m_iPlayerClass = 1;
}

Ich habe jetzt noch ein Probelem und zwar wie kann ich abfragen ob schon ein Spieler ein Monster ist ? Bestimmt nicht mit pPlayer !

--

http://www.powercreator.de <-Screen & Printdesign

zum Seitenanfang zum Seitenende Profil || Suche
014
26.09.2001, 18:36
anothergb02



int monsters = 0;
int humans = 0;

CBasePlayer *pPlayer = NULL;
int index = 0;
while(pPlayer = UTIL_PlayerByIndex(index))
{
pPlayer->m_iPlayerClass == 0 ? humans ++ : monsters ++;
index ++;
}

das ist alles !

--

Being in john Malkovich
.....

zum Seitenanfang zum Seitenende Profil || Suche
015
26.09.2001, 21:13
Prefect



OMG was müssen meine armen Augen da lesen?

zahl % 2 ergibt _nur_ 0 oder 1. Das ist doch eigentlich logisch, denn es ist der Rest einer Division durch 2. Und wenn man was durch 2 teilt, dann kriegt man entweder Rest 0 oder Rest 1. Das hat man mal in der Grundschule gelesen ;p

Um also einem Spieler rein zufällig eine PlayerClass zuzuweisen machst du einfach m_iPlayerClass = rand()%2; bzw. im HL-Code sowieso m_iPlayerClass = RANDOM_LONG(0,1);

Und danach würde ich den DeathMessage-Code in den Gamerules durchsuchen, da hat man nämlich alles schön aufgelistet: Wer getötet wurde, von wem usw.
Abgesehen davon sind die Gamerules eh der richtige Platz für solchen Code.

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
016
26.09.2001, 21:15
Archangel



ack :\

--

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
017
26.09.2001, 21:52
thinktank



Danke , Prefect ;) ! Wenigstens einer, der an mich glaubt :D !
Wieso benutzt ihr nicht pev->playerclass ?

--

zum Seitenanfang zum Seitenende Profil || Suche
018
26.09.2001, 22:04
Morgan[HLF]



Jungens Jungens das Problem mit dem Zufall ist doch schon laaaaaange gelöst!!!!

Also nochmal meine Probleme:
1. Wie und wo kann ich es machen das nur einer der Spieler am Anfang das Monster wird!
2. Wie und wo kann ich es machen das der Spieler der das Monster tötet das Monster wird ???

THX For Help

--

http://www.powercreator.de <-Screen & Printdesign

zum Seitenanfang zum Seitenende Profil || Suche
019
27.09.2001, 15:51
Morgan[HLF]



Keiner eine Idee ?

--

http://www.powercreator.de <-Screen & Printdesign

zum Seitenanfang zum Seitenende Profil || Suche
020
27.09.2001, 16:40
Linga
Administrator


du hast das gestern erst gepostet. vielleicht wartest du mal einen moment ab?

deinen alten post hättest du übrigens auch editieren können.

--

zum Seitenanfang zum Seitenende Profil || Suche
021
29.09.2001, 10:17
Morgan[HLF]



Also den 2. Punkt habe ich jetzt jetzt benötige ich nur noch Punkt 1:

1. Wie und wo kann ich es machen das nur einer der Spieler am Anfang das Monster wird!

Jemand eine Idee wie das aussehen könnte ?

--

http://www.powercreator.de <-Screen & Printdesign

zum Seitenanfang zum Seitenende Profil || Suche
022
01.10.2001, 19:33
SAugSTelle



also wo denk ich mal in multiplayer_gamerules.cpp unter CHalfLifeMultiplay :: PlayerSpawn aber wie weis ich nich (wüsst ich aba gern) ich versuchs jez mal selber (bei mir geht es nicht um nachmachungen oder monster!!).

also wenn ich meine idee hinkrieg dann kann ich dir wahrscheinlich auch sagen wie du dein monter hinkriegst... mal sehen ;)

--

zum Seitenanfang zum Seitenende Profil || Suche
023
01.10.2001, 19:51
Prefect



Lies dir mal den Code von anothergb02 durch, das ist eine Schleife mit der du die humans und monsters zählen kannst. Und jetzt rate mal was zu tun ist... genau, immer wenn !monsters mußt du den Spieler, der in Erwägung kommt, zum Monster machen. Am Besten wäre es, du würdest regelmäßig (alle 30-60 Sekunden) so einen Sicherheitstest machen für den Fall, daß der Monsterspieler das Spiel verläßt. Zwar wird normalerweise eine entsprechende Disconnect-Funktion aufgerufen (in der du natürlich auch einen Aufruf auf den Test machen solltest), aber die Engine ist in Sonderfällen afaik etwas nachlässig.

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
024
07.10.2001, 18:36
bbjoker



Mache doch einfach ein VGUI-Menü, das am Anfang einer Map erscehint in dem einer das Monster wählen kann, der Rest dann NUR den Menschen!

Ich kenne deine Spielidee auf dem HULK-Mod zu Q3A!

die Dateien die du veränden musst:

hud.cpp
hud.h
hud ....

u.s.w.!

Les dir einfach nen Tut´durch gibt viele zu diesem Thema!

--

zum Seitenanfang zum Seitenende Profil || Suche