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



Hi!
Ich habe für meinen Mod zwei Teams erstellt, die sich jeweils in 3 Klassen aufteilen (wie bei CS). Das kann man in zwei Menüs einstellen, die am Anfang erscheinen. Wenn ich jetzt aber bei "Select your Team" auf 1 drücke, wählt er automatisch auch bei "Select your Appearance" Nr. 1 aus. Genauso bei Team 2. Ich post mal den Quellcode (gekürzt), helft mir bitte:

In player.cpp, Funktion PreThink (zum Ausprobieren):

//Boogdoo: (TeamPlay)
if(m_iUnselected==0)
{
//alles Anhalten für Team-Wahl --> Observer Mode implement. ?
pev->solid=SOLID_TRIGGER; //macht Player unsichtbar
pev->rendermode=kRenderTransTexture;
pev->renderamt=0;
EnableControl(FALSE);

ShowMenu(this,0x3F,0,0,"#team_list"); //zeigt Menü an

int slot = atoi(CMD_ARGV(1));

//Team-Wahl:
if (slot==1)
{
m_iPlayerClass = 1; //Team 1
ShowMenu(this,0x3F,1,0,"#team_list");
SelHeavenAppear();
}

if (slot==2) // Hell
{
m_iPlayerClass = 2;
ShowMenu(this,0x3F,1,0,"#team_list");
SelHellAppear();
}

}
else
{ //passt so, nix tun
}
//end Boogdoo (TeamPlay)

Am Ende von player.cpp:

//Boogdoo (Team-Wahl):
void CBasePlayer::SelHeavenAppear ( void )
{
CBasePlayer *pPlayer; // pPlayer initialisieren:
pPlayer = GetClassPtr((CBasePlayer *)pev);

int klasse1 = atoi(CMD_ARGV(1));

ShowMenu(this,0x3F,0,0,"#heaven_list");

// Appearance:
switch (klasse1)
{
case 1:
{
//Model ändern
g_engfuncs.pfnSetClientKeyValue( pPlayer->entindex(), g_engfuncs.pfnGetInfoKeyBuffer( pPlayer->edict() ), "model", "blackop" );
ShowMenu(this,0x3F,1,0,"#heaven_list");
m_iUnselected=1; //keine Team-Wahl unterm Spiel
}
break;
case 2:
{
//Model ändern
g_engfuncs.pfnSetClientKeyValue( pPlayer->entindex(), g_engfuncs.pfnGetInfoKeyBuffer( pPlayer->edict() ), "model", "007" );
ShowMenu(this,0x3F,1,0,"#heaven_list");
m_iUnselected=1; //keine Team-Wahl unterm Spiel
}
break;
case 3:
{
//Model ändern
g_engfuncs.pfnSetClientKeyValue( pPlayer->entindex(), g_engfuncs.pfnGetInfoKeyBuffer( pPlayer->edict() ), "model", "onna" );
GiveNamedItem( "weapon_gauss" );
ShowMenu(this,0x3F,1,0,"#heaven_list");
m_iUnselected=1; //keine Team-Wahl unterm Spiel
}
break;
default: break;
}

EnableControl(TRUE);
GiveNamedItem( "weapon_crowbar" );
GiveNamedItem( "weapon_9mmhandgun" );
GiveAmmo( 68, "9mm", _9MM_MAX_CARRY );// 4 full reloads
pev->max_health=120; //m_iMaxHealth gibts nicht
m_iClientHealth=pev->max_health;
pev->health=120;

pev->solid=SOLID_BBOX;
pev->rendermode=kRenderNormal;
pev->renderamt=255;

UpdateClientData();
MESSAGE_BEGIN(MSG_ONE,gmsgHealth,NULL,this->pev);
WRITE_BYTE(pev->health);
MESSAGE_END();
}

void CBasePlayer::SelHellAppear ( void )
{
CBasePlayer *pPlayer; // pPlayer initialisieren:
pPlayer = GetClassPtr((CBasePlayer *)pev);

int klasse2 = atoi(CMD_ARGV(1));

ShowMenu(this,0x3F,0,0,"#hell_list");

//Appearance:
switch (klasse2)
{
case 1:
{
g_engfuncs.pfnSetClientKeyValue( pPlayer->entindex(), g_engfuncs.pfnGetInfoKeyBuffer( pPlayer->edict() ), "model", "hgrunt" );
ShowMenu(this,0x3F,1,0,"#hell_list");
m_iUnselected=1; //keine Team-Wahl unterm Spiel
}
break;
case 2:
{
g_engfuncs.pfnSetClientKeyValue( pPlayer->entindex(), g_engfuncs.pfnGetInfoKeyBuffer( pPlayer->edict() ), "model", "robo" );
ShowMenu(this,0x3F,1,0,"#hell_list");
m_iUnselected=1; //keine Team-Wahl unterm Spiel
}
break;
case 3:
{
g_engfuncs.pfnSetClientKeyValue( pPlayer->entindex(), g_engfuncs.pfnGetInfoKeyBuffer( pPlayer->edict() ), "model", "recon" );
GiveNamedItem( "weapon_gauss" );
ShowMenu(this,0x3F,1,0,"#hell_list");
m_iUnselected=1; //keine Team-Wahl unterm Spiel
}
break;
default: break;
}

EnableControl(TRUE);
GiveNamedItem( "weapon_crowbar" );
GiveNamedItem( "weapon_9mmhandgun" );
GiveAmmo( 68, "9mm", _9MM_MAX_CARRY );
pev->max_health=80;
m_iClientHealth=pev->max_health;
pev->health=80;

pev->solid=SOLID_BBOX;
pev->rendermode=kRenderNormal;
pev->renderamt=255;

UpdateClientData();
MESSAGE_BEGIN(MSG_ONE,gmsgHealth,NULL,this->pev);
WRITE_BYTE(pev->health);
MESSAGE_END();
}

Es kommen keine Fehlermeldungen beim Kompilieren! Anscheinend kann man CMD_ARGV nur einmal belegen, abe mir fällt keine Lösung ein!

Boogdoo

--

------------------------------
© Boogdoo
a.k.a. -=[TFoG|Saddam]=-, ViZiT http://www.tfog-clan.de/

zum Seitenanfang zum Seitenende Profil || Suche
001
11.05.2000, 21:42
Prefect



Ähhh.... also mir ist etwas schleierhaft für was du CMD_ARGV hier verwenden willst. CMD_ARGV wird eigentlich nur verwendet, wenn du ein ClientCommand erhältst, um die Parameter zu erfragen. Vor allem PreThink() wird nicht innerhalb eines ClientCommands aufgerufen, der Code ist also allein vom Sinn her nicht richtig.

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
15.05.2000, 16:42
Boogdoo



