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
mlekovita
17.05.2022
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
Rivit
17.05.2022
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.
mlekovita
17.05.2022
Nazwa = 1
Innanazwa = 2
Innainna = 3
Użytkownik mlekovita edytował ten post 17.05.2022 21:20
Rivit
17.05.2022
Były chyba jakieś funkcje do sortowania:
Zależy też po czym chcesz sortować, czy po jakiejś liczbie czy łańcuchu znaków.
mlekovita
19.05.2022
]]
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
mlekovita
19.05.2022
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:
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]); } }
Najlepsza odpowiedź
Rivit
19.05.2022
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.
mlekovita
19.05.2022
udało się! dzięki za pomoc
Użytkownik mlekovita edytował ten post 19.05.2022 19:28
Rivit
19.05.2022
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
mlekovita
19.05.2022
Bo ArraySort nie sortuje dwóch różnych tablic dynamicznych (String, num) a nie wiedzialem jak posortować to w jednej
Robiin
20.05.2022
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

mlekovita
20.05.2022
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
Robiin
20.05.2022
Sortowanie struktury:
Co daje nam:
Użytkownik Robiin edytował ten post 20.05.2022 17:41