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
 

Zdjęcie

Przekazanie ze Stocka wszystkich stringów


Najlepsza odpowiedź Rivit, 19.05.2022 18:39

czekaj, ale no w funkcji `tescik` cos nie tak jest. Do tablicy dodajesz tablicę (ArrayPushArray) a w funkcji sortującej wyciągasz dane za pomocą ArrayGetCell, to tutaj też musisz dobrać się do tablicy przez ArrayGetArray i wtedy wybrać po czym sortujesz, czy po stringu, bo tak wnioskuję (wtedy uzyc jakiegos strcmp), czy po liczbie (wtedy zwykłe porównanie). Tak więc nie oczekiwałbym, że po bezmyślnym przekopiowaniu kodu z dokumentacji zacznie wszystko magicznie działać.

 

Jak dasz w pełni działający fragment kodu, to Ci to mogę zrobić. Mam na myśli jakis mini-plugin, który będzie miał już wypełnione dane i trzeba będzie posortować je, ale no idziesz w dobrym kierunku.

 

Pamiętaj, że jak tworzysz tablicę lokalnie przez ArrayCreate, to trzeba wywołać dla niej ArrayDestroy.

Przejdź do postu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
12 odpowiedzi w tym temacie

#1 mlekovita

    Zaawansowany

  • Użytkownik

Reputacja: 7
Nowy

  • Postów:149
  • Imię:Dawid
Offline

Napisano 17.05.2022 11:52

Siemanko mam pytanie do kodu - jak odebrać wszystkie stringi(nazwy itemow) z tablicy które maja id = 2?

 

stock get_info(id, return[] = "", length)
{
	static item[itemsInfo];
	for(new i=0; i<ArraySize(items); i++) {
		ArrayGetArray(items, i, item);
	
		if(id == itemsId[i]) // sprawdza czy id ze stocka jest rowne identyfikatorom z tablicy // {"Nazwa", 2}, {"Innanazwa", 2}
		{
		copy(return, length, item[ITEM_NAME]); // Jesli tak to kopiuje nazwy do tablicy return
		return 0;
		}
	}
	
	return item[ITEM_NAME]; // wyswietla zawartosc skopiowanej tablicy
}


public tesscik(id){
	new cos[64];
	get_info(2, cos, charsmax(cos));
	client_print(id, print_chat, "%s", cos);
}


POWYŻSZY kod wywolany za pomoca funkcji tesscik pokazuje jeden rekord , a co jakbym chciał wyświetlić wszystkie które maja ten sam id? Bo co ciekawe jeżeli zrobię pętle która będzie wyglądać tak:

 

for(new i=0; i<ArraySize(items); i++) {
	get_info(2, cos, charsmax(cos));
	client_print(id, print_chat, "%s", cos); // powinno wyswietlic wszystkie nazwy ktore maja id 2
}

TO: zostanie wyświetlona ta sama nazwa kilka razy. Więc jak ją zmodyfikować by wyświetliło wszystkie?


Użytkownik mlekovita edytował ten post 17.05.2022 11:53

  • +
  • -
  • 0

#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 17.05.2022 20:13

Można to zrobic na kilka sposobów. Np. W pętli gdzie wołasz get_info musisz zadeklarować tablicę tablic (czyli tablica 2d), potem zmodyfikowac tak get_info, żeby każdy item wpisywało do kolejnej tablicy, a potem przelecieć pętlą po wszystkich tablicach i wypisać.

 

Inna opcja to zrobić funkcję podobną do get_info, ale ona nie będzie zwracać a wypisywać od razu.


  • +
  • -
  • 1

#3 mlekovita

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 7
Nowy

  • Postów:149
  • Imię:Dawid
Offline

Napisano 17.05.2022 21:18

A koniec koncow jak takie cos posortowac od najmniejszej do najwiekszej?

Nazwa = 1
Innanazwa = 2
Innainna = 3

Użytkownik mlekovita edytował ten post 17.05.2022 21:20

  • +
  • -
  • 0

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 17.05.2022 22:09

Były chyba jakieś funkcje do sortowania:

ArraySort

SortCustom2D

 

Zależy też po czym chcesz sortować, czy po jakiejś liczbie czy łańcuchu znaków.


  • +
  • -
  • 0

#5 mlekovita

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 7
Nowy

  • Postów:149
  • Imię:Dawid
Offline

Napisano 19.05.2022 15:31

W sumie to zrobilem taki kod ale niestety on nie sortuje tylko dla sprawdzenia wyswietlilem komorke 0 z Array i jest 1 a potem leca dziwne liczby (1, 50, 100532, 182878124, 16, 0)
 
[[Tak wyglada tablica ktora nalezy posortowac:
itemm[0] = 23,
itemm[1] = 5,
itemm[2] = 1,
itemm[3] = 7,
itemm[4] = 11,
itemm[5] = 12
]]
public tescik(id) {
	new itemm[6];
	new temp[8];
	new Array:tablica = ArrayCreate(64);
	for(new i=0; i<ArraySize(items); i++)
	{
		get_info(i, 3, itemm, charsmax(itemm));
		ArrayPushArray(tablica, itemm);
	}
		ArraySort(tablica, "malejaco");
	
for(new j=0; j<ArraySize(items); j++) {
		ArrayGetArray(tablica, j, temp);
}
		client_print(id, print_chat, "%d, %d, %d, %d, %d, %d", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5]);
		ArrayDestroy(tablica);
}

