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



Hi,
Ich hab mal wieder ein Problem mit menus:
Ich kann nicht mehr als 5 Zahlen bei einem menu drücken, und habs auch schon mit den hexzahlen ausprobiert, was ist das Problem?

Hier mal der Code:

BOOL CHalfLifeTeamplay :: ClientCommand( CBasePlayer *pPlayer, const char *pcmd )
{
if ( FStrEq( pcmd, "menuselect" ) )
{
if ( CMD_ARGC() < 2 )
return TRUE;

int slot = atoi( CMD_ARGV(1) );

switch(pPlayer->m_iMenu)
{
case Menu_Buy:
switch (slot)
{
case 1:
pPlayer->m_iMenu = Menu_weapon1;
ShowMenu (pPlayer, 0x3F, 0, 0, "#weapon1_buy");
break;
case 2:
pPlayer->m_iMenu = Menu_ammo1;
ShowMenu (pPlayer, 0x1FF, 0, 0, "#ammo1_buy");
break;
case 3:
pPlayer->m_iMenu = Menu_item1;
ShowMenu (pPlayer, 0x3F, 0, 0, "#item1_buy");
break;
}
break;

case Menu_weapon1:
switch (slot)
{
case 0:
break;
case 1:
pPlayer->GiveNamedItem( "weapon_handgrenade" );
break;
case 2:
pPlayer->GiveNamedItem( "weapon_m4a1" );
break;
case 3:
pPlayer->GiveNamedItem( "weapon_shotgun" );
break;
case 4:
pPlayer->GiveNamedItem( "weapon_9mmAR" );
break;
case 5:
pPlayer->m_iMenu = Menu_weapon2;
ShowMenu (pPlayer, 0x3F, 0, 0, "#weapon2_buy");
break;
}

break;

case Menu_weapon2:
switch (slot)
{
case 1:
pPlayer->GiveNamedItem( "weapon_crossbow" );
break;
case 2:
pPlayer->GiveNamedItem( "weapon_rpg" );
break;
case 3:
pPlayer->GiveNamedItem( "weapon_lasergun" );
break;
case 4:
pPlayer->GiveNamedItem( "weapon_lasergun" );
break;
case 5:
pPlayer->m_iMenu = Menu_weapon1;
ShowMenu (pPlayer, 0x3F, 0, 0, "#weapon1_buy");
}

break;

//--------------------------------------------
// Bei der Ammofunktion funzt es net?!?
//--------------------------------------------
case Menu_ammo1:
switch (slot)
{
case 0:
break;
case 1:
pPlayer->GiveNamedItem( "ammo_9mmclip" );
break;
case 2:
pPlayer->GiveNamedItem( "ammo_9mmAR" );
break;
case 3:
pPlayer->GiveNamedItem( "ammo_buckshot" );
break;
case 4:
pPlayer->GiveNamedItem( "ammo_ARgrenades" );
break;
case 5:
pPlayer->GiveNamedItem( "ammo_crossbow" );
break;
case 6:
pPlayer->GiveNamedItem( "ammo_rpgclip" );
break;
case 7:
pPlayer->GiveNamedItem( "ammo_gaussclip" );
pPlayer->GiveNamedItem( "ammo_gaussclip" );
break;
case 8:
pPlayer->GiveNamedItem( "ammo_gaussclip" );
break;
case 9:
break;

}
break;
}

// end addition

// select the item from the current menu

return TRUE;
}

else if (FStrEq(pcmd, "buy"))
{
pPlayer->ShowMenu ( 0x1FF, 0, 0, "#buy_menu" );
pPlayer->m_iMenu = Menu_Buy;
return TRUE;
}

return FALSE;
}

was mache ich falsch?

--

www.GamersScene.de

zum Seitenanfang zum Seitenende Profil || Suche
001
08.01.2001, 14:21
DarKnight



ShowMenu (pPlayer, 0x3F, 0, 0, "#weapon1_buy");

0x3F

ich glaub da werden die Anzahl der Einträge des Menüs eingerichtet. Musst die halt in deine 5 verändern!

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
002
08.01.2001, 14:29
apfelkorn



muuh...
du musst in der console folgende binds machen:
Quellcode:
bind "1" "slot1"
bind "2" "slot2"
bind "3" "slot3"
bind "4" "slot4"
bind "5" "slot5"
bind "6" "slot6"
bind "7" "slot7"
bind "8" "slot8"
bind "9" "slot9"
bind "0" "slot10"

