←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Pytanie o tablice

Zablokowany

  • +
  • -
Andrzejek - zdjęcie Andrzejek 11.08.2013

Witam, zrobiłem sobie taką tablce:

 

new Przedzial_Pierwszy[][] = {
    {"Brak", "Brak Misji", 0, 0},
    {"Tytul", "Opis misj", 250, 15},
    {"Tytul", "Opis misj", 250, 15},
    {"Tytul", "Opis misj", 250, 15},
    {"Tytul", "Opis misj", 250, 15}
}

 

0 = Tytuł misji

1 = Opis misji

2 = Nagroda

3 = Np. ile kogo mamy razy zabić

 

I gdy robię tak: Przedzial_Pierwszy[numer misji][0] to jest okej ale gdy dam np. tak: Przedzial_Pierwszy[numer misji][1] lub 2, 3, no to ustawia też Tytuł misji

 

I chciał bym zapytać czy ja poprawienie zrobiłem tą tablice? Może ma inaczej wyglądać?

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 11.08.2013

W taki sposób nie możesz mieszać, jak już, to trzeba zrobić tak
enum eData {
ETytul[64],
EOpis[128],
ENagroda,
EIle
}

new Przedzial_Pierwszy[][eData] = {
{"Brak", "Brak Misji", 0, 0},
{"Tytul", "Opis misj", 250, 15},
{"Tytul", "Opis misj", 250, 15},
{"Tytul", "Opis misj", 250, 15},
{"Tytul", "Opis misj", 250, 15}
}

powinno działać.
Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 11.08.2013

any: i trzy wymiary też by chyba połknęło lecz ręki nie dam, gdyż nie mam gdzie sprawdzić.
Przypomniałem sobie, ja podobną tablice tylko miałem float zamiast string, kod podany wyżej będzie do tego celu lepszy.
Użytkownik K!113r edytował ten post 11.08.2013 14:44
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 11.08.2013

Okej zaraz to przetestuje, nawet nie pomyślałem o enumie ^^

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 11.08.2013

Dobra sebul działa, tylko jeszcze mam jeden problem

 

public Damage(id)
{
    new attacker = get_user_attacker(id);
    new damage = read_data(2);
    
    if(!is_user_alive(attacker) || !is_user_connected(attacker) || id == attacker)
        return PLUGIN_CONTINUE;
    
    if(misja_gracza[attacker][1][5] == 2)
    {
        wartosc_postep[attacker][1][5] += damage;
        SprawdzMisje(attacker, 1, 5);
    }
    return PLUGIN_CONTINUE;
}

public SprawdzMisje(id, rozdzial, misja)
{
    if(misja_gracza[id][rozdzial][misja] == 2 && wartosc_postep[id][rozdzial][misja] == Rozdzial_Pierwszy[misja][eWartosc1])
    {
        misja_gracza[id][rozdzial][misja] = 1;
        
        ResetMisji(id, rozdzial, misja);
                                
        return PLUGIN_CONTINUE
    }    
    return PLUGIN_CONTINUE
}

 

Wszystkie misje typu zabij tylu graczy działa okej, ale tutaj sprawdzenie nie działa poprawnie np. mam zadać 20000 obrażeń graczom i gdy już osiągne ten postęp to nie sprawdza tylko idzie dalej i dalej :(

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 11.08.2013

Dobra sebul działa, tylko jeszcze mam jeden problem
 
 

public Damage(id)
{
    new attacker = get_user_attacker(id);
    new damage = read_data(2);
    
    if(!is_user_alive(attacker) || !is_user_connected(attacker) || id == attacker)
        return PLUGIN_CONTINUE;
    
    if(misja_gracza[attacker][1][5] == 2)
    {
        wartosc_postep[attacker][1][5] += damage;
        SprawdzMisje(attacker, 1, 5);
    }
    return PLUGIN_CONTINUE;
}

public SprawdzMisje(id, rozdzial, misja)
{
    if(misja_gracza[id][rozdzial][misja] == 2 && wartosc_postep[id][rozdzial][misja] == Rozdzial_Pierwszy[misja][eWartosc1])
    {
        misja_gracza[id][rozdzial][misja] = 1;
        
        ResetMisji(id, rozdzial, misja);
                                
        return PLUGIN_CONTINUE
    }    
    return PLUGIN_CONTINUE
}
 
Wszystkie misje typu zabij tylu graczy działa okej, ale tutaj sprawdzenie nie działa poprawnie np. mam zadać 20000 obrażeń graczom i gdy już osiągne ten postęp to nie sprawdza tylko idzie dalej i dalej :(

A weź pomyśl logicznie ;]
Zabijając kogoś, za jednym razem dodaje się tylko jeden frag do ogólnej liczby, więc warunek z == kiedyś się spełni na pewno, ale zadając jakieś obrażenia, doda się po prostu jakaś liczba, np. 5, czy 10. Więcej chyba już pisać nie muszę.
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 11.08.2013

Ale tutaj jest tak: wartosc_postep[attacker][1][5] += damage;

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 11.08.2013

Chodzi tutaj o sprawdzanie czy misja zakończona, a nie to w jaki sposób jest coś dodawane, a dokładniej chodzi o ten warunek
if(misja_gracza[id][rozdzial][misja] == 2 && wartosc_postep[id][rozdzial][misja] == Rozdzial_Pierwszy[misja][eWartosc1])

a jeszcze dokładniej o to
wartosc_postep[id][rozdzial][misja] == Rozdzial_Pierwszy[misja][eWartosc1]
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 11.08.2013

A no tak ^^ Już wiem, można zamknać

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 11.08.2013

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany