←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Jak wypisać, która zmienna jest używana?

Locked

GoldeN's Photo GoldeN 21.03.2011

Witam, mam coś takiego:

enum { zero = 0, jeden, dwa, trzy }
new const nazwa[][] = { "", "Jeden", "Dwa", "Trzy" }
new ktore[4][33];


Przypuśćmy, że gracz z menu wybierze Dwa to zmienna będzie wyglądać tak:

ktore[dwa][id] = 1


Jak mogę sprawdzić i wyświetlić nazwę którą liczbę wybrał? Czyli gracz wybrał trzy, to zamiast pisać trzy razy:

if(ktore[jeden][id] > 0) client_print(id, print_chat, "Jeden")
else if(ktore[dwa][id] > 0) client_print(id, print_chat, "Dwa")
else if(ktore[trzy][id] > 0) client_print(id, print_chat, "Trzy")


Zrobić raz z użyciem zmiennej nazwa[][] ?
Edited by GoldeN, 21.03.2011 19:08.
Quote

  • +
  • -
Knopers's Photo Knopers 21.03.2011

Za pomocą pętli ?
np:
for(new i = 0; i < sizeof(ktore); i++)
if(ktore[i] == 1) costam(ktore[i]);
Quote

GoldeN's Photo GoldeN 21.03.2011

Próbowałem:

public look(id)
{
for(new i = 1; i < sizeof(nazwa); i++)
{
if(ktore[i][id] > 0)
{
client_print(id, print_chat, "%s", nazwa[ktore[i][id]])
}
}
}


Wyświetla zawsze "Jeden" mimo, że wybrałem np. Trzy. Umyślnie zacząłem pętlę od 1, bo po co ma wyświetlać spacje jak będzie 0.
Edited by GoldeN, 21.03.2011 19:27.
Quote

  • +
  • -
G[o]Q's Photo G[o]Q 21.03.2011

public look(id)

{

        for(new i = 1; i < sizeof(nazwa); i++)

        {

                if(ktore[id][i] > 0)

                {

                        client_print(id, print_chat, "%s", nazwa[ktore[id][i]])

                }

        }

}
Quote

  • +
  • -
DarkGL's Photo DarkGL 21.03.2011

public look(id)
{
        for(new i = 0; i < sizeof(nazwa); i++)
        {
                if(ktore[i][id] > 0)
                {
                        client_print(id, print_chat, "%s", nazwa[ktore[i][id]])
                }
        }
}

zle ustawiasz graczowi ten kod na gorze jest poprawny
Quote

GoldeN's Photo GoldeN 21.03.2011

Identycznie mam i zawsze pokazuje "Jeden" nie ważne czy wezmę "Dwa", czy "Trzy".
Quote

  • +
  • -
Cypis''s Photo Cypis' 21.03.2011

a to czasem nie powinno być tak:
client_print(id, print_chat, "%s", nazwa[i])

Edited by Cypis', 21.03.2011 19:50.
Quote

GoldeN's Photo GoldeN 21.03.2011

a to czasem nie powinno być tak:

client_print(id, print_chat, "%s", nazwa[i])



Nie, wtedy wypisze nazwę taką jaka jest w pętli.
Quote

  • +
  • -
R3X's Photo R3X 21.03.2011

Cypis ma rację
public look(id)
{
        for(new i = 0; i < sizeof(nazwa); i++)
        {
                if(ktore[i][id] > 0)
                {
                        client_print(id, print_chat, "%s", nazwa[i]);
                        break;
                }
        }
}
Quote

  • +
  • -
Knopers's Photo Knopers 21.03.2011

yyy tylko czemu sizeof(nazwa) a nie sizeof(ktore) ?
chyba powinno być sizeof(ktore) chociaż i tak te tablice teoretycznie powinny być sobie równe jeśli nie chcemy jakiegoś seg fault'a
Quote

  • +
  • -
R3X's Photo R3X 21.03.2011

jak idziemy w te stronę to po co w ogóle tyle komórek pamięci?
new ktore[33];
ktore[id] = 1; //, 2, 3 lub 4;

if(ktore[id] >= 0 && ktore[id] < sizeof(nazwa))
    client_print(id, print_chat, "%s", nazwa[ktore[id]])
Quote

GoldeN's Photo GoldeN 21.03.2011

Racja. Udało się. ; D Dziękuję. ; >

Tyle komórek, ponieważ te zmienne mają swoje "poziomy" i np może być ktore[jeden][id] = lvl
Edited by GoldeN, 21.03.2011 20:49.
Quote
Locked