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

Top Najlepszych graczy na podstawie statystyki


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

#1 Danny OK

    Zaawansowany

  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:148
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Internet
Offline

Napisano 18.01.2015 22:26

Witam,

Jak ustalić np. 15 najlepszych graczy na podstawie np. poziom[id]

 

Z góry dziękuję za pomoc.

Pozdrawiam, Daniel.


  • +
  • -
  • 0

Battlefield 2 Exp Mod

www.BF2Mod.pl


#2 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 18.01.2015 22:30

Na podstawie czego chcesz wyznaczyć? Jakiego moda? Coda? Jaki zapis? Nvault? SQL?


Użytkownik Wielkie Jol edytował ten post 18.01.2015 22:31

  • +
  • -
  • 0

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#3 Danny OK

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:148
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Internet
Offline

Napisano 18.01.2015 22:34

nvault, bf2 mod. 

 

Chcę wyznaczyć na podstawie: poziom[id]

 

 

Tylko że mój bf2 jest edytowany. 

Możesz zrobić na podstawie totalkills standardowego bf2.


Użytkownik Danny OK edytował ten post 18.01.2015 22:43

  • +
  • -
  • 0

Battlefield 2 Exp Mod

www.BF2Mod.pl


#4 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 18.01.2015 23:44

https://forums.allie...ad.php?t=139584

 

Sprawdz /top15 dla cod moda na podstawie XP, istnieje takie, a dojdziesz do swojego rozwiazania (nalezy uzyc w/w inc [plugin /top15 codmod, go uzywa])


  • +
  • -
  • 0

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#5 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 19.01.2015 00:08

Niestety, wyznaczanie top15 z nvaulta będzie bardzo nieoptymalne, co mocno zauważysz przy ok 1000 gaczy...
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#6 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 19.01.2015 00:23

Fajnie, że ktoś założył temat o tym, bo przypomniało mi to o pewnej mojej zagwozdce. Chodzi o ten plugin: http://amxx.pl/topic...ie/#entry671413nie rozumiem tutaj zasady ustalania najwyższych lvli. Może mnie ktoś oswiecic?
  • +
  • -
  • 0

#7 Szlendii

    Zaawansowany

  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:89
  • Imię:Mateusz
  • Lokalizacja:Sławno
Offline

Napisano 19.01.2015 00:39

Magnet może ustala po największym zdobytym doświadczeniu ?


  • +
  • -
  • 0

#8 Danny OK

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:148
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Internet
Offline

Napisano 19.01.2015 00:58

Chyba zrobię jednak wyświetlanie statystyk bf2 pierwszych 15 graczy z /rank.

 


  • +
  • -
  • 0

Battlefield 2 Exp Mod

www.BF2Mod.pl


#9 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 19.01.2015 10:40

Szlendii, Ameryki nie odkryłeś. Mi chodzi o sposób, w jaki Czaso taki efekt uzyskał


  • +
  • -
  • 0

#10 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 981
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 19.01.2015 11:38

Magnet tzn. czego tu nie rozumiesz :P ?
  • +
  • -
  • 0

#11 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 19.01.2015 11:55

Nie rozumiem w jaki sposób Czaso szuka po wszystkich rekordach najwyższy poziom i sytuuje go na miejscu pierwszym, kolejny poziom na drugim etc.


  • +
  • -
  • 0

#12 Danny OK

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:148
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Internet
Offline

Napisano 19.01.2015 12:01

A jak pobrać dane np. 5 gracza z rank?


  • +
  • -
  • 0

Battlefield 2 Exp Mod

www.BF2Mod.pl


#13 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 981
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 19.01.2015 12:12

sortowanie bąbelkowe :P


  • +
  • -
  • 0

#14 Danny OK

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:148
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Internet
Offline

Napisano 19.01.2015 12:15

Za wiele mi to nie mówi :D


  • +
  • -
  • 0

Battlefield 2 Exp Mod

www.BF2Mod.pl


#15 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 19.01.2015 12:25

@MAGNET

	for(new i = 1; i <= num; i ++){
		pos = nvault_util_read(vault, pos, key, 63, data, 31, timestamp)
		
		replace_all(data, 255, "#", " ");
		
		parse(data, dane[0], 31, dane[1], 31, dane[2], 31, dane[3], 31, dane[4], 31, dane[5], 31);
		
		split(key, name, 63, class, 63, "-");
		
		replace_all(class, 63, trash, "");  
		
		poziom = max(1, str_to_num(dane[1]));
		doswiadczenie = str_to_num(dane[0]);	
		
		for(new j = 0; j < MAX_TOP; j ++){
			if(doswiadczenie >= top_doswiadczenie[j]){
				for(new k = MAX_TOP; k > j; k --){
					copy(top_name[k], 31, top_name[k-1]);
					copy(top_class[k], 31, top_class[k-1]);
					
					top_poziom[k] = top_poziom[k-1];
					top_doswiadczenie[k] = top_doswiadczenie[k-1];
				}
				
				copy(top_name[j], 63, name);
				copy(top_class[j], 31, class);
				
				top_poziom[j] = poziom;
				top_doswiadczenie[j] = doswiadczenie;
				
				break;
			}
		}
	}