aber wie hast du rausbekommen, das man 0x1FF z. B. angeben muss?

--

zum Seitenanfang zum Seitenende Profil || Suche
003
08.01.2001, 14:33
DarKnight



Hi!

steht in einem Tutorial. Es ist eine Hexadezimalzahl oder sowas. wenn man die net verändert gehts angeblich net. das was du gesagt hast ist natürlich selbstverständlich

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
004
08.01.2001, 14:58
Basman



111111111 in Binär ist in hex 1FF
jede 1 steht für eine funktion
3F steht dann für 111111, case 0-case5
ok?

--
Danke für die Antwort

--

www.GamersScene.de

zum Seitenanfang zum Seitenende Profil || Suche
005
08.01.2001, 15:31
DarKnight



Danke für die Aufklärung!

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
006
08.01.2001, 15:42
Another1



@Basman: War das nit deine Frage im ICQ?? Uhm =) Ich dachte ich hatte es dir gesagt =)

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
007
08.01.2001, 21:39
Basman



ja
@another,
das war für die auswahl, das mit den bits funzt auch, hab sie auch benutzt, aber hatte dann nur von slot 1-6 ausprobiert; und so dachte ich es geht auch von 0-9.
Noch frage zu den Bits:
wenn ich BIT 9 schreibe, brauche ich dafor keine anderen Bits mehr, sonderen währe die binär Zahl zugross, dass heist wenn ich Bit 9 schreibe reicht das aus(von slot 0-9).

--

www.GamersScene.de

zum Seitenanfang zum Seitenende Profil || Suche
008
08.01.2001, 22:43
Another1



eigentlich nit, da bit 9 nur eben bit 9 erwicht (1<<9) (kannste ja ausrechnen )

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
009
09.01.2001, 16:05
Basman



hª: ;

#define BIT1 1
#define BIT2 2
#define BIT3 4
#define BIT4 8
#define BIT5 16
#define BIT6 32
#define BIT7 64
#define BIT8 128
#define BIT9 256
#define BIT10 512
#define BIT11 1024
#define BIT12 2048
#define BIT13 4096
#define BIT14 8192
#define BIT15 16384
#define BIT16 32768

nimm mªl Bit 10 oder so, dªnn ist BIT8 mit 128 in 512 schon drinn;
Dªnn wª:re es ja möglich eine Zªhl; z.B. 4 ; ªuszulªssen.?

--

www.GamersScene.de

zum Seitenanfang zum Seitenende Profil || Suche
010
09.01.2001, 16:31
Another1



NEEEIN!!!!
Stell dir das binäre zahlen system vor:
000110010

das heißt bit 4,5 und 8 sind 1 (von links gezählt), alle anderen Null, das is dann als wenn bei uns, sagen wir mal 9 an einer position an heißt an, und 0 heißt aus, das sehe dann so bei uns aus:

000990090

das wäre aber verschwendung, da man ja nur ein BIT (AN und AUS) pro bool oder schalter oder wasauchimmer brauch, da eine integer aber 4 byte (32 BIT) benutzt, heißt das, man kann in einer Integer 32 AN oder AUS werte unabhängig voneinander speichern!

stell dir nun die zahl 2 als binär vor:
01 ,d.h das 2. bit is an (1) und alle anderen sind AUS (0)
oder bei decimal 5, binär 101
(BIT1 (decimal = 1) und BIT3 (decimal = 4) sind 1, man addiert einfach die werte 1+4 und in hexadecimaler schreibweise wäre dann einfach das erste BIT 1 das 2. bit 0 und das 3. bit 1, dies kann man nun testen. mit der & operation, die vergleicht, ob das bit gesetzt ist (oder so ähnlich)

int bitfield = BIT1 | BIT4; // setze bit 1 und bit4
if(bitfield & BIT4) // ist bit 4 auf eins???
{
do some stuff
// sollte auf jeden fall hierhin kommen!!!

};

hoffe das hat geholfen =)

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
011
09.01.2001, 16:55
Basman



Dann würde ich aber nicht schreiben/ oder dazu schreiben:

#define XYX5 0x3F
oder:
#define XYX10 0x1FF

das müsste dann aber alle Zahlen von 0-5 oder 0-10 freischalten.

--

www.GamersScene.de

zum Seitenanfang zum Seitenende Profil || Suche