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
CoD Nowy

Najlepszy gracz na danej klasie

cod nowy

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

#1 Kmf!p

    Wszechwidzący

  • Użytkownik

Reputacja: 29
Życzliwy

  • Postów:274
  • Lokalizacja:knyszyn
Offline

Napisano 07.10.2020 22:04

Witam, potrzebuje znaleźć najlepszego gracza na danej klasie. Tak żeby gracz który ma najwyższy poziom na danej klasie miał wyświetloną np. na czacie informacje.


  • +
  • -
  • 0
b_350_20_FFAD41_E98100_000000_591F11.png

b_350_20_FFAD41_E98100_000000_591F11.png 

CodMod- 31.186.82.99:23510
Only Dust2- 31.186.82.99:23544

#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 07.10.2020 22:39

Można zrobić to conajmniej na dwa sposoby. Jeden mało optymalny - za każdym razem jak gracz awansuje to przelecieć po wszystkich zapisach klas (nie wiem czy masz sql czy nvault) i szukać maksimum na danej klasie - jeśli awansujący gracz jest najlepszy go wypisać mu wiadomość

Drugi pomysł - trzymać informacje o najlepszych graczach w każdej klasie w osobnym pliku / tabeli. Wtedy nie musimy już co chwila przelatywać po wszystkich zapisach tylko sprawdzamy w tej naszej "pamięci podręcznej" i aktualizujemy w razie potrzeby
  • +
  • -
  • 0

#3 Kmf!p

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 29
Życzliwy

  • Postów:274
  • Lokalizacja:knyszyn
Offline

Napisano 07.10.2020 22:44

nvault.

Nie chce tego zapisywać tylko to wyświetlać nawet w hud, raczej poprzez pętle żeby było na bieżąco aktualizowane lub przynajmniej po śmierci czy nowej rundzie.

Ewentualnie dodać w ZapiszDane, a później wczytywać. Jak lepiej...

Aby była zmienna na najlepszego gracza wyciągnięta. czy zapis czy wyświetlanie jej to już może sam zrobię.


Użytkownik Kmf!p edytował ten post 07.10.2020 23:05

  • +
  • -
  • 0
b_350_20_FFAD41_E98100_000000_591F11.png

b_350_20_FFAD41_E98100_000000_591F11.png 

CodMod- 31.186.82.99:23510
Only Dust2- 31.186.82.99:23544

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.10.2020 08:04

No, no to można na osobny nvault zapisywac kto jest najlepszym graczem na danej klasie oraz jaki ma poziom. Wczytujesz go na początku mapy, podczas gry w funkcji od awansowania sprawdzasz czy ktoś kto awansował właśnie nie ma większego levelu niż zapisany. Jeśli tak to aktualizujemy zmienna. Na koniec mapy uaktualniasz zapisy w nvault.
  • +
  • -
  • 0

#5 Kmf!p

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 29
Życzliwy

  • Postów:274
  • Lokalizacja:knyszyn
Offline

Napisano 08.10.2020 08:27