public malejaco(Array:a, item1, item2){
	if(ArrayGetCell(a, item1) < ArrayGetCell(a, item2))return 1;
	if(ArrayGetCell(a, item1) > ArrayGetCell(a, item2))return -1;
	return 0;
}

 


Użytkownik mlekovita edytował ten post 19.05.2022 15:33

  • +
  • -
  • 0

#6 mlekovita

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 7
Nowy

  • Postów:149
  • Imię:Dawid
Offline

Napisano 19.05.2022 16:29

Pisze nowy post bo tego nie da sie edytować: Otoz nie potrafie zrobic sortowania zeby Nazwa  to bylo 1, Inna nazwa to 5 itd. (od najmniejszej do najwiekszej). Ponizszy kod tworzy takie tablice:
 

itemm[0][0] = "Nazwa",
itemm[0][1] = "Inna nazwa",
itemm[0][2] = "costam",
itemm[0][3] = "test",
itemm[0][4] = "testcos",
itemm[0][5] = "cosiktam"
 
itemm[1][0] = 23,
itemm[1][1] = 5,
itemm[1][2] = 1,
itemm[1][3] = 7,
itemm[1][4] = 11,
itemm[1][5] = 12
 
public tescik(id) {
	new dane[10][2][32];
	
	for(new i=0; i<ArraySize(items); i++)
	{
		get_info(i, 0, itemm[i][0], charsmax(itemm));
		get_info(i, 1, itemm[i][1], charsmax(itemm));
			client_print(id, print_chat, "%s, %d", dane[i][0], dane[i][1]);
	}
}

 


  • +
  • -
  • 0

#7 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 19.05.2022 18:39   Najlepsza odpowiedź

czekaj, ale no w funkcji `tescik` cos nie tak jest. Do tablicy dodajesz tablicę (ArrayPushArray) a w funkcji sortującej wyciągasz dane za pomocą ArrayGetCell, to tutaj też musisz dobrać się do tablicy przez ArrayGetArray i wtedy wybrać po czym sortujesz, czy po stringu, bo tak wnioskuję (wtedy uzyc jakiegos strcmp), czy po liczbie (wtedy zwykłe porównanie). Tak więc nie oczekiwałbym, że po bezmyślnym przekopiowaniu kodu z dokumentacji zacznie wszystko magicznie działać.

 

Jak dasz w pełni działający fragment kodu, to Ci to mogę zrobić. Mam na myśli jakis mini-plugin, który będzie miał już wypełnione dane i trzeba będzie posortować je, ale no idziesz w dobrym kierunku.

 

Pamiętaj, że jak tworzysz tablicę lokalnie przez ArrayCreate, to trzeba wywołać dla niej ArrayDestroy.


  • +
  • -
  • 1

#8 mlekovita

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 7
Nowy

  • Postów:149
  • Imię:Dawid
Offline

Napisano 19.05.2022 19:15

udało się! dzięki za pomoc :D


Użytkownik mlekovita edytował ten post 19.05.2022 19:28

  • +
  • -
  • 0

#9 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 19.05.2022 19:29

Ja już nie wiem co Ty chcesz osiągnąć. Robisz ArrayPushArray lub String a w sortowaniu robisz ArrayGetCell....

 

Nie rozumiem też po co własne sortowanie zrobiłeś jak ArraySort robi dokładnie to samo :P


  • +
  • -
  • 0

#10 mlekovita

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 7
Nowy

  • Postów:149
  • Imię:Dawid
Offline

Napisano 19.05.2022 21:31

Bo ArraySort nie sortuje dwóch różnych tablic dynamicznych (String, num) a nie wiedzialem jak posortować to w jednej :P


  • +
  • -
  • 0

#11 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 053
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 20.05.2022 11:28

Możesz w funkcji sortującej pobrać ArrayGetArray zamiast ArrayGetCell lub ArrayGetString. Po to masz zmienne "item1" i "item2", to są indexy aktualnie porównywanych elementów.

Generalnie twój problem byłby już dawno rozwiązany, gdybyś przy tworzeniu tematu opisał go lepiej i dał jakiś "żywy" przykład tego, co chcesz osiągnąć. Nikt tutaj nie jest maszyną i raczej nikt nie chce się domyślać o co chodzi poprzez czytanie tematu napisanego językiem oficjalnym lub tak, że sam się w tym gubisz. Tl;dr - Mów co ci trzeba, a nie pier**lisz :P
  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#12 mlekovita

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 7
Nowy

  • Postów:149
  • Imię:Dawid
Offline

Napisano 20.05.2022 14:22

No w sumie to napisałem wszystko co chciałem (Sortowanie listy itemow wzgledem szans na dropnięcie) osiągnąć tylko jakbyś mógł pokazać testowy kod jak ma sie to odnieść do całości bo nie rozumiem tego ArraySort
 


  • +
  • -
  • 0

#13 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 053
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 20.05.2022 17:39

Sortowanie struktury:
 

Spoiler

 
Co daje nam:
Spoiler

Użytkownik Robiin edytował ten post 20.05.2022 17:41

  • +
  • -
  • 3

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych