←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Tablice bool

  • +
  • -
csMaster - zdjęcie csMaster 10.06.2018

Czy tak sformatowana tablica bool mogła by działać ?

#define LICZBA 30

enum liczby { zero = 0, jeden, dwa, trzy, cztery }

new bool:bTab[33][liczby][LICZBA];

//...

     bTab[id][trzy][6] = true;
     
     if(bTab[id][trzy][6]) // true
     //...

I czy taka nie wywalała by warninga ?

new iTab[33][liczby];

//...

     iTab[id][trzy] = 6;
     
     if(iTab[id][trzy] == 6)
     //...

Przy przypisywaniu danych do tych tablic był warning "tag mismatch" także nie wiem czy te tablice poprawnie zapisywałyby informacje :/

Odpowiedz

  • +
  • -
Robiin - zdjęcie Robiin 10.06.2018

Pokaż linijkę na której wywalało ci tag mismatch. Błąd ten mówi o niepoprawnym przypisaniu wartości, na przykład 

new bool:zmienna;

zmienna = 3;

wywali błąd o tag mismatch, bo przypisujemy liczbę całkowitą do zmiennej "enumowej".

 

Jeszcze chyba się nie spotkałem z tym, żeby ktoś używał tablic większych niż dwuwymiaryowych (nie mówię, że nie można, albo się nie da, po prostu się nie spotkałem :P ), więc z ciekawości zapytam; do czego to?

Odpowiedz

  • +
  • -
csMaster - zdjęcie csMaster 11.06.2018

Pokaż linijkę na której wywalało ci tag mismatch. Błąd ten mówi o niepoprawnym przypisaniu wartości, na przykład 

new bool:zmienna;

zmienna = 3;

wywali błąd o tag mismatch, bo przypisujemy liczbę całkowitą do zmiennej "enumowej".

 

Jeszcze chyba się nie spotkałem z tym, żeby ktoś używał tablic większych niż dwuwymiaryowych (nie mówię, że nie można, albo się nie da, po prostu się nie spotkałem :P ), więc z ciekawości zapytam; do czego to?

 

Aaa no wiesz...

Pisze csgo moda i zmienna trójwymiarowa o której mówisz znaczy:

#define MAX_ILOSC_SKINOW 28

enum bronie { noz = 0, p228, scout, xm1014, mac10, aug, elites, fiveseven, ump45, galil, famas, usp,
glock18, awp, mp5, m249, m3, m4a1, tmp, deagle, sg552, ak47, p90 }

new bool:ma_skin[33][bronie][MAX_ILOSC_SKINOW];

//...

public sql_createdata(id)
{
     //...
    
     for(new i=0; i<=22; i++)
     {
          ma_skin[id][i][0] = true; // ustawienie skina nr 0 (Domyslny) do broni [i] graczowi o identyfikatorze [id] przy dodawaniu go do bazy danych
          //...
     }
}
Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 12.06.2018

Looks good

Bez

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 12.06.2018

Do sprawdzenia czy gracz ma dany skin/przechowywania skinów gracza w tablicy, mógłbyś użyć  pól bitowych. Tak jak naprzykład flagi są zrobione albo nie wiem typ obrażeń .

Odpowiedz

  • +
  • -
csMaster - zdjęcie csMaster 12.06.2018

@TibacK, nie wiem jak miałoby to wyglądać >.<

Jak miałbym zapisywać skiny, używając pól bitowych jeśli maksymalna ilość skinów to ilość broni ze skinami (23) w każdej broni max po 28 skinów. Czyli razem 644. Zapisywać każdy skin, i przy tym do jakiej broni należy... No nie wiem jak miałbym to robić.

Jeśli chodzi o (1<<0), (1<<1), (1<<2), ..., (1<<643) to raczej nie zapisze w ten sposób do jakiej broni należy dany skin. Musiałbym do takich identyfikatorów zapisywać w jakiejś tablicy do jakiej broni dany skin należy.


Użytkownik csMaster edytował ten post 12.06.2018 16:10
Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 12.06.2018

Istnieje możliwość zapisania liczby 1<<643.
Więcej informacji można znaleźć na zaprzyjaźnionym forum, w tym temacie:
https://forums.allie...ad.php?t=139916

 

Odpowiedz

  • +
  • -
AwIlL^^ - zdjęcie AwIlL^^ 13.06.2018

enum _:bronie { noz = 0, p228, scout, xm1014, mac10, aug, elites, fiveseven, ump45, galil, famas, usp,
glock18, awp, mp5, m249, m3, m4a1, tmp, deagle, sg552, ak47, p90 };

new g_iskiny[33][bronie];

public DodajSkin(id, bron, id_skina)
{
    g_iskiny[id][bron] |= (1<<id_skina);
}

public ZabierzSkin(id, bron, id_skina)
{
    g_iskiny[id][bron] &= ~(1<<id_skina);
}

public PobierzSkiny(id, bron)
{
    return g_iskiny[id][bron];
}

public bool:SprawdzPosiadanieSkina(id, bron, id_skina)
{
    return (g_iskiny[id][bron] & (1<<id_skina))>0;
}

w taki sposób też możesz zrobić i wtedy masz tablicę dwuwymiarową.
Te funkcje trochę nie mają sensu, ale mają przedstawić w jaki sposób wykonujesz działania przy takim rozwiązaniu,
brak komentarzy bo wszystko co robią funkcje jest w ich nazwach.
w ostatnim celowo dałem bool oraz >0 żeby pokazać, że się da.
Można oczywiście pominąć boola i >0, działanie w ifach byłoby takie samo.

Jedyna różnica byłaby taka, że zamiast true, false miałbyś 0 lub id_skina.


Użytkownik AwIlL^^ edytował ten post 13.06.2018 13:54
Odpowiedz