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
 

Marox44 - zdjęcie

Marox44

Rejestracja: 18.02.2011
Aktualnie: Nieaktywny
Poza forum Ostatnio: 07.11.2012 22:49
-----

#217885 Jak porówniać tablice

Napisane przez R3X w 21.02.2011 13:13

przez deklarację
new Tablica[6] = {1,2,3,4,5,6};
przez przypisanie
new Tablica[6];
Tablica[0] =1;
Tablica[1] =2;
Tablica[2] =3;
Tablica[3] =4;
Tablica[4] =5;
Tablica[5] =6;

  • +
  • -
  • 1


#207022 war3ft_v3.0rc13

Napisane przez Abes Mapper w 18.01.2011 17:31

Automatyczna wiadomość


Ten temat został przeniesiony z forum:
AMX Mod X -> Problemy z pluginami
do
Mody -> Inne mody -> Pytania

  • +
  • -
  • 1


#217740 Jak porówniać tablice

Napisane przez R3X w 20.02.2011 18:54

Przeniosłem tu ten temat :P

Musisz przejść przez wszystkie kombinacje indeksów i sprawdzać czy są takie same

public plugin_init() {
	log_amx "%d", 	getIntersect({1, 2, 3}, 			{4, 3, 2, 1});
	log_amx "%d", 	getIntersect({1, 2, 3, 4,  5}, 		{4, 3, 2, 1});
	log_amx "%d",	 	getIntersect({5, 6, 7, 5, 6, 7}, 	{8, 9, 10, 1});
	log_amx "%d",	 	getIntersect({1}, 			{4, 3, 2, 1});
}

getIntersect(const Array1[], const Array2[], len1 = sizeof Array1, len2 = sizeof Array2){
	//Second Less Than First
	new bool:sltf = (len1 > len2);
	
	new iCount = 0;
	
	new iLen = max(len1, len2);
	new iLen2 = min(len1, len2);
	for(new i=0;i<iLen;i++) 
		for(new j=0;j<iLen2; j++)
			if(sltf ? (Array1[i] == Array2[j]) : (Array2[i] == Array1[j]) )
				iCount++;
	return iCount;
}

  • +
  • -
  • 1


#217809 Jak porówniać tablice

Napisane przez R3X w 20.02.2011 23:03

Napisałem Ci funkcję do porównywania dowolnych tablic, a Ty marudzisz? xD

new Tablica[6], Tablica2[6];
new ileWspólnych = getIntersect(Tablica, Tablica2);

  • +
  • -
  • 1


#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


#138578 Jak Dodac Klase Premium .

Napisane przez Hkn w 25.05.2010 21:26

1.A Wiec Tak ( Jest To Najprostrze Rozwiązanie ) :

W :

public select_class_menu(id, key)


Dodajemy Przed Klasa :


if( get_user_flags(id) & FLAGA)


Przyklad :


case 0:
{
if( get_user_flags(id) & ADMIN_CFG)
player_class[id] = Mag
}


2.Trudniejszy Sposob:
Jezeli To 1 Strona To :
Znajdz:

new text[512]


Dodaj Pod Tym :


if( get_user_flags(id) & ADMIN_LEVEL_B)
{
keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)
}
else
{
keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)
}


Efekt Koncowy Urywka Kodu :


public select_class(id,lx[])
{
if(is_user_bot(id)) return
new flags[11]
get_cvar_string("diablo_classes",flags,10)
new text[512]
new keys
if( get_user_flags(id) & ADMIN_LEVEL_B)
{
keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)
}
else
{
keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)
}
asked_klass[id]=0

format(text, 511,"\yWybierz Klase - ^n")

for(new i=0;i<9;i++)
{
format(text, 511,"%s%s%d. %s Level :%d ^n",text,(keys)&(1<<i)?"\w":"\d",i+1,Race[i+1], lx[i+1])
}

show_menu(id, keys, text)
}

To By Bylo Na Tyle :P
( To Moj 1 TUT :P )
  • +
  • -
  • 7