Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Pustak - zdjęcie

Pustak

Rejestracja: 01.02.2014
Aktualnie: Nieaktywny
Poza forum Ostatnio: 14.10.2014 11:32
-----

#395914 Podmienianie modeli broni

Napisane przez DarkGL w 11.04.2012 20:36

spróbuj weapon_galil
gali to stara definicja
First one should have been left for backwards compatibility.

  • +
  • -
  • 2


#47296 Dynamiczne Tablice

Napisane przez R3X w 03.03.2009 19:21

Dynamiczne Tablice

Możemy ich użyć zawsze, gdyż są składnikiem biblioteki <amxmodx>, bez której ciężko napisać jakikolwiek plugin.


1. Co to?
Tablica to zbiór danych tego samego typu. Mamy do nich dostęp przez nazwę tablicy i indeks pola. Jednak zwykłe tablice muszą mieć z góry założoną wielkość.

new g_CechaGracza[33];		//wielkość:33
new g_kolory[][]={"white","red"};	//wielkość:2x6

Dynamiczne tablice pozwalają na przechowywanie nieokreślonej (ale skończonej :] ) ilości danych. Dzięki temu wykorzystujemy dokładnie tyle miejsca w pamięci ile akurat potrzeba.

2. Tworzenie
Musimy zadeklarować tablicę.
new Array:MojaTablica;
Jeśli jest globalna (dostępna z każdego miejsca w pluginie) nie możemy od razu jej stworzyć. W innym przypadku można zrobić to od razu przy deklaracji.
new Array:g_MojaTablica;
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	g_MojaTablica=ArrayCreate();
}
Interesuje nas ta linijka:
g_MojaTablica=ArrayCreate();

ArrayCreate(cellsize=1, reserved=32)
cellsize rozmiar komórki; dla liczby całkowitej rozmiar=1 (wartość domyślna),
jeśli elementy tablicy mają być zwykłą tablicą (czyli też stringiem) podajemy tu rozmiar tej tablicy[/list]reserved ilość tworzonych podczas inicjacji tablicy komórek;domyślnie rezerwowane są 32 pola
nie jest to maksymalna ilość danych, lecz po stworzeniu tablicy będzie miała ona na starcie tyle indeksów[/list]
3. Zapis danych
Cóż nam po pustej tablicy - pora uzupełnić ją danymi. Podstawową operacją jest Push. Polega ona na dodaniu nowego elementu na końcu tablicy. Nawet jeśli zarezerwowaliśmy 32 komórki pierwsze Push umieści dane w indeksie 0, drugie w 1 itd.

Dla tablicy o cellsize=1 używamy:
ArrayPushCell(Array:which, any:input);
Array:which docelowa tablica, podajemy tu nazwę naszej zmiennej typu Array:[/list]any:input dane, które umieszczone zostaną w tablicy; zmienna może być dowolnego typu
np. liczbą całkowitą/rzeczywistą, znakiem czy inną tablicą Array:[/list]
ArrayPushCell(g_MojaTablica,5);
Jeśli jest to pierwszy Push g_MojaTablica w polu o indeksie 0 będzie zawierała liczbę 5.

Dla tablicy o cellsize>1 używamy:
ArrayPushString(Array:which, const input[]);
ArrayPushArray(Array:which, const any:input[]);
Array:which docelowa tablica, podajemy tu nazwę naszej zmiennej typu Array:[/list]input[] tutaj podajemy tablicę, która umieszczona zostanie w tablicy,
w przypadku PushString tablica musi być typu całkowitego (znaki) i powinna być zakończona bajtem zerowym '/0'
PushArray używamy przy pozostałych tablicach[/list]

Aby edytować wybrane pole tablicy używamy funkcji (zależnie od typu):

ArraySetCell(Array:which, item, any:input);
ArraySetString(Array:which, item, const input[]);
ArraySetArray(Array:which, item, const any:input[]);

Argumenty są prawie te same, funkcje działają analogicznie do Push, więc nie będę się rozpisywał.
Pojawił się nowy parametr:
item edytowany indeks; liczba porządkowa określająca położenie danych w tablicy[/list]jeśli chcemy zmienić piątkę z poprzedniego przykładu napiszemy tak:
ArraySetCell(g_MojaTablica,0,6);
Teraz g_MojaTablica w polu o indeksie 0 będzie zawierała liczbę 6.

4. Odczyt danych
Zależnie od rodzaju przechowywanych danych używamy jednej z trzech funkcji:
ArrayGetCell(Array:which, item);
zwraca wartość z pola o indeksie item z tablicy which

ArrayGetString(Array:which, item, output[], size);
wypełnia (przez referencję ) tablicę output do maks. długości size tekstem z pola o indeksie item z tablicy dynamicznej which

ArrayGetArray(Array:which, item, any:output[]);
wypełnia (przez referencję ) tablicę output wartościami tablicy z pola o indeksie item z tablicy dynamicznej which

5. Przydatne funkcje
ArrayClear(Array:which);
czyści dynamiczną tablicę dynamiczną whichArraySize(Array:which);
zwraca ilość elementów tablicy dynamicznej which; ostatni indeks w g_MojaTablica (jeśli nie jest pusta) to (ArraySize(g_MojaTablica)-1)
6. Więcej?
Pełniejsza lista funkcji będzie pewnie w dokumentacji amxx.pl
Póki co radzę wpisać w AMXX-Studio gdzieś w kodzie słowo "Array" i jeśli korzystasz z podpowiedzi pokaże się przesuwana lista wszystkich funkcji z cellarray.inc


Powodzenia przy pisaniu pluginów korzystających z dynamicznych tablic!
  • +
  • -
  • 20