Wolałbym aby to było w silniku cod`a bo być może chciałbym pokazać to w hud, a osobny nvault to też raczej oddzielna linijka w hud(dorzucenie pod spód). Najlepiej dorzucić najlepszego gracza na danej klasie do nvault cod. Czyli dodać go tu:

public ZapiszDane(id)
{
	if(!klasa_gracza[id])
		return PLUGIN_CONTINUE;
	
	if(doswiadczenie_gracza[id] <= 1)
		return PLUGIN_CONTINUE;
		
	new vaultkey[128],vaultdata[256], identyfikator[64];
	format(vaultdata, charsmax(vaultdata),"#%i#%i#%i#%i#%i#%i", doswiadczenie_gracza[id], poziom_gracza[id], inteligencja_gracza[id], zdrowie_gracza[id], wytrzymalosc_gracza[id], kondycja_gracza[id]);
	
	new typ_zapisu = get_pcvar_num(cvar_typ_zapisu);
	
	switch(typ_zapisu)
	{
		case 1: copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]);
		case 2: get_user_authid(id, identyfikator, charsmax(identyfikator));
		case 3: get_user_ip(id, identyfikator, charsmax(identyfikator));
	}
		
	format(vaultkey, charsmax(vaultkey),"%s-%i-cod", identyfikator, typ_zapisu);
	nvault_set(vault,vaultkey,vaultdata);
	
	return PLUGIN_CONTINUE;
}

public WczytajDane(id)
{		
	new vaultkey[128],vaultdata[256], identyfikator[64];
	
	new typ_zapisu = get_pcvar_num(cvar_typ_zapisu);
	
	switch(typ_zapisu)
	{
		case 1: copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]);
		case 2: get_user_authid(id, identyfikator, charsmax(identyfikator));
		case 3: get_user_ip(id, identyfikator, charsmax(identyfikator));
	}
	
	format(vaultkey, charsmax(vaultkey),"%s-%i-cod", identyfikator, typ_zapisu);
	

	if(!nvault_get(vault,vaultkey,vaultdata,255)) // Jezeli nie ma danych gracza sprawdza stary zapis. 
	{
		format(vaultkey, charsmax(vaultkey), "%s-cod", nazwa_gracza[id]);
		nvault_get(vault,vaultkey,vaultdata,255);
	}

	replace_all(vaultdata, 255, "#", " ");
	 
	new danegracza[6][32];
	
	parse(vaultdata, danegracza[0], 31, danegracza[1], 31, danegracza[2], 31, danegracza[3], 31, danegracza[4], 31, danegracza[5], 31);
	
	doswiadczenie_gracza[id] = str_to_num(danegracza[0]);
	poziom_gracza[id] = str_to_num(danegracza[1])>0?str_to_num(danegracza[1]):1;
	inteligencja_gracza[id] = str_to_num(danegracza[2]);
	zdrowie_gracza[id] = str_to_num(danegracza[3]);
	wytrzymalosc_gracza[id] = str_to_num(danegracza[4]);
	kondycja_gracza[id] = str_to_num(danegracza[5]);
	punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
	
	return PLUGIN_CONTINUE;
}

I właśnie do tego potrzebuje aby ktoś wyciągnął poprzez pętle czy inaczej tego najlepszego gracza na danej klasie. Żeby to było w silniku cod bo chce mu później wyświetlić w hud informacje.

 

Mogę podać kod na codtop15 na całym cod tylko że to właśnie idzie w oddzielny plik, a mi trzeba w silniku.

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <nvault_util>

#define PLUGIN "CoD:MW3 - Top 15"
#define VERSION "1.0"
#define AUTHOR "Czaso Umilacz"

#define MAX_TOP 15

new	top_cmd[32],
	vault_name[32];
	
new	top_string[1512];

new 	top_name[MAX_TOP+1][64],
	top_class[MAX_TOP+1][32],
	top_poziom[MAX_TOP+1],
	top_doswiadczenie[MAX_TOP+1];

public plugin_init(){
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	RegisterCvars();
	RegisterCmds();
	LoadTop();
}

public CodTop15(id){
	show_motd(id, top_string, "CoD:MW3 - TOP 15");
}

RegisterCvars(){
	register_cvar("cod_top15_cmd", "/codtop15");
	register_cvar("cod_top15_save_file", "CodMod");
	
	get_cvar_string("cod_top15_cmd", top_cmd, 31);
	get_cvar_string("cod_top15_save_file", vault_name, 31);
}

RegisterCmds(){
	new temp[64];
	format(temp, 63, "say %s", top_cmd);
	
	register_clcmd(temp, "CodTop15");
}

LoadTop(){
	new key[64], data[32], timestamp, pos, vault = nvault_util_open(vault_name);
	new num = nvault_util_count(vault);
	
	new dane[6][32], name[64], class[64], trash[16], poziom, doswiadczenie, temp = get_cvar_num("cod_savetype");
	format(trash, 15, "-%i-cod", temp);
	
	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;
			}
		}
	}
	
	new len = format(top_string, 1511, "<html><body bgcolor=^"#666666^">");
	
	len += format(top_string[len], 1511 - len, "<center><b><font size=6 color=#00CD00>CoD:MW3 - TOP 15</b><hr size=1 color=#00CD00><table style=^"color:#FFFFFF;width:750%^">");
	len += format(top_string[len], 1511 - len, "<tr style=color:#00cd00;><td>Miejsce<td>Gracz<td>Klasa<td>Poziom<td>Doswiadczenie");
	
	for(new l = 0; l < MAX_TOP; l ++){
		if(equal(top_name[l], ""))
			break;
		
		len += format(top_string[len], 1511 - len, "<tr><td>%i.<td>%s<td>%s<td>%i<td>%i", l+1, top_name[l], top_class[l], top_poziom[l], top_doswiadczenie[l]);
	}
	
	len += format(top_string[len], 1511 - len, "</table><hr size=1 color=#00CD00><font size=3 color=#FFFFFF>TOP 15 by<font color=#00cd00> Czaso Umilacz</center></body></html>");
	
	return PLUGIN_CONTINUE;
} 


Użytkownik Kmf!p edytował ten post 08.10.2020 08:29

  • +
  • -
  • 0
b_350_20_FFAD41_E98100_000000_591F11.png

b_350_20_FFAD41_E98100_000000_591F11.png 

CodMod- 31.186.82.99:23510
Only Dust2- 31.186.82.99:23544

#6 Kmf!p

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 29
Życzliwy

  • Postów:274
  • Lokalizacja:knyszyn
Offline

Napisano 08.10.2020 10:25

Może napiszę prościej chcę tylko wczytać najlepszego gracza na danej klasie z pliku "CodMod.vault" w którym wszystko jest. Później na początku mapy wczytać tylko gracza i wyświetlić mu informację bez zapisu.

public "po wyborze klasy"(id){

	LoadTop();
}

LoadTop(){
        
        i tu pętlami wyszukać tego gracza z pliku CodMod.vault w którym są zapisani wszyscy gracze jakie mają klasy i jaki poziom.
}


  • +
  • -
  • 0
b_350_20_FFAD41_E98100_000000_591F11.png

b_350_20_FFAD41_E98100_000000_591F11.png 

CodMod- 31.186.82.99:23510
Only Dust2- 31.186.82.99:23544

#7 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.10.2020 12:01


Wolałbym aby to było w silniku cod`a bo być może chciałbym pokazać to w hud, a osobny nvault to też raczej oddzielna linijka w hud(dorzucenie pod spód)

 

Osobny nvault nie oznacza od razu nowego pluginu. Plugin może otworzyć kilka plikó .vault na raz.


Najlepiej dorzucić najlepszego gracza na danej klasie do nvault cod

No niestety nie najlepiej, najlepiej zrobić osobny zapis do tego. Przeczytaj to co pisałem wcześniej. Wyjaśniłem dlaczego lepiej jest pamiętać tylko najlepszych. Wtedy nie ma potrzeby przeglądania wszystkich wpisów w nvault. Wtedy wystarczy popatrzyć czy ktoś kto awansował ma większy level niż obecny lider. 

 

 

Ale fakt, można przerobić cod top15, żeby brał pod uwage klasy ;) 


  • +
  • -
  • 0

#8 Kmf!p

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 29
Życzliwy

  • Postów:274
  • Lokalizacja:knyszyn
Offline

Napisano 08.10.2020 13:25

To może być i tak jak piszesz coś ala codtop15, co do tego co piszesz też zdaję sobie sprawę o tym tylko właśnie w tym problem że nie umiem wyciągnąć tego najlepszego gracza/graczy którzy mają najwyższy poziom na danej klasie. Jak możesz to zrób na bazie codtop15 że top 15 snajperów, komandosów czy to trzeba oddzielnie dla każdej klasy, bo to nawet było by lepsze niż tylko jeden gracz. Choć nie ukrywam że jedno i drugie było by dobre.


  • +
  • -
  • 0
b_350_20_FFAD41_E98100_000000_591F11.png

b_350_20_FFAD41_E98100_000000_591F11.png 

CodMod- 31.186.82.99:23510
Only Dust2- 31.186.82.99:23544





Również z jednym lub większą ilością słów kluczowych: cod nowy

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

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