Zasada działania jest bardzo prosta i niestety jedyna słuszna.

1. lecisz pętlą po wszystkich wpisach z nvault (z użyciem nvault_util)
2. Przy każdym wpisie lecisz wewnętrzną pętlą po wpisach zapisanych w tablicy top15 i porównujesz, czy dany wpis posiada więcej expa czy nie.
3. Jeśli posiada więcej expa od jakiegokolwiek wpisu, umieszczasz swój wpis w tym miejscu w tablicy, a resztę wpisów w tablicy przesuwasz o 1 pozycję w dół (czyli ostatni z niej wylatuje).

Można to delikatnie zoptymalizować:
    for(new i = 1; i <= num; i ++){
        pos = nvault_util_read(vault, pos, key, 63, data, 31, timestamp)
		
        replace_all(data, 255, "#", " ");
		
        parse(data, dane[0], 31, dane[1], 31, dane[2], 31, dane[3], 31, dane[4], 31, dane[5], 31);
		
        split(key, name, 63, class, 63, "-");
		
        replace_all(class, 63, trash, "");  
		
        poziom = max(1, str_to_num(dane[1]));
        doswiadczenie = str_to_num(dane[0]);

        new j; // Wyciągamy tworzenie zmiennej j tutaj, aby móc po pętli sprawdzić czy została przerwana break'iem
		
        for(j = MAX_TOP-1; j >= 0; j --){ // Tablicę top15 przeczesujemy od końca, dzięki czemu jeśli dany gracz nie znajdzie się w top15, pętla wykona się tylko RAZ!

            if(doswiadczenie < top_doswiadczenie[j] && j == MAX_TOP-1) // jeśli nie ma w tablicy żadnego gracza o mniejszej ilości expa, wychodzimy z pętli
                break;

            if(doswiadczenie < top_doswiadczenie[j]) {  // Ten gracz ma już więcej expa od aktualnie wstawianego, wrzucamy więc dane gracza ZA nim i wychodzimy z pętli.
                copy(top_name[j+1], 31, name);
                copy(top_class[j+1], 31, class);
					
                top_poziom[j+1] = poziom;
                top_doswiadczenie[j+1] = doswiadczenie;
                
                break;

            }

            // Ten gracz ma mniej expa od aktualnie sprawdzanego, przesuwamy więc go o 1 w dół.

            copy(top_name[j+1], 31, top_name[j]);
            copy(top_class[j+1], 31, top_class[j]);
	
            top_poziom[j+1] = top_poziom[j];
            top_doswiadczenie[j+1] = top_doswiadczenie[j];
        }

        if (j<0) {  // Jeśli pętla wykonała się do końca, j będzie równe -1. To oznacza, że w top 15 nie ma gracza z większym expem, aktualnie sprawdzany wskakuje więc na 1 miejsce.
            copy(top_name[0], 31, name);
            copy(top_class[0], 31, class);
	
            top_poziom[0] = poziom;
            top_doswiadczenie[0] = doswiadczenie;
        }
    }
W ten sposób po 1. mamy tylko 1 wewnętrzną pętlę, po 2. wewnętrzna pętla wykona się maksymalnie 15 razy dla każdej iteracji zewnętrznej pętli (tylko jeśli gracz wskakuje na 1 lub 2 miejsce w top15, jeśli wskakuje na ostatnie, wykona się całe 2x), a po 3. wewnętrzna pętla zostanie przerwana po 1 iteracji jeśli dany gracz nie wskakuje do top15 wcale.
  • +
  • -
  • 3

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#16 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 19.01.2015 13:00

Aaaa no tak teraz zajarzyłem :) wykorzystam tą metodę przy robieniu czegoś podobnego w SQL


  • +
  • -
  • 0

#17 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 19.01.2015 13:16

@MAGNET, w SQL wystarczy wykonać odpowiednie zapytanie.

http://www.w3schools...ysql_select_all
SELECT * FROM `Customers` ORDER BY `CustomerID` LIMIT 15
W pluginie wykonujesz zapytanie, później http://amxx.pl/dokum...SQL_MoreResults i do przodu ;)

http://webmade.org/k...-kurs-mysql.php
  • +
  • -
  • 4

If you can dream it, you can do it.


#18 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 19.01.2015 13:57

Ooo widzisz :D super, bardzo mi to ułatwi zadanie. Dzięki


  • +
  • -
  • 0




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

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