Hi!
Ich hab alles in TeamPlay in die Funktion SelTeam() umgewandelt. Diese Funktion wird am Ende der Funktion InitHUD in der multiplay_gamerules.cpp (?) aufgerufen. Aber es geht immer noch nicht. Er nimmt wieder nur einmal eine Zahl an, dann wählt er wieder automatisch aus.
Du hast mir über ICQ gesagt, dass ich das mit CMD_ARGV in ClientCommand() kopieren soll, aber wie soll das dann funktionieren?? (keine Verbindung, ClientCommand gehört zu keiner Klasse...)
Wenn jemand Tutorials zu dem Thema kennt, bitte bitte posten!! Ich wollte mir eigentlich auf Half-Life Future das Tut von Morgan zum CS-Kaufmenü anschauen, aber der Link führt ins Leere :(

Boogdoo

--

------------------------------
© Boogdoo
a.k.a. -=[TFoG|Saddam]=-, ViZiT http://www.tfog-clan.de/

zum Seitenanfang zum Seitenende Profil || Suche
003
15.05.2000, 20:45
BigDaddy



Ist ganz logisch:
Du musst eine Bedingung einwerfen, wann zwischen den Slots ausgewählt wird z.B.:

ShowMenu...
int menu = 1
.
.
.
if menu == 11
{
if slot ...
.
.
.
}

ShowMenu...
menu = 2
.
.
.
if menu == 2
{
if slot == ...
.
.
.
}

Ganz einfach. oder?

--

zum Seitenanfang zum Seitenende Profil || Suche
004
16.05.2000, 15:40
Boogdoo



Ich komme immer noch nicht mit :( (bin ich wirklich so dumm?)
Wenn du sagst
int menu = 1
und dann mit if (menu== ...irgendeinen Wert von Menü prüfst, dann macht das doch keinen Sinn, oder, weil menu ja irgendwie verändert werden muss. Ich versteh nicht ganz, wie du das gemeint hast. Könntest du es bitte genauer erklären?

Boogdoo

--

------------------------------
© Boogdoo
a.k.a. -=[TFoG|Saddam]=-, ViZiT http://www.tfog-clan.de/

zum Seitenanfang zum Seitenende Profil || Suche
005
16.05.2000, 16:23
TheTinySteini



Hmm, mir fällt da grade ein kleiner, aber eventuell ausschlaggebender Fehler ins Auge: Beim zweiten Mal Auswählen (Spielermodel) setzt du erst "int klasse2 = atoi(CMD_ARGV(1));", dann kommt erst "ShowMenu(this,0x3F,0,0,"#hell_list");", aber es muss andersrum sein.
Ansonsten bin ich erst noch am "durch den Code durchsteigen"...

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
006
16.05.2000, 19:09
BigDaddy



@Bogdoo:
Der Ansatz an deinem Code ist falsch, das ganze muss in Funktionen gefasst werden und von der ClientCommand-Funktion in der Datei teamplay.cpp aus aufgerufen werden, damit der Spieler meinetwegen changeteam in die Konsole eingibt, und dann das Menü gestartet wird etc...

--

zum Seitenanfang zum Seitenende Profil || Suche
007
16.05.2000, 19:55
Boogdoo



@TinySteini: Thx für den Tip, hat aber nicht gewirkt, er wählt immer noch doppelt aus :(
@BigDaddy: In Funktionen habe ich es inzwischen gefasst (SelTeam, SellHeavenAppear und SelHellAppear). Aber das mit dem "changeteam" eingeben finde ich ein bißchen umständlich (du nicht auch?) und: Wie haben es die bei CS dann hingebracht (z.B. das Kaufmenü und Teamwahl-Menü haben das selbe Prinzip)?

Boogdoo

--

------------------------------
© Boogdoo
a.k.a. -=[TFoG|Saddam]=-, ViZiT http://www.tfog-clan.de/

zum Seitenanfang zum Seitenende Profil || Suche
008
17.05.2000, 14:46
BigDaddy



Das ist ja das geringste der Probleme, das man einfach dem Konsolen-Kommando eine Taste zuweist. Du kannst zum Beispiel, wenn du dann alles in Funktionen hast einmal das Menü aufrufen und die das switch-Kommando. Einfache Kommandos dan mit selappear oder changeteam usw...
Um Tasten zuzuweisen tippst du entweder im Spiel in der Konsole ein:
bind n changeteam und
bind m selappear
ein, oder in deiner
gfx/shell/kb_act.lst (musst du erst aus HL kopieren) am Ende der Datei:
"changeteam" "Channging Teams", dann kannst du mit Configuration und Keyboard die Taste einstellen.

--

zum Seitenanfang zum Seitenende Profil || Suche
009
17.05.2000, 15:06
Boogdoo



Das ist schon klar, wie man Tasten an was bindet, aber ich will das ja gar nicht: Wenn man in CS ein neues Spiel startet oder betritt, dann muss man keine Taste drücken, das Menü erscheint automatisch. So will ich es gerne machen, nur dieses Menü will einfach nicht eine zweite Eingabe, sondern nimmt die erste auch gleich für das zweite Menü her.

Boogdoo

--

------------------------------
© Boogdoo
a.k.a. -=[TFoG|Saddam]=-, ViZiT http://www.tfog-clan.de/

zum Seitenanfang zum Seitenende Profil || Suche
010
17.05.2000, 15:26
Masterstroke



Also....Ich klinke mich jetzt auch mal wieder ein....
Du möchtest alos zwei Menüs direkt hintereinander, bei denen man bei beiden etwas wählen kann klar??
Angenommen du benutzt nicht die Player.cpp, scondern meinetwegen die teamplay_gamerules, denn dort ist es einfacher zu erklären...
Also...Das Spiel startet im TeamPlay Modus und du willst gleich am Anfang wählen, dann musst du in die InitHud Funktion in der teamplay_gamerules den ShowMenu Krams reinschreiben, ok?
Wenn aber nun ein Spieler eine Taste drückt, dann wird diese Taste an menuselect übergeben, also machst du es so, das du eine Variable machst, in der gespeichert wird, welches Menü du gerade aufgerufen hast....
Wenn dann die Taste an menuselect übergeben wurde, dann musst du nur in der Funktion MenuSelect dieses auswerten...Nach dem auswerten gibst du dann das zweite Menü aus....Das speicherst du wieder in der Variable, und das wertest du wieder aus....

Ich habe jetzt keine Zeit mehr mehr zu erklären, doch ich denke, es ist klar, was falsch bei dir ist,...Ich habe zwar noch nicht alles gelesen, aber so wie ich das sehe, nimmst du gleich nach dem anzeigen des Menüs die Tasten, was nicht klappt....

Naja, wenn du es nicht verstehst(was ich verstehen würde...ich habe nämlich das geschrieben, was mit eingefallen ist), dann sag an....

(Ich hatte mir sowieso igrendwann mal vorgenommen, mein Menü, etc. Tutorial fertig zu machen...mal sehen...)

--

Masterstroke
resourcecode.de

zum Seitenanfang zum Seitenende Profil || Suche
011
17.05.2000, 20:29
Boogdoo



Erstmal danke, dass ihr so geduldig mit mir seid :)
@Masterstroke: Das Spiel im TeamPlay-Modus starten, heißt das, bei Create Game bei "Teamplay" ein Häkchen machen? Kann man das automatisch einstellen, dass TeamPlay aktiviert ist (wie be CS :))
Ich würd mich sehr sehr freuen, wenn du dein Tutorial bald fertig machst, ich bin nämlich nicht so ganz mitgekommen. Ich probier mal ein bißchen rum und verschieb das ganze nach teamplay_gamerules, vielleicht hauts ja mal hin.

Boogdoo

--

------------------------------
© Boogdoo
a.k.a. -=[TFoG|Saddam]=-, ViZiT http://www.tfog-clan.de/

zum Seitenanfang zum Seitenende Profil || Suche
012
17.05.2000, 22:02
Prefect



In InstallGameRules gehen und den gesamten unteren Teil durch

CVAR_SET_FLOAT("mp_teamplay", 1.0);
return new CHalfLifeTeamplay;

ersetzen.

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
013
17.05.2000, 22:40
Masterstroke



Naja, eigentlich ist das setzen der TeamPlay Variable doch gänzlich unwichtig....
...egal...

--

Masterstroke
resourcecode.de

zum Seitenanfang zum Seitenende Profil || Suche
014
18.05.2000, 13:55
BigDaddy



Nicht unbedingt, denn GameSpy 3D liest immer diese Variable aus, um festzustellen, bzw. dem Benutzer zu sagen, dass Teamplay aktiviert ist.

--

zum Seitenanfang zum Seitenende Profil || Suche
015
19.05.2000, 20:55
Prefect



@Masterstroke: So was macht man aus Prinzip :)

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
21.05.2000, 10:50
Boogdoo



hi!
Ich sitze immer noch auf der Leitung. Ich hab zwar alles, was ihr mir gesagt und ich kapiert hab, ausprobiert, aber es haut immer noch nicht hin. Würde mir bitte, bitte, einer von euch ein Tutorial schreiben (darf auch gern Copy&Paste sein :)) oder mir einen Link zu einem guten Tutorial über dieses Thema sagen?

Boogdoo

--

------------------------------
© Boogdoo
a.k.a. -=[TFoG|Saddam]=-, ViZiT http://www.tfog-clan.de/

zum Seitenanfang zum Seitenende Profil || Suche